# Makefile
# (c) Alexandre Frey 1996
##############################################################################
# public variables
##############################################################################
BIGLOO = bigloo
CC = gcc

CFLAGS = -Wall -g -DDEBUG
BIGLOOFLAGS = -v 

# version of bigloo you use. Possible choices are : 1.7
BIGLOOVERSION = 1.7

# the directory where libbigloo.a is found
BIGLOOLIB =  /usr/local/lib/bigloo/${BIGLOOVERSION}

# the directory where bigloo.h is found
BIGLOOINCLUDE = ${BIGLOOLIB}

# the list of libraries against which the units are automatically linked 
# (with use of static symbols)
# Actually it will be backquoted and evaluated by bigloo
# You should at least provide the bigloo library itself since
# the GC code can't be dynamically loaded
# This list will only work if you have gcc. Else you should fill it by hand
DEFAULT_LIBRARIES = \
		 ,(string-append *lib-dir* \"/libbigloo.a\") 	\
		 \"`gcc -print-file-name=libm.a`\"		\
		 \"`gcc -print-file-name=libgcc.a`\"		\
	 	 \"`gcc -print-file-name=libc.a`\"

# where you want to install libdload.a 
LIBDIR=${HOME}/lib
# where you want to install dload.bgl (the module interface of dload)
INTERFACE_DIR=${HOME}/lib
# where you want to install dloadmap
BINDIR=${HOME}/bin/`uname -s`

# if bfd (version >= 2.6) is installed on your system, comment this line
BFD = bfd-2.6
# where you want to install BFD stuff 
BFD_PREFIX = ${HOME}

###############################################################################
SHELL=/bin/sh

CINCLUDE = -I${BIGLOOINCLUDE}

all : 
	if [ ! -z "${BFD}" ]; then					\
	${MAKE} BFDLIB="${BFD}/bfd/libbfd.a ${BFD}/libiberty/libiberty.a" \
		CINCLUDE="${CINCLUDE} -I${BFD}/bfd -I${BFD}/include"	\
		${BFD}/bfd/Makefile					\
		${BFD}/libiberty/Makefile				\
		${BFD}/libiberty/libiberty.a				\
		${BFD}/bfd/libbfd.a					\
		rec_all;						\
	else								\
	${MAKE} BFDLIB="-lbfd -liberty" rec_all;			\
	fi

rec_all : libdload.a dloadmap

${BFD}/bfd/Makefile :	
	@echo Configuring ${BFD}/bfd ...
	cd ${BFD}/bfd; ../configure --prefix=${BFD_PREFIX}

${BFD}/libiberty/Makefile :
	@echo Configuring ${BFD}/libiberty
	cd ${BFD}/libiberty; ../configure --prefix=${BFD_PREFIX}

${BFD}/bfd/libbfd.a :
	@echo Compiling libbfd.a ...
	cd ${BFD}/bfd; ${MAKE} libbfd.a

${BFD}/libiberty/libiberty.a :
	@echo Compiling libiberty.a ...
	cd ${BFD}/libiberty; ${MAKE} libiberty.a

ACCESS = -access ident ident.scm -access dload dload.bgl
RM = rm -f

.SUFFIXES : .scm .inc 

.c.o :
	$(CC) $(CFLAGS) $(CINCLUDE) -c $*.c

.scm.o :
	$(BIGLOO) $(ACCESS) $(BIGLOOFLAGS) -A $*.scm

dloadmap : dloadmap.o
	${CC} -o $@ $@.o ${BFDLIB}
	strip $@

libdload.a : alloc.o dlink.o _dload.o dload.o ident.o
	ar r $@ $?	
	ranlib $@


alloc.o : alloc.c alloc.h 
dlink.o: dlink.c dlink.h alloc.h ${BFDINCLUDE}
_dload.o: _dload.c dlink.h ${BFDINCLUDE}
dload.o:dload.scm dloadlib.inc

dloadlib.inc:
	echo ";;; Automatically generated. Don't touch" > $@
	${BIGLOO} -eval \
	"(write \`(define *default-lib* '(${DEFAULT_LIBRARIES}))) \
	 (newline)(exit 0)"\
	 >> $@
clean :
	$(RM) *.o *~ *.map *.a core hux dloadmap dloadlib.inc TAGS

distclean : clean
	if [ ! -z "${BFD}" ]; then					\
		( cd ${BFD}/libiberty; ${MAKE} distclean || true );	\
		( cd ${BFD}/bfd; ${MAKE} distclean || true );		\
		( cd ${BFD}; ${MAKE} distclean || true );		\
	fi

DISTFILES = *.scm *.bgl *.c *.h *.patch BUGS CREDITS README \
		Makefile ChangeLog

dist :
	HERE=`basename \`pwd\``; \
	DIST_FILES=`for f in ${DISTFILES}; do echo $$HERE/$$f; done;`; \
	cd ..; \
	tar -cf - $$DIST_FILES |gzip -c > $$HERE/$$HERE.tar.gz

bfddist : distclean
	HERE=`basename \`pwd\``;\
	BFD_DIR=`basename bfd*/`;\
	cd ..;\
	tar -cf - $$HERE/$$BFD_DIR |gzip -c >$$HERE/$$BFD_DIR.tar.gz

install : all
	cp libdload.a ${LIBDIR} && chmod 644 ${LIBDIR}/libdload.a
	cp dload.bgl ${INTERFACE_DIR} && chmod 644 ${INTERFACE_DIR}/dload.bgl
	cp dloadmap ${BINDIR} && chmod 755 ${BINDIR}/dloadmap
	if [ ! -z "${BFD}" ]; then			\
		cd ${BFD}/bfd; make install;		\
		cd ${BFD}/libiberty; make install;	\
	fi

tags : 
	etags *.[ch] *.scm

test : hux hux.map

hux : all hux.o
	if [ ! -z "${BFD}" ]; then					\
	${MAKE} BFDLIB="${BFD}/bfd/libbfd.a ${BFD}/libiberty/libiberty.a" \
		CINCLUDE="${CINCLUDE} -I${BFD}/bfd -I${BFD}/include"	\
		rec_hux;						\
	else ${MAKE} rec_hux; fi

rec_hux :
	bigloo $(BIGLOOFLAGS) -o hux hux.o \
	  -ld "./libdload.a  ${BFDLIB} -static"

hux.o : hux.scm dload.bgl

hux.map : all hux
	./dloadmap <hux >hux.map

#EOF




