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.
 
 
 
 
 

354 lines
14 KiB

# $Id$
m4_define(x_package_name, mrw-c++)
m4_define(x_major, 4)
m4_define(x_minor, 1)
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
])
m4_define(x_least, m4_esyscmd_s(
LEAST="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout"
for path in . .. ../..; do
if svn info $path 2>&1 > /dev/null; then
LEAST=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p')
(cd $path && svn2cl)
break;
fi
done
echo -n $LEAST
))
m4_define(x_bugreport, m4_esyscmd_s(
head -1 AUTHORS | \
sed -n 's,.*<\([-_.a-z0-9A-Z]*@[-_.a-z0-9A-Z]*\)>.*,\1,gp'
))
AC_INIT(x_package_name, x_major.x_minor.x_least, x_bugreport, x_package_name)
AM_INIT_AUTOMAKE([1.9 tar-pax])
SRC_DIR=src
TST_DIR=test
DOC_DIR=doc
# files to create
AC_CONFIG_FILES([makefile ${PACKAGE_NAME}.spec src/version.cxx
src/makefile test/makefile
doc/doxyfile doc/makefile
src/mrw/mrw.hxx doc/examples/makefile
src/${PACKAGE_NAME}.pc debian/changelog debian/control])
# libtool versioning
LIB_MAJOR=m4_eval(x_major+x_minor)
LIB_MINOR=x_least
LIB_LEAST=x_minor
LIB_PACKAGE_VERSION="${LIB_MAJOR}:${LIB_MINOR}:${LIB_LEAST}"
AC_SUBST(LIB_PACKAGE_VERSION)
# home
AC_SUBST(HOME)
# datadir for languages
AX_DEFINE_DIR([DATADIR], [datadir])
#AC_SUBST(DATADIR)
AM_CPPFLAGS="-DPACKAGEPACKAGE_VERSION='\"${PACKAGE_VERSION}\"' -DPACKAGE_NAME='\"${PACKAGE_NAME}\"'"
# 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 "find /usr/lib -name 'libdemangle*' -o -name 'libiberty*'"
- is one of them installed?
- If yes, try: "nm <filename> | grep cplus_demangle"
-> is the symbol defined?
- on Ubuntu (trusty) install libiberty-dev
- 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" "boost_system" )])
for (( i=0; i<${#chk_libs[*]}; ++i )); do rnd=${chk_libs[$i]}
for ax_lib in $rnd; do
AC_CHECK_LIB($ax_lib, main, [BOOST_THREAD_LIB="${BOOST_THREAD_LIB} -l$ax_lib" break])
done
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" && \
CXXFLAGS="${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")
# macros
README=$(tail -n +3 README)
README_DEB=$(tail -n +3 README | sed -e 's/^$/./g' -e 's/^/ /g')
DESCRIPTION=$(head -1 README)
AUTHOR=$(head -1 AUTHORS)
AC_SUBST(AUTHOR)
_AM_SUBST_NOTMAKE([AUTHOR])
AC_SUBST(DESCRIPTION)
_AM_SUBST_NOTMAKE([DESCRIPTION])
AC_SUBST(README)
_AM_SUBST_NOTMAKE([README])
AC_SUBST(README_DEB)
_AM_SUBST_NOTMAKE([README_DEB])
DISTRO=$(lsb_release -sc)
AC_SUBST(DISTRO)
BUILD_NUMBER=${BUILD_NUMBER:-1}
AC_SUBST(BUILD_NUMBER)
BUILD_DATE=$(date -R)
AC_SUBST(BUILD_DATE)
# export macros
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(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