# generic utility modules # (c) 2001 jannet it services # contact@jannet.de # $Id$ # -- standard targets all: all.done install: all clean: distclean: clean # -- phony targets echo_all: @echo "$(ALL)" checkroot: @if [ "$(CHECK_ROOT)" = true -o "$(CHECK_ROOT)" = TRUE ] ; then \ echo "Error: You can only do this if either" ;\ echo " a) you are user \"root\"" ;\ echo " b) the Makefile variable CHECK_ROOT does not contain \"true\" as value." ;\ fi installexe: all checkroot $(INSTALLED_EXE) installso: all checkroot $(INSTALL_LIBDIR) $(INSTALLED_SHOBJS) installsh: all checkroot $(INSTALL_EXEDIR) $(INSTALLED_EXE_SH) pckgclean: rm -rf *.zip *.tar.gz *.rpm *.deb tmpclean: rm -rf *.tmp *.rep runclean: rm -rf core core.* vgcore vgcore.* objclean: rm -rf *.o *.o *.a *.so *.so.* depclean: rm -f depend.mk *.bak mocclean: rm -rf moc_* uicclean: rm -rf $(UIC_CPP) $(UIC_H) rccclean: rm -rf $(RCC_CPP) textclean: doneclean rm -rf *~ .*~ .*.swp *.rep \#*\# .kdbgrc.* .\#* allclean: rm -rf $(ALL) $(LOCAL_TARGETS) doneclean: rm -rf *.done $(PREREQ_DONE) execlean: allclean objclean runclean textclean rm -rf $(EXE) $(PLUGIN) distclean: clean objclean textclean tmpclean vcdistclean profclean timerclean varclean localclean: $(LOCAL_CLEAN) rm -rf $(CLEAN) libclean: rm -rf $(LIB_A) $(LIB_SO) $(VERSION_SCRIPT) vcdistclean: rm -rf *.plg *.opt *.ncb Debug *.exe dist *.ilk prereqclean: for dir in $(PREREQ_DIR); do make -$(MAKEFLAGS) -C $$dir clean; done profclean: rm -f *.da *.bb *.bbg *.gcov timerclean: rm -f timers_*.h varclean: rm -rf $(CLEAN) $(DISTCLEAN) $(AC_FILES) install_libdir: $(INSTALL_LIBDIR) install_bindir: $(INSTALL_EXEDIR) install_hdrdir: $(INSTALL_HDRDIR) love: @echo "Not war?" cvsupdate: cvs update -dP prepend_header: for f in $(SRC_UNHEADERED); do sh $(TOPDIR)/hdr/prepend_header.sh $$f; done remake: make $(addprefix -W ,$(SRC_FILES)) $(filter-out remake,$(MAKECMDGOALS)) libpath: @echo "export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH)" echo-ldflags: @echo LDFLAGS = $(LDFLAGS) @echo LOCAL_LDFLAGS = $(LOCAL_LDFLAGS) @echo PROJECTLIB_LDFLAGS = $(PROJECTLIB_LDFLAGS) @echo PROJECT_LDFLAGS = $(PROJECT_LDFLAGS) @echo LPPFLAGS = $(LPPFLAGS) echo-cflags: @echo LOCAL_CFLAGS = $(LOCAL_CFLAGS) @echo PROJECT_CFLAGS = $(PROJECT_CFLAGS) @echo CFLAGS = $(CFLAGS) @echo LOCAL_CPPFLAGS = $(LOCAL_CPPFLAGS) @echo PROJECT_CPPFLAGS = $(PROJECT_CPPFLAGS) @echo CPPFLAGS = $(CPPFLAGS) echo-development: echo DEVELOPMENT = $(DEVELOPMENT) echo-libpath: @echo LD_LIBRARY_PATH = $(LD_LIBRARY_PATH) @echo NEW_LD_LIB_PATH = $(NEW_LD_LIB_PATH) trace-marks: for f in $(ALL_CPP); do \ sed 's/^{$$/{_/' $$f > $$f.rep ;\ cp $$f.rep $$f ;\ done # -- special built-in targets .PRECIOUS: $(LOCAL_H) # -- rules all.done: $(PREREQ_DONE) $(LOCAL_TARGETS) $(ALL) touch $@ strip.done: $(EXE_ALL) $(STRIP) $^ touch $@ %.done: make -$(MAKEFLAGS) -C $(shell dirname $@) `basename $@` #lib$(MOD)(%.o).a: %.c $(BUILD_LIBDIR) # $(CC) $(CFLAGS) -c $< -o $*.o # $(AR) r $@ $*.o # $(RM) $*.o ifeq ($(QT_MAJOR_VERSION),3) moc_%.cpp: %.h $(MOC) -o $@ $< else moc_%.cpp: %.h $(MOC) $(filter -D% -I%,$(strip $(CPPFLAGS))) -o $@ $< endif rcc_%.cpp: %.qrc $(RCC) -o $@ $< ifeq ($(QT_MAJOR_VERSION),4) ui_%.h: %.ui else %.h: %.ui endif $(UIC) $< -o $@ ifeq ($(QT_MAJOR_VERSION),4) uic_%.cpp: %.h echo -e "#include <$<>\n" > $@ else uic_%.cpp: %.h %.ui $(UIC) $*.ui -i $< -o $@ endif ifeq ($(LIBTYPE),shared) lib%.so: %.o # $(LIB_SO) $(LD) -shared $(LDFLAGS) $^ -o $@ else lib%.so: %.o $(LD) $(LDFLAGS) $^ -o $@ endif $(VERSION_SCRIPT): $(MOD_SCRIPT_DIR)/make_version_script.sh $(BINARY_VERSION) > $@ ifneq ($(TARGET),mingw) $(LIB_SO): $(VERSION_SCRIPT) $(LIB_A) $(TOPDIR)/dir_build_LIB.done $(LD) -shared -Wl,--whole-archive,-soname=$(notdir $@) $(VERSION_SCRIPT) $(LIB_A) -Wl,--no-whole-archive \ $(filter-out -l$(LIBNAME),$(LDFLAGS)) -o $@ else $(LIB_SO): $(VERSION_SCRIPT) $(LIB_A) $(TOPDIR)/dir_build_LIB.done $(LD) -shared -Wl,--whole-archive,--out-implib,$(shell echo $(LIB_A) | \ sed 's/-static//'),--output-def,$(LIB_DEF) $(VERSION_SCRIPT) $(LIB_A) \ -Wl,--no-whole-archive $(filter-out -l$(LIBNAME),$(LDFLAGS)) -o $@ $(MSVCPP_IMPLIB): $(LIB_SO) $(MS_LD) /machine:i386 /def:$(LIB_DEF) endif #$(TOPDIR)/include: # mkdir -p $@ # #$(TOPDIR)/include/%.h: %.h # mkdir -p $(dir $@); cp $< $@ # #$(TOPDIR)/bin/%.sh: %.sh # mkdir -p $(dir $@); install -m 755 $(@F) $@ %.o: %.cpp $(CPP) $(CPPFLAGS) -c $< %.o: %.c $(CC) $(CFLAGS) -c $< %.o: %.S $(CC) $(CFLAGS) -c $< timers_%.h: %.h $(GENERATE_FUNC_TIMERS) sh $(GENERATE_FUNC_TIMERS) $< $@ ifneq ($(USE_QT),) $(OBJ): $(UIC_H) $(MOC_H) $(UIC_CPP) $(MOC_CPP) $(RCC_CPP) endif ifeq ($(USE_PROJECT_LIB),true) ifeq ($(LIBTYPE),shared) $(EXE) $(EXE_BIN): $(OBJ) $(LIB_SO) else $(EXE) $(EXE_BIN): $(OBJ) $(LIB_A) endif else $(EXE) $(EXE_BIN): $(OBJ) endif $(CPP) $(sort $(OBJ)) $(LDFLAGS) -o $@ #$(BUILD_EXEDIR)/%: % # mkdir -p $(BUILD_EXEDIR) # install -m 755 $< $(BUILD_EXEDIR) ifeq ($(USE_PROJECT_LIB),true) ifeq ($(LIBTYPE),shared) $(PLUGIN) $(PLUGIN_LIB): $(OBJ) $(LIB_SO) else $(PLUGIN) $(PLUGIN_LIB): $(OBJ) $(LIB_A) endif else $(PLUGIN) $(PLUGIN_LIB): $(OBJ) endif $(CPP) -shared $(sort $(OBJ)) $(LDFLAGS) -o $@ mkdir -p $(BUILD_LIBDIR) install -m 755 $@ $(BUILD_LIBDIR) #$(LIBS): # make -$(MAKEFLAGS) -C $(BUILD_LIBDIR) all # #$(INSTALL_LIBDIR): # $(INSTALL) -d -g $(LIBGROUP) -o $(LIBOWNER) -m 755 $@ # #$(INSTALL_HDRDIR): # $(INSTALL) -d -g $(HDRGROUP) -o $(HDROWNER) -m 755 $@ # #$(INSTALL_EXEDIR): # $(INSTALL) -d -g $(EXEGROUP) -o $(EXEOWNER) -m 755 $@ # #$(INSTALL_MKDIR): # $(INSTALL) -d -g $(MAKEGROUP) -o $(MAKEOWNER) -m 755 $@ # #$(WORKING_DIR): # $(INSTALL) -d -g $(DAEMON_RUN_GROUP) -o $(DAEMON_RUN_USER) -m 700 $@ # #$(PREFIX): # $(INSTALL) -d -g $(PREFIXDIRGROUP) -o $(PREFIXDIROWNER) -m $(PREFIXDIRMODE) $@ #$(LOCK_DIR): # $(INSTALL) -d -g $(DAEMON_RUN_GROUP) -o $(DAEMON_RUN_USER) -m 700 $@ #$(INSTALLED_LIB_SO) $(INSTALLED_LIB_A): $(TOPDIR)/libdir.done define check_not_empty check_not_empty_$(1): @if [ -z "$($(1))" ]; then \ echo "$(1) is undefined" >&2 ;\ exit 1 ;\ fi endef $(foreach attr,OWNER GROUP MODE,$(foreach type, $(INSTALLATION_FILE_TYPES), $(eval $(call std_install_rules,$(type)$(attr))))) define std_install_rules #build_dir_$(1): $$(TOPDIR)/dir_build_$(1).done build_$(1): $$(TOPDIR)/dir_build_$(1).done $$(BUILD_$(1)) #install_dir_$(1): $$(TOPDIR)/dir_install_$(1).done install_$(1): $$(TOPDIR)/dir_install_$(1).done $$(INSTALLED_$(1)) $(TOPDIR)/dir_build_$(1).done: mkdir -p $$(BUILD_$(1)DIR) touch $$@ #$$(BUILD_$(1)DIR)/%: % $$(TOPDIR)/dir_build_$(1).done check_not_empty_$(1)MODE $$(BUILD_$(1)DIR)/%: % $$(TOPDIR)/dir_build_$(1).done @if [ ! $$< -ef $$@ ]; then \ echo "+ installing $$< -> $$@" ;\ install -m $($(1)MODE) $$< $$@ ;\ fi $(TOPDIR)/dir_install_$(1).done: @if [ -n "$$(INSTALL_$(1)DIR)" ]; then \ $$(INSTALL) -d -o $$($(1)DIROWNER) -g $$($(1)DIRGROUP) -m $$($(1)DIRMODE) $$(INSTALL_$(1)DIR) ;\ echo + creating directory $$(INSTALL_$(1)DIR) ;\ fi touch $$@ $$(INSTALL_$(1)DIR)/%: % $$(TOPDIR)/dir_install_$(1).done $$(INSTALL) -o $$($(1)OWNER) -g $$($(1)GROUP) -m $$($(1)MODE) $$< $$@ endef $(foreach type, $(INSTALLATION_FILE_TYPES), $(eval $(call std_install_rules,$(type)))) #$(TOPDIR)/libdir.done: # if [ -n "$(INSTALL_LIBDIR)" ]; then \ # $(INSTALL) -d -o $(EXEDIROWNER) -g $(EXEDIRGROUP) -m $(EXEDIRMODE) $(INSTALL_LIBDIR) ;\ # fi # touch $@ #$(TOPDIR)/hdrdir.done: # if [ -n "$(INSTALL_HDRDIR)" ]; then \ # $(INSTALL) -d -o $(HDRDIROWNER) -g $(HDRDIRGROUP) -m $(HDRDIRMODE) $(INSTALL_HDRDIR) ;\ # fi # touch $@ # #$(TOPDIR)/bindir.done: # mkdir -p $(INSTALL_EXEDIR) # touch $@ # #$(TOPDIR)/profiledir.done: # if [ -n "$(PROFILE_DIR)" ]; then \ # $(INSTALL) -d -o $(PROFILEDIROWNER) -g $(PROFILEDIRGROUP) -m $(PROFILEDIRMODE) $(PROFILE_DIR) ;\ # fi # touch $@ $(LINKS_SO): cd $(dir $@); ln -sf $(shell echo $@ | sed -e 's/\.so$$\|\.so.*$$//').$(SO_SUFFIX) $(notdir $@) #$(INSTALLED_LINKS_SO) $(LINKS_SO): # $(LINK_LIB) $(shell echo $@ | sed -e 's/\.so$$\|\.so.*$$//').$(SO_SUFFIX) $@ #$(INSTALL_EXEDIR)/%.bin: %.bin # $(INSTALL) -o $(EXEOWNER) -g $(EXEGROUP) -m $(EXEMODE) $< $@ #$(INSTALLED_EXE): $(EXE) $(TOPDIR)/bindir.done # $(INSTALL) -o $(EXEOWNER) -g $(EXEGROUP) -m $(EXEMODE) $< $@ #$(INSTALL_EXEDIR)/%.sh: %.sh $(TOPDIR)/bindir.done # $(INSTALL) -o $(EXEOWNER) -g $(EXEGROUP) -m $(EXEMODE) $< $@ #$(INSTALL_EXEDIR)/%.bin: %.bin $(TOPDIR)/bindir.done # $(INSTALL) -o $(EXEOWNER) -g $(EXEGROUP) -m $(EXEMODE) $< $@ #$(INSTALL_EXEDIR)/%: % $(TOPDIR)/bindir.done # $(INSTALL) -o $(EXEOWNER) -g $(EXEGROUP) -m $(EXEMODE) $< $@ #$(INSTALL_LIBDIR)/%.so: %.so # $(INSTALL) -o $(LIBOWNER) -g $(LIBGROUP) -m $(LIBMODE) $< $@ #$(INSTALL_LIBDIR)/%.$(SO_SUFFIX): %.$(SO_SUFFIX) # $(INSTALL) -o $(LIBOWNER) -g $(LIBGROUP) -m $(LIBMODE) $< $@ #$(INSTALL_LIBDIR)/%.a: %.a # $(INSTALL) -o $(LIBOWNER) -g $(LIBGROUP) -m $(LIBMODE) $< $@ #$(INSTALL_HDRDIR)/%.h: %.h # $(INSTALL) -o $(HDROWNER) -g $(HDRGROUP) -m $(HDRMODE) $< $@ # #$(INSTALL_MKDIR)/%.mk: %.mk # $(INSTALL) -o $(HDROWNER) -g $(HDRGROUP) -m $(HDRMODE) $< $@ # TODO: make this depend on $(TOPDIR)/docdir.done #$(INSTALL_DOCDIR_DIST)/% $(INSTALL_DOCDIR_DEVEL)/%: % # mkdir -p $(dir $@) # $(INSTALL) -o $(DOCOWNER) -g $(DOCGROUP) -m $(DOCMODE) $< $@ $(INSTALLED_PROFILE_PATH_SCRIPT): $(TOPDIR)/profiledir.done echo "if [ -z \"\$$PATH\" ]; then PATH=$(shell echo $(INSTALL_EXEDIR) | sed -e s%^$(ENV_PREFIX)/%/%)" > path_script.sh echo "else PATH=\$$PATH:$(shell echo $(INSTALL_EXEDIR) | sed -e s%^$(ENV_PREFIX)/%/%); fi" >> path_script.sh $(INSTALL) -o $(PROFILEOWNER) -g $(PROFILEGROUP) -m $(PROFILEMODE) path_script.sh $@ $(INSTALLED_VERSION_FILE): $(INSTALL) -o $(DOCOWNER) -g $(DOCGROUP) -m $(DOCMODE) $(TOPDIR)/VERSION $@ echo $(DIST_VERSION) > $@ $(SYSCONFIG_DIR)/%: % $(INSTALL) -o $(CFGOWNER) -g $(CFGGROUP) -m $(CFGMODE) $< $@ ifeq ($(DEVELOPMENT),true) install_profile_path: else install_profile_path: $(INSTALLED_PROFILE_PATH_SCRIPT) endif #depend.mk: $(SRC_ALL_CPP) # > $@ && makedepend -f depend.mk -- $(CPPFLAGS) $(DEPEND_CPPFLAGS) -- $(SRC_ALL_CPP) 2>&1 | sed '/non-portable whitespace/ d' #depend.mk: $(filter-out %.h, $(SRC_ALL_CPP) $(PREREQ_DONE)) # > $@ && if [ "$(wildcard *.cpp *.c)" ]; then \ # gcc -M $(CPPFLAGS) $(DEPEND_CPPFLAGS) $(filter-out %.h,$(SRC_ALL_CPP)) -o $@; \ # fi .%.o.dep.mk: %.cpp $(BUILD_HDR) $(CC) -M $(CPPFLAGS) $(DEPEND_CPPFLAGS) $< -o $@ .%.o.dep.mk: %.c $(BUILD_HDR) $(CC) -M $(CPPFLAGS) $(DEPEND_CPPFLAGS) $< -o $@