#*=====================================================================*/
#*    serrano/prgm/project/skribe/src/bigloo/Makefile                  */
#*    -------------------------------------------------------------    */
#*    Author      :  Manuel Serrano                                    */
#*    Creation    :  Mon Jul 21 18:21:11 2003                          */
#*    Last change :  Fri Jun  4 10:10:50 2004 (serrano)                */
#*    Copyright   :  2003-04 Manuel Serrano                            */
#*    -------------------------------------------------------------    */
#*    The Makefile to build the Bigloo API                             */
#*=====================================================================*/

#*---------------------------------------------------------------------*/
#*    General inclusion                                                */
#*---------------------------------------------------------------------*/
include ../../etc/bigloo/Makefile.skb

#*---------------------------------------------------------------------*/
#*    Compilers and tools                                              */
#*---------------------------------------------------------------------*/
BSKBFLAGS	= -I $(SRCDIR)/bigloo

#*---------------------------------------------------------------------*/
#*    Targets ...                                                      */
#*---------------------------------------------------------------------*/
PROJECT		= skribe
CTARGET		= $(SKRIBEBINDIR)/skribe.bigloo
JVMTARGET	= $(SKRIBEBINDIR)/skribe.zip

PBASE		= bigloo.$(PROJECT)
ODIR		= o
CLASSDIR	= class_s/bigloo/$(PROJECT)
OBJDIR		= obj/bigloo/$(PROJECT)

#*---------------------------------------------------------------------*/
#*    Objects                                                          */
#*---------------------------------------------------------------------*/
SRCDIR		= ..
SKRIBECOMMON	= param api bib index lib sui
SKRIBEBGL	= types parseargs main eval evapi \
                  output resolve verify debug read prog source \
                  lisp xml c asm engine writer color
SKRIBEINCLUDE	= api new debug

MODULES		= $(SKRIBEBGL:%=%.scm) \
                  $(SKRIBECOMMON:%=%.bgl) \
                  configure.bgl
INCLUDES	= $(SKRIBEINCLUDE:%=%.sch)
SOURCES		= $(MODULES) \
                  $(SKRIBECOMMON:%=$(SRCDIR)/common/%.scm) \
                  $(SRCDIR)/common/configure.scm \
		  $(INCLUDES)
OBJECTS		= $(SKRIBECOMMON) $(SKRIBEBGL) configure
COBJECTS	= $(OBJECTS:%=$(ODIR)/%.o)
JVMCLASSES	= $(OBJECTS:%=$(ODIR)/class_s/bigloo/$(PROJECT)/%.class)

#*---------------------------------------------------------------------*/
#*    Population                                                       */
#*---------------------------------------------------------------------*/
POPULATIONBGL	= $(MODULES) $(INCLUDES) Makefile
POPULATIONSCM	= $(SKRIBECOMMON:%=%.scm) configure.scm.in

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

#*---------------------------------------------------------------------*/
#*    All                                                              */
#*---------------------------------------------------------------------*/
.PHONY: c jvm dotnet

all: $(TARGET)

c: $(CTARGET)
jvm: $(JVMTARGET)
dotnet: 
	echo "Not implemented yet"

#*--- c ---------------------------------------------------------------*/
$(CTARGET): $(SKRIBEBINDIR) .afile $(ODIR) $(COBJECTS)
	$(BIGLOO) $(BLINKFLAGS) -o $@ $(COBJECTS)

#*--- jvm -------------------------------------------------------------*/
$(JVMTARGET): $(SKRIBEBINDIR) .afile .jfile $(ODIR) $(JVMCLASSES)
	$(RM) -f $(JVMTARGET)
	(cd $(ODIR)/class_s && \
         $(ZIP) -q $(ZFLAGS) $(JVMTARGET) -r .)

$(SKRIBEBINDIR):
	mkdir -p $(SKRIBEBINDIR)

#*---------------------------------------------------------------------*/
#*    pop                                                              */
#*---------------------------------------------------------------------*/
.PHONY: pop

pop:
	@ echo $(POPULATIONSCM:%=src/common/%)
	@ echo $(POPULATIONBGL:%=src/bigloo/%)

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

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

.afile:
	@ $(AFILE) -o .afile $(MODULES) 

.jfile:
	@ $(JFILE) -I src -o .jfile -pbase $(PBASE) $(MODULES) 

.etags: 
	@ $(BTAGS) -o .etags $(SOURCES)

