mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 03:53:32 +01:00
431 lines
11 KiB
Makefile
431 lines
11 KiB
Makefile
# generic utility modules
|
|
# (c) 2001 jannet it services
|
|
# contact@jannet.de
|
|
# $Id$
|
|
|
|
# -- 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 \
|
|
prereqclean \
|
|
profclean \
|
|
push \
|
|
rccclean \
|
|
remake \
|
|
runclean \
|
|
textclean \
|
|
timerclean \
|
|
tmpclean \
|
|
uicclean \
|
|
varclean \
|
|
vcdistclean \
|
|
|
|
# -- 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_dir_LIB $(INSTALLED_SHOBJS)
|
|
|
|
installsh: all checkroot $(INSTALL_EXEDIR) $(INSTALLED_EXE_SH)
|
|
|
|
link-in:
|
|
DEVELOPMENT=false INSTALL_LINK=1 make install
|
|
|
|
install-to-system:
|
|
sudo make DEVELOPMENT=false install
|
|
|
|
pckgclean:
|
|
$(RM) -rf *.zip *.tar.gz *.rpm *.deb
|
|
|
|
tmpclean:
|
|
$(RM) -rf *.tmp *.rep
|
|
|
|
coreclean:
|
|
$(RM) -rf core core.* vgcore vgcore.*
|
|
|
|
runclean: coreclean
|
|
|
|
objclean:
|
|
$(RM) -rf *.o *.o *.a *.so *.so.*
|
|
|
|
depclean:
|
|
$(RM) -f .*.dep.mk
|
|
|
|
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 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:
|
|
set -e; for dir in $(PREREQ_DIR); do make -$(MAKEFLAGS) -C $$dir clean; done
|
|
|
|
profclean:
|
|
$(RM) -f *.da *.bb *.bbg *.gcov *.gcda *.gcno
|
|
|
|
timerclean:
|
|
$(RM) -f timers_*.h
|
|
|
|
varclean:
|
|
$(RM) -rf $(CLEAN) $(DISTCLEAN) $(AC_FILES)
|
|
|
|
love:
|
|
@echo "Not war?"
|
|
|
|
cvsupdate update:
|
|
if [ -d "CVS" ]; then cvs update -dP || exit 1; else git pull || exit 1; fi
|
|
|
|
cvsdiff diff:
|
|
if [ -d "CVS" ]; then cvs diff -u || exit 1; else git --no-pager diff || 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-ldflags:
|
|
@echo BUILD_LDFLAGS = $(BUILD_LDFLAGS)
|
|
@echo LOCAL_LDFLAGS = $(LOCAL_LDFLAGS)
|
|
@echo PROJECTLIB_LDFLAGS = $(PROJECTLIB_LDFLAGS)
|
|
@echo PROJECT_LDFLAGS = $(PROJECT_LDFLAGS)
|
|
@echo LPPFLAGS = $(LPPFLAGS)
|
|
@echo LIBFLAGS = $(LIBFLAGS)
|
|
@echo QT_LDFLAGS = $(QT_LDFLAGS)
|
|
|
|
echo-cflags:
|
|
@echo LOCAL_CFLAGS = $(LOCAL_CFLAGS)
|
|
@echo PROJECT_CFLAGS = $(PROJECT_CFLAGS)
|
|
@echo BUILD_CFLAGS = $(BUILD_CFLAGS)
|
|
@echo LOCAL_CPPFLAGS = $(LOCAL_CPPFLAGS)
|
|
@echo PROJECT_CPPFLAGS = $(PROJECT_CPPFLAGS)
|
|
@echo BUILD_CPPFLAGS = $(BUILD_CPPFLAGS)
|
|
|
|
echo-development:
|
|
echo DEVELOPMENT = $(DEVELOPMENT)
|
|
|
|
echo-libpath:
|
|
@echo LD_LIBRARY_PATH = :$(LD_LIBRARY_PATH) | $(beautify_lib_path)
|
|
|
|
lddtree:
|
|
bash $(MOD_SCRIPT_DIR)/linktree.sh $(BUILD_LDFLAGS)
|
|
|
|
echo-path:
|
|
@echo PATH = :$(PATH) | $(beautify_lib_path)
|
|
|
|
echo-modules:
|
|
@echo "USERVER : $(USERVER_DIR)"
|
|
@echo "XCHANGE : $(XCHANGE_DIR)"
|
|
@echo "FEEDFS : $(FEEDFS_DIR)"
|
|
@echo "FEEDFS_UTILS : $(FEEDFS_UTILS_DIR)"
|
|
@echo "FEEDFS_NET : $(FEEDFS_NET_DIR)"
|
|
@echo "DSPCD : $(DSPCD_DIR)"
|
|
@echo "DSPROUT : $(DSPROUT_DIR)"
|
|
@echo "DSPIDER_SHARED : $(DSPIDER_SHARED_DIR)"
|
|
@echo "BTOOLS : $(BTOOLS_DIR)"
|
|
@echo "CCONSOLE : $(CCONSOLE_DIR)"
|
|
@echo "JACKJART : $(JACKJART_DIR)"
|
|
@echo "JACKRTAI : $(JACKRTAI_DIR)"
|
|
@echo "JACKDUMMY : $(JACKDUMMY_DIR)"
|
|
@echo "ALSART : $(ALSART_DIR)"
|
|
@echo "DSPFS : $(DSPFS_DIR)"
|
|
@echo "JW_BUILD : $(JW_BUILD_DIR)"
|
|
@echo "SCOPE_CASMIX : $(SCOPE_CASMIX_DIR)"
|
|
|
|
echo-include:
|
|
@echo "INCLUDE : $(INCLUDE)"
|
|
|
|
echo-mk:
|
|
@echo MAKEFILE_LIST = $(MAKEFILE_LIST)
|
|
|
|
echo-prereq:
|
|
@echo PREREQ_BUILD = $(sort $(PREREQ_BUILD))
|
|
@echo PREREQ_INSTALL = $(sort $(PREREQ_INSTALL))
|
|
@echo PREREQ_RUN = $(sort $(PREREQ_RUN))
|
|
@echo PREREQ = $(sort $(PREREQ))
|
|
|
|
echo-contrib:
|
|
|
|
echo-echo:
|
|
sed '/echo-[a-z]\+:$$/ !d; s/:$$//' $(MODDIR)/make/rules.mk
|
|
|
|
trace-marks:
|
|
for f in $(ALL_CPP); do \
|
|
$(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)
|
|
|
|
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 $@
|
|
|
|
.%.o.dep.mk: %.cpp $(BUILD_HDR)
|
|
$(CC) -M $(BUILD_CPPFLAGS) $(DEPEND_CPPFLAGS) $< -o $@
|
|
|
|
.%.o.dep.mk: %.cc $(BUILD_HDR)
|
|
$(CC) -M $(BUILD_CPPFLAGS) $(DEPEND_CPPFLAGS) $< -o $@
|
|
|
|
.%.o.dep.mk: %.c $(BUILD_HDR)
|
|
$(CC) -M $(BUILD_CFLAGS) $(DEPEND_CPPFLAGS) $< -o $@
|
|
|
|
ifeq ($(LIBTYPE),shared)
|
|
$(SO_PREFIX)%.so: %.o
|
|
$(LD) -shared $(BUILD_LDFLAGS) $(FLAVOUR_PREFIX)$^ -o $@
|
|
else
|
|
$(SO_PREFIX)%.so: %.o
|
|
$(LD) $(BUILD_LDFLAGS) $(FLAVOUR_PREFIX)$^ -o $@
|
|
endif
|
|
|
|
$(VERSION_SCRIPT):
|
|
sh $(MOD_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
|
|
$(LD) -shared -Wl,--whole-archive,-soname=$(notdir $@) $(VERSION_SCRIPT) $(LIB_A) -Wl,--no-whole-archive \
|
|
$(filter-out -l$(LIBNAME),$(BUILD_LDFLAGS)) -o $@
|
|
else
|
|
$(WINRES_RC): $(WINRES_RC_TMPL)
|
|
$(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
|
|
$(LD) -shared -Wl,--whole-archive,--out-implib,$(shell echo $(LIB_A) | \
|
|
$(SED) 's/-static//'),--output-def,$(LIB_DEF) $(VERSION_SCRIPT) $(LIB_A) $(WINRES_O) \
|
|
-Wl,--no-whole-archive $(filter-out -l$(LIBNAME),$(BUILD_LDFLAGS)) -o $@
|
|
$(MSVCPP_IMPLIB): $(LIB_SO)
|
|
$(MS_LD) /machine:i386 /def:$(LIB_DEF)
|
|
endif
|
|
|
|
$(FLAVOUR_PREFIX)%.o: %.cpp
|
|
$(CPP) $(BUILD_CPPFLAGS) -c $< -o $@
|
|
|
|
$(FLAVOUR_PREFIX)%.o: %.cc
|
|
$(CPP) $(BUILD_CPPFLAGS) -c $< -o $@
|
|
|
|
$(FLAVOUR_PREFIX)%.o: %.c
|
|
$(CC) $(BUILD_CFLAGS) -c $< -o $@
|
|
|
|
$(FLAVOUR_PREFIX)%.o: %.S
|
|
$(CC) $(BUILD_CFLAGS) -c $< -o $@
|
|
|
|
$(LIB_A)(%.o): %.o
|
|
$(AR) cr $(LIB_A) $<
|
|
|
|
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)
|
|
$(PLUGIN) $(PLUGIN_LIB): $(OBJ) $(LIB_SO)
|
|
else
|
|
$(EXE) $(EXE_BIN): $(OBJ) $(LIB_A)
|
|
$(PLUGIN) $(PLUGIN_LIB): $(OBJ) $(LIB_A)
|
|
endif
|
|
else
|
|
$(EXE) $(EXE_BIN): $(OBJ)
|
|
$(PLUGIN) $(PLUGIN_LIB): $(OBJ)
|
|
endif
|
|
|
|
$(EXE) $(EXE_BIN):
|
|
$(CPP) $(sort $(OBJ)) $(BUILD_LDFLAGS) -o $@
|
|
|
|
$(PLUGIN) $(PLUGIN_LIB):
|
|
$(CPP) -shared $(sort $(OBJ)) $(BUILD_LDFLAGS) -o $@
|
|
# 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
|
|
@if [ ! $$< -ef $$@ -a "`echo $$< | $(SED) 's/\..*//'`" != local ]; then \
|
|
echo $(BIN_INSTALL) -p -m $($(1)MODE) $$< $$@ ;\
|
|
$(BIN_INSTALL) -p -m $($(1)MODE) $$< $$@ ;\
|
|
$(RM) -f $$(TOPDIR)/dirs-*.done ;\
|
|
fi
|
|
|
|
$$(INSTALL_$(1)DIR):
|
|
$$(INSTALL) -d -o $$($(1)DIROWNER) -g $$($(1)DIRGROUP) -m $$($(1)DIRMODE) $$(INSTALL_$(1)DIR)
|
|
|
|
$$(INSTALL_$(1)DIR)/%: % | $$(INSTALL_$(1)DIR)
|
|
$$(INSTALL) -p -o $$($(1)OWNER) -g $$($(1)GROUP) -m $$($(1)MODE) $$< $$@
|
|
|
|
endef
|
|
#endef
|
|
|
|
$(foreach type, $(INSTALLATION_FILE_TYPES), $(eval $(call std_install_rules,$(type))))
|
|
|
|
$(sort $(LINKS_SO)):
|
|
cd $(dir $@); ln -sf $(shell echo $@ | $(SED) -e 's/\.so$$\|\.so.*$$//').$(SO_SUFFIX) $(notdir $@)
|
|
|
|
ifeq ($(DEVELOPMENT),true)
|
|
install_profile_path:
|
|
else
|
|
install_profile_path: $(INSTALLED_PROFILE_PATH_SCRIPT)
|
|
endif
|
|
|
|
$(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) -p -o $(PROFILEOWNER) -g $(PROFILEGROUP) -m $(PROFILEMODE) path_script.sh $@
|
|
|
|
find:
|
|
@bash $(MOD_SCRIPT_DIR)/list-cvs-files.sh
|
|
|
|
collect:
|
|
bash $(MOD_SCRIPT_DIR)/collect-installed-pkg-changes.sh -t $(TOPDIR)
|
|
|