diff --git a/make/defs.mk b/make/defs.mk new file mode 100644 index 00000000..6fb52784 --- /dev/null +++ b/make/defs.mk @@ -0,0 +1,244 @@ + +# (c) 2001 jannet it services +# contact@jannet.de +# $Id$ + +ifndef PROJECT + PROJECT := ytools +endif + REQUIRED = inst/pre \ + make \ + doc \ + debug misc slog platform \ + devutil \ + hash \ + hexdump \ + lbuffer \ + debug \ + cfgfile gtopts \ + lock sigsync shmem \ + usrv uclnt statecheck msgfmt \ + YMisc YError \ + YThread YMutex YEvent YCbContr contr/Y2WayMap \ + YTimeB YStopWatch YStopWatchList YStopWatchQueue YStopWatchThreadList \ + lib include bin \ + inst/post + +ifndef LIBNAME + LIBNAME := $(PROJECT) +endif + +ifndef TOPDIR + TOPDIR := $(MODDIR) +endif + +VERSION = $(shell cat $(TOPDIR)/VERSION) +WINVERSION = $(shell cat $(TOPDIR)/VERSION | sed -e "s/\./_/g") +LOCAL_VERSION = $(shell cat $(TOPDIR)/VERSION) +LOCAL_WINVERSION = $(shell cat $(TOPDIR)/VERSION | sed -e "s/\./_/g") +DIST_VERSION = $(shell echo $(VERSION) | sed -e "s/-dev//") +DIST_WINVERSION = $(shell echo $(WINVERSION) | sed -e "s/-dev//") +LOCAL_DIST_VERSION = $(shell echo $(LOCAL_VERSION) | sed -e "s/-dev//") +LOCAL_DIST_WINVERSION = $(shell echo $(LOCAL_WINVERSION) | sed -e "s/-dev//") +DEVELOPMENT = $(shell cat $(TOPDIR)/VERSION | grep 'dev' >/dev/null && echo true) +PROJECT_STEM = $(PROJECT)-$(DIST_VERSION) + +FTP_PCKG_DIR = /pub/packages +JANNET_PROJ_DIR = rsync_ssh://ftp.jannet.de:/usr/local/ftp$(FTP_PCKG_DIR) + +ifeq ($(DEVELOPMENT),true) + include $(TOPDIR)/make/cfg_dev.mk +else + include $(TOPDIR)/make/cfg_dist.mk +endif + +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];}') +GCC_REV = $(shell gcc -v 2>&1 | grep version | awk '{ split($$3,a,"."); print a[3];}') + +#ifndef $(TOPDIR) +# TOPDIR := $(MODDIR) +#endif + +CPP = g++ + +EXE_SH = $(wildcard *.sh) +MKFILES = $(wildcard *.mk) + +CFILES = $(wildcard *.c) +CPPFILES = $(wildcard *.cc *.cpp) +CALLSRC = $(CFILES) $(CPPFILES) +OBJ = $(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(CALLSRC)))) +SHOBJS = $(patsubst %.cpp,%.o,$(patsubst %.cc,lib%.so,$(patsubst %.c,lib%.so,$(CALLSRC)))) +SHSCRIPTS = $(patsubst %.sh.tmpl,%.sh,$(wildcard *.sh.tmpl)) +SCRIPTS = $(patsubst %.tmpl,%,$(wildcard *.tmpl)) +LOCAL_HDR = $(patsubst %.h,$(TOPDIR)/include/%.h,$(wildcard *.h)) +LOCAL_EXE_SH = $(patsubst %.sh,$(TOPDIR)/bin/%.sh,$(wildcard *.sh)) + +LOCAL_H = $(wildcard *.h) +LOCAL_C = $(wildcard *.c) +LOCAL_CPP = $(wildcard *.c *.cpp *.cc *.C) +LOCAL_CSRC = $(LOCAL_H) $(LOCAL_C) $(LOCAL_CPP) + +PREREQ_DIR = $(addprefix $(MODDIR)/,$(LOCAL_PREREQ)) +PREREQ_DONE = $(addsuffix /all.done,$(PREREQ_DIR)) +PREREQ_H = $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.h)) +PREREQ_C = $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) +PREREQ_CPP = $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) \ + $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.cpp)) +PREREQ_CSRC = $(PREREQ_H) $(PREREQ_C) $(PREREQ_CPP) + +CONTRIB_MOD = $(addprefix contrib/,$(CONTRIB_LIBS)) +REQUIRED := $(CONTRIB_MOD) $(REQUIRED) + +REQUIRED_DIR = $(patsubst %,$(MODDIR)/%,$(REQUIRED)) +REQUIRED_DONE = $(patsubst %,%/all.done,$(REQUIRED_DIR)) +REQUIRED_H = $(foreach dir,$(REQUIRED_DIR),$(wildcard $(dir)/*.h)) +REQUIRED_C = $(foreach dir,$(REQUIRED_DIR),$(wildcard $(dir)/*.c)) +REQUIRED_CPP = $(foreach dir,$(REQUIRED_DIR),$(wildcard $(dir)/*.cpp)) \ + $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.cpp)) +REQUIRED_CSRC = $(REQUIRED_H) $(REQUIRED_C) $(REQUIRED_CPP) + +ALL_H = $(LOCAL_H) $(PREREQ_H) +ALL_C = $(LOCAL_C) $(PREREQ_CPP) +ALL_CPP = $(LOCAL_CPP) $(PREREQ_CPP) + +ALL_CSRC = $(LOCAL_CSRC) $(PREREQ_CSRC) + +TEXTCLEAN = $(wildcard *~ .*~ .*.swp *.rep) +INCLUDE = -I. -I$(TOPDIR)/include -I$(MODDIR)/include $(PROJECT_INCLUDE) $(LOCAL_INCLUDE) +INSTALL_LIBDIR = $(PREFIX)/lib +INSTALL_HDRDIR = $(PREFIX)/include +INSTALL_MKDIR = $(PREFIX)/make +INSTALL_BINDIR = $(PREFIX)/bin +BUILD_BINDIR = $(TOPDIR)/bin +INSTALL_DOCDIR_DIST = $(DOC_PREFIX) +INSTALL_DOCDIR_DEVEL = $(DOC_PREFIX)-devel +DOCS = $(wildcard README CHANGES TODO LICENSE AUTHORS CREDITS *.pdf *.txt *.html) +DOCSUBDIRS = $(wildcard html tex info examples src) + +INSTALLED_VERSION_FILE = $(PREFIX)/VERSION + +INSTALLED_DOCS_DIST = $(addprefix $(INSTALL_DOCDIR_DIST)/,$(DOCS)) +INSTALLED_DOCS_DEVEL = $(addprefix $(INSTALL_DOCDIR_DEVEL)/,$(DOCS)) + +SO_SUFFIX = so.$(shell echo $(VERSION) | cut -d- -f1) +LIB_A = $(LIBDIR)/lib$(LIBNAME).a +LIB_SO = $(LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX) +INSTALLED_LIB_SO = $(INSTALL_LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX) +INSTALLED_LINKS_SO = $(shell echo $(INSTALLED_LIB_SO) | sed -e "s/\.so\..*$$/.so/" | grep -v $(INSTALLED_LIB_SO)) +LINKS_SO = $(shell echo $(LIB_SO) | sed -e "s/\.so\..*$$/.so/" | grep -v $(LIB_SO)) +INSTALLED_LIB_A = $(INSTALL_LIBDIR)/lib$(LIBNAME).a + +INSTALLED_EXE = $(INSTALL_BINDIR)/$(EXE) +INSTALLED_EXE_SH = $(addprefix $(INSTALL_BINDIR)/,$(EXE_SH)) +INSTALLED_EXE_BIN = $(addprefix $(INSTALL_BINDIR)/,$(EXE_BIN)) +INSTALLED_MKFILES = $(addprefix $(INSTALL_MKDIR)/,$(MKFILES)) +INSTALLED_H = $(addprefix $(INSTALL_HDRDIR)/,$(LOCAL_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 +CFLAGS_DEBUG = -Wall -D_DEBUG_ -g3 $(MEMWATCH) +CPPFLAGS_DEBUG = $(CFLAGS_DEBUG) +CFLAGS += $(INCLUDE) $(PROJECT_CFLAGS) $(LOCAL_CFLAGS) $(YLIB_CFLAGS) +CPPFLAGS += $(INCLUDE) $(PROJECT_CPPFLAGS) $(LOCAL_CPPFLAGS) $(YLIB_CPPFLAGS) +LDFFTW = -lrfftw -lfftw -lm +#LDAUDIO = -laudiofile + +ifeq ($(DEVELOPMENT),true) +CFLAGS += $(CFLAGS_DEBUG) +CPPFLAGS += $(CPPFLAGS_DEBUG) +endif + +LIBDIR = $(TOPDIR)/lib +INSTALLED_SHOBJS = $(addprefix $(INSTALL_LIBDIR)/,$(SHOBJS)) + +ifeq ($(USE_QT),true) +USE_X = true + +MOC = /usr/lib/qt2/bin/moc +UIC = /usr/lib/qt2/bin/uic + +MOC_CPP = $(patsubst %.h,moc_%.cpp,$(MOC_HEADER)) +OBJ += $(patsubst %.cpp,%.o,$(MOC_CPP)) +LPPFLAGS += -L/usr/lib/qt2/lib -lqt +INCLUDE += -I/usr/lib/qt2/include +endif + +ifeq ($(USE_X),true) +LDFLAGS += -L/usr/X11/lib -lXext -lX11 +endif + +ifeq ($(GCC_MAJOR),2) +LPPFLAGS += -lg++ -lstdc++ +else +LPPFLAGS += -lstdc++ -L/usr/local/lib +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_TIMER),true) +CFLAGS += -D_USE_TIMER_ +CPPFLAGS += -D_USE_TIMER_ +endif + +LDFLAGS += -L$(LIBDIR) $(PROJECTLIB_LDFLAGS) $(LOCAL_LDFLAGS) $(PROJECT_LDFLAGS) $(LPPFLAGS) +LDREST += $(LDAUDIO) $(LDFFTW) -ldl +CC = $(YAMD)gcc +CPP = $(YAMD)g++ +RM = rm +AR = ar + +ifneq ($(wildcard $(MODDIR)/devutil/scripts),) +MOD_SCRIPT_DIR = $(MODDIR)/devutil/scripts +else +MOD_SCRIPT_DIR = $(MODDIR)/bin +endif + +ifdef INSTALL_LOG + INSTALL=$(MOD_SCRIPT_DIR)/log_install.sh -l $(INSTALL_LOG) + LINK_LIB=$(MOD_SCRIPT_DIR)/log_install.sh -L -l $(INSTALL_LOG) +else + ifndef INSTALL + INSTALL = install + endif + ifndef LINK_LIB + LINK_LIB=$(MOD_SCRIPT_DIR)/log_install.sh -L + endif +endif + + +define make_subdirs + set -e; for D in $(SUBDIRS) ; do make -C $$D ; done +endef + +define make_subdirs_target + set -e; for D in $(SUBDIRS) ; do make -C $$D $@; done +endef + +LD_LIBRARY_PATH = $(LIBDIR) +export LD_LIBRARY_PATH + +UPLOAD_URL_RPM_BIN=rsync_ssh://ftp.jannet.de:/usr/local/ftp/pub/packages/rpm/bin/ +UPLOAD_URL_RPM_SRC=rsync_ssh://ftp.jannet.de:/usr/local/ftp/pub/packages/rpm/src/ + +