jw-pkg/make/rules.mk

419 lines
10 KiB
Makefile
Raw Normal View History

# generic utility modules
# (c) 2001 jannet it services
# contact@jannet.de
# $Id$
# -- standard targets
all: all.done
install: all
clean:
distclean: clean
# -- phony targets
2002-01-29 22:31:09 +00:00
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)
2006-03-07 21:05:16 +00:00
moc_%.cpp: %.h
$(MOC) -o $@ $<
else
moc_%.cpp: %.h
$(MOC) $(filter -D% -I%,$(strip $(CPPFLAGS))) -o $@ $<
2006-03-07 21:05:16 +00:00
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
2002-07-03 20:33:20 +00:00
ifeq ($(LIBTYPE),shared)
lib%.so: %.o # $(LIB_SO)
$(LD) -shared $(LDFLAGS) $^ -o $@
2002-07-03 20:33:20 +00:00
else
lib%.so: %.o
$(LD) $(LDFLAGS) $^ -o $@
2002-07-03 20:33:20 +00:00
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 \
2005-04-02 20:07:47 +00:00
$(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 $@
2007-07-13 10:49:58 +00:00
#$(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) $$< $$@
2002-07-10 12:24:05 +00:00
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 $@
2002-07-10 12:24:05 +00:00
$(INSTALLED_VERSION_FILE):
$(INSTALL) -o $(DOCOWNER) -g $(DOCGROUP) -m $(DOCMODE) $(TOPDIR)/VERSION $@
echo $(DIST_VERSION) > $@
$(SYSCONFIG_DIR)/%: %
$(INSTALL) -o $(CFGOWNER) -g $(CFGGROUP) -m $(CFGMODE) $< $@
2002-07-10 12:24:05 +00:00
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 $@