#*=====================================================================*/
#*    serrano/prgm/project/bigloo/bde/Makefile                         */
#*    -------------------------------------------------------------    */
#*    Author      :  Manuel Serrano                                    */
#*    Creation    :  Mon Jun  8 08:36:43 1998                          */
#*    Last change :  Wed Oct 13 16:11:53 2004 (serrano)                */
#*    Copyright   :  1998-2004 Manuel Serrano, see LICENSE file        */
#*    -------------------------------------------------------------    */
#*    The Makefile for the Bigloo development environment.             */
#*=====================================================================*/

#*---------------------------------------------------------------------*/
#*    The default configuration                                        */
#*---------------------------------------------------------------------*/
include ../Makefile.config

#*---------------------------------------------------------------------*/
#*    Compilers, Tools and Destinations                                */
#*---------------------------------------------------------------------*/
# Bigloo
BIGLOO		= $(BOOTBINDIR)/bigloo -no-hello
# etags for info
ETAGS		= etags
# etags flags for info scanning
ETFLAGS		= --language=none \
                  --r '/^ - \(essential \|library \|bigloo \)?\(procedure\|syntax\): [^ ]+/' \
                  --r '/^ - bigloo module clause: [^ ]+/' \
                  --r '/^ - bigloo rgc procedure: [^ ]+/' \
                  --r '/^ - bigloo generic: [^ ]+/'
# the shell to be used
SHELL           = /bin/sh

#*---------------------------------------------------------------------*/
#*    Compilation flags                                                */
#*---------------------------------------------------------------------*/
#BFLAGS		= -jvm -jvm-jar -O2 -fsharing -unsafe
BFLAGS		= -O2 -fsharing -unsafe $(SHRD_BDE_OPT)
EFLAGS		=

#*---------------------------------------------------------------------*/
#*    Sources and Objects                                              */
#*---------------------------------------------------------------------*/
#*--- afile -----------------------------------------------------------*/
AFILE_FILE	= afile
AFILE_OBJ	= $(AFILE_FILE:%=afile/%.o)
AFILE_CLASS	= $(AFILE_FILE:%=afile/%.class)

#*--- jfile -----------------------------------------------------------*/
JFILE_FILE	= jfile
JFILE_OBJ	= $(JFILE_FILE:%=jfile/%.o)
JFILE_CLASS	= $(JFILE_FILE:%=jfile/%.class)

#*--- bpp -------------------------------------------------------------*/
BPP_FILE	= bpp reader
BPP_OBJ		= $(BPP_FILE:%=bpp/%.o)

#*--- btags -----------------------------------------------------------*/
BTAGS_FILE	= btags
BTAGS_OBJ	= $(BTAGS_FILE:%=btags/%.o)

#*--- bdepend ---------------------------------------------------------*/
BDEPEND_FILE	= bdepend
BDEPEND_OBJ	= $(BDEPEND_FILE:%=bdepend/%.o)

#*--- bmake -----------------------------------------------------------*/
BMAKE_FILE	= bmake template
BMAKE_OBJ	= $(BMAKE_FILE:%=bmake/%.o)

#*--- bprof -----------------------------------------------------------*/
BPROF_FILE	= bprof
BPROF_OBJ	= $(BPROF_FILE:%=bprof/%.o)

#*--- mco -------------------------------------------------------------*/
MCO_FILE	= mco
MCO_OBJ		= $(MCO_FILE:%=mco/%.o)

#*--- jas -------------------------------------------------------------*/
JAS_LINKFILE	= lib classfile opcode peep wide labels stack produce as
JAS_FILE	= jas 
JAS_AFILE	= .afile
JAS_LINKSRC	= $(JAS_LINKFILE:%=jas/%.scm)
JAS_LINKOBJ	= $(JAS_LINKFILE:%=jas/%.o)
JAS_OBJ		= $(JAS_FILE:%=jas/%.o)
#JAS_LINKOBJ	= $(JAS_LINKFILE:%=jas/%.class)
#JAS_OBJ	= $(JAS_FILE:%=jas/%.class)

#*---------------------------------------------------------------------*/
#*    Population                                                       */
#*---------------------------------------------------------------------*/
OBJECTS		= $(AFILE_OBJ) $(BPP_OBJ) $(BTAGS_OBJ) $(BDEPEND_OBJ) \
                  $(BMAKE_OBJ) $(BPROF_OBJ) $(MCO_OBJ) $(JFILE_OBJ) \
                  $(JAS_OBJ)
SOURCES_FILES	= $(OBJECTS:%.o=%.scm)

POPULATION	= $(SOURCES_FILES) \
	          bmake/makefile.appli \
	          bmake/makefile.library \
                  jas/jas.tex \
                  Makefile

#*---------------------------------------------------------------------*/
#*     Suffixes ...                                                    */
#*---------------------------------------------------------------------*/
.SUFFIXES:
.SUFFIXES: .scm .o .el .elc .class

