massively improved build system
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
## 1 2 3 4 5 6 7 8
|
||||
## 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
# define least version number from subversion's revision number:
|
||||
# it is taken modulo 256 due to a bug on Apple's MacOSX
|
||||
m4_define(x_least, m4_esyscmd_s(
|
||||
LEAST="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout"
|
||||
for path in . .. ../..; do
|
||||
@@ -15,6 +17,8 @@ m4_define(x_least, m4_esyscmd_s(
|
||||
done
|
||||
echo $ECHO_N $LEAST
|
||||
))
|
||||
|
||||
## bugreport mail address is taken from <user@host> in first line of AUTHORS
|
||||
m4_define(x_bugreport, m4_esyscmd_s(
|
||||
head -1 AUTHORS | \
|
||||
sed -n 's,.*<\([-_.a-z0-9A-Z]*@[-_.a-z0-9A-Z]*\)>.*,\1,gp'
|
||||
@@ -38,6 +42,11 @@ dnl refers to ${prefix}. Thus we have to use `eval' twice.
|
||||
test "$exec_prefix_NONE" && exec_prefix=NONE
|
||||
])
|
||||
|
||||
# add target dependencies to an existing makefile.in
|
||||
# - parameters:
|
||||
# $1 = existing target
|
||||
# $2 = new dependency for that target
|
||||
# $3 = filename of makefile.in
|
||||
AC_DEFUN([AX_ADD_MAKEFILE_TARGET_DEP], [
|
||||
sh_add_makefile_target_dep() {
|
||||
sed -i ':a;/^'${1}':.*\\$/{N;s/\\\n//;ta};s/^'${1}':.*$/& '${2}'/' "${srcdir}/${3}"
|
||||
@@ -51,13 +60,34 @@ AC_DEFUN([AX_ADD_MAKEFILE_TARGET_DEP], [
|
||||
fi
|
||||
])
|
||||
|
||||
# Same as AC_SUBST, but adds -Dname="value" option to CPPFLAGS
|
||||
# - parameters:
|
||||
# $1 = variable name
|
||||
AC_DEFUN([AX_SUBST], [
|
||||
AC_SUBST([$1])
|
||||
tmp_var="${$1//$'\n'/\n}"
|
||||
AM_CPPFLAGS+=' -D$1='"'${tmp_var//#/\\#}'"
|
||||
tmp_var=$(echo "${$1}" | sed ':a;N;$!ba;s/\n/\\n/g')
|
||||
tmp_var=${tmp_var//\"/\\\"}
|
||||
tmp_var=${tmp_var//\'/\'\"\'\"\'}
|
||||
tmp_var=${tmp_var//#/\\#}
|
||||
AM_CPPFLAGS+=" '-D$1=\"${tmp_var}\"'"
|
||||
AC_SUBST(AM_CPPFLAGS)
|
||||
])
|
||||
|
||||
# must be called on the right position in configure.ac
|
||||
#
|
||||
# configure.ac must start with:
|
||||
#
|
||||
# m4_define(x_package_name, YOUR_PACKAGE_NAME) # project's name
|
||||
# m4_define(x_major, MAJOR_NUMBER) # project's major version
|
||||
# m4_define(x_minor, MINOR_NUMBER) # project's minor version
|
||||
# m4_include(ax_init_standard_project.m4)
|
||||
# AC_INIT(x_package_name, x_major.x_minor.x_least, x_bugreport, x_package_name)
|
||||
# AM_INIT_AUTOMAKE([1.9 tar-pax])
|
||||
# AX_INIT_STANDARD_PROJECT
|
||||
#
|
||||
# you change nothing but: YOUR_PACKAGE_NAME, MAJOR_NUMBER, MINOR_NUMBER
|
||||
#
|
||||
# configures the basic environment
|
||||
AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
|
||||
AM_CPPFLAGS+=" '-DMAKE_STRING(X)=\#X' '-DNAMESPACE=${PACKAGE_NAME}'"
|
||||
AX_SUBST(NUMBERS)
|
||||
@@ -65,31 +95,25 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
|
||||
README=$(tail -n +3 README)
|
||||
AX_SUBST(README)
|
||||
_AM_SUBST_NOTMAKE([README])
|
||||
README_STR=$(sed 's,",\\",g; :a;N;$!ba;s/\n/\\n/g' README)
|
||||
AM_CPPFLAGS+=" '-DREADME_STR=\"${README_STR}\"'"
|
||||
DESCRIPTION=$(head -1 README)
|
||||
AX_SUBST(DESCRIPTION)
|
||||
_AM_SUBST_NOTMAKE([DESCRIPTION])
|
||||
AUTHOR=$(head -1 AUTHORS)
|
||||
AX_SUBST(AUTHOR)
|
||||
_AM_SUBST_NOTMAKE([AUTHOR])
|
||||
AM_CPPFLAGS+=" '-DAUTHOR_STR=\"${AUTHOR}\"'"
|
||||
DISTRO=$(lsb_release -sc)
|
||||
AX_SUBST(DISTRO)
|
||||
BUILD_NUMBER=${BUILD_NUMBER:-1}
|
||||
AX_SUBST(BUILD_NUMBER)
|
||||
BUILD_DATE=$(date -R)
|
||||
AX_SUBST(BUILD_DATE)
|
||||
AM_CPPFLAGS+=" '-DBUILD_DATE_STR=\"${BUILD_DATE}\"'"
|
||||
if test -f "${PROJECT_NAME}-logo.png"; then
|
||||
PROJECT_LOGO="${PROJECT_NAME}-logo.png"
|
||||
fi
|
||||
AX_SUBST(PROJECT_LOGO)
|
||||
AM_CPPFLAGS+=" '-DPROJECT_LOGO_STR=\"${PROJECT_LOGO}\"'"
|
||||
if test -f "${PROJECT_NAME}-icon.png"; then
|
||||
PROJECT_ICON="${PROJECT_NAME}-icon.png"
|
||||
fi
|
||||
AM_CPPFLAGS+=" '-DPROJECT_ICON_STR=\"${PROJECT_ICON}\"'"
|
||||
AX_SUBST(PROJECT_ICON)
|
||||
AC_CONFIG_FILES([makefile])
|
||||
AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-standard-project-targets], [makefile.in])
|
||||
@@ -111,6 +135,7 @@ maintainer-clean-standard-project-targets:
|
||||
EOF
|
||||
])
|
||||
|
||||
# use this in configure.ac to support C++
|
||||
AC_DEFUN([AX_USE_CXX], [
|
||||
m4_include(ax_cxx_compile_stdcxx_11.m4)
|
||||
AC_LANG(C++)
|
||||
@@ -165,6 +190,7 @@ maintainer-clean-cxx-targets:
|
||||
EOF
|
||||
])
|
||||
|
||||
# use this in configure.ac to support CppUnit for C++ unit tests
|
||||
AC_DEFUN([AX_USE_CPPUNIT], [
|
||||
AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"])
|
||||
# infos and warnings
|
||||
@@ -182,6 +208,7 @@ maintainer-clean-test-targets:
|
||||
EOF
|
||||
])
|
||||
|
||||
# use this in configure.ac to support C++ examples
|
||||
AC_DEFUN([AX_BUILD_EXAMPLES], [
|
||||
AC_CONFIG_FILES([examples/makefile])
|
||||
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-example-targets], [examples/makefile.in])
|
||||
@@ -193,6 +220,7 @@ maintainer-clean-example-targets:
|
||||
EOF
|
||||
])
|
||||
|
||||
# use this in configure.ac to support C++ libraries
|
||||
AC_DEFUN([AX_USE_LIBTOOL], [
|
||||
# libtool versioning
|
||||
LIB_MAJOR=m4_eval(x_major+x_minor)
|
||||
@@ -220,6 +248,7 @@ uninstall-data-libtool-pkg:
|
||||
EOF
|
||||
])
|
||||
|
||||
# use this in configure.ac to support debian packages
|
||||
AC_DEFUN([AX_USE_DEBIAN_PACKAGING], [
|
||||
README_DEB=$(tail -n +3 README | sed -e 's/^$/./g' -e 's/^/ /g')
|
||||
AC_SUBST(README_DEB)
|
||||
@@ -240,6 +269,7 @@ distclean-debian-targets:
|
||||
EOF
|
||||
])
|
||||
|
||||
# use this in configure.ac to support RPM packages
|
||||
AC_DEFUN([AX_USE_RPM_PACKAGING], [
|
||||
# m4_include(ax_rpm_rules.m4)
|
||||
AC_CONFIG_FILES([${PACKAGE_NAME}.spec])
|
||||
@@ -253,6 +283,7 @@ rpm: dist
|
||||
EOF
|
||||
])
|
||||
|
||||
# use this in configure.ac to support Doxygen documentation generation
|
||||
AC_DEFUN([AX_USE_DOXYGEN], [
|
||||
AC_CHECK_PROG(have_doxygen, doxygen, yes, no)
|
||||
AC_CHECK_PROG(have_dot, dot, yes, no)
|
||||
@@ -303,6 +334,18 @@ uninstall-documentation:
|
||||
EOF
|
||||
])
|
||||
|
||||
# require a specific package, with fallback: test for a header
|
||||
# - parameter:
|
||||
# $1 = unique id (no special characters)
|
||||
# $2 = module name
|
||||
# $3 = a header file to find (optional)
|
||||
# $4 = alternative module names (space separated, optional)
|
||||
#
|
||||
# uses PKG_CHECK_MODULES to test for a module
|
||||
# then, if given, looks for the header file
|
||||
# if header file is not found, searches in alternative modules
|
||||
# sets all flags, so that the module can be used everywhere
|
||||
# fails if not found
|
||||
AC_DEFUN([AX_PKG_REQUIRE], [
|
||||
PKG_PROG_PKG_CONFIG
|
||||
PKG_CHECK_MODULES([$1], [$2], [
|
||||
@@ -380,6 +423,14 @@ AC_DEFUN([AX_PKG_REQUIRE], [
|
||||
fi
|
||||
])
|
||||
|
||||
# check if a specific package exists
|
||||
# - parameter:
|
||||
# $1 = unique id (no special characters)
|
||||
# $2 = module name (optional, if different from id)
|
||||
#
|
||||
# uses PKG_CHECK_MODULES to test for a module
|
||||
# sets automake conditional HAVE_$1 to 0 (not found) or 1 (found)
|
||||
# sets all flags, so that the module can be used everywhere
|
||||
AC_DEFUN([AX_PKG_CHECK], [
|
||||
PKG_PROG_PKG_CONFIG
|
||||
PKG_CHECK_MODULES([$1], [m4_default([$2], [$1])], [
|
||||
|
||||
Reference in New Issue
Block a user