#
#	@(#)makerules (common)
#		GNU make 
#
#	 ɸ롼
#	(C) Copyright 1995-2001 by Personal Media Corporation
#
#	ˡ
#	ᥤ Makefile ǲѿɬפ˱ꤷƤ顢
#	Υե include 롣
#
#	ȥǥ쥯ȥ̾ϼηȤˤΥץ
#	Ǥ롣
#
#		machine.opt1.opt2...optn
#
#	Ƭ̾ǡθ . Ƕڤäƥץꤹ롣
#	ץοӽ¤̵
#	make Υޥɥ饤 Makefile ǥץ󤬻ꤵƤ
#	餬ͥ褵롣
#
#	MACHINE	оݵ (άǽ)
#		pcat	PC-AT		(i386)
#		sun4	Sparc Solaris	(sparc)
#		linux	Linux		(i386)
#		i86pc	Solaris x86	(Solaris2.6 for x86 Sun/OS 5.6)
#		freebsd	FreeBSD		(i386)
#	     	άϥȥǥ쥯ȥ̾鵡̾ꤵ롣
#		() xxx/yyy/pcat -> pcat
#
#	BD	ȯĶΥ١ǥ쥯ȥ (άǽ)
#		/usr/local/brightv	(άΥǥե)
#
#	mode	ѥ⡼ (άǽ)
#		()	꡼ѥѥ
#		debug	ǥХåѥѥ
#	     	άϥȥǥ쥯ȥ̾Υץ󤫤ꤵ롣
#		() xxx/yyy/pcat.debug  ->  debug
#
#	Ķѿˤ
#	BD ϴĶѿˤäƻꤹ뤳ȤǤ롣
#	BD Ķѿǻꤷ硢ΥġΥǥ쥯ȥĶѿ
#	ꤹɬפ롣(ɬפʤΤǲ)
#
#	GNUs		ȯޥѤ GNU Ϣġ
#			(/usr/local/bin ξϻ)
#	GNU_BD		ȯ GNU ϢġΥ١ǥ쥯ȥ
#	GNUi386		i386 Ѥ GNU Ϣġ
#
#	 makerules Ѥ뤿ˤϡΥġ뤬ɬפǤ롣
#
#	GNU make	version 3.74
#	perl		version 4.0
#	jperl		version 4.019 + 1.3(EUC)
#
#	perl, jperl ϡɬ /usr/local/bin ˤʤФʤʤ
#	make ϡ$(GNUs)/bin  /usr/local/bin ˤʤФʤʤ
#	СΤƱΤǤʤƤɤȻפ롣
#

.EXPORT_ALL_VARIABLES:
.SUFFIXES:

# ȥǥ쥯ȥ̾ˤ륪ץ
options := $(subst ., ,$(notdir $(shell pwd)))

### άΥǥե ###

ifndef BD
  # ȯĶΥ١ǥ쥯ȥ
  BD := /usr/local/brightv
endif

ifndef MACHINE
  # оݵ
  MACHINE := $(firstword $(options))
endif

ifeq ($(origin mode), undefined)
  # ѥ⡼
  mode := $(filter debug, $(options))
endif

### ǥ쥯ȥ ###

# ѥ饤֥Υǥ쥯ȥ
COMMONLIB      = $(BD)/lib/i386e2

# 饤֥򥤥󥹥ȡ뤹ǥ쥯ȥ
LIB_INSTALLDIR = $(COMMONLIB)

# ¹ԥץ򥤥󥹥ȡ뤹ǥ쥯ȥ
EXE_INSTALLDIR = $(BD)/bin/$(MACHINE)

### ѥ뤹ޥεĶ ###

#	CROSS_ARCH	Sparc ΤȤ sun4m
#			Ultra ΤȤ sun4u
#			i86pc ΤȤ i86pc
#			Linux ΤȤ Linux
#			FreeBSDΤȤ FreeBSD
#	CCS		/usr/ccs ¸ߤȤ ccs/
#			¸ߤʤȤ϶

CROSS_ARCH := $(shell uname)
ifeq ($(CROSS_ARCH), SunOS)
  CROSS_ARCH := $(shell arch -k)
endif
CCS := $(shell test -d /usr/ccs && echo ccs/)

