Admin Panel

#### Start of system configuration section. ####

srcdir =	@srcdir@
VPATH =		@srcdir@

CC =		@CC@
CPP =		@CPP@
AS =		@AS@

AR =		@AR@
RANLIB =	@RANLIB@
AWK =		@AWK@

FD2INLINE	= fd2inline
FDPATH		= $(prefix)/os-lib/fd/
CLIBPATH	= $(prefix)/os-include/clib/

#### End system configuration section ####

include ../../sources/amiga/filelist

CURDIR = $(shell pwd)

OPTIONS=-I$(srcdir)/../headers $(CFLAGS)

FDFILES		= $(wildcard $(FDPATH)*.fd)
CLIB		= $(addprefix $(CLIBPATH),$(subst _lib.fd,_protos.h,$(notdir $(fd))))
STUB		= $(subst _lib.fd,,$(notdir $(fd)))

SUBDIRSP=$(patsubst %,%/.created,$(SUBDIRS))

%.o: %.c $(SUBDIRSP)
	$(CC) $(OPTIONS) -c $(filter-out $(SUBDIRSP), $^) -o $@ 2>&1|tee $*.err
	-if test ! -s $*.err; then rm $*.err; fi

%.o: %.S
	$(CC) $(OPTIONS) -c $(filter-out $(SUBDIRS), $^) -o $@ 2>&1|tee $*.err
	-if test ! -s $*.err; then rm $*.err; fi

.PHONY: all clean veryclean splitinline

all: libamiga.a

clean:
	-rm -rf $(SUBDIRS)

veryclean:
	-rm -rf *

$(SUBDIRSP):
	mkdir -p $(@D)
	echo "" >$@

#libamiga.a: $(foreach f,$(SUBDIRS),$(CURDIR)/$(f)) $(OBJECTS) libglue.a ../../sources/amiga/Makefile ../../sources/amiga/filelist
libamiga.a: $(OBJECTS) newlibglue.a ../../sources/amiga/Makefile ../../sources/amiga/filelist
	-rm -f libamiga.a
#	-cp libglue.a libamiga.a
	-cp newlibglue.a libamiga.a
	$(AR) -q libamiga.a $(OBJECTS)
	$(RANLIB) libamiga.a

libglue.a:
	if [ -d tmp ] ; then rm -rf tmp ; else true ; fi
	-mkdir tmp
# Build assembler stubs out of inline headers:
# * First transform all vararg #defines into real functions
# * Compile all functions with 'extern' and '__inline' disabled
# * Split resulting assembler output at function entries
# * This needs old-style inlines!
	-cd tmp; \
	echo "" >dummy.c; \
	for file in /gg/include/inline/*.h; do \
	( $(AWK) 'nf==1 { fn=$$1;nf=0 } \
	        /inline/ { vs="long";rs="return ";nf=1 } \
	        /void/ { vs="void";rs="";nf=1 } \
	        /\.\.\./ \
	        { st=substr($$0,1,index($$0,"tags...")-1); \
	          st=substr(st,index(st," ")); \
	          st2=st;gsub(/\(/,"(long ",st2);gsub(/,/,",long ",st2); \
	          print "#undef" substr(st,1,index(st,"(")-1) "\n" vs st2 "tags,...)"; \
	          print "{ " rs fn substr(st,index(st,"(")) "&tags); }\n" \
	        }' $$file >vararg.c; \
	  ( $(CC) $(CFLAGS) -w -include $$file vararg.c -S -o -; \
	    $(CC) -Dextern= -D__inline= -D_STRSUP_H -include $$file $(CFLAGS) dummy.c -S -o - ) | \
	  $(AWK) '/.even/ { next } /.comm/ { next } \
	        /.globl/ { if(file!="") close(file); file=$$2 ".s"; \
	                   print "\t.even\n" $$0 >file; next; } \
	        { if(file!="") print $$0 >file; }' ); done
	-cd tmp;rm vararg.c dummy.c;$(CC) -c *.s
	-rm libglue.a
	-cd tmp;$(AR) -q ../libglue.a *.o
	-rm -rf tmp

newlibglue.a:	stublibs
	if [ ! -f stamp-libglue ];\
	then\
		pwd;\
		rm -f $@;\
		$(foreach fd, $(FDFILES),\
		echo "adding $(STUB) stubs to $@ ...";\
		$(AR) -q $@ stubs/$(STUB)/*.o;)\
		touch stamp-libglue;\
	else\
		true;\
	fi;

stublibs:	stubsrcs
	cd stubs;\
		$(foreach fd, $(FDFILES),\
			if [ ! -f stamp-$(STUB)-stubs ];\
			then\
				echo "building $(STUB) stubs...";\
				cd  $(STUB);\
				$(CC) $(OPTIONS) -c *.c;\
				cd ..;\
				touch stamp-$(STUB)-stubs;\
			else\
				true;\
			fi;\
		)

stubsrcs:
	if [ ! -d stubs ] ; then mkdir stubs ; else true ; fi
	cd stubs;\
		$(foreach fd, $(FDFILES),\
			if [ ! -f stamp-$(STUB)-srcs ];\
			then\
				echo "creating $(STUB) stubs sources...";\
				rm -rf $(STUB);\
				$(FD2INLINE) --splitstubs $(fd) $(CLIB) -o $(STUB);\
				touch stamp-$(STUB)-srcs;\
			else\
				true;\
			fi;\
		)