C++ Library containing a lot of needful things: Stack Trace, Command Line Parser, Resource Handling, Configuration Files, Unix Command Execution, Directories, Regular Expressions, Tokenizer, Function Trace, Standard Extensions.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
537 lines
19 KiB
537 lines
19 KiB
## @id $Id$ |
|
|
|
## 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( |
|
SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" |
|
for path in . .. ../..; do |
|
if svn info $path 2>&1 > /dev/null; then |
|
SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') |
|
(cd $path && svn2cl) |
|
break; |
|
fi |
|
done |
|
# Mac does not support LEAST > 255 |
|
echo $ECHO_N $(($SVN_REVISION%256)) |
|
)) |
|
# define version number from subversion's revision number: |
|
# it is taken modulo 256 due to a bug on Apple's MacOSX |
|
# add to x_minor if revision number is > 256 |
|
m4_define(x_minor_fixed, m4_esyscmd_s( |
|
SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" |
|
for path in . .. ../..; do |
|
if svn info $path 2>&1 > /dev/null; then |
|
SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') |
|
(cd $path && svn2cl) |
|
break; |
|
fi |
|
done |
|
# Mac does not support LEAST > 255 |
|
echo $ECHO_N $((x_minor+$SVN_REVISION/256)) |
|
)) |
|
# setup version number |
|
m4_define(x_version, m4_esyscmd_s( |
|
echo $ECHO_N x_major.x_minor_fixed.x_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' |
|
)) |
|
|
|
m4_include(ax_check_qt.m4) |
|
|
|
AC_ALIAS([AC_DEFINE_DIR], [AX_DEFINE_DIR]) |
|
AC_DEFUN([AX_DEFINE_DIR], [ |
|
prefix_NONE= |
|
exec_prefix_NONE= |
|
test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix |
|
test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix |
|
dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn |
|
dnl refers to ${prefix}. Thus we have to use `eval' twice. |
|
eval ax_define_dir="\"[$]$2\"" |
|
eval ax_define_dir="\"$ax_define_dir\"" |
|
AC_SUBST($1, "$ax_define_dir") |
|
AC_DEFINE_UNQUOTED($1, "$ax_define_dir", [$3]) |
|
test "$prefix_NONE" && prefix=NONE |
|
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 -e ':a;/^'${1}':.*\\$/{N;s/\\\n//;ta};s/^'${1}':.*$/& '${2}'/' "${srcdir}/${3}" |
|
if ! egrep -q "${1}:.* ${2}" "${srcdir}/${3}"; then |
|
echo "${1}: ${2}" >> "${srcdir}/${3}" |
|
fi |
|
} |
|
sh_add_makefile_target_dep "$1" "$2" "$3" |
|
if test "$1" != ".PHONY"; then |
|
sh_add_makefile_target_dep ".PHONY" "$2" "$3" |
|
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=$(echo "${$1}" | awk 1 ORS='\\n') |
|
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_version, 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], [ |
|
MINGW=no |
|
MAC=no |
|
case $host in |
|
*mingw*) MINGW=yes;; |
|
*darwin* | *rhapsody* | *macosx*) MAC=yes;; |
|
esac |
|
AM_CONDITIONAL(MINGW, test "$MINGW" = "yes") |
|
AM_CONDITIONAL(MAC, test "$MAC" = "yes") |
|
AM_CPPFLAGS+=" '-DMAKE_STRING(X)=\#X' '-DNAMESPACE=${PACKAGE_TARNAME//[^a-zA-Z0-9]/_}'" |
|
AX_SUBST(NUMBERS) |
|
AX_SUBST(HOME) |
|
README=$(tail -n +3 README) |
|
AX_SUBST(README) |
|
_AM_SUBST_NOTMAKE([README]) |
|
DESCRIPTION=$(head -1 README) |
|
AX_SUBST(DESCRIPTION) |
|
_AM_SUBST_NOTMAKE([DESCRIPTION]) |
|
AUTHOR=$(head -1 AUTHORS) |
|
AX_SUBST(AUTHOR) |
|
_AM_SUBST_NOTMAKE([AUTHOR]) |
|
DISTRO=$(lsb_release -sc) |
|
AX_SUBST(DISTRO) |
|
BUILD_NUMBER=${BUILD_NUMBER:-1} |
|
AX_SUBST(BUILD_NUMBER) |
|
BUILD_DATE=$(LANG= date +"%a, %d %B %Y %H:%M:%S %z") |
|
AX_SUBST(BUILD_DATE) |
|
if test -f "${PROJECT_NAME}-logo.png"; then |
|
PROJECT_LOGO="${PROJECT_NAME}-logo.png" |
|
fi |
|
AX_SUBST(PROJECT_LOGO) |
|
if test -f "${PROJECT_NAME}-icon.png"; then |
|
PROJECT_ICON="${PROJECT_NAME}-icon.png" |
|
fi |
|
AX_SUBST(PROJECT_ICON) |
|
|
|
AC_ARG_ENABLE(pedantic, |
|
[AS_HELP_STRING([--enable-pedantic], |
|
[enable all warnings and checks, abort on warnings])], |
|
[have_pedantic="$enableval"; test "$enableval" = "yes" && \ |
|
AM_CXXFLAGS="${AM_CXXFLAGS:-} -pedantic-errors -Wall -W -Wfloat-equal -Wundef -Wendif-labels -Wpointer-arith -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare -Wmissing-format-attribute -Wno-multichar -Wpacked -Wredundant-decls -Werror -Wshadow -Wcast-qual -Wno-ctor-dtor-privacy"]) |
|
dnl problem in libs: -Wshadow -Wcast-qual |
|
dnl auto.hpp: -Wno-ctor-dtor-privacy (removed) |
|
AM_CONDITIONAL(PEDANTIC, test "$enableval" = "yes") |
|
if test "$have_pedantic" == "yes"; then |
|
AC_MSG_NOTICE([Pedantic compile mode enabled! |
|
- all warnings for GNU g++ are enabled |
|
- all warnings result in an error |
|
- doxygen warnings are treated as error too]); fi |
|
|
|
AC_CONFIG_FILES([makefile]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-standard-project-targets], [makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([distclean-am], [distclean-standard-project-targets], [makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-standard-project-targets], [makefile.in]) |
|
test -f makefile.in && cat >> makefile.in <<EOF |
|
#### Begin: Appended by $0 |
|
EXTRA_DIST = bootstrap.sh |
|
doc_DATA = AUTHORS NEWS README COPYING INSTALL ChangeLog |
|
clean-standard-project-targets: |
|
-rm -rf \${PACKAGE_NAME}-\${PACKAGE_VERSION} |
|
-rm \${PACKAGE_TARNAME}-\${PACKAGE_VERSION}.tar.gz |
|
distclean-standard-project-targets: |
|
-rm -r autom4te.cache |
|
-rm aclocal.m4 config.guess config.sub configure depcomp compile install-sh ltmain.sh makefile missing mkinstalldirs |
|
maintainer-clean-standard-project-targets: |
|
-rm makefile.in |
|
#### End: $0 |
|
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++) |
|
AX_CXX_COMPILE_STDCXX_11(noext, optional) |
|
AC_PROG_CXX |
|
AC_PROG_CPP |
|
|
|
AC_CONFIG_FILES([src/makefile]) |
|
|
|
AM_CPPFLAGS+=' -I ${top_srcdir}/src -I ${top_builddir}/src -I ${srcdir} -I ${builddir}' |
|
AM_LDFLAGS+=' -L ${top_srcdir}/src -L ${top_builddir}/src' |
|
|
|
# Get rid of those stupid -g -O2 options! |
|
CXXFLAGS="${CXXFLAGS//-g -O2/}" |
|
CFLAGS="${CFLAGS//-g -O2/}" |
|
|
|
# pass compile flags to make distcheck |
|
AM_DISTCHECK_CONFIGURE_FLAGS="CXXFLAGS='${CXXFLAGS}' CPPFLAGS='${CPPFLAGS}' CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'" |
|
AC_SUBST(AM_DISTCHECK_CONFIGURE_FLAGS) |
|
|
|
AC_SUBST(AM_CXXFLAGS) |
|
AC_SUBST(AM_CPPFLAGS) |
|
AC_SUBST(AM_LDFLAGS) |
|
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-cxx-targets], [src/makefile.in]) |
|
test -f src/makefile.in && cat >> src/makefile.in <<EOF |
|
#### Begin: Appended by $0 |
|
%.app: % |
|
-rm -r [\$][@] |
|
\$(MAKE) DESTDIR=[\$][\$](pwd)/[\$][@]/tmp install |
|
QTDIR="\${QTDIR}" \ |
|
QT_PLUGINS="\${QT_PLUGINS}" \ |
|
QT_PLUGIN_PATH="\${QT_PLUGIN_PATH}" \ |
|
\${top_builddir}/mac-create-app-bundle.sh \ |
|
[\$][@] [\$][<] [\$][\$](pwd)/[\$][@]/tmp\${prefix} |
|
|
|
maintainer-clean-cxx-targets: |
|
-rm makefile.in |
|
#### End: $0 |
|
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 |
|
if test "$have_cppunit" = "no"; then |
|
AC_MSG_WARN([Missing cppunit development library! |
|
- you cannot check the library using "make check" |
|
- everything else works perfectly]); fi |
|
AC_CONFIG_FILES([test/makefile]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-test-targets], [test/makefile.in]) |
|
test -f test/makefile.in && cat >> test/makefile.in <<EOF |
|
#### Begin: Appended by $0 |
|
maintainer-clean-test-targets: |
|
-rm makefile.in |
|
#### End: $0 |
|
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]) |
|
test -f examples/makefile.in && cat >> examples/makefile.in <<EOF |
|
#### Begin: Appended by $0 |
|
maintainer-clean-example-targets: |
|
-rm makefile.in |
|
#### End: $0 |
|
EOF |
|
]) |
|
|
|
# use this in configure.ac to support HTML data for webservers |
|
AC_DEFUN([AX_BUILD_HTML], [ |
|
AC_CONFIG_FILES([html/makefile]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-example-targets], [html/makefile.in]) |
|
test -f html/makefile.in && cat >> examples/html.in <<EOF |
|
#### Begin: Appended by $0 |
|
maintainer-clean-example-targets: |
|
-rm makefile.in |
|
#### End: $0 |
|
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_fixed) |
|
LIB_MINOR=x_least |
|
LIB_LEAST=x_minor_fixed |
|
LIB_VERSION="${LIB_MAJOR}:${LIB_MINOR}:${LIB_LEAST}" |
|
AM_LDFLAGS="-version-info ${LIB_VERSION}" |
|
AC_SUBST(AM_LDFLAGS) |
|
AC_SUBST(LIB_VERSION) |
|
AC_PROG_LIBTOOL |
|
AC_CONFIG_FILES([src/${PACKAGE_NAME}.pc]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([install-data-am], [install-data-libtool-pkg], [src/makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([uninstall-am], [uninstall-data-am], [src/makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([uninstall-data-am], [uninstall-data-libtool-pkg], [src/makefile.in]) |
|
test -f src/makefile.in && cat >> src/makefile.in <<EOF |
|
#### Begin: Appended by $0 |
|
install-data-libtool-pkg: |
|
test -d \$(DESTDIR)\${libdir}/pkgconfig || mkdir -p \$(DESTDIR)\${libdir}/pkgconfig |
|
chmod -R u+w \$(DESTDIR)\${libdir}/pkgconfig |
|
cp \${PACKAGE_NAME}.pc \$(DESTDIR)\${libdir}/pkgconfig/ |
|
uninstall-data-libtool-pkg: |
|
-chmod -R u+w \$(DESTDIR)\${libdir}/pkgconfig |
|
-rm -f \$(DESTDIR)\${libdir}/pkgconfig/\${PACKAGE_NAME}.pc |
|
#### End: $0 |
|
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) |
|
_AM_SUBST_NOTMAKE([README_DEB]) |
|
AC_CONFIG_FILES([debian/changelog debian/control]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-debian-targets], [makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([distclean-am], [distclean-debian-targets], [makefile.in]) |
|
test -f makefile.in && cat >> makefile.in <<EOF |
|
#### Begin: Appended by $0 |
|
EXTRA_DIST += debian |
|
clean-debian-targets: |
|
-rm -rf \${PACKAGE_NAME}_\${PACKAGE_VERSION}~\${DISTRO}.\${BUILD_NUMBER}.{dsc,tar.gz} \${PACKAGE_NAME}_\${PACKAGE_VERSION}~\${DISTRO}.\${BUILD_NUMBER}*.changes \$\$(sed -n 's,Package: \(.*\),\1_${PACKAGE_VERSION}~${DISTRO}.${BUILD_NUMBER}*.deb,p;' debian/control) |
|
deb: distdir |
|
cd \${PACKAGE_NAME}-\${PACKAGE_VERSION} && ( export CFLAGS="\${CFLAGS}"; export CPPFLAGS="\${CPPFLAGS}"; export CXXFLAGS="\${CXXFLAGS}"; export LDFLAGS="\${LDFLAGS}"; export DEB_CFLAGS_APPEND="\${CFLAGS}"; export DEB_CPPFLAGS_APPEND="\${CPPFLAGS}"; export DEB_CXXFLAGS_APPEND="\${CXXFLAGS}"; export DEB_LDFLAGS_APPEND="\${LDFLAGS}"; dpkg-buildpackage ) |
|
distclean-debian-targets: |
|
-rm debian/changelog debian/control |
|
#### End: $0 |
|
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]) |
|
#AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-rpm-targets], [makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([distclean-am], [distclean-rpm-targets], [makefile.in]) |
|
test -f makefile.in && cat >> makefile.in <<EOF |
|
#### Begin: Appended by $0 |
|
EXTRA_DIST += \${PACKAGE_NAME}.spec.in |
|
rpm: dist |
|
rpmbuild -ba --define "_topdir \$\$(pwd)" --define "_sourcedir \$\$(pwd)" \${PACKAGE_NAME}.spec |
|
distclean-rpm-targets: |
|
-rm \${PACKAGE_NAME}.spec |
|
#### End: $0 |
|
EOF |
|
]) |
|
|
|
# use this in configure.ac to support scripts, e.g. bash scripts |
|
AC_DEFUN([AX_USE_SCRIPTS], [ |
|
AC_CONFIG_FILES([scripts/makefile]) |
|
]) |
|
|
|
# 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) |
|
AC_CHECK_PROG(have_mscgen, mscgen, yes, no) |
|
PDF_DOC=${PACKAGE_NAME}-${PACKAGE_VERSION}.pdf |
|
AC_SUBST(PDF_DOC) |
|
if test "$have_doxygen" = "no"; then |
|
AC_MSG_WARN([Missing program doxygen! |
|
- you cannot rebuild the documentation |
|
- there are precompiled derived files in the distribution]); fi |
|
if test "$have_dot" = "no"; then |
|
AC_MSG_WARN([Missing program dot! |
|
- when you rebild documentation, there are no generated images |
|
- there are precompiled derived files in the distribution]); fi |
|
if test "$have_mscgen" = "no"; then |
|
AC_MSG_WARN([Missing program mscgen! |
|
- when you rebild documentation, there are no message state charts |
|
- there are precompiled derived files in the distribution]); fi |
|
AC_CONFIG_FILES([doc/makefile doc/doxyfile]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-documentation], [doc/makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([distclean-am], [distclean-documentation], [doc/makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-documentation], [doc/makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([install-data-am], [install-data-documentation], [doc/makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([uninstall-am], [uninstall-documentation], [doc/makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([all], [doc], [doc/makefile.in]) |
|
AX_ADD_MAKEFILE_TARGET_DEP([.PHONY], [pdf], [doc/makefile.in]) |
|
test -f doc/makefile.in && cat >> doc/makefile.in <<EOF |
|
#### Begin: Appended by $0 |
|
doc: doxyfile |
|
doxygen doxyfile |
|
@PEDANTIC_TRUE@ test \! -s doxygen.errors |
|
|
|
clean-documentation: |
|
-rm doxygen.errors @PDF_DOC@ |
|
distclean-documentation: |
|
-rm -r html |
|
-rm @PACKAGE_NAME@.doxytag |
|
maintainer-clean-documentation: |
|
-rm makefile.in |
|
install-data-documentation: |
|
test -d \$(DESTDIR)\${docdir} || mkdir -p \$(DESTDIR)\${docdir} |
|
chmod -R u+w \$(DESTDIR)\${docdir} |
|
cp -r html \$(DESTDIR)\${docdir}/ |
|
uninstall-documentation: |
|
-chmod -R u+w \$(DESTDIR)\${docdir} |
|
-rm -rf \$(DESTDIR)\${docdir}/html |
|
#### End: $0 |
|
EOF |
|
]) |
|
|
|
# require a specific package, with fallback: test for a header |
|
# - parameter: |
|
# $1 = unique id (no special characters) |
|
# $2 = module name (optional, if different from id) |
|
# $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 |
|
$1_found=no |
|
secondpar="m4_default([$2], [$1])" |
|
PKG_CHECK_MODULES([$1], [m4_default([$2], [$1])], [ |
|
$1_found=$secondpar |
|
PKG_REQUIREMENTS+=" $secondpar" |
|
], [ |
|
if test -n "$4"; then |
|
AC_MSG_WARN([Recommended package $secondpar for feature $1 not installed, trying $4]) |
|
for pkg in $4; do |
|
PKG_CHECK_MODULES([$1], [$pkg], [ |
|
PKG_REQUIREMENTS+=" $pkg" |
|
$1_found=$pkg |
|
break; |
|
], [ |
|
AC_MSG_WARN([Recommended package $pkg for feature $1 not installed]) |
|
]) |
|
done |
|
fi |
|
]) |
|
AC_SUBST(CPPFLAGS) |
|
AC_SUBST(CXXFLAGS) |
|
AC_SUBST(PKG_REQUIREMENTS) |
|
if test -n "$3"; then |
|
if test "${$1_found}" = "no"; then |
|
tmp_package="yes" |
|
else |
|
tmp_package=${$1_found} |
|
fi |
|
$1_found=no |
|
old_CPPFLAGS=${CPPFLAGS} |
|
CPPFLAGS=" ${$1_CFLAGS} ${CPPFLAGS}" |
|
AC_CHECK_HEADER([$3], [ |
|
$1_found=${tmp_package} |
|
], [ |
|
for x in ${$1_CFLAGS}; do |
|
AC_MSG_NOTICE([search for $3 in ${x[#]-I}]) |
|
for f in $(find ${x[#]-I} -name "$3"); do |
|
if test -f "$f"; then |
|
$1_found=${tmp_package} |
|
$1_CFLAGS+=" -I${f%/*}" |
|
AC_MSG_NOTICE([added path ${f%/*}]) |
|
break; |
|
fi |
|
done |
|
if test "${$1_found}" != "no"; then |
|
break; |
|
fi |
|
done |
|
if test "${$1_found}" = "no"; then |
|
tmp_includedir=$(${PKG_CONFIG} --variable=includedir $tmp_package) |
|
for x in ${tmp_includedir}; do |
|
AC_MSG_NOTICE([search for $3 in $x]) |
|
for f in $(find ${x} -name "$3"); do |
|
if test -f "$f"; then |
|
$1_found=${tmp_package} |
|
$1_CFLAGS+=" -I${f%/*}" |
|
AC_MSG_NOTICE([added path ${f%/*}]) |
|
break; |
|
fi |
|
done |
|
if test "${$1_found}" != "no"; then |
|
break; |
|
fi |
|
done |
|
fi |
|
]) |
|
CPPFLAGS=${old_CPPFLAGS} |
|
fi |
|
if test "${$1_found}" = "no"; then |
|
if test -n "$3"; then |
|
if test -n "$4"; then |
|
AC_MSG_ERROR([Feature $1 not found, need header $3 in modules $secondpar or $4]) |
|
else |
|
AC_MSG_ERROR([Feature $1 not found, need header $3 in module $secondpar]) |
|
fi |
|
else |
|
AC_MSG_ERROR([Feature $1 not found please install module $secondpar]) |
|
fi |
|
fi |
|
CPPFLAGS+=" ${$1_CFLAGS}" |
|
CXXFLAGS+=" ${$1_CFLAGS}" |
|
LIBS+=" ${$1_LIBS}" |
|
]) |
|
|
|
# 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])], [ |
|
HAVE_$1=1 |
|
CPPFLAGS+=" ${$1_CFLAGS}" |
|
CXXFLAGS+=" ${$1_CFLAGS}" |
|
LIBS+=" ${$1_LIBS}" |
|
if test -z "$PKG_REQUIREMENTS"; then |
|
PKG_REQUIREMENTS="m4_default([$2], [$1])" |
|
else |
|
PKG_REQUIREMENTS="${PKG_REQUIREMENTS}, m4_default([$2], [$1])" |
|
fi |
|
], [ |
|
HAVE_$1=0 |
|
]) |
|
AM_CONDITIONAL(HAVE_$1, test $HAVE_$1 -eq 1) |
|
AC_SUBST(HAVE_$1) |
|
AC_SUBST(CPPFLAGS) |
|
AC_SUBST(CXXFLAGS) |
|
AC_SUBST(PKG_REQUIREMENTS) |
|
]) |
|
|
|
# make sure, a specific header exists |
|
# - parameter: |
|
# $1 = header name |
|
AC_DEFUN([AX_REQUIRE_HEADER], [ |
|
AC_CHECK_HEADER($1, [], [ |
|
if test -n "$2"; then |
|
found=0 |
|
for d in $2; do |
|
if test -f "${d}/$1"; then |
|
AC_MSG_NOTICE([found file ${d}/$1]) |
|
CPPFLAGS+=" -I${d}" |
|
found=1 |
|
break; |
|
else |
|
AC_MSG_NOTICE([not found file ${d}/$1]) |
|
fi |
|
done |
|
fi |
|
if test $found -eq 0; then |
|
AC_MSG_ERROR([Header $1 not found]) |
|
fi |
|
], []) |
|
], []) |
|
])
|
|
|