#*---------------------------------------------------------------------*/
#*    all                                                              */
#*---------------------------------------------------------------------*/
all: $(BOOTBINDIR)/afile \
     $(BOOTBINDIR)/jfile \
     $(BOOTBINDIR)/bdepend \
     $(BOOTBINDIR)/bmake \
     $(BOOTBINDIR)/bpp \
     $(BOOTBINDIR)/btags \
     $(BOOTBINDIR)/bprof \
     $(BOOTBINDIR)/jas \
     $(BOOTBINDIR)/mco \
     dobmem

boot:
	$(MAKE) all BFLAGS="$(BFLAGS) -ld-relative"

dobmem:
	@ if [ "$(LDPRELOADSUPPORT)" = "yes" ]; then \
	    (cd bmem && $(MAKE)) || exit 1; \
	  fi

$(BOOTBINDIR)/afile: $(AFILE_OBJ)
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/afile $(AFILE_OBJ)

afile.class: afile/afile.scm
	(cd afile; \
         $(BIGLOO) -c -jvm $(BFLAGS) $(EFLAGS) afile.scm -o afile.class; \
         mv afile.class ..)

$(BOOTBINDIR)/jfile: $(JFILE_OBJ)
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/jfile $(JFILE_OBJ)

jfile.class: jfile/jfile.scm
	(cd jfile; $(BIGLOO) -c -jvm $(BFLAGS) $(EFLAGS) jfile.scm -o jfile.class; \
         mv jfile.class ..)

$(BOOTBINDIR)/bdepend: $(BDEPEND_OBJ)
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/bdepend $(BDEPEND_OBJ)

$(BOOTBINDIR)/bmake: $(BMAKE_OBJ)
	$(BIGLOO) -no-hello $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/bmake $(BMAKE_OBJ)

$(BOOTBINDIR)/bprof: $(BPROF_OBJ)
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/bprof $(BPROF_OBJ)

$(BOOTBINDIR)/mco: $(MCO_OBJ) ../comptime/Module/checksum.o
	$(BIGLOO) -no-hello $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/mco \
           $(MCO_OBJ) ../comptime/Module/checksum.o

$(BOOTBINDIR)/bpp: $(BPP_OBJ)
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/bpp $(BPP_OBJ)

$(BOOTBINDIR)/btags: $(BTAGS_OBJ)
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/btags $(BTAGS_OBJ)

jas: $(BOOTBINDIR)/jas
$(BOOTBINDIR)/jas: $(JAS_LINKSRC) $(JAS_AFILE) $(JAS_OBJ) $(JAS_LINKOBJ)
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -o $(BOOTBINDIR)/jas $(JAS_OBJ) $(JAS_LINKOBJ)

#*---------------------------------------------------------------------*/
#*    install                                                          */
#*---------------------------------------------------------------------*/
install: all
	if [ $(BINDIR) != $(BOOTBINDIR) ]; then \
	  cp $(BOOTBINDIR)/afile$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/afile$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/afile$(EXE_SUFFIX); \
	  cp $(BOOTBINDIR)/jfile$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/jfile$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/jfile$(EXE_SUFFIX); \
	  cp $(BOOTBINDIR)/bdepend$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/bdepend$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/bdepend$(EXE_SUFFIX); \
	  cp $(BOOTBINDIR)/bmake$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/bmake$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/bmake$(EXE_SUFFIX); \
	  cp $(BOOTBINDIR)/bprof$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/bprof$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/bprof$(EXE_SUFFIX); \
	  cp $(BOOTBINDIR)/mco$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/mco$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/mco$(EXE_SUFFIX); \
	  cp $(BOOTBINDIR)/bpp$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/bpp$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/bpp$(EXE_SUFFIX); \
	  cp $(BOOTBINDIR)/btags$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/btags$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/btags$(EXE_SUFFIX); \
	  cp $(BOOTBINDIR)/jas$(EXE_SUFFIX) $(DESTDIR)$(BINDIR)/jas$(EXE_SUFFIX); \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/jas$(EXE_SUFFIX); \
          if [ "$(LDPRELOADSUPPORT)" = "yes" ]; then \
	    (cd bmem; $(MAKE) install) || exit 1; \
          fi; \
        fi

#*---------------------------------------------------------------------*/
#*    uninstall                                                        */
#*---------------------------------------------------------------------*/
uninstall:
	- $(RM) -f $(DESTDIR)$(BINDIR)/afile$(EXE_SUFFIX)
	- $(RM) -f $(DESTDIR)$(BINDIR)/jfile$(EXE_SUFFIX)
	- $(RM) -f $(DESTDIR)$(BINDIR)/bdepend$(EXE_SUFFIX)
	- $(RM) -f $(DESTDIR)$(BINDIR)/bmake$(EXE_SUFFIX)
	- $(RM) -f $(DESTDIR)$(BINDIR)/bprof$(EXE_SUFFIX)
	- $(RM) -f $(DESTDIR)$(BINDIR)/mco$(EXE_SUFFIX)
	- $(RM) -f $(DESTDIR)$(BINDIR)/bpp$(EXE_SUFFIX)
	- $(RM) -f $(DESTDIR)$(BINDIR)/btags$(EXE_SUFFIX)
	- $(RM) -f $(DESTDIR)$(BINDIR)/jas$(EXE_SUFFIX)
	- (cd bmem; $(MAKE) uninstall)

