From edfde51eb8c3b7f3657bebdecfdd90c6e8cbff8f Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Tue, 21 Aug 2007 16:19:27 +0000 Subject: [PATCH] defs.mk: Restructured bigtime --- make/defs.mk | 190 ++++++++++++++++++++++++++++----------------------- 1 file changed, 104 insertions(+), 86 deletions(-) diff --git a/make/defs.mk b/make/defs.mk index ee43b387..4b1ef870 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -18,21 +18,44 @@ endif # ----- standard variables -PROJECT ?= $(shell (cd $(TOPDIR); basename `pwd` | sed 's/-[0-9].*//')) +PROJECT ?= $(notdir $(shell cd $(TOPDIR); pwd | sed 's/-[0-9].*//')) +PROJECT_CAPNAME = $(shell echo $(PROJECT) | tr [a-z] [A-Z] | sed 's/-/_/g') PROJECT_DESCR ?= No description CUSTOMER ?= jannet + VERSION ?= $(shell cat $(TOPDIR)/VERSION) DIST_VERSION ?= $(shell sed -e "s/-dev//" $(TOPDIR)/VERSION) HEX_VERSION = $(shell echo $(DIST_VERSION) | \ sed 's/-dev//; s/pre[^\.]*//; s/F[^\.]//; s/[\.-]/ /g' | xargs printf "0x%02x%02x%02x%02x") +BINARY_VERSION = $(shell echo $(PROJECT)_$(DIST_VERSION) | tr [a-z] [A-Z] | sed 's/-[^-]*$$//; s/-/_/g') +WINVERSION = $(shell echo $(VERSION) | sed -e "s/\./_/g") +LOCAL_VERSION = $(shell echo $(VERSION)) +LOCAL_WINVERSION = $(shell echo $(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//") + +# ----- input dirs +MOD_SCRIPT_DIR ?= $(firstword $(wildcard $(MODDIR)/devutil/scripts $(MODDIR)/bin)) +YTOOLS_DIR = $(MODDIR) +PROJECT_STEM = $(PROJECT)-$(DIST_VERSION) +CVS_ROOT_DIR = $(shell test -d CVS && pwd | sed -e "s%`cat CVS/Repository`%%; s%/$$%%") +REV_SUBDIRS = $(shell echo $(SUBDIRS) | awk '{for (i=NF; i>=1; i--) printf ("%s ",$$i)}') +FRESH_CVSDIR = $(HOME)/local/src/cvs.fresh +IMAGE_DIR ?= $(CVS_ROOT_DIR)/images + +# ----- compilation options +USE_GFILTER ?= true +TARGET ?= Linux +OS ?= $(shell sh $(MOD_SCRIPT_DIR)/get_os.sh) +ARCH = @ARCH@ +FULL_NAME = $(shell grep "^`id -nu`": /etc/passwd | cut -d: -f5) DEVELOPMENT ?= $(shell echo $(VERSION) | grep -q 'dev' && echo true) USE_PROJECT_LIB ?= true USE_YTOOLS ?= true USE_EXCEPTIONS_IN_C ?= true REENTRANT ?= true -USE_GFILTER ?= true -MOD_SCRIPT_DIR ?= $(firstword $(wildcard $(MODDIR)/devutil/scripts $(MODDIR)/bin)) -OS ?= $(shell sh $(MOD_SCRIPT_DIR)/get_os.sh) export REENTRANT @@ -47,9 +70,6 @@ else endif endif -CONFIG_FILE ?= $(CONFIG_DIR)/$(PROJECT).conf -SYSCONFIG_FILE ?= $(SYSCONFIG_DIR)/$(PROJECT) - ifneq ($(shell echo $(OS) | cut -d: -f1),suse-9) SYSCONFIG_PREFIX ?= /etc SYSCONFIG_FILE ?= /etc/rc.config @@ -58,19 +78,12 @@ SYSCONFIG_PREFIX ?= /etc/sysconfig SYSCONFIG_FILE ?= $(SYSCONFIG_DIR)/$(PROJECT) endif SYSCONFIG_DIR ?= $(SYSCONFIG_PREFIX) - OPTS_PID_FILE ?= $(PIDDIR)/$(PROJECT).pid CFLAGS += -DVERSION=$(HEX_VERSION) CPPFLAGS += -DVERSION=$(HEX_VERSION) LD_LIB_PATH += $(MODDIR)/lib -PROJECT ?= $(notdir $(shell cd $(TOPDIR); pwd)) -LIBNAME ?= $(PROJECT) -LIBTYPE ?= shared - -TARGET ?= Linux - ifeq ($(TARGET),mingw) CROSS_TOOL_DIR = /opt/cross-tools CROSS_TOOL_BIN_PREFIX = $(CROSS_TOOL_DIR)/bin/i386-mingw32- @@ -88,29 +101,10 @@ STRIP = strip LD = $(GPP) endif -YTOOLS_DIR = $(MODDIR) -WINVERSION = $(shell echo $(VERSION) | sed -e "s/\./_/g") -LOCAL_VERSION = $(shell echo $(VERSION)) -LOCAL_WINVERSION = $(shell echo $(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//") -PROJECT_STEM = $(PROJECT)-$(DIST_VERSION) -CVS_ROOT_DIR = $(shell test -d CVS && pwd | sed -e "s%`cat CVS/Repository`%%; s%/$$%%") -REV_SUBDIRS = $(shell echo $(SUBDIRS) | awk '{for (i=NF; i>=1; i--) printf ("%s ",$$i)}') -FRESH_CVSDIR = $(HOME)/local/src/cvs.fresh -ARCH = @ARCH@ +# makefile helpers FIND_SUBDIRS = $(filter-out . .. ./nomake ./CVS $(addprefix ./,$(IGNORE_SUBDIRS)), $(shell find . -maxdepth 1 -type d)) -IMAGE_DIR ?= $(CVS_ROOT_DIR)/images - -PROJECT_CAPNAME = $(shell echo $(PROJECT) | tr [a-z] [A-Z] | sed 's/-/_/g') - -BINARY_VERSION = $(shell echo $(PROJECT)_$(DIST_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 +# compiler and linker 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];}') @@ -121,45 +115,27 @@ LD_MAJOR = $(shell echo $(LD_VERSION) | cut -d. -f1) LD_MINOR = $(shell echo $(LD_VERSION) | cut -d. -f2) LD_REV = $(shell echo $(LD_VERSION) | cut -d. -f3) -YTOOLS_VERSION = @PACKAGE_VERSION@ -YTOOLS_VERSION_STR = \"@PACKAGE_VERSION@\" - #ifndef $(TOPDIR) # TOPDIR := $(MODDIR) #endif -EXE_SH += $(wildcard *.sh *.pl) -MKFILES += $(wildcard *.mk) +# -- target files and dirs -FULL_NAME = $(shell grep "^`id -nu`": /etc/passwd | cut -d: -f5) SRC_SUFFIX += $(sort $(suffix $(wildcard $(TOPDIR)/hdr/*))) LOCAL_SRC += Makefile $(wildcard $(addprefix *,$(SRC_SUFFIX))) SRC_HEADERED += $(shell if [ "$(LOCAL_SRC)" ]; then grep -ic "it services" $(LOCAL_SRC) | sed '/:0$$/ d; s/:.*$$//'; fi) SRC_UNHEADERED += $(filter-out $(SRC_HEADERED),$(LOCAL_SRC)) LOCAL_C += $(wildcard *.c) LOCAL_CPP += $(wildcard *.cc *.cpp *.C) -LOCAL_H += $(wildcard *.h *.H) 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)) OBJ += $(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.cc, $(SRC_ALL_CPP))))) OBJ += $(patsubst %.S,%.o,$(SFILES)) -SHOBJS += $(patsubst %.cpp,lib%.so,$(patsubst %.cc,lib%.so,$(patsubst %.c,lib%.so,$(SRC_ALL_CPP)))) -SHSCRIPTS += $(patsubst %.sh.tmpl,%.sh,$(wildcard *.sh.tmpl)) -SCRIPTS += $(patsubst %.tmpl,%,$(wildcard *.tmpl)) - -BUILD_EXE_BIN += $(addprefix $(BUILD_BINDIR)/,$(EXE)) -BUILD_EXE_SH += $(patsubst %.sh,$(BUILD_BINDIR)/%.sh,$(EXE_SH)) -BUILD_H += $(patsubst %.h,$(TOPDIR)/include/%.h,$(SRC_H)) 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)) @@ -176,62 +152,102 @@ 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) - +FTP_PCKG_DIR = /pub/packages +JANNET_PROJ_DIR = rsync_ssh://ftp.jannet.de:/home/ftp/dat$(FTP_PCKG_DIR) 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/ -INSTALL_LIBDIR ?= $(EXE_PREFIX)/lib -INSTALL_HDRDIR ?= $(PREFIX)/include -INSTALL_MKDIR ?= $(PREFIX)/make -INSTALL_BINDIR ?= $(EXE_PREFIX)/bin +# -- standard dirs and files for build and install -BUILD_BINDIR = $(TOPDIR)/bin -LIBDIR = $(TOPDIR)/lib -INSTALL_DOCDIR_DIST = $(DOC_PREFIX) -INSTALL_DOCDIR_DEVEL = $(DOC_PREFIX)-devel +INSTALLATION_FILE_TYPES= LIB HDR EXE DOC PROFILE + +# -- CFG +BUILD_CFGDIR = $(TOPDIR)/conf +CONFIG_FILE ?= $(CONFIG_DIR)/$(PROJECT).conf +SYSCONFIG_FILE ?= $(SYSCONFIG_DIR)/$(PROJECT) +INSTALL_CFGDIR = $(CFG_PREFIX)/etc + +# -- HDR +# why both SRC_H <-> LOCAL_H? +BUILD_HDRDIR = $(TOPDIR)/include +LOCAL_H += $(wildcard *.h *.H) +SRC_H += $(filter %.h %.H, $(SRC_ALL_CPP)) +BUILD_H += $(patsubst %.h,$(TOPDIR)/include/%.h,$(SRC_H)) +PREREQ_H += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.h)) +ALL_H += $(LOCAL_H) $(PREREQ_H) +BUILD_HDR = $(addprefix $(BUILD_HDRDIR)/,$(SRC_H)) +INSTALL_HDRDIR ?= $(PREFIX)/include +INSTALLED_HDR += $(addprefix $(INSTALL_HDRDIR)/,$(SRC_H)) + +# -- DOC +# TODO: VERSION file is omnipresent +BUILD_DOCDIR ?= $(TOPDIR)/doc DOCS += $(wildcard README CHANGES TODO LICENSE AUTHORS CREDITS *.pdf *.txt *.html) DOCSUBDIRS += $(wildcard html tex info examples src) - INSTALLED_VERSION_FILE = $(PREFIX)/VERSION +INSTALL_DOCDIR = $(DOC_PREFIX) +INSTALLED_DOCS = $(addprefix $(INSTALL_DOCDIR)/,$(DOCS)) $(INSTALLED_VERSION_FILE) -INSTALLED_DOCS_DIST = $(addprefix $(INSTALL_DOCDIR_DIST)/,$(DOCS)) $(INSTALLED_VERSION_FILE) -INSTALLED_DOCS_DEVEL = $(addprefix $(INSTALL_DOCDIR_DEVEL)/,$(DOCS)) $(INSTALLED_VERSION_FILE) - +# -- LIB +BUILD_LIBDIR = $(TOPDIR)/lib +LIBNAME ?= $(PROJECT) +LIBTYPE ?= shared +MEMBERS += $(LIB_A)($(OBJ)) +SHOBJS += $(patsubst %.cpp,lib%.so,$(patsubst %.cc,lib%.so,$(patsubst %.c,lib%.so,$(SRC_ALL_CPP)))) ifneq ($(TARGET),mingw) -LIB_A = $(LIBDIR)/lib$(LIBNAME).a +LIB_A = $(BUILD_LIBDIR)/lib$(LIBNAME).a SO_SUFFIX = so.$(shell echo $(VERSION) | cut -d- -f1) -LIB_SO = $(LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX) +LIB_SO = $(BUILD_LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX) else -LIB_A = $(LIBDIR)/lib$(LIBNAME)-static.a -LIB_DEF = $(LIBDIR)/$(LIBNAME).def -MSVCPP_IMPLIB = $(LIBDIR)/$(LIBNAME).lib +LIB_A = $(BUILD_LIBDIR)/lib$(LIBNAME)-static.a +LIB_DEF = $(BUILD_LIBDIR)/$(LIBNAME).def +MSVCPP_IMPLIB = $(BUILD_LIBDIR)/$(LIBNAME).lib SO_SUFFIX = dll.$(shell echo $(VERSION) | cut -d- -f1) -LIB_SO = $(LIBDIR)/$(LIBNAME).dll +LIB_SO = $(BUILD_LIBDIR)/$(LIBNAME).dll endif -VERSION_SCRIPT = $(LIBDIR)/version.ldscript +LINKS_SO += $(shell echo $(LIB_SO) | sed -e "s/\.so\..*$$/.so/" | grep -v $(LIB_SO)) +VERSION_SCRIPT = $(BUILD_LIBDIR)/version.ldscript +INSTALL_LIBDIR ?= $(EXE_PREFIX)/lib INSTALLED_LIB_SO = $(INSTALL_LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX) INSTALLED_SHOBJS += $(addprefix $(INSTALL_LIBDIR)/,$(SHOBJS)) 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_ALL_LIBS = $(addprefix $(INSTALL_LIBDIR)/,$(wildcard *.a)) +INSTALLED_LIB = $(INSTALLED_LIB_SO) $(INSTALLED_SHOBJS) \ + $(INSTALLED_LINKS_SO) $(sort $(INSTALLED_LIB_A) $(INSTALLED_ALL_LIBS)) -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)/,$(SRC_H)) +# -- EXE +BUILD_EXEDIR = $(TOPDIR)/bin EXE_ALL += $(EXE) $(wildcard *.a *.dll *.so *.so.*) +SHSCRIPTS += $(patsubst %.sh.tmpl,%.sh,$(wildcard *.sh.tmpl)) +SCRIPTS += $(patsubst %.tmpl,%,$(wildcard *.tmpl)) +EXE_SH += $(wildcard *.sh *.pl) +BUILD_EXE_BIN += $(addprefix $(BUILD_EXEDIR)/,$(EXE)) +BUILD_EXE_SH += $(patsubst %.sh,$(BUILD_EXEDIR)/%.sh,$(EXE_SH)) +BUILD_EXE += $(BUILD_EXE_BIN) $(BUILD_EXE_SH) +INSTALLED_EXE_SH += $(addprefix $(INSTALL_EXEDIR)/,$(EXE_SH)) +INSTALLED_EXE_BIN += $(addprefix $(INSTALL_EXEDIR)/,$(EXE_BIN)) +INSTALL_EXEDIR ?= $(EXE_PREFIX)/bin +INSTALLED_EXE += $(INSTALL_EXEDIR)/$(EXE) $(INSTALLED_EXE_SH) $(INSTALLED_EXE_BIN) -INSTALLED_PROFILE_PATH_SCRIPT = $(ENV_PREFIX)/etc/profile.d/path_$(PROJECT).sh +# -- MAKE +BUILD_MAKEDIR = $(TOPDIR)/make +MKFILES += $(wildcard *.mk) +INSTALL_MAKEDIR ?= $(PREFIX)/make +INSTALLED_MAKE += $(addprefix $(INSTALL_MAKEDIR)/,$(MKFILES)) -MEMBERS += $(LIB_A)($(OBJ)) +# -- PROFILE +# TODO: path_ file is omnipresent +BUILD_PROFILEDIR = $(TOPDIR)/profile.d +#PROFILE += path_$(PROJECT).sh +INSTALL_PROFILEDIR ?= $(PROFILE_DIR) +INSTALLED_PROFILE ?= $(addprefix $(INSTALL_PROFILEDIR)/,$(PROFILE)) + +# == ifeq ($(DEVELOPMENT),true) CFLAGS += -D_DEVELOPMENT_ @@ -469,7 +485,7 @@ ifeq ($(STRIP_SYMBOLS),true) endif INCLUDE += $(LOCAL_INCLUDE) -I. $(PROJECT_INCLUDE) -I$(TOPDIR)/include -LIBFLAGS += $(LOCAL_LDFLAGS) -L$(LIBDIR) +LIBFLAGS += $(LOCAL_LDFLAGS) -L$(BUILD_LIBDIR) # -- use of supplementary libraries @@ -630,8 +646,10 @@ endif ifeq ($(USE_YTOOLS),true) YTOOLS_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/ytools /opt/ytools)) YTOOLS_VERSION = $(call cat_version,$(YTOOLS_DIR)) +ifneq ($(PROJECT),ytools) RPM_REQUIRES_RUN += ytools-run >= $(YTOOLS_VERSION) RPM_REQUIRES_DEVEL += ytools-devel >= $(YTOOLS_VERSION) +endif INCLUDE += -I$(YTOOLS_DIR)/include LIBFLAGS += -L$(YTOOLS_DIR)/lib -lytools endif