dep: 
	@(num=`grep -n '^#bdepend start' Makefile | awk -F: '{ print $$1}' -`;\
          head -`expr $$num - 1` Makefile > /tmp/Makefile.aux)
	@ $(BDEPEND) -search-path ../common \
                     -search-path ../bigloo \
                     -strict-obj-dir $(ODIR) \
                     -strict-class-dir $(CLASSDIR) \
                     -fno-mco $(SOURCES) >> /tmp/Makefile.aux
	@ mv /tmp/Makefile.aux Makefile

getbinary:
	@ echo $(PROJECT)

getsources:
	@ echo $(SOURCES)

#*---------------------------------------------------------------------*/
#*    The implicit rules                                               */
#*---------------------------------------------------------------------*/
$(ODIR)/%.o: $(SRCDIR)/bigloo/%.bgl $(SRCDIR)/common/%.scm
	$(BIGLOO) $(BCFLAGS) $(BSKBFLAGS) $(BCOMMONFLAGS) -c \
                  $(SRCDIR)/bigloo/$*.bgl $(SRCDIR)/common/$*.scm -o $@

$(ODIR)/%.o: $(SRCDIR)/bigloo/%.scm
	$(BIGLOO) $(BCFLAGS) $(BSKBFLAGS) $(BCOMMONFLAGS) -c \
                  $(SRCDIR)/bigloo/$*.scm -o $@

$(ODIR)/class_s/bigloo/$(PROJECT)/%.class: \
	$(SRCDIR)/bigloo/%.bgl $(SRCDIR)/common/%.scm
	$(BIGLOO) $(BJVMFLAGS) $(BSKBFLAGS) $(BCOMMONFLAGS) -c \
                  $(SRCDIR)/bigloo/$*.bgl $(SRCDIR)/common/$*.scm -o $@

$(ODIR)/class_s/bigloo/$(PROJECT)/%.class: $(SRCDIR)/bigloo/%.scm
	$(BIGLOO) $(BJVMFLAGS) $(BSKBFLAGS) $(BCOMMONFLAGS) -c \
                  $(SRCDIR)/bigloo/$*.scm -o $@

$(OBJDIR)/%.obj: src/%.scm
	$(BIGLOO) $(BDNFLAGS) $(BCOMMONFLAGS) -c $< -o $@

#*---------------------------------------------------------------------*/
#*    Ad hoc rules                                                     */
#*---------------------------------------------------------------------*/
$(ODIR):
	mkdir -p $(ODIR)

$(CLASSDIR):
	mkdir -p $(CLASSDIR)

$(OBJDIR):
	mkdir -p $(OBJDIR)


#*---------------------------------------------------------------------*/
#*    install/uninstall                                                */
#*---------------------------------------------------------------------*/
.PHONY: install uninstall install-c uninstall-c install-jvm uninstall-jvm

install: 
	$(MAKE) install-$(TARGET)

uninstall: 
	$(MAKE) uninstall-$(TARGET)

install-c: $(DESTDIR)$(INSTALL_BINDIR)
	cp $(CTARGET) $(DESTDIR)$(INSTALL_BINDIR)/skribe.bigloo \
           && chmod $(BMASK) $(DESTDIR)$(INSTALL_BINDIR)/skribe.bigloo
	$(RM) -f $(DESTDIR)$(INSTALL_BINDIR)/skribe
	ln -s skribe.bigloo $(DESTDIR)$(INSTALL_BINDIR)/skribe

uninstall-c: 
	$(RM) -f $(DESTDIR)$(INSTALL_BINDIR)/skribe.bigloo
	$(RM) -f $(DESTDIR)$(INSTALL_BINDIR)/skribe

install-jvm: $(DESTDIR)$(INSTALL_FILDIR)
	cp $(JVMTARGET) $(DESTDIR)$(INSTALL_FILDIR)/skribe.zip
	cp $(FILDIR)/bigloo_s.zip $(DESTDIR)$(INSTALL_FILDIR)

uninstall-jvm: 
	$(RM) -f $(DESTDIR)$(INSTALL_FILDIR)/skribe.zip
	$(RM) -f $(DESTDIR)$(INSTALL_FILDIR)/bigloo_s.zip

$(DESTDIR)$(INSTALL_BINDIR):
	mkdir -p $(DESTDIR)$(INSTALL_BINDIR) && chmod $(BMASK) $(DESTDIR)$(INSTALL_BINDIR)

$(DESTDIR)$(INSTALL_FILDIR):
	mkdir -p $(DESTDIR)$(INSTALL_FILDIR) && chmod $(BMASK) $(DESTDIR)$(INSTALL_FILDIR)