# ѥ餪ӥġΥ١ǥ쥯ȥ
ifneq ($(origin BD), environment)
  GNUs := /usr
  GNU_BD  := $(BD)/tool/gnu
  GNUi386 := $(GNU_BD)/i386-unknown-gnu
  TOOL_ORIGIN = "file" "command line"
else
  # BD ĶѿꤵƤȤϡ
  # ġΥǥ쥯ȥĶѿѤ롣
  TOOL_ORIGIN = "environment" "command line"
endif

# ޥɥѥ
PATH = .
ifneq ($(findstring $(origin GNUi386), $(TOOL_ORIGIN)), )
  PATH := $(PATH):$(GNUi386)/bin
endif
ifneq ($(findstring $(origin GNUs), $(TOOL_ORIGIN)), )
  PATH := $(PATH):$(GNUs)/bin
endif
PATH := $(PATH):/usr/local/bin:/usr/ucb:/usr/bin:/bin
ifdef CCS
  PATH := $(PATH):/usr/$(CCS)bin
endif

### ¸եϢ ###

# ¸եμưޥ
MAKEDEPS = $(BD)/etc/makedeps $(TARGET_ARCH) $(CPPFLAGS)

# DEPENDENCIES_OUTPUT ƤȤϡ
# gcc ѥ˼ưŪ˰¸ط񤭽Ф
ifdef DEPENDENCIES_OUTPUT
  # ¸ե뤫Ť¸ط
  CUTDEPS = $(BD)/etc/makedeps -r $(DEPENDENCIES_OUTPUT) $@
else
  CUTDEPS =
endif

### ¾ ###

RM = rm -f
CP = cp
PERL = jperl
MKBTF = $(BD)/etc/mkbtf
BACKUP = $(BD)/etc/backup_copy
ifneq ($(findstring $(CROSS_ARCH), sun4m sun4u i86pc), )
  CPP = /usr/$(CCS)lib/cpp
else
  ifeq ($(CROSS_ARCH), FreeBSD)
    CPP = /usr/libexec/cpp
  else
    CPP = /lib/cpp
  endif
endif

### إåեΥǥ쥯ȥ ###
HEADER = $(BD)/include

### ¹ԥץΥ󥹥ȡ ###
$(EXE_INSTALLDIR)/%: %
	$(BACKUP) -t -d !OLD $< $(EXE_INSTALLDIR)

define EXE_INSTALL_BZCOMP
	$(BACKUP) -t -d !OLD $< $(EXE_INSTALLDIR)
	$(STRIP) $@
	$(BD)/etc/bzcomp -v $@
endef

define EXE_INSTALL_STRIP
	$(BACKUP) -t -d !OLD $< $(EXE_INSTALLDIR)
	$(STRIP) $@
endef

### ȯġΥ󥹥ȡ ###
TOOL_INSTALLDIR = $(BD)/etc
$(TOOL_INSTALLDIR)/%: %
	$(BACKUP) -t $< $(TOOL_INSTALLDIR)
	$(STRIP) $@

#------ PC-AT Ѥ ------------------------------------------------
ifeq ($(MACHINE), pcat)

#
# PC-AT ѥǥեȥ롼
#

# GCC ưĶ
TARGET_ARCH =

### C Ϣ ###
CC := $(GNUi386)/bin/gcc386
OUTPUT_OPTION = -o $@
ifeq ($(mode), debug)
  CFLAGS = -g
  CPPFLAGS = $(HEADER:%=-I%) -DPCAT -DDEBUG
else
  CFLAGS = -O2
  CPPFLAGS = $(HEADER:%=-I%) -DPCAT
endif

CFLAGS_WARNING = -Wall -Wno-format -Wno-main
CFLAGS_WARNING_FULL = -pedantic -W -Wall -Wno-format -Wno-main
CFLAGS2 = -mpreferred-stack-boundary=2

# gcc 2.95 ץƥޥΥХк
CFLAGS += -fno-strength-reduce
CFLAGS += $(CFLAGS2)

COMPILE.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -c
LINK.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)

%.o: %.c; $(.o.c)
  define .o.c
	@$(CUTDEPS)
	$(COMPILE.c) $< $(OUTPUT_OPTION)
  endef

%.s: %.c; $(.s.c)
  define .s.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -S $<
  endef

%.i: %.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION)

### C++ Ϣ ###
CXX := $(GNUi386)/bin/gcc386
CXXFLAGS = $(CFLAGS)

