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