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
syntax highlighted by Code2HTML, v. 0.9.1