#*=====================================================================*/
#*    serrano/prgm/project/bigloo/bde/bmem/Makefile                    */
#*    -------------------------------------------------------------    */
#*    Author      :  Manuel Serrano                                    */
#*    Creation    :  Sun Apr 20 09:34:24 2003                          */
#*    Last change :  Thu Jun 24 16:46:35 2004 (serrano)                */
#*    Copyright   :  2003-04 Manuel Serrano                            */
#*    -------------------------------------------------------------    */
#*    The makefile to build bmem                                       */
#*=====================================================================*/

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

#*---------------------------------------------------------------------*/
#*    Objects                                                          */
#*---------------------------------------------------------------------*/
SRC		= bmem.scm function.scm tools.scm gc.scm type.scm \
                  html.scm param.scm thread.scm
INCLUDE		= html.sch html-private.sch
OBJECT		= $(SRC:%.scm=bmem/%.o)
LIBSRC		= init.c alloc.c gchook.c list.c symbol.c trace.c thread.c
LIBINCLUDE	= bmem.h esymbol.h
LIBOBJECT	= $(LIBSRC:%.c=lib/%.o)

POPULATION	= $(SRC:%=bmem/%) $(INCLUDE:%=bmem/%) \
                  $(LIBSRC:%=lib/%) $(LIBINCLUDE:%=lib/%) \
                  Makefile etc/bmem.css etc/bmemrun.in

#*---------------------------------------------------------------------*/
#*    Compilers & Flags                                                */
#*---------------------------------------------------------------------*/
BIGLOO		= $(BOOTBINDIR)/bigloo
AFILE		= $(BOOTBINDIR)/afile
BTAGS		= $(BOOTBINDIR)/btags
IFLAGS		= -Ilib -I$(FILDIR) -I$(BOOTLIBDIR) 
CMEMFLAGS	= -DBMEMDEBUG $(CPICFLAGS)
BMEMFLAGS	= $(BFLAGS) -g -I bmem

#*---------------------------------------------------------------------*/
#*    Suffixes                                                         */
#*---------------------------------------------------------------------*/
.SUFFIXES:
.SUFFIXES: .scm .bgl .class .o .c .obj

#*---------------------------------------------------------------------*/
#*    Targets                                                          */
#*---------------------------------------------------------------------*/
.PHONY: bmem lib bmemrun bmem.css css

all: lib bmem bmemrun css

#*--- bmemrun ---------------------------------------------------------*/
bmemrun: $(BOOTBINDIR)/bmemrun
$(BOOTBINDIR)/bmemrun: etc/bmemrun.in
	cat etc/bmemrun.in | \
            sed -e "s|<fildir>|$(FILDIR)|g" > \
            $(BOOTBINDIR)/bmemrun
	chmod a+x $(BOOTBINDIR)/bmemrun

#*--- bmem.css --------------------------------------------------------*/
css: bmem.css
bmem.css: $(BOOTLIBDIR)/bmem/bmem.css
$(BOOTLIBDIR)/bmem/bmem.css: $(BOOTLIBDIR)/bmem
	cp etc/bmem.css $(BOOTLIBDIR)/bmem/bmem.css

#*--- bmem ------------------------------------------------------------*/
bmem: .afile $(BOOTBINDIR)/bmem
$(BOOTBINDIR)/bmem: $(OBJECT)
	$(BIGLOO) $(BMEMFLAGS) -o $(BOOTBINDIR)/bmem $(OBJECT)

#*--- lib -------------------------------------------------------------*/
lib: bmem.$(SHAREDSUFFIX)
bmem.$(SHAREDSUFFIX): $(LIBOBJECT) $(BOOTLIBDIR)/bmem
	(if [ "$(GCCUSTOM)" = "yes" ]; then \
            libbigloogc=$(BOOTLIBDIR)/libbigloogc-$(RELEASE).$(SHAREDSUFFIX); \
          else \
            libbigloogc=-l$(GCLIB); \
          fi; \
         $(LD) $(LIBOBJECT) \
               $(BOOTLIBDIR)/libbigloo_s-$(RELEASE).$(SHAREDSUFFIX) \
               $$libbigloo_gc \
               $(EXTRALIBS) \
               -o $(BOOTLIBDIR)/bmem/bmem.$(SHAREDSUFFIX))
              

