include $(CONFIG) # TARGET and PREFIX are passed H=@ #get the files ################################################ HDR=$(shell ls *.h 2> /dev/null) SRC=$(shell if test -e source ; then cat source ; fi ) ifeq "" "$(SRC)" SRC=$(shell ls *.c *.pkg 2> /dev/null) endif CDEPFILES=$(shell ls *.c 2> /dev/null) ifneq ($(MAKECMDGOALS),clean) ifneq "$(CDEPFILES)" "" -include $(CDEPFILES:%.c=.%.d) endif LDEPFILES=$(shell ls *.pkg 2> /dev/null) ifneq "$(LDEPFILES)" "" -include $(LDEPFILES:%.pkg=.%.d) endif RCDEPFILES=$(shell ls *.rc 2> /dev/null) ifneq "$(RCDEPFILES)" "" -include $(RCDEPFILES:%.rc=.%.d) endif endif OBJ=$(strip $(subst .c,.o,$(subst .pkg,.o,$(SRC))) $(RCDEPFILES:%.rc=%.o)) #flags ####################################################### CFLAGS+= -I. -I$(PREFIX)/include INTERFACE=$(shell if test -e interface ; then cat interface ; fi ) ifeq "" "$(INTERFACE)" INTERFACE=$(HDR) endif INSTALLATIONMAP=$(shell if test -e installation ; then cat installation ; fi ) LIBRARY=lib$(TARGET)$(STATICEXTENSION) SHARED=lib$(TARGET)$(SHAREDEXTENSION) SHAREDFLAG=$(shell cat shared 2> /dev/null) ifneq "" "$(SHAREDFLAG)" SHARED_TGT=$(SHARED) else SHARED_TGT= endif #rules #################################################### all: $(LIBRARY) $(SHARED_TGT) $(H)echo -n clean: $(H)rm -f $(CDEPFILES:%.c=.%.d) $(OBJ) \ $(LDEPFILES:%.pkg=.%.d) $(LDEPFILES:%.pkg=%.c) \ $(LDEPFILES:%.pkg=%.h) $(RCDEPFILES:%.rc=.%.d) *.a *.c~ *.so ############################################# $(LIBRARY): $(OBJ) $(INTERFACE) $(H)[ -z "$(OBJ)" ] || echo -n " linking " $(H)[ -z "$(OBJ)" ] || $(AR) -r $(LIBRARY) $(OBJ) 2>/dev/null $(H)[ -z "$(OBJ)" ] || $(RANLIB) $(LIBRARY) $(H)[ -z "$(OBJ)" ] || echo "$(LIBRARY)" $(H)if [ -z "$(INSTALLATIONMAP)" ]; then\ cp $(INTERFACE) $(PREFIX)/include || true;\ else\ for CMD in $(INSTALLATIONMAP); do\ SRC=`echo $$CMD | cut -d = -f 1`;\ TGT=`echo $$CMD | cut -d = -f 2`;\ mkdir -p $(PREFIX)/include/`dirname $$TGT`;\ cp $$SRC $(PREFIX)/include/$$TGT;\ done;\ fi $(H)[ ! -z "$(OBJ)" ] || touch $(LIBRARY) # $(H)[ -z "$(OBJ)" ] || cp $(LIBRARY) $(PREFIX)/lib || true $(H)cp $(LIBRARY) $(PREFIX)/lib || true $(SHARED): $(OBJ) $(H)$(CC) -shared -o $(SHARED) $(OBJ) -L $(PREFIX)/lib $(SHAREDFLAG) $(H)cp $(SHARED) $(PREFIX)/lib .%.d:%.c $(H)echo " building dep for $<" $(H)$(CC) ${CFLAGS} -MM $< > $@; .%.d:%.pkg $(H)echo " building dep for $<" $(H)echo "$(subst .pkg,.o,$<) : $< " > $@ .%.d:%.rc $(H)echo " building dep for $<" $(H)echo "$(subst .rc,.o,$<) : $< " > $@ %.o:%.pkg $(H)echo -n " processing $< -> " $(H)$(PREFIX)/bin/tolua++ -S -H $(subst .pkg,.h,$<) -o $(subst .pkg,.c,$<) $< $(H)echo "$(subst .pkg,.c,$<)" $(H)echo -n " compiling $(subst .pkg,.c,$<) -> " $(H)$(CC) $(CFLAGS) -c $(subst .pkg,.c,$<) || \ (mv -f $(subst .pkg,.c,$<) $(subst .pkg,.c,$<)~;exit 1) $(H)mv -f $(subst .pkg,.c,$<) $(subst .pkg,.c,$<)~ $(H)echo "$@" %.o:%.c $(H)echo -n " compiling $< -> " $(H)$(CC) $(CFLAGS) -c $< $(H)echo "$@" %.o:%.rc $(H)echo -n " compiling $< -> " $(H)$(WINDRES) -i $< -o $@ $(H)echo "$@" #eof