COMPILE.cc = $(CXX) $(TARGET_ARCH) $(CXXFLAGS) $(CPPFLAGS) -c
LINK.cc = $(CXX) $(TARGET_ARCH) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)

%.o: %.cc; $(.o.cc)
  define .o.cc
	@$(CUTDEPS)
	$(COMPILE.cc) $< $(OUTPUT_OPTION)
  endef

%.s: %.cc; $(.s.cc)
  define .s.cc
	$(CXX) $(TARGET_ARCH) $(CXXFLAGS) $(CPPFLAGS) -S $<
  endef

%.i: %.cc
	$(CXX) $(TARGET_ARCH) $(CXXFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION)

### ֥Ϣ ###
AS = $(GNUi386)/bin/as
ifeq ($(mode), debug)
  ASFLAGS = -g
else
  ASFLAGS =
endif

COMPILE.S = $(CC) $(TARGET_ARCH) $(ASFLAGS) $(CPPFLAGS) -c
COMPILE.s = $(AS) $(ASFLAGS)

%.o: %.S; $(.o.S)
  define .o.S
	@$(CUTDEPS)
	$(COMPILE.S) $< $(OUTPUT_OPTION)
  endef

%.o: %.s; $(.o.s)
  define .o.s
	$(COMPILE.s) $< $(OUTPUT_OPTION)
  endef

%.i: %.S
	$(CC) $(TARGET_ARCH) $(ASFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION)

### 󥫴Ϣ ###
LD = $(GNUi386)/bin/ld
ifeq ($(mode), debug)
  LDFLAGS = $(LIBDIR:%=-L%)
else
  LDFLAGS = $(LIBDIR:%=-L%)
endif

LIBDIR = $(COMMONLIB)
LOADLIBES =
LDOBJS =
LDLIBS =

# ɲäΥ󥯥ץ
ifneq ($(filter sl, $(options)), )
  LDFLAGS2 = -static
else
  LDFLAGS2 =
endif
START_ADR =

# ¹ԥե
LINK.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) $(LDFLAGS2) $(START_ADR)

# ñ˥֥ȥեޤȤΥ
LINK_R.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) -r -nostdlib

%: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

%.out: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

### 饤֥Ϣ ###
AR = ar
ARFLAGS = rvl
RANLIB = $(GNUi386)/bin/ranlib

(%): %
	$(AR) $(ARFLAGS) $@ $%

### ͡ꥹȺ ###
NM = $(GNUi386)/bin/nm
NMFLAGS = -n

%.map: %
	$(NM) $(NMFLAGS) $< > $@

%.map: %.out
	$(NM) $(NMFLAGS) $< > $@

%.map: %.dll
	$(NM) $(NMFLAGS) $< > $@

### ǡܥåϢ ###
DBCPPFLAGS = -DPCAT
DB_CPP = $(CPP) -I$(BD)/appl/dbox $(DATABOX_HEADER:%=-I%) $(DBCPPFLAGS) -P
DB = $(BD)/etc/databox
DBFLAGS = -l
DATABOX = $(DB) $(DBFLAGS)

DATABOX_HEADER =

%.dbx: %.d
	$(DB_CPP) $< $@.tmp
	$(DATABOX) $@.tmp $@
	$(RM) $@.tmp

%.fsn: %.f
	$(DB_CPP) $< $@.tmp
	$(DATABOX) -n $@.tmp $@
	$(RM) $@.tmp

%.c: %.d
	$(DB_CPP) $< $@.tmp
	$(DATABOX) -n -s $@.tmp $@
	$(RM) $@.tmp

### ¾ ###
STRIP = $(GNUi386)/bin/strip --strip-unneeded

endif

#--------- i86pc Ѥ (ȯġ)-------------------------------
ifeq ($(MACHINE), i86pc)

#
# i86pc ѤΥǥեȥ롼
#

# GCC ưĶ
TARGET_ARCH =

### C Ϣ ###
CC := $(GNUs)/bin/gcc
OUTPUT_OPTION = -o $@
ifeq ($(mode), debug)
  CFLAGS =  -g -DBSD_COMP
  CPPFLAGS = $(HEADER:%=-I%) -DLINK_KERNEL -DDEBUG
