defs.mk: Restructured bigtime

This commit is contained in:
Jan Lindemann 2007-08-21 16:19:27 +00:00 committed by Jan Lindemann
commit edfde51eb8

View file

@ -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