#*---------------------------------------------------------------------*/
#*    Clean                                                            */
#*---------------------------------------------------------------------*/
clean:
	$(RM) -f .afile 
	$(RM) -f .jfile
	$(RM) -rf $(ODIR)
	$(RM) -f $(CTARGET) 
	$(RM) -f $(JVMTARGET) 

#*---------------------------------------------------------------------*/
#*    Cleanall                                                         */
#*---------------------------------------------------------------------*/
cleanall: clean

#*---------------------------------------------------------------------*/
#*    Manual dependency                                                */
#*---------------------------------------------------------------------*/
o/eval.o o/class/bigloo/skribe/eval.class: \
      $(SRCDIR)/bigloo/api.bgl $(SRCDIR)/common/api.scm

#bdepend start (don't edit)
#*---------------------------------------------------------------------*/
#*    Dependencies ...                                                 */
#*---------------------------------------------------------------------*/
o/index.o class_s/bigloo/skribe/index.class: ../bigloo/new.sch 
o/bib.o class_s/bigloo/skribe/bib.class: ../bigloo/new.sch 
o/writer.o class_s/bigloo/skribe/writer.class: ../bigloo/debug.sch 
o/lisp.o class_s/bigloo/skribe/lisp.class: ../bigloo/new.sch 
o/lib.o class_s/bigloo/skribe/lib.class: ../bigloo/debug.sch 
o/resolve.o class_s/bigloo/skribe/resolve.class: ../bigloo/debug.sch 
o/api.o class_s/bigloo/skribe/api.class: ../bigloo/new.sch               \
      ../bigloo/api.sch 
o/eval.o class_s/bigloo/skribe/eval.class: ../bigloo/debug.sch 
o/xml.o class_s/bigloo/skribe/xml.class: ../bigloo/new.sch 
o/parseargs.o class_s/bigloo/skribe/parseargs.class: ../bigloo/debug.sch 
o/prog.o class_s/bigloo/skribe/prog.class: ../bigloo/new.sch 
o/verify.o class_s/bigloo/skribe/verify.class: ../bigloo/debug.sch 
o/sui.o class_s/bigloo/skribe/sui.class: ../bigloo/debug.sch 
o/verify.o class_s/bigloo/skribe/verify.class: ../bigloo/debug.sch 
o/source.o class_s/bigloo/skribe/source.class: ../bigloo/new.sch 
o/bib.o class_s/bigloo/skribe/bib.class: ../bigloo/new.sch 
o/asm.o class_s/bigloo/skribe/asm.class: ../bigloo/new.sch 
o/source.o class_s/bigloo/skribe/source.class: ../bigloo/new.sch 
o/engine.o class_s/bigloo/skribe/engine.class: ../bigloo/debug.sch 
o/engine.o class_s/bigloo/skribe/engine.class: ../bigloo/debug.sch 
o/lib.o class_s/bigloo/skribe/lib.class: ../bigloo/debug.sch 
o/c.o class_s/bigloo/skribe/c.class: ../bigloo/new.sch 
o/writer.o class_s/bigloo/skribe/writer.class: ../bigloo/debug.sch 
o/xml.o class_s/bigloo/skribe/xml.class: ../bigloo/new.sch 
o/main.o class_s/bigloo/skribe/main.class: ../bigloo/debug.sch 
o/output.o class_s/bigloo/skribe/output.class: ../bigloo/debug.sch 
o/prog.o class_s/bigloo/skribe/prog.class: ../bigloo/new.sch 
o/output.o class_s/bigloo/skribe/output.class: ../bigloo/debug.sch 
o/resolve.o class_s/bigloo/skribe/resolve.class: ../bigloo/debug.sch 
o/sui.o class_s/bigloo/skribe/sui.class: ../bigloo/debug.sch 
o/asm.o class_s/bigloo/skribe/asm.class: ../bigloo/new.sch 
o/eval.o class_s/bigloo/skribe/eval.class: ../bigloo/debug.sch 
o/c.o class_s/bigloo/skribe/c.class: ../bigloo/new.sch 
o/index.o class_s/bigloo/skribe/index.class: ../bigloo/new.sch 
o/lisp.o class_s/bigloo/skribe/lisp.class: ../bigloo/new.sch 
o/api.o class_s/bigloo/skribe/api.class: ../bigloo/new.sch               \
      ../bigloo/api.sch 
o/parseargs.o class_s/bigloo/skribe/parseargs.class: ../bigloo/debug.sch 

#bdepend stop