#*---------------------------------------------------------------------*/
#*    touchall                                                         */
#*---------------------------------------------------------------------*/
touchall:
	touch $(SOURCE_FILES)

#*---------------------------------------------------------------------*/
#*     clean ...                                                       */
#*---------------------------------------------------------------------*/
.PHONY: clean cleanall distclean

clean:
	@- $(RM) -f $(OBJECTS)
	@- $(RM) -f $(JAS_LINKOBJ)
	@- $(RM) -f $(JAS_LINKFILE:%=jas/%.c)
	@- $(RM) -f $(OBJECTS:%.o=%.c)
	@- $(RM) -f .afile
	@- $(RM) -f jas/.afile
	@- $(RM) -f *.class
	@ find . \( -name '*[~%]' \
                       -o -name '.??*[~%]' \
                       -o -name '#*#' \
                       -o -name '?*#' \
                       -o -name \*core \) \
                     -type f -exec rm {} \;   
	@ (cd bmem; $(MAKE) clean)
	@ $(BEEP)
	@ echo "cleanup done..."
	@ echo "-------------------------------"

cleanall: clean
	@- $(RM) -f $(BOOTBINDIR)/afile 
	@- $(RM) -f $(BOOTBINDIR)/jfile 
	@- $(RM) -f $(BOOTBINDIR)/bdepend 
	@- $(RM) -f $(BOOTBINDIR)/bmake 
	@- $(RM) -f $(BOOTBINDIR)/bprof
	@- $(RM) -f $(BOOTBINDIR)/mco
	@- $(RM) -f $(BOOTBINDIR)/bpp 
	@- $(RM) -f $(BOOTBINDIR)/btags
	@- $(RM) -f $(BOOTBINDIR)/jas
	@- $(RM) -f $(JAS_LINKSRC)

distclean: cleanall

#*---------------------------------------------------------------------*/
#*    distrib                                                          */
#*    -------------------------------------------------------------    */
#*    Prepare Bde for a distribution                                   */
#*---------------------------------------------------------------------*/
distrib:
	@ if [ `pwd` = $(BOOTDIR)/bde ]; then \
             echo "*** ERROR:Illegal dir to make a distrib `pwd`"; \
             exit 1; \
          fi

#*---------------------------------------------------------------------*/
#*    jvm                                                              */
#*---------------------------------------------------------------------*/
jvm: afile.class jfile.class

#*---------------------------------------------------------------------*/
#*    pop                                                              */
#*    -------------------------------------------------------------    */
#*    This entry is used by the bigloo/Makefile (the main Bigloo       */
#*    makefile) to get the list of file that populate a revision.      */
#*---------------------------------------------------------------------*/
.PHONY: pop
pop:
	@ echo $(POPULATION:%=bde/%)
	@ (cd bmem; $(MAKE) pop)

#*---------------------------------------------------------------------*/
#*     .scm --> .o                                                     */
#*---------------------------------------------------------------------*/
.scm.o:
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -c $*.scm -o $*.o

#*---------------------------------------------------------------------*/
#*     .scm --> .class                                                 */
#*---------------------------------------------------------------------*/
.scm.class:
	$(BIGLOO) -jvm $(BFLAGS) $(EFLAGS) -c $*.scm -o $*.class

#*---------------------------------------------------------------------*/
#*    checksum.o                                                       */
#*---------------------------------------------------------------------*/
../comptime/Module/checksum.o: ../comptime/Module/checksum.scm
	$(BIGLOO) $(BFLAGS) $(EFLAGS) -c $*.scm -o $*.o \
          -access engine_param mco/mco.scm

#*---------------------------------------------------------------------*/
#*    jas link files                                                   */
#*---------------------------------------------------------------------*/
jas/%.scm:
	(cd jas; ln -s ../../comptime/Jas/$*.scm .)

#*---------------------------------------------------------------------*/
#*    Jas afile                                                        */
#*---------------------------------------------------------------------*/
$(JAS_AFILE): $(BOOTBINDIR)/afile $(JAS_LINKSRC)
	$(BOOTBINDIR)/afile jas/*.scm > $(JAS_AFILE)

#*---------------------------------------------------------------------*/
#*    bmake dependencies                                               */
#*---------------------------------------------------------------------*/
bmake/template.o: bmake/makefile.library bmake/makefile.appli