else
   CFLAGS = -O -DBSD_COMP -I/usr/ucbinclude
   CPPFLAGS = $(HEADER:%=-I%) -DLINK_KERNEL
endif

COMPILE.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -c
LINK.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)

%.o: %.c; $(.o.c)
  define .o.c
	@$(CUTDEPS)
	$(COMPILE.c) $< $(OUTPUT_OPTION)
  endef

%.s: %.c; $(.s.c)
  define .s.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -S $<
  endef

%.i: %.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION)

### 󥫴Ϣ ###
LD = /usr/ccs/bin/ld
ifeq ($(mode), debug)
  LDFLAGS = -static $(LIBDIR:%=-L%)
else
  LDFLAGS = -static $(LIBDIR:%=-L%)
endif

LIBDIR =
LOADLIBES =
LDOBJS =
LDLIBS =

# ɲäΥ󥯥ץ
LDFLAGS2 =
START_ADR =

# ¹ԥե
LINK.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) $(LDFLAGS2) $(START_ADR)

# ñ˥֥ȥեޤȤΥ
LINK_R.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) -r -nostdlib

%: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

%.out: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

### ͡ꥹȺ ###
NM = /usr/ccs/bin/nm
NMFLAGS = -n

%.map: %
	$(NM) $(NMFLAGS) $< > $@

%.map: %.out
	$(NM) $(NMFLAGS) $< > $@

### ¾ ###
STRIP = /usr/ccs/bin/strip

endif

# ----- Sparc Ѥ --------------------------------------------
ifeq ($(MACHINE), sun4)

#
# Sparc ѤΥǥեȥ롼
#

# GCC ưĶ
TARGET_ARCH =

### C Ϣ ###
CC := $(GNUs)/bin/gcc
OUTPUT_OPTION = -o $@
ifeq ($(mode), debug)
  CFLAGS = -g
  CPPFLAGS = $(HEADER:%=-I%) -DSPARC -DLINK_KERNEL -DDEBUG
else
  CFLAGS = -O
  CPPFLAGS = $(HEADER:%=-I%) -DSPARC -DLINK_KERNEL
endif

COMPILE.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -c
LINK.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)

%.o: %.c; $(.o.c)
  define .o.c
	@$(CUTDEPS)
	$(COMPILE.c) $< $(OUTPUT_OPTION)
  endef

%.s: %.c; $(.s.c)
  define .s.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -S $<
  endef

%.i: %.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION)

### 󥫴Ϣ ###
LD = $(GNUs)/bin/ld
ifeq ($(mode), debug)
  LDFLAGS = -static $(LIBDIR:%=-L%)
else
  LDFLAGS = -static $(LIBDIR:%=-L%)
endif

LIBDIR = $(COMMONLIB)
LOADLIBES =
LDOBJS =
LDLIBS =

# ɲäΥ󥯥ץ
LDFLAGS2 =
START_ADR =

# ¹ԥե
LINK.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) $(LDFLAGS2) $(START_ADR)

# ñ˥֥ȥեޤȤΥ
LINK_R.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) -r -nostdlib

%: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

%.out: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

### ͡ꥹȺ ###
NM = $(GNUs)/bin/nm
NMFLAGS = -n

%.map: %
	$(NM) $(NMFLAGS) $< > $@

%.map: %.out
	$(NM) $(NMFLAGS) $< > $@

### ¾ ###
STRIP = $(GNUs)/bin/strip

endif

#--------- Linux Ѥ (ȯġ)-------------------------------
ifeq ($(MACHINE), linux)
#
# Linux ѤΥǥեȥ롼
#
# ޥɥѥ
PATH = .
ifneq ($(findstring $(origin GNUs), $(TOOL_ORIGIN)), )
  PATH := $(PATH):$(GNUs)/bin
endif
PATH := $(PATH):/usr/local/bin:/usr/bin:/bin

# GCC ưĶ
# TARGET_ARCH =

### C Ϣ ###
CC := $(GNUs)/bin/gcc
OUTPUT_OPTION = -o $@
ifeq ($(mode), debug)
  CFLAGS = -g
  CPPFLAGS = $(HEADER:%=-I%) -DLINK_KERNEL -DDEBUG
else
  CFLAGS = -O
  CPPFLAGS = $(HEADER:%=-I%) -DLINK_KERNEL
endif

COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)

