diff --git a/make/defs.mk b/make/defs.mk index 08edbdaa..74a5b884 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -2,6 +2,31 @@ # contact@jannet.de # $Id$ +# ----- standard variables + +PROJECT ?= $(shell (cd $(TOPDIR); basename `pwd`)) +PROJECT_DESCR ?= No description +CUSTOMER ?= No customer +VERSION ?= $(shell sed -e "s/-dev//" $(TOPDIR)/VERSION) +HEX_VERSION = $(shell echo $(VERSION) | \ + sed 's/-dev//; s/pre[^\.]*//; s/[\.-]/ /g' | xargs printf "0x%02x%02x%02x%02x") +DEVELOPMENT ?= $(shell grep -q 'dev' $(TOPDIR)/VERSION && echo true) +USE_PROJECT_LIB ?= true +REENTRANT ?= true +export REENTRANT + +ifeq ($(DEVELOPMENT),true) + include $(TOPDIR)/make/cfg_dev.mk +else + include $(TOPDIR)/make/cfg_dist.mk +endif + +OPTS_PID_FILE ?= $(PIDDIR)/$(PROJECT).pid + +CFLAGS += -DVERSION=$(HEX_VERSION) +CPPFLAGS += -DVERSION=$(HEX_VERSION) +LD_LIB_PATH += $(MODDIR)/lib + ifndef LIBNAME LIBNAME := $(PROJECT) endif @@ -23,11 +48,13 @@ FIND_SUBDIRS = $(filter-out . .. ./nomake ./CVS $(addprefix ./,$(IGNOR PROJECT_CAPNAME = $(shell echo $(PROJECT) | tr [a-z] [A-Z]) -BINARY_VERSION = $(shell echo $(PROJECT)_$(VERSION) | tr [a-z] [A-Z] | sed 's/-[^-]*$$//') +BINARY_VERSION = $(shell echo $(PROJECT)_$(VERSION) | tr [a-z] [A-Z] | sed 's/-[^-]*$$//; s/-/_/g') FTP_PCKG_DIR = /pub/packages JANNET_PROJ_DIR = rsync_ssh://ftp.jannet.de:/home/ftp/dat$(FTP_PCKG_DIR) CONFDIR = $(MODDIR)/../conf +CC = gcc + GCC_VERSION = $(shell gcc -v 2>&1 | grep version | awk '{ print $$3;}') GCC_MAJOR = $(shell gcc -v 2>&1 | grep version | awk '{ split($$3,a,"."); print a[1];}') GCC_MINOR = $(shell gcc -v 2>&1 | grep version | awk '{ split($$3,a,"."); print a[2];}') @@ -55,13 +82,12 @@ SRC_HEADERED += $(shell if [ "$(LOCAL_SRC)" ]; then grep -ic "it servic SRC_UNHEADERED += $(filter-out $(SRC_HEADERED),$(LOCAL_SRC)) LOCAL_C += $(wildcard *.c) LOCAL_CPP += $(wildcard *.cc *.cpp *.C) -ifeq ($(IS_PLUGIN),) LOCAL_H += $(wildcard *.h *.H) -endif SFILES += $(wildcard *.S) UIFILES += $(wildcard *.ui) RCCFILES += $(wildcard *.qrc) SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H) +# why both SRC_H <-> LOCAL_H? SRC_H += $(filter %.h %.H, $(SRC_ALL_CPP)) SRC_C += $(filter %.c, $(SRC_ALL_CPP)) SRC_CPP += $(filter %.cc %.cpp %.C, $(SRC_ALL_CPP)) @@ -103,25 +129,17 @@ TEXTCLEAN += $(wildcard *~ .*~ .*.swp *.rep) INCLUDE += -I. -I$(TOPDIR)/include $(PROJECT_INCLUDE) $(LOCAL_INCLUDE) +UPLOAD_URL_RPM_BIN = rsync_ssh://ftp.jannet.de:/home/ftp/dat/pub/packages/rpm/bin/ +UPLOAD_URL_RPM_SRC = rsync_ssh://ftp.jannet.de:/home/ftp/dat/pub/packages/rpm/src/ + ifneq ($(TOPDIR),$(MODDIR)) -INCLUDE += -I$(MODDIR)/include + INCLUDE += -I$(MODDIR)/include endif -ifndef INSTALL_LIBDIR -INSTALL_LIBDIR = $(PREFIX)/lib -endif - -ifndef INSTALL_HDRDIR -INSTALL_HDRDIR = $(PREFIX)/include -endif - -ifndef INSTALL_MKDIR -INSTALL_MKDIR = $(PREFIX)/make -endif - -ifndef INSTALL_BINDIR -INSTALL_BINDIR = $(PREFIX)/bin -endif +INSTALL_LIBDIR ?= $(PREFIX)/lib +INSTALL_HDRDIR ?= $(PREFIX)/include +INSTALL_MKDIR ?= $(PREFIX)/make +INSTALL_BINDIR ?= $(PREFIX)/bin BUILD_BINDIR = $(TOPDIR)/bin LIBDIR = $(TOPDIR)/lib @@ -154,98 +172,25 @@ INSTALLED_H += $(addprefix $(INSTALL_HDRDIR)/,$(SRC_H)) INSTALLED_PROFILE_PATH_SCRIPT = $(ENV_PREFIX)/etc/profile.d/path_$(PROJECT).sh MEMBERS += $(LIB_A)($(OBJ)) -#PREFIX = ../# CAUTION: This breaks the installation in the project -#MEMWATCH += -DMEMWATCH -DMW_STDIO -#YAMD = yamd- -#EFENCE += -lefence -#CFLAGS += -DNDEBUG -O2 -g $(INCLUDE) $(LOCAL_CFLAGS) #production ifeq ($(DEVELOPMENT),true) -CFLAGS += -D_DEVELOPMENT_ -CPPFLAGS += -D_DEVELOPMENT_ + CFLAGS += -D_DEVELOPMENT_ + CPPFLAGS += -D_DEVELOPMENT_ endif -CFLAGS += $(LOCAL_CFLAGS) $(PROJECT_CFLAGS) $(YLIB_CFLAGS) $(INCLUDE) +CFLAGS += $(LOCAL_CFLAGS) $(PROJECT_CFLAGS) $(YLIB_CFLAGS) $(INCLUDE) CPPFLAGS += $(LOCAL_CPPFLAGS) $(PROJECT_CPPFLAGS) $(YLIB_CPPFLAGS) $(INCLUDE) -LDFFTW += -lrfftw -lfftw -lm -#LDAUDIO = -laudiofile CORE += $(wildcard core core.* vgcore vgcore.*) ifeq ($(USE_QT),true) -USE_X = true - -ifeq ($(QT_VERSION),2) -QT_PREFIX = /usr/lib/qt2 -else - ifeq ($(QT_VERSION),3) - QT_PREFIX = /usr/lib/qt3 - else - ifeq ($(QT_VERSION),4) - QT_PREFIX = $(HOME)/opt/qt4 - INCLUDE += -I$(QT_PREFIX)/include/Qt - endif - endif + include $(MODDIR)/make/qt-defs.mk endif -INCLUDE += -I$(QT_PREFIX)/include - -ifeq ($(ARCH),x86) - LD_LIB_PATH += $(QT_PREFIX)/lib - QT_LDFLAGS += -L$(QT_PREFIX)/lib -else - ifeq ($(QT_VERSION),4) - LD_LIB_PATH += $(QT_PREFIX)/lib - QT_LDFLAGS += -L$(QT_PREFIX)/lib - else - LD_LIB_PATH += $(QT_PREFIX)/lib64 - QT_LDFLAGS += -L$(QT_PREFIX)/lib64 - endif -endif - -MOC = $(QT_PREFIX)/bin/moc -UIC = $(QT_PREFIX)/bin/uic -RCC = $(QT_PREFIX)/bin/rcc - -ifneq ($(wildcard *.h),) -MOC_H_HC = $(shell grep -H Q_OBJECT $(wildcard *.h) | cut -d: -f1 | sort -u) -endif -MOC_H_UI = $(patsubst %.ui,%.h,$(UIFILES)) -MOC_H = $(sort $(MOC_H_HC) $(MOC_H_UI)) -MOC_CPP = $(patsubst %.h,moc_%.cpp, $(MOC_H)) -RCC_CPP = $(patsubst %.qrc,rcc_%.cpp, $(RCCFILES)) -ifeq ($(QT_VERSION),4) -UIC_H = $(patsubst %.ui,ui_%.h, $(UIFILES)) -else -UIC_H = $(patsubst %.ui,%.h, $(UIFILES)) -endif -UIC_CPP = $(patsubst %.ui,uic_%.cpp, $(UIFILES)) - -OBJ += $(patsubst %.cpp,%.o,$(MOC_CPP)) -OBJ += $(patsubst %.cpp,%.o,$(UIC_CPP)) -OBJ += $(patsubst %.cpp,%.o,$(RCC_CPP)) - -ifdef REENTRANT - ifneq ($(QT_VERSION),4) - LPPFLAGS += $(QT_LDFLAGS) -lqt-mt - else - # LPPFLAGS += $(QT_LDFLAGS) -lQtSql -lQtNetwork -lQtOpenGL -lQtDesigner_debug -lQtGui_debug -lQtCore_debug - LPPFLAGS += $(QT_LDFLAGS) -lQtSql -lQtNetwork -lQtOpenGL -lQtDesigner -lQtGui -lQtCore - endif -else - ifneq ($(QT_VERSION),4) - LPPFLAGS += $(QT_LDFLAGS) -lqt - else - # LPPFLAGS += $(QT_LDFLAGS) -lQtSql -lQtNetwork -lQtOpenGL -lQtDesigner_debug -lQtGui_debug -lQtCore_debug - LPPFLAGS += $(QT_LDFLAGS) -lQtSql -lQtNetwork -lQtOpenGL -lQtDesigner -lQtGui -lQtCore - endif -endif - -endif ifeq ($(USE_X),true) ifeq ($(ARCH),x86) - LDFLAGS += -L/usr/X11/lib -lXext -lX11 + LDFLAGS += -L/usr/X11/lib -lXext -lX11 else - LDFLAGS += -L/usr/X11/lib64 -lXext -lX11 + LDFLAGS += -L/usr/X11/lib64 -lXext -lX11 endif endif @@ -268,44 +213,15 @@ else endif ifeq ($(LIBTYPE),shared) -LDFLAGS += -rdynamic -endif - -ifeq ($(USE_PROJECT_LIB),true) -PROJECTLIB_LDFLAGS += -l$(LIBNAME) -endif - -ifeq ($(USE_PROFILER),true) -CFLAGS += -fprofile-arcs -ftest-coverage -CPPFLAGS += -fprofile-arcs -ftest-coverage -LDFLAGS += -fprofile-arcs -ftest-coverage -endif - -ifeq ($(USE_MPATROL),true) - PROJECT_CFLAGS += -include /usr/include/mpatrol.h - #PROJECT_CPPFLAGS += -include /usr/include/mpatrol.h - PROJECT_LDFLAGS += -lmpatrolmt -lbfd -liberty -endif - -ifeq ($(USE_VALGRIND),true) - PROJECT_CFLAGS += -include /usr/include/valgrind/memcheck.h - PROJECT_CPPFLAG += -include /usr/include/valgrind/memcheck.h - # PROJECT_LDFLAGS += + LDFLAGS += -rdynamic endif # TODO: this shoud be only conditional, but breaks, because not all headers # do a conditional include of timer headers, yet GENERATE_FUNC_TIMERS = $(MODDIR)/YStopWatchThreadList/generate_func_timers.sh -ifeq ($(USE_TIMER),true) -CFLAGS += -D_USE_TIMER_ -CPPFLAGS += -D_USE_TIMER_ -endif - -LDFLAGS += -L$(LIBDIR) $(LOCAL_LDFLAGS) $(PROJECTLIB_LDFLAGS) $(PROJECT_LDFLAGS) $(LPPFLAGS) -LDREST += $(LDAUDIO) $(LDFFTW) -ldl -CC = $(YAMD)gcc CPP = sh $(firstword $(wildcard $(MODDIR)/contrib/gfilt/gfilt $(MODDIR)/bin/gfilt)) + ifeq ($(strip $(CPP)),sh) CPP = g++ endif @@ -313,14 +229,14 @@ RM = rm AR = ar ifeq ($(LOG_THREAD_NAMES), true) -CFLAGS += -DSLOG_THREAD_NAMES -CPPFLAGS += -DSLOG_THREAD_NAMES + CFLAGS += -DSLOG_THREAD_NAMES + CPPFLAGS += -DSLOG_THREAD_NAMES endif ifneq ($(wildcard $(MODDIR)/devutil/scripts),) -MOD_SCRIPT_DIR = $(MODDIR)/devutil/scripts + MOD_SCRIPT_DIR = $(MODDIR)/devutil/scripts else -MOD_SCRIPT_DIR = $(MODDIR)/bin + MOD_SCRIPT_DIR = $(MODDIR)/bin endif ifdef INSTALL_LOG @@ -336,6 +252,8 @@ else endif +# ----- function definitions + define make_subdirs set -e; for D in $(SUBDIRS) ; do make -C $$D ; done endef @@ -348,8 +266,11 @@ define install_local_cfg $(INSTALL) -o $(CFGOWNER) -g $(CFGGROUP) -m $(CFGMODE) $< $@ endef -UPLOAD_URL_RPM_BIN=rsync_ssh://ftp.jannet.de:/home/ftp/dat/pub/packages/rpm/bin/ -UPLOAD_URL_RPM_SRC=rsync_ssh://ftp.jannet.de:/home/ftp/dat/pub/packages/rpm/src/ +# ----- local.mk + +ifneq ($(wildcard $(MODDIR)/make/local.mk),) +include $(MODDIR)/make/local.mk +endif ifneq ($(wildcard $(TOPDIR)/make/local.mk),) include $(TOPDIR)/make/local.mk @@ -359,70 +280,105 @@ ifneq ($(wildcard local.mk),) include local.mk endif +# ----- standard features, switched on with USE_XXX = true + +ifeq ($(USE_PROJECT_LIB),true) + PROJECTLIB_LDFLAGS += -l$(LIBNAME) -L$(MODDIR)/lib + LD_LIB_PATH += $(TOPDIR)/lib +endif + +ifeq ($(USE_TIMER),true) + CFLAGS += -D_USE_TIMER_ + CPPFLAGS += -D_USE_TIMER_ +endif + +LDFLAGS += -L$(LIBDIR) $(LOCAL_LDFLAGS) $(PROJECTLIB_LDFLAGS) $(PROJECT_LDFLAGS) $(LPPFLAGS) +ifeq ($(USE_PROFILER),true) + CFLAGS += -fprofile-arcs -ftest-coverage + CPPFLAGS += -fprofile-arcs -ftest-coverage + LDFLAGS += -fprofile-arcs -ftest-coverage +endif + +ifeq ($(USE_YAMD),true) + CC = yamd-gcc +endif + +ifeq ($(USE_MPATROL),true) + CFLAGS += -include /usr/include/mpatrol.h + #CPPFLAGS += -include /usr/include/mpatrol.h + LDFLAGS += -lmpatrolmt -lbfd -liberty +endif + +ifeq ($(USE_VALGRIND),true) + CFLAGS += -include /usr/include/valgrind/memcheck.h + CPPFLAG += -include /usr/include/valgrind/memcheck.h + # LDFLAGS += +endif + ifeq ($(USE_TRACING),true) - PROJECT_CFLAGS += -D_DO_TRACE_ - PROJECT_CPPFLAGS += -D_DO_TRACE_ + CFLAGS += -D_DO_TRACE_ + CPPFLAGS += -D_DO_TRACE_ endif ifeq ($(USE_STACK_PROTECTOR),true) - PROJECT_CFLAGS += -fstack-protector-all -# PROJECT_CFLAGS += -fstack-protector + CFLAGS += -fstack-protector-all +# CFLAGS += -fstack-protector endif ifeq ($(USE_DBMALLOC),true) CONTRIB_LIBS += dbmalloc - PROJECT_CFLAGS += -DDBMALLOC -DEXITFUN=_exit -I$(TOPDIR)/contrib/dbmalloc - PROJECT_CPPFLAGS += -DDBMALLOC -DEXITFUN=_exit -I$(TOPDIR)/contrib/dbmalloc - PROJECT_LDFLAGS += -ldbmalloc + CFLAGS += -DDBMALLOC -DEXITFUN=_exit -I$(TOPDIR)/contrib/dbmalloc + CPPFLAGS += -DDBMALLOC -DEXITFUN=_exit -I$(TOPDIR)/contrib/dbmalloc + LDFLAGS += -ldbmalloc endif ifeq ($(USE_DMALLOC),true) - PROJECT_CFLAGS += -DDMALLOC -DDMALLOC_FUNC_CHECK -DSTORE_SEEN_COUNT - PROJECT_CPPFLAGS += -DDMALLOC -DDMALLOC_FUNC_CHECK -DSTORE_SEEN_COUNT - PROJECT_LDFLAGS += -ldmallocthcxx -ldmallocth + CFLAGS += -DDMALLOC -DDMALLOC_FUNC_CHECK -DSTORE_SEEN_COUNT + CPPFLAGS += -DDMALLOC -DDMALLOC_FUNC_CHECK -DSTORE_SEEN_COUNT + LDFLAGS += -ldmallocthcxx -ldmallocth endif ifeq ($(USE_MEMWATCH),true) - PROJECT_CFLAGS += -DMEMWATCH -DMW_STDIO - PROJECT_CPPFLAGS += -DMEMWATCH -DMW_STDIO + CFLAGS += -DMEMWATCH -DMW_STDIO + CPPFLAGS += -DMEMWATCH -DMW_STDIO endif ifeq ($(USE_EFENCE),true) - PROJECT_CFLAGS += -DEFENCE - PROJECT_CPPFLAGS += -DEFENCE - PROJECT_LDFLAGS += -lefence + CFLAGS += -DEFENCE + CPPFLAGS += -DEFENCE + LDFLAGS += -lefence endif ifeq ($(USE_TRACING),true) - PROJECT_CFLAGS += -D_DO_TRACE_ - PROJECT_CPPFLAGS += -D_DO_TRACE_ + CFLAGS += -D_DO_TRACE_ + CPPFLAGS += -D_DO_TRACE_ endif ifeq ($(USE_ASSERTIONS),false) - PROJECT_CFLAGS += -DNDEBUG - PROJECT_CPPFLAGS += -DNDEBUG + CFLAGS += -DNDEBUG + CPPFLAGS += -DNDEBUG endif ifeq ($(COMPILE_DEBUG_CODE),true) - PROJECT_CFLAGS += -D_DEBUG_ - PROJECT_CPPFLAGS += -D_DEBUG_ + CFLAGS += -D_DEBUG_ + CPPFLAGS += -D_DEBUG_ endif ifeq ($(USE_MPATROL),true) - PROJECT_CFLAGS += -include $(MODDIR)/include/mpatrol.h -# PROJECT_CPPFLAGS += -include $(MODDIR)/include/mpatrol.h - PROJECT_LDFLAGS += -lmpatrolmt -lbfd -liberty + CFLAGS += -include $(MODDIR)/include/mpatrol.h + CPPFLAGS += -include $(MODDIR)/include/mpatrol.h + LDFLAGS += -lmpatrolmt -lbfd -liberty endif ifeq ($(USE_COMPILER_DEBUG_OPTS),true) - PROJECT_CFLAGS += -Wall -g3 - PROJECT_CPPFLAGS += -Wall -g3 - PROJECT_LDFLAGS += -Wall -g3 + CFLAGS += -Wall -g3 + CPPFLAGS += -Wall -g3 + LDFLAGS += -Wall -g3 endif ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true) - PROJECT_CFLAGS += -funroll-loops -O2 - PROJECT_CPPFLAGS += -funroll-loops -O2 + CFLAGS += -funroll-loops -O2 + CPPFLAGS += -funroll-loops -O2 endif #export PROJECT PROJECT_CFLAGS PROJECT_CPPFLAGS PROJECT_LDFLAGS USE_TIMER