#########################################################################
#									#
#  Main Makefile for the Amaya source tree. It is mainly used to	#
#	build the list of source files found in the tree and generate	#
#	the associated dependancies.					#
#									#
#  Main targets :							#
#	make rebuild : rescan the current tree for sources files	#
#		and store all the results in Make.files			#
#	make depend : rebuild the dependancies for all files found	#
#		in Make.files and store them in Make.depend		#
#	make mkid : rebuild the $(THOTDIR)/ID file used to index all	#
#		identifiers in the various sources files		#
#									#
#########################################################################
#
#

##
## Where is the source tree stored, what's its name
##   TREENAME is Amaya for Amaya distribution
##   TREENAME is opera on Opera project (CVS).
##

PARENTDIR=$(HOME)
#TREENAME=Amaya
TREENAME=Thot

##
## Directories containing the various trees
##

THOTDIR=$(PARENTDIR)/$(TREENAME)
THOTLIBDIR=$(THOTDIR)/thotlib

##
## List of all Thot based applications
##

APPS=thot amaya alliance batch misc/annotations

##
## list of all Thot annex libraries
##

LIBS=drawlib tablelib indexlib pluginlib javalib

##
## List of all external libraries
##

EXTERN_LIBS=libpng libz libjpeg kaffe-0.7.1

#
# Setting up standard values, can be overrided by Makefile.$(MACHINE)
#

CC	= gcc
CFLAGS	= -g

AWK	= gawk     # nawk is Ok too, we need toupper
LN	= ln -sf
MKDIR	= mkdir -p
MV	= mv
RM	= rm -f
CP	= cp
CAT	= cat
CTAGS	= /usr/local/bin/ctags -h ".h.H.hpp.hxx.h++.var"
MKID	= mkid

#
# Note we use a modified version of cextract 1.7
# +O flag is not available in the standard distribution !
# This is purely cosmetic (one arg per line !).
#
CEXTRACTFLAGS= +O -D__i386__ 
CEXTRACT= ${THOTDIR}/${MACHINE}/bin/cextract

CDEPEND	= $(THOTDIR)/$(MACHINE)/bin/mkdep
CDEPENDFLAGS= 

JAVASTUB= $(THOTDIR)/$(MACHINE)/bin/javastub
JAVASTUBFLAGS= 

#
# Positioning extra_values depending platform and compiler.
#

MACHINE=`$(THOTDIR)/batch/MachineType`

#
# Include the tree and apps files informations
#
# gives definitions for :
#
#   THOTSCHDIRS      List of directory containing S P  schemas
#   THOTSCHS         List of S schemas
#   THOTSCHP         List of P schemas
#   THOTSCHT         List of T schemas
#   THOTSCHA         List of A schemas
#
#   THOTLIBDIRH      List of directories in Thot lib containing .h .xpm .xbm
#   THOTLIBH         List of .h .xpm .xbm in Thot lib
#   THOTLIBDIRF      List of directories in Thot lib containing _f.h files
#   THOTLIBF         List of _f.h function declaration files in Thot lib
#   THOTLIBDIRVAR    List of directories in Thot lib containing .var
#   THOTLIBVAR       List of .var globals declaration files in Thot lib
#   THOTLIBDIRC      List of directories in Thot lib containing .c files
#   THOTLIBC         List of .c files in Thot lib
#
# and for each APP (THOT AMAYA ALLIANCE ...) defined in APPS.
#
#   $(APP)DIRH       List of directories in APP containing .h .xpm .xbm
#   $(APP)H          List of .h .xpm .xbm in APP
#   $(APP)DIRF       List of directories in APP containing _f.h
#   $(APP)F          List of _f.h function declaration files in APP
#   $(APP)DIRVAR     List of directories in APP containing .var
#   $(APP)VAR        List of .var globals declaration files in APP
#   $(APP)DIRC       List of directories in APP containing .c files
#   $(APP)C          List of .c files in APP
#
# this is the result of "make rebuild"
#