%.o: %.c; $(.o.c)
  define .o.c
	@$(CUTDEPS)
	$(COMPILE.c) $< $(OUTPUT_OPTION)
  endef

%.s: %.c; $(.s.c)
  define .s.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -S $<
  endef

%.i: %.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION)

### 󥫴Ϣ ###
LD = $(GNUs)/bin/ld
ifeq ($(mode), debug)
  LDFLAGS =
else
  LDFLAGS =
endif

LIBDIR =
LOADLIBES =
LDOBJS =
LDLIBS =

# ɲäΥ󥯥ץ
LDFLAGS2 =
START_ADR =

# ¹ԥե
LINK.o = $(CC) $(LDFLAGS) $(LDFLAGS2) $(START_ADR)

# ñ˥֥ȥեޤȤΥ
LINK_R.o = $(CC) $(LDFLAGS) -r -nostdlib

%: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

%.out: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

### ͡ꥹȺ ###
NM = $(GNUs)/bin/nm
NMFLAGS = -n

%.map: %
	$(NM) $(NMFLAGS) $< > $@

%.map: %.out
	$(NM) $(NMFLAGS) $< > $@

### ¾ ###
STRIP = $(GNUs)/bin/strip

endif

#--------- FreeBSD Ѥ (ȯġ)-------------------------------
ifeq ($(MACHINE), freebsd)
#
# FreeBSD ѤΥǥեȥ롼
#
# ޥɥѥ
PATH = .
ifneq ($(findstring $(origin GNUs), $(TOOL_ORIGIN)), )
  PATH := $(PATH):$(GNUs)/bin
endif
PATH := $(PATH):/usr/local/bin:/usr/bin:/bin

# GCC ưĶ
# TARGET_ARCH =

### C Ϣ ###
CC := $(GNUs)/bin/gcc
OUTPUT_OPTION = -o $@
ifeq ($(mode), debug)
  CFLAGS = -g
  CPPFLAGS = $(HEADER:%=-I%) -DLINK_KERNEL -DDEBUG
else
  CFLAGS = -O
  CPPFLAGS = $(HEADER:%=-I%) -DLINK_KERNEL
endif

COMPILE.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -c
LINK.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)

%.o: %.c; $(.o.c)
  define .o.c
	@$(CUTDEPS)
	$(COMPILE.c) $< $(OUTPUT_OPTION)
  endef

%.s: %.c; $(.s.c)
  define .s.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -S $<
  endef

%.i: %.c
	$(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION)

### 󥫴Ϣ ###
LD = $(GNUs)/bin/ld
ifeq ($(mode), debug)
  LDFLAGS = $(LIBDIR:%=-L%)
else
  LDFLAGS = $(LIBDIR:%=-L%)
endif

LIBDIR =
LOADLIBES =
LDOBJS =
LDLIBS =

# ɲäΥ󥯥ץ
LDFLAGS2 =
START_ADR =

# ¹ԥե
LINK.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) $(LDFLAGS2) $(START_ADR)

# ñ˥֥ȥեޤȤΥ
LINK_R.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) -r -nostdlib

%: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

%.out: %.o
	$(LINK.o) $(LDOBJS) $^ $(LOADLIBES) $(LDLIBS) $(OUTPUT_OPTION)

### ͡ꥹȺ ###
NM = $(GNUs)/bin/nm
NMFLAGS = -n

%.map: %
	$(NM) $(NMFLAGS) $< > $@

%.map: %.out
	$(NM) $(NMFLAGS) $< > $@

### ¾ ###
STRIP = $(GNUs)/bin/strip

endif

#---------  ---------------------------------------------------

### 磻ɥ饯 TRON ʸɤѴ ###
WCH2HEX = $(BD)/etc/wch2hex -t

%.c: %.C
	$(WCH2HEX) $< $(OUTPUT_OPTION)

%.cc: %.CC
	$(WCH2HEX) $< $(OUTPUT_OPTION)

### 饤֥Υ󥹥ȡ ###
$(LIB_INSTALLDIR)/%.a: %.a
	$(BACKUP) -t $< $(LIB_INSTALLDIR)
  ifdef RANLIB
	$(RANLIB) $@
  endif

$(LIB_INSTALLDIR)/%: %
	$(BACKUP) -t $< $(LIB_INSTALLDIR)

#----------------------------------------------------------------------
