re/mk/re.mk
2019-01-02 10:08:02 +01:00

829 lines
19 KiB
Makefile

#
# re.mk - common make rules
#
# Copyright (C) 2010 Creytiv.com
#
# Imported variables:
#
# ARCH Target architecture
# CC Compiler
# CROSS_COMPILE Cross-compiler prefix (optional)
# EXTRA_CFLAGS Extra compiler flags appended to CFLAGS
# EXTRA_LFLAGS Extra linker flags appended to LFLAGS
# GCOV If non-empty, enable GNU Coverage testing
# GPROF If non-empty, enable GNU Profiling
# OPT_SIZE If non-empty, optimize for size
# OPT_SPEED If non-empty, optimize for speed
# PROJECT Project name
# RELEASE Release build
# SYSROOT System root of library and include files
# SYSROOT_ALT Alternative system root of library and include files
# USE_OPENSSL If non-empty, link to libssl library
# USE_ZLIB If non-empty, link to libz library
# VERSION Version number
#
# Exported variables:
#
# APP_LFLAGS Linker flags for applications using modules
# BIN_SUFFIX Suffix for binary executables
# CC Compiler
# CCACHE Compiler ccache tool
# CFLAGS Compiler flags
# DFLAGS Dependency generator flags
# LFLAGS Common linker flags
# LIBS Libraries to link against
# LIB_SUFFIX Suffix for shared libraries
# MOD_LFLAGS Linker flags for dynamic modules
# MOD_SUFFIX Suffix for dynamic modules
# SH_LFLAGS Linker flags for shared libraries
# USE_TLS Defined if TLS is available
# USE_DTLS Defined if DTLS is available
#
ifneq ($(RELEASE),)
CFLAGS += -DRELEASE
OPT_SPEED=1
endif
# Default system root
ifeq ($(SYSROOT),)
SYSROOT := /usr
endif
# Alternative Systemroot
ifeq ($(SYSROOT_ALT),)
SYSROOT_ALT := $(shell [ -d /sw/include ] && echo "/sw")
endif
ifeq ($(SYSROOT_ALT),)
SYSROOT_ALT := $(shell [ -d /opt/local/include ] && echo "/opt/local")
endif
ifneq ($(SYSROOT_ALT),)
CFLAGS += -I$(SYSROOT_ALT)/include
LFLAGS += -L$(SYSROOT_ALT)/lib
endif
##############################################################################
#
# Compiler section
#
# find compiler name & version
ifeq ($(CC),)
CC := gcc
endif
ifeq ($(CC),cc)
CC := gcc
endif
LD := $(CC)
CC_LONGVER := $(shell if $(CC) -v 2>/dev/null; then \
$(CC) -v 2>&1 ;\
else \
$(CC) -V 2>&1 ; \
fi )
# find-out the compiler's name
ifneq (,$(findstring gcc, $(CC_LONGVER)))
CC_NAME := gcc
CC_VER := $(word 1,$(CC)) $(shell $(CC) - --version|head -n 1|\
cut -d" " -f 3|\
sed -e 's/^.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/'\
-e 's/^[^0-9].*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/')
# sun sed is a little brain damaged => this complicated expression
MKDEP := $(CC) -MM
#transform gcc version into 2.9x, 3.x or 4.x
CC_SHORTVER := $(shell echo "$(CC_VER)" | cut -d" " -f 2| \
sed -e 's/[^0-9]*-\(.*\)/\1/'| \
sed -e 's/2\.9.*/2.9x/' -e 's/3\.[0-3]\..*/3.0/' -e \
's/3\.[0-3]/3.0/' -e 's/3\.[4-9]\..*/3.4/' -e\
's/3\.[4-9]/3.4/' -e 's/4\.[0-9]\..*/4.x/' -e\
's/4\.[0-9]/4.x/' )
endif
ifeq ($(CC_NAME),)
ifneq (,$(findstring clang, $(CC_LONGVER)))
CC_NAME := clang
CC_SHORTVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
sed -e 's/.*version \([0-9]\.[0-9]\).*/\1/g' )
CC_VER := $(CC) $(CC_SHORTVER)
MKDEP := $(CC) -MM
endif
endif
ifeq ($(CC_NAME),)
ifneq (, $(findstring Sun, $(CC_LONGVER)))
CC_NAME := suncc
CC_SHORTVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
sed -e 's/.*\([0-9]\.[0-9]\).*/\1/g' )
CC_VER := $(CC) $(CC_SHORTVER)
MKDEP := $(CC) -xM1
endif
endif
ifeq ($(CC_NAME),)
ifneq (, $(findstring Intel(R) C++ Compiler, $(CC_LONGVER)))
# very nice: gcc compatible
CC_NAME := icc
CC_FULLVER := $(shell echo "$(CC_LONGVER)"|head -n 1| \
sed -e 's/.*Version \([0-9]\.[0-9]\.[0-9]*\).*/\1/g')
CC_SHORTVER := $(shell echo "$(CC_FULLVER)" | cut -d. -f1,2 )
CC_VER := $(CC) $(CC_FULLVER)
MKDEP := $(CC) -MM
endif
endif
ifeq (,$(CC_NAME))
#not found
CC_NAME := $(CC)
CC_SHORTVER := unknown
CC_VER := unknown
MKDEP := gcc -MM
$(warning Unknown compiler $(CC)\; supported compilers: \
gcc, clang, sun cc, intel icc )
endif
# Compiler warning flags
CFLAGS += -Wall
CFLAGS += -Wmissing-declarations
CFLAGS += -Wmissing-prototypes
CFLAGS += -Wstrict-prototypes
CFLAGS += -Wbad-function-cast
CFLAGS += -Wsign-compare
CFLAGS += -Wnested-externs
CFLAGS += -Wshadow
CFLAGS += -Waggregate-return
CFLAGS += -Wcast-align
ifeq ($(CC_SHORTVER),4.x)
CFLAGS += -Wextra
CFLAGS += -Wold-style-definition
CFLAGS += -Wdeclaration-after-statement
endif
CFLAGS += -g
ifneq ($(OPT_SPEED),)
CFLAGS += -O3 # Optimize for speed - takes longer to compile!
OPTIMIZE := 1
endif
ifneq ($(OPT_SIZE),)
CFLAGS += -Os # Optimize for size - takes longer to compile!
OPTIMIZE := 1
endif
ifneq ($(OPTIMIZE),)
CFLAGS += -Wuninitialized
ifneq ($(CC_SHORTVER), 2.9x)
CFLAGS += -Wno-strict-aliasing
endif
endif
# Compiler dependency flags
ifeq ($(CC_SHORTVER), 2.9x)
DFLAGS = -MD
else
DFLAGS = -MD -MF $(@:.o=.d) -MT $@
endif
##############################################################################
#
# OS section
#
MACHINE := $(shell $(CC) -dumpmachine)
ifeq ($(CROSS_COMPILE),)
OS := $(shell uname -s | sed -e s/SunOS/solaris/ | tr "[A-Z]" "[a-z]")
endif
ifneq ($(strip $(filter i386-mingw32 i486-mingw32 i586-mingw32msvc \
i686-w64-mingw32 x86_64-w64-mingw32 mingw32, \
$(MACHINE))),)
OS := win32
ifeq ($(MACHINE), mingw32)
CROSS_COMPILE :=
endif
endif
# default
LIB_SUFFIX := .so
MOD_SUFFIX := .so
BIN_SUFFIX :=
ifeq ($(OS),solaris)
CFLAGS += -fPIC -DSOLARIS
LIBS += -ldl -lresolv -lsocket -lnsl
LFLAGS += -fPIC
SH_LFLAGS += -G
MOD_LFLAGS +=
APP_LFLAGS +=
AR := ar
AFLAGS := cru
endif
ifeq ($(OS),linux)
CFLAGS += -fPIC -DLINUX
LIBS += -ldl
LFLAGS += -fPIC
SH_LFLAGS += -shared
MOD_LFLAGS +=
APP_LFLAGS += -rdynamic
AR := ar
AFLAGS := crD
endif
ifeq ($(OS),gnu)
CFLAGS += -fPIC -DGNU
LIBS += -ldl
LFLAGS += -fPIC
SH_LFLAGS += -shared
MOD_LFLAGS +=
APP_LFLAGS += -rdynamic
AR := ar
AFLAGS := cru
endif
ifeq ($(OS),darwin)
CFLAGS += -fPIC -dynamic -DDARWIN
ifneq (,$(findstring Apple, $(CC_LONGVER)))
CFLAGS += -Wshorten-64-to-32
endif
DFLAGS := -MD
LIBS += -lresolv
LFLAGS += -fPIC
SH_LFLAGS += -dynamiclib
ifeq ($(CC_NAME),gcc)
SH_LFLAGS += -dylib
endif
ifneq ($(VERSION),)
SH_LFLAGS += -current_version $(VERSION)
SH_LFLAGS += -compatibility_version $(VERSION)
endif
MOD_LFLAGS += -undefined dynamic_lookup
APP_LFLAGS +=
AR := ar
AFLAGS := cru
LIB_SUFFIX := .dylib
HAVE_KQUEUE := 1
endif
ifeq ($(OS),netbsd)
CFLAGS += -fPIC -DNETBSD
LFLAGS += -fPIC
SH_LFLAGS += -shared
MOD_LFLAGS +=
APP_LFLAGS += -rdynamic
AR := ar
AFLAGS := cru
HAVE_KQUEUE := 1
endif
ifeq ($(OS),freebsd)
CFLAGS += -fPIC -DFREEBSD
LFLAGS += -fPIC
SH_LFLAGS += -shared
MOD_LFLAGS +=
APP_LFLAGS += -rdynamic
AR := ar
AFLAGS := cru
HAVE_KQUEUE := 1
endif
ifeq ($(OS),gnu/kfreebsd)
CFLAGS += -fPIC -DKFREEBSD -D_GNU_SOURCE
LFLAGS += -fPIC
SH_LFLAGS += -shared
MOD_LFLAGS +=
APP_LFLAGS += -rdynamic
AR := ar
AFLAGS := cru
HAVE_KQUEUE := 1
endif
ifeq ($(OS),dragonfly)
CFLAGS += -fPIC -DDRAGONFLY
LFLAGS += -fPIC
SH_LFLAGS += -shared
MOD_LFLAGS +=
APP_LFLAGS += -rdynamic
AR := ar
AFLAGS := cru
HAVE_KQUEUE := 1
endif
ifeq ($(OS),openbsd)
CFLAGS += -fPIC -DOPENBSD
LFLAGS += -fPIC
SH_LFLAGS += -shared
MOD_LFLAGS +=
APP_LFLAGS += -rdynamic
AR := ar
AFLAGS := cru
HAVE_KQUEUE := 1
HAVE_ARC4RANDOM := 1
endif
ifeq ($(OS),win32)
CFLAGS += -DWIN32 -D_WIN32_WINNT=0x0501 -D__ssize_t_defined
LIBS += -lwsock32 -lws2_32 -liphlpapi
LFLAGS +=
SH_LFLAGS += -shared
MOD_LFLAGS +=
APP_LFLAGS += -Wl,--export-all-symbols
AR := ar
AFLAGS := cru
CROSS_COMPILE ?= $(MACHINE)-
RANLIB := $(CROSS_COMPILE)ranlib
LIB_SUFFIX := .dll
MOD_SUFFIX := .dll
BIN_SUFFIX := .exe
SYSROOT := /usr/$(MACHINE)/
endif
CFLAGS += -DOS=\"$(OS)\"
ifeq ($(CC_SHORTVER),2.9x)
CFLAGS += -Wno-long-long
else
CFLAGS += -std=c99
PEDANTIC := 1
endif # CC_SHORTVER
ifneq ($(PEDANTIC),)
CFLAGS += -pedantic
endif
ifeq ($(OS),)
$(warning Could not detect OS)
endif
##############################################################################
#
# Architecture section
#
ifeq ($(ARCH),)
ifeq ($(CC_NAME),$(filter $(CC_NAME),gcc clang))
PREDEF := $(shell $(CC) -dM -E -x c $(EXTRA_CFLAGS) $(CFLAGS) /dev/null)
ifneq ($(strip $(filter i386 __i386__ __i386 _M_IX86 __X86__ _X86_, \
$(PREDEF))),)
ARCH := i386
endif
ifneq ($(strip $(filter __i486__,$(PREDEF))),)
ARCH := i486
endif
ifneq ($(strip $(filter __i586__,$(PREDEF))),)
ARCH := i586
endif
ifneq ($(strip $(filter __i686__ ,$(PREDEF))),)
ARCH := i686
endif
ifneq ($(strip $(filter __amd64__ __amd64 __x86_64__ __x86_64, \
$(PREDEF))),)
ARCH := x86_64
endif
ifneq ($(strip $(filter __arm__ __thumb__,$(PREDEF))),)
ifneq ($(strip $(filter __ARM_ARCH_6__,$(PREDEF))),)
ARCH := arm6
else
ARCH := arm
endif
endif
ifneq ($(strip $(filter __arm64__ ,$(PREDEF))),)
ARCH := arm64
endif
ifneq ($(strip $(filter __mips__ __mips, $(PREDEF))),)
ARCH := mips
endif
ifneq ($(strip $(filter __powerpc __powerpc__ __POWERPC__ __ppc__ \
_ARCH_PPC, $(PREDEF))),)
ARCH := ppc
endif
ifneq ($(strip $(filter __ppc64__ _ARCH_PPC64 , $(PREDEF))),)
ARCH := ppc64
endif
ifneq ($(strip $(filter __sparc__ __sparc __sparcv8 , $(PREDEF))),)
ifneq ($(strip $(filter __sparcv9 __sparc_v9__ , $(PREDEF))),)
ARCH := sparc64
else
ARCH := sparc
endif
endif
endif
endif
ifeq ($(ARCH),)
$(warning Could not detect ARCH)
endif
CFLAGS += -DARCH=\"$(ARCH)\"
ifeq ($(ARCH),mipsel)
CFLAGS += -march=mips32
endif
##############################################################################
#
# External libraries section
#
USE_OPENSSL := $(shell [ -f $(SYSROOT)/include/openssl/ssl.h ] || \
[ -f $(SYSROOT)/local/include/openssl/ssl.h ] || \
[ -f $(SYSROOT_ALT)/include/openssl/ssl.h ] && echo "yes")
ifneq ($(USE_OPENSSL),)
CFLAGS += -DUSE_OPENSSL -DUSE_TLS
LIBS += -lssl -lcrypto
USE_TLS := yes
USE_OPENSSL_DTLS := $(shell [ -f $(SYSROOT)/include/openssl/dtls1.h ] || \
[ -f $(SYSROOT)/local/include/openssl/dtls1.h ] || \
[ -f $(SYSROOT_ALT)/include/openssl/dtls1.h ] && echo "yes")
USE_OPENSSL_SRTP := $(shell [ -f $(SYSROOT)/include/openssl/srtp.h ] || \
[ -f $(SYSROOT)/local/include/openssl/srtp.h ] || \
[ -f $(SYSROOT_ALT)/include/openssl/srtp.h ] && echo "yes")
ifneq ($(USE_OPENSSL_DTLS),)
CFLAGS += -DUSE_OPENSSL_DTLS -DUSE_DTLS
USE_DTLS := yes
endif
ifneq ($(USE_OPENSSL_SRTP),)
CFLAGS += -DUSE_OPENSSL_SRTP -DUSE_DTLS_SRTP
USE_DTLS_SRTP := yes
endif
USE_OPENSSL_AES := yes
USE_OPENSSL_HMAC := yes
endif
USE_ZLIB := $(shell [ -f $(SYSROOT)/include/zlib.h ] || \
[ -f $(SYSROOT)/local/include/zlib.h ] || \
[ -f $(SYSROOT_ALT)/include/zlib.h ] && echo "yes")
ifneq ($(USE_ZLIB),)
CFLAGS += -DUSE_ZLIB
LIBS += -lz
endif
ifneq ($(OS),win32)
HAVE_PTHREAD := $(shell [ -f $(SYSROOT)/include/pthread.h ] && echo "1")
ifneq ($(HAVE_PTHREAD),)
HAVE_PTHREAD_RWLOCK := 1
CFLAGS += -DHAVE_PTHREAD
HAVE_LIBPTHREAD := 1
ifneq ($(HAVE_LIBPTHREAD),)
LIBS += -lpthread
endif
endif
ifneq ($(ARCH),mipsel)
HAVE_GETIFADDRS := $(shell [ -f $(SYSROOT)/include/ifaddrs.h ] && echo "1")
ifneq ($(HAVE_GETIFADDRS),)
CFLAGS += -DHAVE_GETIFADDRS
endif
endif
HAVE_STRERROR_R := 1
ifneq ($(HAVE_STRERROR_R),)
CFLAGS += -DHAVE_STRERROR_R
endif
endif
HAVE_GETOPT := $(shell [ -f $(SYSROOT)/include/getopt.h ] && echo "1")
ifneq ($(HAVE_GETOPT),)
CFLAGS += -DHAVE_GETOPT
endif
HAVE_INTTYPES_H := $(shell [ -f $(SYSROOT)/include/inttypes.h ] && echo "1")
ifneq ($(HAVE_INTTYPES_H),)
CFLAGS += -DHAVE_INTTYPES_H
endif
HAVE_NET_ROUTE_H := $(shell [ -f $(SYSROOT)/include/net/route.h ] && echo "1")
ifneq ($(HAVE_NET_ROUTE_H),)
CFLAGS += -DHAVE_NET_ROUTE_H
endif
HAVE_SYS_SYSCTL_H := \
$(shell [ -f $(SYSROOT)/include/sys/sysctl.h ] || \
[ -f $(SYSROOT)/include/$(MACHINE)/sys/sysctl.h ] \
&& echo "1")
ifneq ($(HAVE_SYS_SYSCTL_H),)
CFLAGS += -DHAVE_SYS_SYSCTL_H
endif
CFLAGS += -DHAVE_STDBOOL_H
HAVE_INET6 := 1
ifneq ($(HAVE_INET6),)
CFLAGS += -DHAVE_INET6
endif
ifeq ($(OS),win32)
CFLAGS += -DHAVE_SELECT
CFLAGS += -DHAVE_IO_H
else
HAVE_SYSLOG := $(shell [ -f $(SYSROOT)/include/syslog.h ] && echo "1")
HAVE_DLFCN_H := $(shell [ -f $(SYSROOT)/include/dlfcn.h ] && echo "1")
ifneq ($(OS),darwin)
HAVE_EPOLL := $(shell [ -f $(SYSROOT)/include/sys/epoll.h ] || \
[ -f $(SYSROOT)/include/$(MACHINE)/sys/epoll.h ] \
&& echo "1")
endif
HAVE_RESOLV := $(shell [ -f $(SYSROOT)/include/resolv.h ] && echo "1")
ifneq ($(HAVE_RESOLV),)
CFLAGS += -DHAVE_RESOLV
endif
ifneq ($(HAVE_SYSLOG),)
CFLAGS += -DHAVE_SYSLOG
endif
HAVE_INET_NTOP := 1
CFLAGS += -DHAVE_FORK
ifneq ($(HAVE_INET_NTOP),)
CFLAGS += -DHAVE_INET_NTOP
endif
CFLAGS += -DHAVE_PWD_H
ifneq ($(OS),darwin)
CFLAGS += -DHAVE_POLL # Darwin: poll() does not support devices
HAVE_INET_PTON := 1
endif
ifneq ($(HAVE_INET_PTON),)
CFLAGS += -DHAVE_INET_PTON
endif
CFLAGS += -DHAVE_SELECT -DHAVE_SELECT_H
CFLAGS += -DHAVE_SETRLIMIT
CFLAGS += -DHAVE_SIGNAL
CFLAGS += -DHAVE_SYS_TIME_H
ifneq ($(HAVE_EPOLL),)
CFLAGS += -DHAVE_EPOLL
endif
ifneq ($(HAVE_KQUEUE),)
CFLAGS += -DHAVE_KQUEUE
endif
CFLAGS += -DHAVE_UNAME
CFLAGS += -DHAVE_UNISTD_H
CFLAGS += -DHAVE_STRINGS_H
endif
ifneq ($(HAVE_ARC4RANDOM),)
CFLAGS += -DHAVE_ARC4RANDOM
endif
##############################################################################
#
# Misc tools section
#
CCACHE := $(shell [ -e /usr/bin/ccache ] 2>/dev/null \
|| [ -e /opt/local/bin/ccache ] \
&& echo "ccache")
CFLAGS += -DVERSION=\"$(VERSION)\"
CFLAGS += \
-DVER_MAJOR=$(VER_MAJOR) \
-DVER_MINOR=$(VER_MINOR) \
-DVER_PATCH=$(VER_PATCH)
# Enable gcov Coverage testing
#
# - generated during build: .gcno files
# - generated during exec: .gcda files
#
ifneq ($(GCOV),)
CFLAGS += -fprofile-arcs -ftest-coverage
LFLAGS += -fprofile-arcs -ftest-coverage
# Disable ccache
CCACHE :=
endif
# gprof - GNU Profiling
#
# - generated during exec: gmon.out
#
ifneq ($(GPROF),)
CFLAGS += -pg
LFLAGS += -pg
# Disable ccache
CCACHE :=
endif
CC := $(CCACHE) $(CC)
CFLAGS += $(EXTRA_CFLAGS)
LFLAGS += $(EXTRA_LFLAGS)
BUILD := build-$(ARCH)
default: all
.PHONY: distclean
distclean:
@rm -rf build* *core*
@rm -f *stamp $(BIN)
@rm -f `find . -name "*.[oda]"` `find . -name "*.so"`
@rm -f `find . -name "*~"` `find . -name "\.\#*"`
@rm -f `find . -name "*.orig"` `find . -name "*.rej"`
@rm -f `find . -name "*.previous"` `find . -name "*.gcov"`
@rm -f `find . -name "*.exe"` `find . -name "*.dll"`
@rm -f `find . -name "*.dylib"`
.PHONY: info
info:
@echo "info - $(PROJECT) version $(VERSION)"
@echo " MODULES: $(MODULES)"
# @echo " SRCS: $(SRCS)"
@echo " MACHINE: $(MACHINE)"
@echo " ARCH: $(ARCH)"
@echo " OS: $(OS)"
@echo " BUILD: $(BUILD)"
@echo " CCACHE: $(CCACHE)"
@echo " CC: $(CC_NAME) $(CC_SHORTVER)"
@echo " CFLAGS: $(CFLAGS)"
@echo " DFLAGS: $(DFLAGS)"
@echo " LFLAGS: $(LFLAGS)"
@echo " SH_LFLAGS: $(SH_LFLAGS)"
@echo " MOD_LFLAGS: $(MOD_LFLAGS)"
@echo " APP_LFLAGS: $(APP_LFLAGS)"
@echo " LIBS: $(LIBS)"
@echo " LIBRE_MK: $(LIBRE_MK)"
@echo " LIBRE_INC: $(LIBRE_INC)"
@echo " LIBRE_SO: $(LIBRE_SO)"
@echo " USE_OPENSSL: $(USE_OPENSSL)"
@echo " USE_OPENSSL_AES: $(USE_OPENSSL_AES)"
@echo " USE_OPENSSL_HMAC: $(USE_OPENSSL_HMAC)"
@echo " USE_TLS: $(USE_TLS)"
@echo " USE_DTLS: $(USE_DTLS)"
@echo " USE_DTLS_SRTP: $(USE_DTLS_SRTP)"
@echo " USE_ZLIB: $(USE_ZLIB)"
@echo " GCOV: $(GCOV)"
@echo " GPROF: $(GPROF)"
@echo " CROSS_COMPILE: $(CROSS_COMPILE)"
@echo " SYSROOT: $(SYSROOT)"
@echo " SYSROOT_ALT: $(SYSROOT_ALT)"
@echo " LIB_SUFFIX: $(LIB_SUFFIX)"
@echo " MOD_SUFFIX: $(MOD_SUFFIX)"
@echo " BIN_SUFFIX: $(BIN_SUFFIX)"
##############################################################################
#
# Packaging section
#
TAR_SRC := $(PROJECT)-$(VERSION)
release:
@rm -rf ../$(TAR_SRC)
@svn export . ../$(TAR_SRC)
@if [ -f ../$(TAR_SRC)/mk/exclude ]; then \
cat ../$(TAR_SRC)/mk/exclude \
| sed 's|^|../$(TAR_SRC)/|' | xargs -t rm -rf ; \
rm -f ../$(TAR_SRC)/mk/exclude ; \
fi
@cd .. && rm -f $(TAR_SRC).tar.gz \
&& tar -zcf $(TAR_SRC).tar.gz $(TAR_SRC) \
&& echo "created release tarball `pwd`/$(TAR_SRC).tar.gz"
tar:
@rm -rf ../$(TAR_SRC)
@svn export . ../$(TAR_SRC)
@cd .. && rm -f $(TAR_SRC).tar.gz \
&& tar -zcf $(TAR_SRC).tar.gz $(TAR_SRC) \
&& echo "created source tarball `pwd`/$(TAR_SRC).tar.gz"
git_release:
git archive --format=tar --prefix=$(PROJECT)-$(VERSION)/ v$(VERSION) \
| gzip > ../$(PROJECT)-$(VERSION).tar.gz
git_snapshot:
git archive --format=tar --prefix=$(PROJECT)-$(VERSION)/ HEAD \
| gzip > ../$(PROJECT)-$(VERSION).tar.gz
# Debian
.PHONY: deb
deb:
dpkg-buildpackage -rfakeroot
.PHONY: debclean
debclean:
@rm -rf build-stamp configure-stamp debian/files debian/$(PROJECT) \
debian/lib$(PROJECT) debian/lib$(PROJECT)-dev debian/tmp \
debian/.debhelper debian/*.debhelper debian/*.debhelper.log \
debian/*.substvars
# RPM
RPM := $(shell [ -d /usr/src/rpm ] 2>/dev/null && echo "rpm")
ifeq ($(RPM),)
RPM := $(shell [ -d /usr/src/redhat ] 2>/dev/null && echo "redhat")
endif
.PHONY: rpm
rpm: tar
sudo cp ../$(PROJECT)-$(VERSION).tar.gz /usr/src/$(RPM)/SOURCES
sudo rpmbuild -ba rpm/$(PROJECT).spec
##############################################################################
#
# Library and header files location section - in prioritised order
#
# - relative path
# - local installation
# - system installation
#
LIBRE_PATH := ../re
# Include path
LIBRE_INC := $(shell [ -f $(LIBRE_PATH)/include/re.h ] && \
echo "$(LIBRE_PATH)/include")
ifeq ($(LIBRE_INC),)
LIBRE_INC := $(shell [ -f /usr/local/include/re/re.h ] && \
echo "/usr/local/include/re")
endif
ifeq ($(LIBRE_INC),)
LIBRE_INC := $(shell [ -f /usr/include/re/re.h ] && echo "/usr/include/re")
endif
# Library path
LIBRE_SO := $(shell [ -f $(LIBRE_PATH)/libre$(LIB_SUFFIX) ] \
&& echo "$(LIBRE_PATH)")
ifeq ($(LIBRE_SO),)
LIBRE_SO := $(shell [ -f /usr/local/lib/libre$(LIB_SUFFIX) ] \
&& echo "/usr/local/lib")
endif
ifeq ($(LIBRE_SO),)
LIBRE_SO := $(shell [ -f /usr/lib/libre$(LIB_SUFFIX) ] && echo "/usr/lib")
endif
ifeq ($(LIBRE_SO),)
LIBRE_SO := $(shell [ -f /usr/lib64/libre$(LIB_SUFFIX) ] && echo "/usr/lib64")
endif
###############################################################################
#
# Clang section
#
CLANG_OPTIONS := -Iinclude -I$(LIBRE_INC) $(CFLAGS)
CLANG_IGNORE :=
CLANG_SRCS += $(filter-out $(CLANG_IGNORE), $(patsubst %,src/%,$(SRCS)))
clang:
@clang --analyze $(CLANG_OPTIONS) $(CLANG_SRCS)
@rm -f *.plist
###############################################################################
#
# Documentation section
#
DOX_DIR=../$(PROJECT)-dox
DOX_TAR=$(PROJECT)-dox-$(VERSION)
$(DOX_DIR):
@mkdir $@
$(DOX_DIR)/Doxyfile: mk/Doxyfile Makefile
@cp $< $@
@perl -pi -e 's/PROJECT_NUMBER\s*=.*/PROJECT_NUMBER = $(VERSION)/' \
$(DOX_DIR)/Doxyfile
.PHONY:
dox: $(DOX_DIR) $(DOX_DIR)/Doxyfile
@doxygen $(DOX_DIR)/Doxyfile 2>&1 | grep -v DEBUG_ ; true
@cd .. && rm -f $(DOX_TAR).tar.gz && \
tar -zcf $(DOX_TAR).tar.gz $(PROJECT)-dox > /dev/null && \
echo "Doxygen docs in `pwd`/$(DOX_TAR).tar.gz"