include Make.files

#
# Extra definitions not guessed by make rebuild and make depend
#

LIBWWWDIR=w3c-libwww-5.0a/Library/src

APPINCLUDES= -I/usr/X11/include -I$(THOTDIR)/thotlib/include

THOTLIBEXTRAINCLUDES=

THOTEXTRAINCLUDES= \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

BATCHEXTRAINCLUDES= \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

ALLIANCEEXTRAINCLUDES= -I$(THOTDIR)/$(LIBWWWDIR) \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

DRAWLIBEXTRAINCLUDES= \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

TABLELIBEXTRAINCLUDES= \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

INDEXLIBEXTRAINCLUDES= \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

PLUGINLIBEXTRAINCLUDES= \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

JAVALIBEXTRAINCLUDES= \
 -I$(THOTDIR)/kaffe-0.7.1/config \
 -I$(THOTDIR)/kaffe-0.7.1/kaffevm \
 -I$(THOTDIR)/kaffe-0.7.1/lib/support \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

ANNOTATIONEXTRAINCLUDES= \
 -I$(THOTDIR)/thotlib/internals/h \
 -I$(THOTDIR)/thotlib/internals/f \
 -I$(THOTDIR)/thotlib/internals/var

AMAYAEXTRAINCLUDES= \
 -I$(THOTDIR)/$(LIBWWWDIR) \
 -I$(THOTDIR)/thotlib/internals/h

##
## Global variables concerning the full sources tree
##

SRCSSCH=$(THOTSCHS) $(THOTSCHP) $(THOTSCHT) $(THOTSCHA)
SRCSC=$(THOTLIBC) $(THOTAPPSC)
SRCSH=$(THOTLIBH) $(THOTLIBF) $(THOTLIBVAR) \
      $(THOTAPPSH) $(THOTAPPSF) $(THOTAPPSVAR) 
MAKES=$(THOTMAKES) Makefile
SRCS=$(SRCSH) $(SRCSC) $(SRCSSCH) $(MAKES)

##
## Name for Schemas compilers ...
##

COMPAPP=$(THOTDIR)/$(MACHINE)/app

#    Warning        Warning        Warning        Warning        Warning
#
#               Nothing should be customized below
#
#    Warning        Warning        Warning        Warning        Warning

all:

##
## rebuild : rebuild Make.files file
##

Make.files :
	@(touch $@)

