jw-pkg/make/rules.mk

426 lines
12 KiB
Makefile
Raw Normal View History

# generic utility modules
# (c) 2001 jannet it services
# contact@jannet.de
# $Id$
ifndef JW_BUILD_RULES_MK_INCLUDED
JW_BUILD_RULES_MK_INCLUDED = true
# -- standard targets
all:
install: all
clean: tmpclean
distclean: clean
.PHONY: all install clean distclean \
%.this \
allclean \
checkroot \
collect \
coreclean \
depclean \
doneclean \
execlean \
find \
installexe \
installsh \
installso \
ldd \
lddtree \
libclean \
localclean \
love \
mocclean \
objclean \
pckgclean \
depsclean \
profclean \
push \
rccclean \
remake \
runclean \
textclean \
tmpclean \
uicclean \
varclean \
vcdistclean \
# -- phony targets
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_dir_LIB $(INSTALLED_SHOBJS)
installsh: all checkroot $(INSTALL_EXEDIR) $(INSTALLED_EXE_SH)
pckgclean:
$(RM) -rf *.zip *.tar.gz *.rpm *.deb
tmpclean:
$(RM) -rf *.tmp *.rep
2008-12-13 16:31:30 +00:00
coreclean:
$(RM) -rf core core.* vgcore vgcore.*
2008-12-13 16:31:30 +00:00
runclean: coreclean
objclean:
$(RM) -rf *.o *.o *.a *.so *.so.*
mocclean:
$(RM) -rf moc_*
uicclean:
$(RM) -rf $(UIC_CPP) $(UIC_H)
rccclean:
$(RM) -rf $(RCC_CPP)
textclean: doneclean
$(RM) -rf *~ .*~ .*.swp *.rep \#*\# .kdbgrc.* .\#* .exrc
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 vcdistclean profclean 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
depsclean:
set -e; for dir in $(PREREQ_DIR); do make -$(MAKEFLAGS) -C $$dir clean; done
profclean:
$(RM) -f *.da *.bb *.bbg *.gcov *.gcda *.gcno
varclean:
$(RM) -rf $(CLEAN) $(DISTCLEAN) $(AC_FILES)
love:
@echo "Not war?"
2010-06-25 14:58:02 +00:00
cvsupdate update:
if [ -d "CVS" ]; then cvs update -dP || exit 1; else git pull && git submodule update --init --recursive || exit 1; fi
cvsdiff diff:
if [ -d "CVS" ]; then cvs diff -u || exit 1; else git --no-pager diff --relative --no-prefix . || exit 1; fi
push:
if [ ! -d "CVS" ]; then git push || exit 1; fi
prepend_header:
set -e; for f in $(SRC_UNHEADERED); do sh $(TOPDIR)/hdr/prepend_header.sh $$f; done
remake:
set -e; make $(addprefix -W ,$(SRC_FILES)) $(filter-out remake,$(MAKECMDGOALS))
echo-all:
@echo "ALL = $(ALL)"
echo-target:
@echo "TARGET_TUPLE = $(TARGET_TUPLE)"
@echo "TARGET_TUPLE_WORDS = $(TARGET_TUPLE_WORDS)"
@echo "TARGET_TRIPLET = $(TARGET_TRIPLET)"
@echo "TARGET_TRIPLET_WORDS = $(TARGET_TRIPLET_WORDS)"
@echo "TARGET_ARCH = $(TARGET_ARCH)"
@echo "TARGET_VENDOR = $(TARGET_VENDOR)"
@echo "TARGET_OS = $(TARGET_OS)"
@echo "TARGET_ABI = $(TARGET_ABI)"
@echo "TARGET = $(TARGET)"
echo-compilers:
@echo "GCC = $(GCC)"
@echo "GCC_VERSION = $(GCC_VERSION)"
@echo "GCC_VERSION_NUMBERS = $(GCC_VERSION_NUMBERS)"
@echo "GCC_MAJOR = $(GCC_MAJOR)"
@echo "GCC_MINOR = $(GCC_MINOR)"
@echo "GCC_REV = $(GCC_REV)"
@echo
@echo "GNU_LD = $(GNU_LD)"
@echo "GNU_LD_VERSION = $(GNU_LD_VERSION)"
@echo "GNU_LD_VERSION_NUMBERS = $(GNU_LD_VERSION_NUMBERS)"
@echo "GNU_LD_MAJOR = $(GNU_LD_MAJOR)"
@echo "GNU_LD_MINOR = $(GNU_LD_MINOR)"
@echo "GNU_LD_REV = $(GNU_LD_REV)"
echo-ldflags:
@echo "FINAL_LDFLAGS = $(FINAL_LDFLAGS)"
@echo "LOCAL_LDFLAGS = $(LOCAL_LDFLAGS)"
@echo "PROJECTLIB_LDFLAGS = $(PROJECTLIB_LDFLAGS)"
@echo "PROJECT_LDFLAGS = $(PROJECT_LDFLAGS)"
@echo "FINAL_LPPFLAGS = $(FINAL_LPPFLAGS)"
@echo "FINAL_LIBFLAGS = $(FINAL_LIBFLAGS)"
@echo "QT_LDFLAGS = $(QT_LDFLAGS)"
@echo "REAL_LDFLAGS = $(REAL_LDFLAGS)"
echo-cflags:
@echo "LOCAL_CFLAGS = $(LOCAL_CFLAGS)"
@echo "PROJECT_CFLAGS = $(PROJECT_CFLAGS)"
@echo "FINAL_CFLAGS = $(FINAL_CFLAGS)"
@echo "LOCAL_CXXFLAGS = $(LOCAL_CXXFLAGS)"
@echo "PROJECT_CXXFLAGS = $(PROJECT_CXXFLAGS)"
@echo "FINAL_CXXFLAGS = $(FINAL_CXXFLAGS)"
@echo "LOCAL_CPPFLAGS = $(LOCAL_CPPFLAGS)"
@echo "PROJECT_CPPFLAGS = $(PROJECT_CPPFLAGS)"
@echo "FINAL_CPPFLAGS = $(FINAL_CPPFLAGS)"
@echo "REAL_CFLAGS = $(REAL_CFLAGS)"
@echo "REAL_CXXFLAGS = $(REAL_CXXFLAGS)"
echo-development:
echo "DEVELOPMENT = $(DEVELOPMENT)"
echo-libpath:
2007-09-08 16:17:12 +00:00
@echo LD_LIBRARY_PATH = :$(LD_LIBRARY_PATH) | $(beautify_lib_path)
2007-08-23 01:56:49 +00:00
echo-lddtree:
bash $(JWB_SCRIPT_DIR)/linktree.sh $(REAL_LDFLAGS)
echo-path:
@echo PATH = :$(PATH) | $(beautify_lib_path)
2007-12-19 20:22:07 +00:00
echo-include:
@echo "INCLUDE : $(FINAL_INCLUDE)"
2007-08-23 01:56:49 +00:00
2012-04-28 16:00:51 +00:00
echo-mk:
@echo MAKEFILE_LIST = $(MAKEFILE_LIST)
echo-deps:
@echo "PREREQ_BUILD = $(sort $(PREREQ_BUILD))"
@echo "PREREQ_INSTALL = $(sort $(PREREQ_INSTALL))"
@echo "PREREQ_RUN = $(sort $(PREREQ_RUN))"
@echo "PREREQ = $(sort $(PREREQ))"
2012-04-30 07:56:52 +00:00
echo-contrib:
echo-echo:
sed '/echo-[a-z]\+:$$/ !d; s/:$$//' $(JWBDIR)/make/rules.mk
trace-marks:
for f in $(ALL_CPP); do \
2012-02-04 10:59:02 +00:00
$(SED) 's/^{$$/{_/' $$f > $$f.rep ;\
cp $$f.rep $$f ;\
done
remove-trace-marks:
for f in $(ALL_CPP); do \
$(SED) 's/^{_$$/{/' $$f > $$f.rep ;\
cp $$f.rep $$f ;\
done
core-pattern:
echo core.%e.%p | sudo tee /proc/sys/kernel/core_pattern
ifneq ($(TARGET),mingw)
echo-ldd:
ifneq ($(wildcard *.so),)
@echo "======= libraries:"
@for o in *.so; do echo "------- $$o"; ldd $$o; done
endif
ifneq ($(EXE_PATH),)
@echo "======= executables:"
@for o in $(EXE_PATH); do echo "------- $$o"; ldd $$o; done
endif
endif
# -- special built-in targets
.PRECIOUS: $(LOCAL_H)
# -- rules
all.done: $(PREREQ_DONE) $(LOCAL_TARGETS) $(ALL)
touch $@
strip.done: $(EXE_ALL)
$(STRIP) $^
touch $@
2002-07-03 20:33:20 +00:00
ifeq ($(LIBTYPE),shared)
$(SO_PREFIX)%.so: %.o
$(CXX) -shared $(REAL_LDFLAGS) $(FLAVOUR_PREFIX)$^ -o $@
2002-07-03 20:33:20 +00:00
else
$(SO_PREFIX)%.so: %.o
$(CXX) $(REAL_LDFLAGS) $(FLAVOUR_PREFIX)$^ -o $@
2002-07-03 20:33:20 +00:00
endif
$(VERSION_SCRIPT):
sh $(JWB_SCRIPT_DIR)/make-version-script.sh $(BINARY_VERSION) > $@.tmp
mv $@.tmp $@
ifneq ($(TARGET),mingw)
$(LIB_SO): $(VERSION_SCRIPT) $(LIB_A) $(TOPDIR)/dir_build_LIB.done
$(CXX) -shared -Wl,--whole-archive,-soname=$(notdir $@) $(VERSION_SCRIPT) $(LIB_A) -Wl,--no-whole-archive \
$(filter-out -l$(LIBNAME),$(REAL_LDFLAGS)) -o $@
else
$(WINRES_RC): $(WINRES_RC_TMPL)
2012-02-04 11:06:22 +00:00
$(CAT) $< | $(SED) " \
s/__VER_FILEVERSION__/$(MAJOR_VERSION),$(MINOR_VERSION),$(RELEASE_VERSION),$(BUILD_NUMBER)/; \
s/__VER_FILEVERSION_STR__/$(MAJOR_VERSION).$(MINOR_VERSION).$(RELEASE_VERSION).$(BUILD_NUMBER)/; \
s/__VER_DESCRIPTION__/\"$(PROJECT_DESCR)\"/; \
s/__VER_COMPANY_NAME__/\"$(CUSTOMER)\"/; \
" > $@.tmp
mv $@.tmp $@
$(WINRES_O): $(WINRES_RC)
$(WINDRES) $^ -o $@
$(LIB_SO): $(VERSION_SCRIPT) $(WINRES_O) $(LIB_A) $(TOPDIR)/dir_build_LIB.done
$(CXX) -shared -Wl,--whole-archive,--out-implib,$(shell echo $(LIB_A) | \
2012-02-04 10:59:02 +00:00
$(SED) 's/-static//'),--output-def,$(LIB_DEF) $(VERSION_SCRIPT) $(LIB_A) $(WINRES_O) \
-Wl,--no-whole-archive $(filter-out -l$(LIBNAME),$(REAL_LDFLAGS)) -o $@
$(MSVCPP_IMPLIB): $(LIB_SO)
$(MS_LD) /machine:i386 /def:$(LIB_DEF)
endif
$(FLAVOUR_PREFIX)%.o: %.cpp
$(CXX) $(REAL_CXXFLAGS) $(REAL_CPPFLAGS) -c $< -o $@
$(FLAVOUR_PREFIX)%.o: %.cc
$(CXX) $(REAL_CXXFLAGS) $(REAL_CPPFLAGS) -c $< -o $@
$(FLAVOUR_PREFIX)%.o: %.c
$(CC) $(REAL_CFLAGS) $(REAL_CPPFLAGS) -c $< -o $@
$(FLAVOUR_PREFIX)%.o: %.S
$(CC) $(REAL_CFLAGS) $(REAL_CPPFLAGS) -c $< -o $@
$(FLAVOUR_PREFIX)%.o: %.sx
$(CC) $(REAL_CFLAGS) $(REAL_CPPFLAGS) -c $< -o $@
$(LIB_A)(%.o): %.o
$(AR) crU $(LIB_A) $<
ifneq ($(USE_QT),)
$(BUILD_OBJ): $(UIC_H) $(MOC_H) $(UIC_CPP) $(MOC_CPP) $(RCC_CPP)
endif
ifeq ($(USE_PROJECT_LIB),true)
ifeq ($(LIBTYPE),shared)
$(EXE) $(EXE_BIN): $(BUILD_OBJ) $(LD_SCRIPTS) $(LIB_SO)
$(PLUGIN) $(PLUGIN_LIB): $(BUILD_OBJ) $(LD_SCRIPTS) $(LIB_SO)
else
$(EXE) $(EXE_BIN): $(BUILD_OBJ) $(LD_SCRIPTS) $(LIB_A)
$(PLUGIN) $(PLUGIN_LIB): $(BUILD_OBJ) $(LD_SCRIPTS) $(LIB_A)
endif
else
$(EXE) $(EXE_BIN): $(BUILD_OBJ) $(LD_SCRIPTS)
$(PLUGIN) $(PLUGIN_LIB): $(BUILD_OBJ) $(LD_SCRIPTS)
endif
$(EXE) $(EXE_BIN):
$(CXX) $(sort $(BUILD_OBJ)) $(REAL_LDFLAGS) -o $@
2007-07-13 10:49:58 +00:00
$(PLUGIN) $(PLUGIN_LIB):
$(CXX) -shared $(sort $(BUILD_OBJ)) $(REAL_LDFLAGS) -o $@
2007-08-22 12:20:16 +00:00
# mkdir -p $(BUILD_LIBDIR)
# $(BIN_INSTALL) -m 755 $@ $(BUILD_LIBDIR)
define check_not_empty
check_not_empty_$(1):
@if [ -z "$($(1))" ]; then \
echo "$(1) is undefined" >&2 ;\
exit 1 ;\
fi
endef
# --- special installation rules, that the general rules farther down
# below don't catch for whatever reason >
$(INSTALL_INITDIR)/%: %.init | provide_dir_INIT
$(INSTALL) -p -o $(INITOWNER) -g $(INITGROUP) -m $(INITMODE) $< $@
$(INSTALL_SYSTEMDDIR)/%.service: %.service | provide_dir_SYSTEMD
$(INSTALL) -p -o $(SYSTEMDOWNER) -g $(SYSTEMDGROUP) -m $(SYSTEMDMODE) $< $@
$(INSTALL_LOGROTDIR)/%: %.logrotate | provide_dir_LOGROT
$(INSTALL) -p -o $(LOGROTOWNER) -g $(LOGROTGROUP) -m $(LOGROTMODE) $< $@
$(INSTALL_APACHE_CONFDIR)/%.conf: %.apache-conf | provide_dir_APACHE_CONF
$(INSTALL) -p -o $(APACHE_CONFOWNER) -g $(APACHE_CONFGROUP) -m $(APACHE_CONFMODE) $< $@
$(INSTALL_RSYSLOGDIR)/%.conf: %.rsyslog | provide_dir_RSYSLOG
$(INSTALL) -p -o $(RSYSLOGOWNER) -g $(RSYSLOGGROUP) -m $(RSYSLOGMODE) $< $@
$(INSTALL_RSYSLOGDIR)/%.bprof: rsyslog-%.bprof | provide_dir_RSYSLOG
$(INSTALL) -p -o $(RSYSLOGOWNER) -g $(RSYSLOGGROUP) -m $(RSYSLOGMODE) $< $@
$(INSTALL_SYSCFGDIR)/%: %.sysconf | provide_dir_SYSCFG
$(INSTALL) -p -o $(INITOWNER) -g $(INITGROUP) -m $(INITMODE) $< $@
# --- special installation rules <
# saving performance, so don't expand this always
#ifeq ($(MAKE_CMDGOAL),install)
define std_install_rules
build_$(1): $$(TOPDIR)/dir_build_$(1).done $$(BUILD_$(1))
install_dir_$(1): | $$(INSTALL_$(1)DIR)
provide_dir_$(1): | $$(TOPDIR)/dir_install_$(1).done
install_$(1): install_dir_$(1) $$(INSTALLED_$(1))
install_files_$(1): provide_dir_$(1) $$(INSTALLED_$(1))
$$(TOPDIR)/dir_build_$(1).done:
mkdir -p $$(BUILD_$(1)DIR)
touch $$@
$$(TOPDIR)/dir_install_$(1).done:
mkdir -p $$(INSTALL_$(1)DIR)
touch $$@
$$(BUILD_$(1)DIR)/%: % | $$(TOPDIR)/dir_build_$(1).done
2012-02-04 10:59:02 +00:00
@if [ ! $$< -ef $$@ -a "`echo $$< | $(SED) 's/\..*//'`" != local ]; then \
echo $(BIN_INSTALL) -D -p -m $($(1)MODE) $$< $$@ ;\
$(BIN_INSTALL) -D -p -m $($(1)MODE) $$< $$@ ;\
$(RM) -f $$(TOPDIR)/dirs-*.done ;\
fi
$$(INSTALL_$(1)DIR):
$$(INSTALL) -D -d -o $$($(1)DIROWNER) -g $$($(1)DIRGROUP) -m $$($(1)DIRMODE) $$(INSTALL_$(1)DIR)
$$(INSTALL_$(1)DIR)/%: % | $$(INSTALL_$(1)DIR)
$$(INSTALL) -D -p -o $$($(1)OWNER) -g $$($(1)GROUP) -m $$($(1)MODE) $$< $$@
2002-07-10 12:24:05 +00:00
endef
#endef
$(foreach type, $(INSTALLATION_FILE_TYPES), $(eval $(call std_install_rules,$(type))))
$(sort $(LINKS_SO)):
2012-02-04 10:59:02 +00:00
cd $(dir $@); ln -sf $(shell echo $@ | $(SED) -e 's/\.so$$\|\.so.*$$//').$(SO_SUFFIX) $(notdir $@)
2007-08-22 12:20:16 +00:00
ifeq ($(DEVELOPMENT),true)
install_profile_path:
else
install_profile_path: $(INSTALLED_PROFILE_PATH_SCRIPT)
endif
$(INSTALLED_PROFILE_PATH_SCRIPT): $(TOPDIR)/profiledir.done
2012-02-04 10:59:02 +00:00
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) -p -o $(PROFILEOWNER) -g $(PROFILEGROUP) -m $(PROFILEMODE) path_script.sh $@
2002-07-10 12:24:05 +00:00
find:
@bash $(JWB_SCRIPT_DIR)/scm.sh ls-files
collect:
bash $(JWB_SCRIPT_DIR)/collect-installed-pkg-changes.sh -t $(TOPDIR)
endif # ifndef JW_BUILD_RULES_MK_INCLUDED