# $Id$ m4_include(ax_cxx_compile_stdcxx_11.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 ]) AC_INIT([README]) SRC_DIR=src TST_DIR=test DOC_DIR=doc m4_define(x_packagename, mrw-c++) m4_define(x_major, 4) m4_define(x_minor, 1) PACKAGENAME=x_packagename MAJOR=x_major MINOR=x_minor BUILDDATE=$(date "+%d.%m.%Y/%H.%M") if svn info . 2>&1 > /dev/null; then LEAST=$(LANG= svn info $path | sed -n 's/Revision: //p') break; else MAJOR=[$(pwd | sed -n 's,^.*/'${PACKAGENAME}'-\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*$,\1,p')] MINOR=[$(pwd | sed -n 's,^.*/'${PACKAGENAME}'-\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*$,\2,p')] LEAST=[$(pwd | sed -n 's,^.*/'${PACKAGENAME}'-\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*$,\3,p')] if test -z "${LEAST}"; then AC_MSG_ERROR([CANNOT DETERMINE REVISION NUMBER from $(pwd) Got: ${MAJOR}.${MINOR}.${LEAST}]) fi fi # due to restriction on Max OSX: max version is 65535.255.255 while test $LEAST -gt 255; do LEAST=$((LEAST-255)) MINOR=$((MINOR+1)) done while test $MINOR -gt 255; do MINOR=$((MINOR-255)) MAJOR=$((MAJOR+1)) done AC_MSG_NOTICE([Version number of $PACKAGENAME is: ${MAJOR}.${MINOR}.${LEAST}]) AM_INIT_AUTOMAKE($PACKAGENAME, $MAJOR.$MINOR.$LEAST, [marc@waeckerlin.org]) # author for signing packages if test -z "$PACKAGERID"; then PACKAGERID="Marc Wäckerlin (http://marc.waeckerlin.org) " fi AC_ARG_VAR(PACKAGERID, [Signature identification of the package author.]) BUILDDATE=$(date --rfc-2822) AC_SUBST(BUILDDATE) # files to create AC_CONFIG_FILES([makefile ${PACKAGENAME}.spec src/version.cxx src/makefile test/makefile doc/doxyfile doc/makefile src/mrw/mrw.hxx doc/examples/makefile src/${PACKAGENAME}.pc debian/changelog debian/control]) # copy M4 to shell AC_SUBST(MAJOR) AC_SUBST(MINOR) AC_SUBST(LEAST) AC_SUBST(BUILDDATE) # libtool versioning LIB_MAJOR=m4_eval(x_major+x_minor) LIB_MINOR=${LEAST} LIB_LEAST=x_minor LIB_VERSION="${LIB_MAJOR}:${LIB_MINOR}:${LIB_LEAST}" AC_SUBST(LIB_VERSION) # home AC_SUBST(HOME) # datadir for languages AX_DEFINE_DIR([DATADIR], [datadir]) #AC_SUBST(DATADIR) # macros sed -e 's/^$/./' -e 's/^/ /g' ${0%/*}/README > ${0%/*}/README.debian READMEDEB=README.debian AC_SUBST_FILE(READMEDEB) README=README AC_SUBST_FILE(README) CHANGE_LOG=ChangeLog AC_SUBST_FILE(CHANGE_LOG) AM_CPPFLAGS="-DPACKAGEVERSION='\"${VERSION}\"' -DPACKAGENAME='\"${PACKAGENAME}\"'" # Get rid of that stupid -O2 -g opions! CXXFLAGS="${CXXFLAGS:-}" # languages AC_LANG(C++) AX_CXX_COMPILE_STDCXX_11(noext, optional) # programs AC_PROG_CXX AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_LIBTOOL AC_CHECK_PROG(have_doxygen, doxygen, yes, no) AC_CHECK_PROG(have_dot, dot, yes, no) PKG_PROG_PKG_CONFIG # libraries AC_CHECK_HEADER(log4cxx/logger.h, [have_log4cxx=yes]) AC_CHECK_HEADER(ltdl.h, [have_ltdl=yes]) AC_CHECK_HEADER(regex.h, [have_regex=yes]) AC_CHECK_HEADERS(unistd.h fcntl.h, [have_exec=yes]) AC_CHECK_HEADER(dirent.h, [have_dir=yes]) # solaris? AC_CHECK_HEADER(sys/old_procfs.h, [AM_CPPFLAGS=-D__solaris__]) # Arguments AM_MAINTAINER_MODE AC_ARG_ENABLE(valgrind, AS_HELP_STRING([--enable-valgrind], [runs all checks with valgrind enabled]), [have_valgrind="$enableval"], [have_valgrind="no"]) AM_CONDITIONAL(HAVE_VALGRIND, test "$have_valgrind" = "yes") AC_ARG_ENABLE(threads, [ --disable-threads disable multithreading], [with_threads="$enableval"], [with_threads="yes"]) THREADS="-pthread -D_MT" AM_CONDITIONAL(HAVE_THREADS, test "$with_threads" = "yes") AC_ARG_ENABLE(autofntrace, [ --disable-autofntrace disable automated function trace (requires gcc)], [with_autofntrace="$enableval"], [with_autofntrace="yes"]) AM_CONDITIONAL(AUTOFNTRACE, test "$with_autofntrace" = "yes" -a -n "$GCC") AC_ARG_ENABLE(dir, [ --disable-dir disable POSIX directory access], [have_dir="$enableval"]) AM_CONDITIONAL(HAVE_DIR, test "$have_dir" = "yes") AC_ARG_ENABLE(exec, [ --disable-exec disable UNIX fork and execute with pipes], [have_exec="$enableval"]) AM_CONDITIONAL(HAVE_EXEC, test "$have_exec" = "yes") AC_ARG_ENABLE(regexp, [ --disable-regexp disable use of regular expressions], [have_regex="$enableval"]) AM_CONDITIONAL(HAVE_REGEXP, test "$have_regex" = "yes") AC_ARG_ENABLE(log4cxx, [ --disable-log4cxx disable use of log4cxx library in automated stack trace], [have_log4cxx="$enableval"]) AM_CONDITIONAL(HAVE_LOG4CXX, test "$have_log4cxx" = "yes") AC_ARG_ENABLE(ltdl, [ --disable-ltdl enable use of libtool library dynamic loading Note: For automated stack trace, you need either ltdl or the libbfd BFD library from the binutils package at compile time.], [have_ltdl="$enableval"], [have_ltdl="$have_ltdl"]) AM_CONDITIONAL(HAVE_LTDL, test "$have_ltdl" = "yes") AC_ARG_ENABLE(dynamicstack, [ --enable-dynamic-stack enable use of libtool library dynamic loading for stacktrace, this means the code is not linked to libbfd, instead a dynamical version of libbfd is loaded at runtime - this prevents dependency on the bfd library (which is part of the GNU binutils). Note: For automated stack trace, you need either ltdl or the libbfd BFD library from the GNU binutils package at compile time.], [have_dynamicstack="$enableval"], [have_dynamicstack="no"]) AC_ARG_ENABLE(stacktrace, [ --disable-stacktrace disable stack trace, use this if you cannot compile the library on your system otherwise and you still want to use the other parts], [have_stacktrace="$enableval"], [have_stacktrace="yes"]) AM_CONDITIONAL(HAVE_STACKTRACE, test "$have_stacktrace" = "yes") if test "$have_stacktrace" = "yes"; then # Hack for bug: # /usr/include/libiberty.h:106:36: # error: new declaration 'char* basename(const char*)' # /usr/include/string.h:603:28: error: # ambiguates old declaration 'const char* basename(const char*)' # bug { old_ac_includes_default=$ac_includes_default ac_includes_default="" # } bug AC_CHECK_HEADER([demangle.h], [AC_DEFINE([HAVE_DEMANGLE_H])], [AC_MSG_WARN([Header "demangle.h" from the binutils not found! - unfortunately, the bintils do not install this header (even though they should) - the required symbols are now declared in stacktrace.cxx according to my own binutils version (binutils-2.16.1) it may or may not be compatible to yours])]) AC_SEARCH_LIBS(cplus_demangle, [demangle iberty_pic iberty], [AC_MSG_RESULT([OK, found cplus_demangle])], [AC_MSG_ERROR([Function cplus_demangle not found! - I looked in libdemangle and libiberty - Try "ls -l /usr/lib/libdemangle* /usr/lib/libiberty*" - is one of them installed? - If yes, try: "nm | grep cplus_demangle" -> is the symbol defined? - Try to compile with option --disable-stacktrace If you are not a developer, you perhaps don't need it...?])]) if test "$have_dynamicstack" != "yes"; then AC_DEFINE([NO_LTDL]) AC_SEARCH_LIBS(compress, z, [AC_MSG_RESULT([OK, found libz])], [AC_MSG_ERROR([zlib (libz) not found! It is required for stack trace! - install zlib development package - or configure with option --enable-ltdl - or configure with option --disable-stacktrace])]) AC_SEARCH_LIBS(dlopen, dl, [AC_MSG_RESULT([OK, found libdl])], [AC_MSG_ERROR([libdl not found! It is required for stack trace! - install libdl development package - or configure with option --enable-ltdl - or configure with option --disable-stacktrace])]) AC_SEARCH_LIBS(bfd_openr, bfd, [AC_MSG_RESULT([OK, found libbfd])], [AC_MSG_ERROR([BFD library from the binutils package not found! It is required for stack trace! - install binutils or binutils-devel - or configure with option --enable-ltdl - or configure with option --disable-stacktrace])]) fi # bug { ac_includes_default=$old_ac_includes_default # } bug fi AC_ARG_WITH([boost-thread],AS_HELP_STRING([--with-boost-thread], [specify the boost thread library or suffix to use]), [if test "$with_boost_thread" != "no"; then if test "$with_boost_thread" != "yes"; then chk_libs="$with_boost_thread boost_thread-$with_boost_thread" else chk_libs="boost_thread boost_thread-mt boost_thread-gcc-mt" fi else chk_libs="" fi], [chk_libs="boost_thread boost_thread-mt boost_thread-${CXX} boost_thread-${CC} boost_thread-${CXX}-mt boost_thread-${CC}-mt"]) for ax_lib in $chk_libs; do AC_CHECK_LIB($ax_lib, main, [BOOST_THREAD_LIB="-l$ax_lib" break]) done AC_SUBST(BOOST_THREAD_LIB) AM_CONDITIONAL(HAVE_BOOST_THREAD, test -n "$BOOST_THREAD_LIB") 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.hxx: -Wno-ctor-dtor-privacy (removed) AM_CONDITIONAL(PEDANTIC, test "$enableval" = "yes") AC_ARG_ENABLE(dot, [AS_HELP_STRING([--disable-dot], [disable dot graphic tools for documentation])], [have_dot="$enableval"]) test "$enableval" = "yes" && HAVE_DOT="YES" || HAVE_DOT="NO"; AC_ARG_ENABLE(doxygen, [ --disable-doxygen disable build of documentation], [have_doxygen="$enableval"]) test "$enableval" = "yes" && HAVE_DOXYGEN="YES" || HAVE_DOXYGEN="NO"; AM_CONDITIONAL(HAVE_DOXYGEN, test "$enableval" = "yes") AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"]) MINGW32=no MAC=no case $host_os in *mingw32*) MINGW32=yes;; *darwin* | *rhapsody* | *macosx*) MAC=yes;; esac AM_CONDITIONAL(MINGW32, test "$MINGW32" = "yes") AM_CONDITIONAL(MAC, test "$MAC" = "yes") # export macros RPMBUILD=${BUILD_NUMBER:-1} AC_SUBST(RPMBUILD) SRCDIR=${srcdir} AC_SUBST(SRCDIR) AC_SUBST(SRC_DIR) AC_SUBST(TST_DIR) AC_SUBST(DOC_DIR) AC_SUBST(HAVE_DOT) AC_SUBST(HAVE_DOXYGEN) AC_SUBST(THREADS) AC_SUBST(PACKAGENAME) AC_SUBST(AM_CXXFLAGS) AC_SUBST(AM_CPPFLAGS) AC_SUBST(LIBS) # create output AC_OUTPUT # infos and warnings if test "$have_doxygen" = "no"; then AC_MSG_WARN([Missing program doxygen! - you cannot rebuild the documentation with make doc - 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 with make doc, there are no generated images - there are precompiled derived files in the distribution]); fi if test "$have_doxygen" = "no"; then AC_MSG_WARN([Disabled doxygen! - documentation will not be built]); fi 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 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 if test "$with_threads" = "no"; then AC_MSG_WARN([Multithreading support is disabled! - use --enable-threads to enable it - actually, there's only support for automated function trace]); fi if test "$have_dir" != "yes"; then AC_MSG_WARN([POSIX directory access is disabled! - you need a UNIX/Posix environment if you want to use it]); fi if test "$have_exec" != "yes"; then AC_MSG_WARN([UNIX fork/exec with pipes will not be used! - you need a UNIX/Posix environment if you want to use it]); fi if test "$have_regex" != "yes"; then AC_MSG_WARN([GNU regular expression library will not be used! - if you want it, install it]); fi if test "$have_log4cxx" != "yes"; then AC_MSG_WARN([Library log4cxx will not be used! - if you want it, download it from: http://logging.apache.org/log4cxx]); fi if test "$have_stacktrace" != "yes"; then AC_MSG_WARN([mrw::StackTrace is disabled!]); fi if test "$have_ltdl" != "yes"; then AC_MSG_WARN([mrw::DynamicLibrary dynamic library loading is disabled! - install the GNU libtool, if you need mrw::DynamicLibrary]);fi if test "$with_autofntrace" != "yes" -o -z "$GCC"; then AC_MSG_WARN([Automated GNU gcc function tracing is disabled! - libmrwautofunctiontracestdout won't be built - libmrwautofunctiontracelog4cxx won't be built]);fi if test -z "$BOOST_THREAD_LIB"; then AC_MSG_WARN([Boost thread library not found! - multithreading is based on boost thread library - support for multithreading is disabled - try to pass the library name, e.g. --with-boost-thread=boost_thread-icc-mt]);fi if test "$have_dynamicstack" = "yes" -a \ \( "$have_stacktrace" != "yes" -o "$have_ltdl" != "yes" \); then AC_MSG_ERROR([Option --enable-dynamic-stack was given, but either stacktrace is disabled or ltdl is disabled. --enable-dynamic-stack should always be used together with options --enable-stacktrace and --enable-ltdl]);fi