rebuild_app :
	@(echo APP=$(APP) app=$(app))
	@echo Scanning tree for $(app) includes
	@(echo "$(APP)DIRH=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/$(app) -name \*.h ! -type l -print ; \
	     find $(THOTDIR)/$(app) -name \*.xpm ! -type l -print ; \
	     find $(THOTDIR)/$(app) -name \*.xbm ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(APP)H=" >> Make.new)
	@(find $(THOTDIR)/$(app)/ -name \*.h ! -type l -print >> Make.new)
	@(find $(THOTDIR)/$(app)/ -name \*.xpm ! -type l -print >> Make.new)
	@(find $(THOTDIR)/$(app)/ -name \*.xbm ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(APP)DIRF=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/$(app) -name \*_f.h ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(APP)F=" >> Make.new)
	@(find $(THOTDIR)/$(app)/ -name \*_f.h ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(APP)DIRVAR=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/$(app) -name \*.var ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(APP)VAR=" >> Make.new)
	@(find $(THOTDIR)/$(app)/ -name \*.var ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@echo Scanning tree for $(app) sources
	@(echo "$(APP)DIRC=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/$(app) -name \*.c ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(APP)C=" >> Make.new)
	@(find $(THOTDIR)/$(app)/ -name \*.c ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)

rebuild_lib :
	@(echo LIB=$(LIB) lib=$(lib))
	@echo Scanning tree for $(lib) includes
	@(echo "$(LIB)DIRH=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/$(lib) -name \*.h ! -type l -print ; \
	     find $(THOTDIR)/$(lib) -name \*.xpm ! -type l -print ; \
	     find $(THOTDIR)/$(lib) -name \*.xbm ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(LIB)H=" >> Make.new)
	@(find $(THOTDIR)/$(lib)/ -name \*.h ! -type l -print >> Make.new)
	@(find $(THOTDIR)/$(lib)/ -name \*.xpm ! -type l -print >> Make.new)
	@(find $(THOTDIR)/$(lib)/ -name \*.xbm ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(LIB)DIRF=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/$(lib) -name \*_f.h ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(LIB)F=" >> Make.new)
	@(find $(THOTDIR)/$(lib)/ -name \*_f.h ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(LIB)DIRVAR=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/$(lib) -name \*.var ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(LIB)VAR=" >> Make.new)
	@(find $(THOTDIR)/$(lib)/ -name \*.var ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@echo Scanning tree for $(lib) sources
	@(echo "$(LIB)DIRC=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/$(lib) -name \*.c ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "$(LIB)C=" >> Make.new)
	@(find $(THOTDIR)/$(lib)/ -name \*.c ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)

rebuild : Make.files
	@$(MV) Make.files Make.files.bak
	@(echo \# Automatically generated by make rebuild > Make.files)
	@(echo \# on `hostname` the `date` >> Make.files)
	@(echo \# do not edit >> Make.files)
	@(LISTDIRC="\$$(THOTLIBDIRC)"; LISTDIRH="\$$(THOTLIBDIRH)"; \
	  for comp in $(APPS) $(LIBS) ; do \
	     COMP=`echo $$comp | $(AWK) '{print toupper($$0)}'` ; \
	     COMPDIRC="$$COMP"DIRC; LISTDIRC="$$LISTDIRC \$$($$COMPDIRC)" ; \
	     COMPDIRH="$$COMP"DIRH; LISTDIRH="$$LISTDIRH \$$($$COMPDIRH)" ; \
	     done ; \
	  echo ALLDIRC=$$LISTDIRC >> Make.files ; \
	  echo ALLDIRH=$$LISTDIRH >> Make.files)
	@echo Scanning tree for schemas directories
	@(echo "THOTSCHDIRS=" > Make.new)
	@(for i in `( \
	     find $(THOTDIR)/ -name \*.[SPTA] ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@echo Scanning tree for schemas
	@(echo "THOTSCHS=" >> Make.new)
	@(find $(THOTDIR)/ -name \*.S ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTSCHP=" >> Make.new)
	@(find $(THOTDIR)/ -name \*.P ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTSCHT=" >> Make.new)
	@(find $(THOTDIR)/ -name \*.T ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTSCHA=" >> Make.new)
	@(find $(THOTDIR)/ -name \*.A ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@echo Scanning tree for thotlib includes
	@(echo "THOTLIBDIRH=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/thotlib -name \*.h ! -type l -print ; \
	     find $(THOTDIR)/thotlib -name \*.xpm ! -type l -print ; \
	     find $(THOTDIR)/thotlib -name \*.xbm ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTLIBH=" >> Make.new)
	@(find $(THOTDIR)/thotlib/ -name \*.h ! -type l -print >> Make.new)
	@(find $(THOTDIR)/thotlib/ -name \*.xpm ! -type l -print >> Make.new)
	@(find $(THOTDIR)/thotlib/ -name \*.xbm ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTLIBDIRF=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/thotlib -name \*_f.h ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTLIBF=" >> Make.new)
	@(find $(THOTDIR)/thotlib/ -name \*_f.h ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTLIBDIRVAR=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/thotlib -name \*.var ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTLIBVAR=" >> Make.new)
	@(find $(THOTDIR)/thotlib/ -name \*.var ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@echo Scanning tree for thotlib sources
	@(echo "THOTLIBDIRC=" >> Make.new)
	@(for i in `( \
	     find $(THOTDIR)/thotlib -name \*.c ! -type l -print ; \
	             )` ; \
          do echo `dirname $$i` ; done | sort -r | uniq >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@(echo "THOTLIBC=" >> Make.new)
	@(find $(THOTDIR)/thotlib/ -name \*.c ! -type l -print >> Make.new)
	@(echo >> Make.new)
	@(echo >> Make.new)
	@echo Scanning tree for libraries
	@(for lib in $(LIBS) ; do \
	  if [ -d $(THOTDIR)/$$lib ] ; then \
	  echo "Scanning tree for $$lib" ; \
	  LIB=`basename $$lib | $(AWK) '{print toupper($$0)}'` ; \
	  $(MAKE) lib=$$lib LIB=$$LIB rebuild_lib ; \
	  fi ; done )
	@echo Scanning tree for applications
	@(for app in $(APPS) ; do \
	  if [ -d $(THOTDIR)/$$app ] ; then \
	  echo "Scanning tree for $$app" ; \
	  APP=`basename $$app | $(AWK) '{print toupper($$0)}'` ; \
	  $(MAKE) app=$$app APP=$$APP rebuild_app ; \
	  fi ; done )
	@(sed s+$(THOTDIR)/++g < Make.new | \
	  sed s/$$/" \\\\"/ |\
	  sed s/"^ \\\\$$"// >> Make.files)
	@$(RM) Make.new


##
## tags : build a tags file
##

dummy :

##
## depend : generate a dependancies file Make.depend
##

Make.depend :
	@touch $@

$(CDEPEND) :
	@(if [ ! -d $(THOTDIR)/tools ] ; \
	  then \
	      (cd $(THOTDIR)/.. ; cvs get $(TREENAME)/tools) ; \
	  fi ; \
	  if [ ! -d $(THOTDIR)/tools/mkdep ] ; \
	  then \
	      (cd $(THOTDIR)/.. ; cvs get $(TREENAME)/tools/mkdep ) ; \
	  fi ; \
	  (cd $(THOTDIR)/tools/mkdep ; make -i clean all) ; \
	  $(MKDIR) $(THOTDIR)/$(MACHINE)/bin ; \
	  $(CP) $(THOTDIR)/tools/mkdep/mkdep $(CDEPEND) ; \
	 )

depend_app :
	@(if [ ! -x $(CDEPEND) ] ; \
	  then make THOTDIR=$(THOTDIR) MACHINE=$(MACHINE) $(CDEPEND) ; fi )
	@($(RM) -f /tmp/depend$$$$ ; \
	  echo ; \
	  echo Building directory dependencies for $(app) application ; \
	  echo ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# Dependancies for for $(app) application .o directories >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	 for i in $($(APP)DIRC) ; \
	 do \
	  echo "\$$(THOTDIR)/\$$(MACHINE)/$$i :" >> /tmp/depend$$$$ ; \
	  echo "	\$$(MKDIR) \$$(THOTDIR)/\$$(MACHINE)/$$i" >> /tmp/depend$$$$ ; \
	 done ; \
	  echo ; \
	  echo Building C dependancies for $(app) application ; \
	  echo ; \
	  includes=`echo "$(APPINCLUDES) $($(APP)DIRH) $($(APP)DIRF) $($(APP)DIRVAR)" \
	  | sed "s+ + -I$(THOTDIR)/+g"` ; \
	  includes="$$includes $(APPINCLUDES) $($(APP)EXTRAINCLUDES)" ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# Dependancies for for $(app) application .o files >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	  (cd $(THOTDIR);$(CDEPEND) $(CDEPENDFLAGS) $$includes $($(APP)C)) \
	  >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# End of dependancies for $(app) application .o files >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	 sed s+\^$(THOTDIR)+\$$\(THOTDIR\)/\$$\(MACHINE\)+g < /tmp/depend$$$$ | \
	 sed s+$(THOTDIR)+\$$\(THOTDIR\)+g >> Make.depend.tmp ; \
	 $(RM) /tmp/depend$$$$ ; \
	 $(CAT) Make.depend.tmp >> Make.depend ; \
	 $(RM) Make.depend.tmp)

depend_lib :
	@(if [ ! -x $(CDEPEND) ] ; \
	  then make THOTDIR=$(THOTDIR) MACHINE=$(MACHINE) $(CDEPEND) ; fi )
	@($(RM) -f /tmp/depend$$$$ ; \
	  echo ; \
	  echo Building directory dependencies for $(lib) library ; \
	  echo ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# Dependancies for for $(lib) library .o directories >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	 for i in $($(LIB)DIRC) ; \
	 do \
	  echo "\$$(THOTDIR)/\$$(MACHINE)/$$i :" >> /tmp/depend$$$$ ; \
	  echo "	\$$(MKDIR) \$$(THOTDIR)/\$$(MACHINE)/$$i" >> /tmp/depend$$$$ ; \
	 done ; \
	  echo ; \
	  echo Building C dependancies for $(lib) library ; \
	  echo ; \
	  includes=`echo "$(LIBINCLUDES) $($(LIB)DIRH) $($(LIB)DIRF) $($(LIB)DIRVAR)" \
	  | sed "s+ + -I$(THOTDIR)/+g"` ; \
	  includes="$$includes $(LIBINCLUDES) $($(LIB)EXTRAINCLUDES)" ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# Dependancies for for $(lib) library .o files >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	  (cd $(THOTDIR);$(CDEPEND) $(CDEPENDFLAGS) $$includes $($(LIB)C)) \
	  >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# End of dependancies for $(lib) library .o files >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	 sed s+\^$(THOTDIR)+\$$\(THOTDIR\)/\$$\(MACHINE\)+g < /tmp/depend$$$$ | \
	 sed s+$(THOTDIR)+\$$\(THOTDIR\)+g >> Make.depend.tmp ; \
	 $(RM) /tmp/depend$$$$ ; \
	 $(CAT) Make.depend.tmp >> Make.depend ; \
	 $(RM) Make.depend.tmp)


depend : Make.depend
	@(if [ ! -x $(CDEPEND) ] ; \
	  then make THOTDIR=$(THOTDIR) MACHINE=$(MACHINE) $(CDEPEND) ; fi )
	@(echo \# Automatically generated by make depend > Make.depend.tmp)
	@(echo \# on `hostname` the `date` >> Make.depend.tmp)
	@(echo \# do not edit >> Make.depend.tmp)
	@(echo >> Make.depend.tmp)
	@(echo LOCAL_APPS=$(APPS) >> Make.depend.tmp)
	@(echo LOCAL_LIBS=$(LIBS) >> Make.depend.tmp)
	@(echo EXTERN_LIBS=$EXTERN_LIBS >> Make.depend.tmp)
	@(echo >> Make.depend.tmp)
	@($(RM) -f /tmp/depend$$$$ ; \
	  echo ; \
	  echo Building Thot library directory dependencies : ; \
	  echo ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# Dependancies for thotlib directories >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	 for i in $(THOTLIBDIRC) ; \
	 do \
	  echo "\$$(THOTDIR)/\$$(MACHINE)/$$i :" >> /tmp/depend$$$$ ; \
	  echo "	\$$(MKDIR) \$$(THOTDIR)/\$$(MACHINE)/$$i" >> /tmp/depend$$$$ ; \
	 done ; \
	  echo ; \
	  echo Building Schemas .A to .c dependancies : ; \
	  echo ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# Dependancies for .A schemas generated files >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo "app_includes_depends : \\" >> /tmp/depend$$$$ ; \
	  echo " $(THOTDIR)/thotlib/include/thot_gui.h \\" >> /tmp/depend$$$$ ; \
	  echo " $(THOTDIR)/thotlib/include/thot_sys.h \\" >> /tmp/depend$$$$ ; \
	  echo " $(THOTDIR)/thotlib/include/application.h \\" >> /tmp/depend$$$$ ; \
	  echo " $(THOTDIR)/thotlib/include/app.h \\" >> /tmp/depend$$$$ ; \
	  echo " $(THOTDIR)/thotlib/include/interface.h" >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ;\
	 for i in $(THOTSCHA) ; \
	 do \
	  dir=`dirname $$i`;base=`basename $$i .A`; \
	  if [ ! -f $(THOTDIR)/$$dir/$$base.h ] ; then \
	     echo "/* should be gnerated by running app compiler on $$i */" >> $(THOTDIR)/$$dir/$$base.h ; \
	     touch -t 0101010180 $(THOTDIR)/$$dir/$$base.h ; \
	  fi ; \
	  echo "$(THOTDIR)/$$dir/$$base.c : $(THOTDIR)/$$i" >> /tmp/depend$$$$ ; \
	  echo "	cd $(THOTDIR)/$$dir;\$$(COMPAPP) $$base.A" >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo "$(THOTDIR)/\$$(MACHINE)/$$dir/$$base.o : $(THOTDIR)/$$dir/$$base.c \\" >> /tmp/depend$$$$ ; \
	  echo " app_includes_depend" >> /tmp/depend$$$$ ; \
	  echo "	cd $$dir;\$$(CC) \$$(APPINCLUDES) \$$(CFLAGS) $$base.c -o \$$@" >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	 done ; \
	  echo ; \
	  echo Building C dependancies for Thot library ; \
	  echo ; \
	  includes=`echo "$(APPINCLUDES) $(THOTLIBDIRH) $(THOTLIBDIRF) $(THOTLIBDIRVAR)" \
	  | sed "s+ + -I$(THOTDIR)/+g"` ; \
	  includes="$$includes $(THOTLIBEXTRAINCLUDES)" ; \
	  echo >> /tmp/depend$$$$ ; \
	  echo \# Dependancies for .o files generated by $(CDEPEND) >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	  (cd $(THOTDIR);$(CDEPEND) $(CDEPENDFLAGS) $$includes $(THOTLIBC)) \
	  >> /tmp/depend$$$$ ;\
	  echo >> /tmp/depend$$$$ ; \
	  echo \# End of dependancies for .o files >> /tmp/depend$$$$ ; \
	  echo >> /tmp/depend$$$$ ; \
	 sed s+\^$(THOTDIR)+\$$\(THOTDIR\)/\$$\(MACHINE\)+g < /tmp/depend$$$$ | \
	 sed s+$(THOTDIR)+\$$\(THOTDIR\)+g >> Make.depend.tmp ; \
	 $(RM) /tmp/depend$$$$ ; \
	 $(MV) Make.depend Make.depend.bak ; \
	 $(MV) Make.depend.tmp Make.depend)
	@(for lib in $(LIBS) ; do \
	  if [ -d $(THOTDIR)/$$lib ] ; then \
	  LIB=`basename $$lib | $(AWK) '{print toupper($$0)}'` ; \
	  $(MAKE) lib=$$lib LIB=$$LIB depend_lib ; \
	  fi ; done )
	@(for app in $(APPS) ; do \
	  if [ -d $(THOTDIR)/$$app ] ; then \
	  APP=`basename $$app | $(AWK) '{print toupper($$0)}'` ; \
	  $(MAKE) app=$$app APP=$$APP depend_app ; \
	  fi ; done )

##
## cextract : generate _f.h function signatures using cextract
##

$(CEXTRACT) :
	@(if [ ! -d $(THOTDIR)/tools ] ; \
	  then \
	      (cd $(THOTDIR)/.. ; cvs get $(TREENAME)/tools) ; \
	  fi ; \
	  if [ ! -d $(THOTDIR)/tools/cextract-1.7 ] ; \
	  then \
	      (cd $(THOTDIR)/.. ; cvs get $(TREENAME)/tools/cextract-1.7 ) ; \
	  fi ; \
	  (cd $(THOTDIR)/tools/cextract-1.7 ; make -i clean all) ; \
	  $(MKDIR) $(THOTDIR)/$(MACHINE)/bin ; \
	  $(CP) $(THOTDIR)/tools/cextract-1.7/cextract $(CEXTRACT) ; \
	  )

proto_app : 
	@(if [ ! -x $(CEXTRACT) ] ; \
	  then make THOTDIR=$(THOTDIR) MACHINE=$(MACHINE) $(CEXTRACT) ; fi )
	@(echo ; \
	  echo Building functions signatures for application $(app) : ; \
	  echo ; \
	 for i in $($(APP)C) ; \
	 do \
	  dir=`dirname $$i`;base=`basename $$i .c`; \
	  if [ ! -d $(THOTDIR)/$$dir/f ] ; then $(MKDIR) $(THOTDIR)/$$dir/f ; fi ; \
	  $(CEXTRACT) $(CEXTRACTFLAGS) -o /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$i 2> /dev/null ; \
	  if [ -f $(THOTDIR)/$$dir/f/"$$base"_f.h ] ; \
	  then \
	      delta=`diff /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$dir/f/"$$base"_f.h` ; \
	      if [ "$$delta" != "" ] ; \
	      then \
		  echo "  $$i proto changed" ; \
	          $(MV) /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$dir/f/"$$base"_f.h ; \
              else \
	          $(RM) /tmp/cextract.$$base.$$$$ ; \
              fi ; \
	  else \
	      echo "  $$i proto added" ; \
	      $(MV) /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$dir/f/"$$base"_f.h ; \
	  fi ; \
	 done )

proto_lib : 
	@(if [ ! -x $(CEXTRACT) ] ; \
	  then make THOTDIR=$(THOTDIR) MACHINE=$(MACHINE) $(CEXTRACT) ; fi )
	@(echo ; \
	  echo Building functions signatures for library $(lib) : ; \
	  echo ; \
	 for i in $($(LIB)C) ; \
	 do \
	  dir=`dirname $$i`;base=`basename $$i .c`; \
	  if [ ! -d $(THOTDIR)/$$dir/f ] ; then $(MKDIR) $(THOTDIR)/$$dir/f ; fi ; \
	  $(CEXTRACT) $(CEXTRACTFLAGS) -o /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$i 2> /dev/null ; \
	  if [ -f $(THOTDIR)/$$dir/f/"$$base"_f.h ] ; \
	  then \
	      delta=`diff /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$dir/f/"$$base"_f.h` ; \
	      if [ "$$delta" != "" ] ; \
	      then \
		  echo "  $$i proto changed" ; \
	          $(MV) /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$dir/f/"$$base"_f.h ; \
              else \
	          $(RM) /tmp/cextract.$$base.$$$$ ; \
              fi ; \
	  else \
	      echo "  $$i proto added" ; \
	      $(MV) /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$dir/f/"$$base"_f.h ; \
	  fi ; \
	 done )

proto : 
	@(if [ ! -x $(CEXTRACT) ] ; \
	  then make THOTDIR=$(THOTDIR) MACHINE=$(MACHINE) $(CEXTRACT) ; fi )
	@(echo ; \
	  echo Building functions signatures for ThotLib : ; \
	  echo ; \
	 for i in $(THOTLIBC) ; \
	 do \
	  dir=`dirname $$i`;base=`basename $$i .c`; \
	  $(CEXTRACT) $(CEXTRACTFLAGS) -o /tmp/cextract.$$base.$$$$ $(THOTDIR)/$$i 2> /dev/null ; \
	  if [ -f $(THOTDIR)/thotlib/internals/f/"$$base"_f.h ] ; \
	  then \
	      delta=`diff /tmp/cextract.$$base.$$$$ $(THOTDIR)/thotlib/internals/f/"$$base"_f.h` ; \
	      if [ "$$delta" != "" ] ; \
	      then \
		  echo "  $$i proto changed" ; \
	          $(MV) /tmp/cextract.$$base.$$$$ $(THOTDIR)/thotlib/internals/f/"$$base"_f.h ; \
              else \
	          $(RM) /tmp/cextract.$$base.$$$$ ; \
              fi ; \
	  else \
	      echo "  $$i proto added" ; \
	      $(MV) /tmp/cextract.$$base.$$$$ $(THOTDIR)/thotlib/internals/f/"$$base"_f.h ; \
	  fi ; \
	 done )
	@(for lib in $(LIBS) ; do \
	  if [ -d $(THOTDIR)/$$lib ] ; then \
	  LIB=`basename $$lib | $(AWK) '{print toupper($$0)}'` ; \
	  $(MAKE) lib=$$lib LIB=$$LIB proto_lib ; \
	  fi ; done )
	@(for app in $(APPS) ; do \
	  if [ -d $(THOTDIR)/$$app ] ; then \
	  APP=`basename $$app | $(AWK) '{print toupper($$0)}'` ; \
	  $(MAKE) app=$$app APP=$$APP proto_app ; \
	  fi ; done )

##
## javastub : generate _f.h function signatures using cextract
##

javastub $(JAVASTUB) :
	@(if [ ! -d $(THOTDIR)/tools ] ; \
	  then \
	      (cd $(THOTDIR)/.. ; cvs get $(TREENAME)/tools) ; \
	  fi ; \
	  if [ ! -d $(THOTDIR)/tools/javastub ] ; \
	  then \
	      (cd $(THOTDIR)/.. ; cvs get $(TREENAME)/tools/javastub ) ; \
	  fi ; \
	  (cd $(THOTDIR)/tools/javastub ; make -i clean all) ; \
	  $(MKDIR) $(THOTDIR)/$(MACHINE)/bin ; \
	  $(CP) $(THOTDIR)/tools/javastub/javastub $(JAVASTUB) ; \
	  )

java : 
	@(if [ ! -x $(JAVASTUB) ] ; \
	  then make THOTDIR=$(THOTDIR) MACHINE=$(MACHINE) $(JAVASTUB) ; fi )
	@(echo ; \
	  echo Building Java stubs for ThotLib : ; \
	  echo ; \
	  cd $(THOTDIR)/javalib ; make)

#
# object_tree : build an object tree reflecting the locality of the
#	C files, but prefixed by $(MACHINE) value.
#

app_object_tree :
	@(
	  echo building object tree for application $(app) ; \
	  $(MKDIR) $(THOTDIR)/$(MACHINE)/$(app) ; \
	  for dir in $($(APP)DIRC) ; do \
	     $(MKDIR) $(THOTDIR)/$(MACHINE)/$$dir ; \
	  done )

object_tree :
	@($(MKDIR) $(THOTDIR)/$(MACHINE) ; \
	  $(MKDIR) $(THOTDIR)/$(MACHINE)/batch ; \
	  for app in $(APPS) ; do \
	      if [ -d $(THOTDIR)/$$app ] ; then \
		 APP=`basename $$app | $(AWK) '{print toupper($$0)}'` ; \
		 $(MAKE) app=$$app APP=$$APP app_object_tree ; \
	  fi ; done )

#
# update and commit : General CVS commands
#

update :
	@(cd $(THOTDIR) ; cvs update)

commit :
	@(cd $(THOTDIR) ; cvs commit)

#
# mkid : build the ID file used by the id_utils.
#

mkid : 
	@(echo rebuilding $(THOTDIR)/ID reference file)
	@(cd $(THOTDIR); $(MKID))

tags : dummy
	@echo rebuilding tags ...
	@(cd $(THOTDIR) ; $(CTAGS) `find $(THOTDIR) -name \*.c -o -name \*.h`)
	@echo installing tags in source tree ...
	@(for dir in $(ALLDIRC) $(ALLDIRH) ; do \
	     if [ -d $(THOTDIR)/$$dir ] ; then \
		$(RM) $(THOTDIR)/$$dir/tags ; \
		$(LN) $(THOTDIR)/tags $(THOTDIR)/$$dir/tags ; \
	     fi ; done)

#
# Include the dependencies generated by Make.depend
#
#
#include Make.depend
#
# DO NOT DELETE