#*--- lib/bmem --------------------------------------------------------*/
$(BOOTLIBDIR)/bmem:
	mkdir -p $(BOOTLIBDIR)/bmem

#*---------------------------------------------------------------------*/
#*    Pop                                                              */
#*---------------------------------------------------------------------*/
pop:
	@ echo $(POPULATION:%=bde/bmem/%)

#*---------------------------------------------------------------------*/
#*    install & uninstall                                              */
#*---------------------------------------------------------------------*/
install:
	if [ $(BINDIR) != $(BOOTBINDIR) ]; then \
	  cp $(BOOTBINDIR)/bmem $(DESTDIR)$(BINDIR)/bmem || exit 1; \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/bmem; \
	  cp $(BOOTBINDIR)/bmemrun $(DESTDIR)$(BINDIR)/bmemrun || exit 1; \
          chmod $(BMASK) $(DESTDIR)$(BINDIR)/bmemrun; \
        fi
	if [ $(FILDIR) != $(BOOTLIBDIR) ]; then \
          mkdir -p $(DESTDIR)$(FILDIR)/bmem; \
	  cp $(BOOTLIBDIR)/bmem/bmem.$(SHAREDSUFFIX) \
             $(DESTDIR)$(FILDIR)/bmem/bmem.$(SHAREDSUFFIX) || exit 1; \
        fi
	cp etc/bmem.css $(DESTDIR)$(FILDIR)/bmem/bmem.css
	chmod $(BMASK) $(DESTDIR)$(FILDIR)/bmem/bmem.css

uninstall:
	- $(RM) -f $(DESTDIR)$(BINDIR)/bmem
	- $(RM) -f $(DESTDIR)$(BINDIR)/bmemrun
	- $(RM) -rf $(DESTDIR)$(FILDIR)/bmem

#*---------------------------------------------------------------------*/
#*    Clean                                                            */
#*---------------------------------------------------------------------*/
cleanbmem:
	- $(RM) -f .afile .etags
	- $(RM) -f $(OBJECT)
	- $(RM) -f $(BOOTBINDIR)/bmem

cleanlib:
	- $(RM) -f $(LIBOBJECT)
	- $(RM) -f $(BOOTLIBDIR)/bmem/bmem.$(SHAREDSUFFIX)

clean: cleanbmem cleanlib
	- $(RM) -f $(BOOTBINDIR)/bmemrun
	- $(RM) -rf $(BOOTLIBDIR)/bmem

#*---------------------------------------------------------------------*/
#*    Automatic rule                                                   */
#*---------------------------------------------------------------------*/
lib/%.o: lib/%.c $(LIBINCLUDE:%=lib/%)
	$(CC) $(CPICFLAGS) $(CFLAGS) $(CMEMFLAGS) $(IFLAGS) $< -o $@ -c
   
bmem/%.o: bmem/%.scm $(INCLUDE:%=bmem/%)
	$(BIGLOO) $(BMEMFLAGS) $< -o $@ -c

#*---------------------------------------------------------------------*/
#*    ude                                                              */
#*---------------------------------------------------------------------*/
.PHONY: ude .etags .afile

ude:
	@ $(MAKE) -f Makefile .afile .etags

.afile:
	@ $(AFILE) -o .afile $(SRC:%=bmem/%) 

.etags: 
	@ $(BTAGS) -o .etags $(SRC:%=bmem/%)

dep: 
	@(num=`grep -n '^#bdepend start' Makefile | awk -F: '{ print $$1}' -`;\
          head -`expr $$num - 1` Makefile > /tmp/Makefile.aux)
	@ $(BDEPEND) -search-path . -fno-mco $(SRC:%=bmem/%) >> /tmp/Makefile.aux
	@ mv /tmp/Makefile.aux Makefile

getbinary:
	@ echo "$(BOOTBINDIR)/bmem"

getsources:
	@ echo $(SRC:%=bmem/%)

