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.
355 lines
14 KiB
355 lines
14 KiB
13 years ago
|
# $Id$
|
||
10 years ago
|
|
||
|
m4_define(x_package_name, mrw-c++)
|
||
|
m4_define(x_major, 4)
|
||
|
m4_define(x_minor, 1)
|
||
|
|
||
11 years ago
|
m4_include(ax_cxx_compile_stdcxx_11.m4)
|
||
13 years ago
|
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
|
||
|
])
|
||
20 years ago
|
|
||
10 years ago
|
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;
|
||
13 years ago
|
fi
|
||
10 years ago
|
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)
|
||
11 years ago
|
|
||
10 years ago
|
AM_INIT_AUTOMAKE([1.9 tar-pax])
|
||
13 years ago
|
|
||
10 years ago
|
SRC_DIR=src
|
||
|
TST_DIR=test
|
||
|
DOC_DIR=doc
|
||
11 years ago
|
|
||
13 years ago
|
# files to create
|
||
10 years ago
|
AC_CONFIG_FILES([makefile ${PACKAGE_NAME}.spec src/version.cxx
|
||
13 years ago
|
src/makefile test/makefile
|
||
|
doc/doxyfile doc/makefile
|
||
13 years ago
|
src/mrw/mrw.hxx doc/examples/makefile
|
||
10 years ago
|
src/${PACKAGE_NAME}.pc debian/changelog debian/control])
|
||
18 years ago
|
|
||
20 years ago
|
# libtool versioning
|
||
20 years ago
|
LIB_MAJOR=m4_eval(x_major+x_minor)
|
||
10 years ago
|
LIB_MINOR=x_least
|
||
20 years ago
|
LIB_LEAST=x_minor
|
||
10 years ago
|
LIB_PACKAGE_VERSION="${LIB_MAJOR}:${LIB_MINOR}:${LIB_LEAST}"
|
||
|
AC_SUBST(LIB_PACKAGE_VERSION)
|
||
21 years ago
|
|
||
13 years ago
|
# home
|
||
|
AC_SUBST(HOME)
|
||
|
|
||
|
# datadir for languages
|
||
|
AX_DEFINE_DIR([DATADIR], [datadir])
|
||
|
#AC_SUBST(DATADIR)
|
||
|
|
||
10 years ago
|
AM_CPPFLAGS="-DPACKAGEPACKAGE_VERSION='\"${PACKAGE_VERSION}\"' -DPACKAGE_NAME='\"${PACKAGE_NAME}\"'"
|
||
13 years ago
|
|
||
|
# Get rid of that stupid -O2 -g opions!
|
||
20 years ago
|
CXXFLAGS="${CXXFLAGS:-}"
|
||
|
|
||
21 years ago
|
# languages
|
||
|
AC_LANG(C++)
|
||
11 years ago
|
AX_CXX_COMPILE_STDCXX_11(noext, optional)
|
||
21 years ago
|
|
||
|
# 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)
|
||
13 years ago
|
PKG_PROG_PKG_CONFIG
|
||
21 years ago
|
|
||
13 years ago
|
# 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])
|
||
|
|
||
21 years ago
|
# solaris?
|
||
10 years ago
|
AC_CHECK_HEADER(sys/old_procfs.h, [AM_CPPFLAGS+="-D__solaris__"])
|
||
21 years ago
|
|
||
21 years ago
|
# Arguments
|
||
|
AM_MAINTAINER_MODE
|
||
18 years ago
|
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")
|
||
20 years ago
|
AC_ARG_ENABLE(threads,
|
||
|
[ --disable-threads disable multithreading],
|
||
|
[with_threads="$enableval"], [with_threads="yes"])
|
||
19 years ago
|
THREADS="-pthread -D_MT"
|
||
|
AM_CONDITIONAL(HAVE_THREADS, test "$with_threads" = "yes")
|
||
20 years ago
|
AC_ARG_ENABLE(autofntrace,
|
||
|
[ --disable-autofntrace disable automated function trace (requires gcc)],
|
||
|
[with_autofntrace="$enableval"], [with_autofntrace="yes"])
|
||
19 years ago
|
AM_CONDITIONAL(AUTOFNTRACE, test "$with_autofntrace" = "yes" -a -n "$GCC")
|
||
18 years ago
|
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")
|
||
20 years ago
|
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")
|
||
20 years ago
|
AC_ARG_ENABLE(ltdl,
|
||
19 years ago
|
[ --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.],
|
||
13 years ago
|
[have_ltdl="$enableval"], [have_ltdl="$have_ltdl"])
|
||
20 years ago
|
AM_CONDITIONAL(HAVE_LTDL, test "$have_ltdl" = "yes")
|
||
19 years ago
|
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"])
|
||
20 years ago
|
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],
|
||
19 years ago
|
[have_stacktrace="$enableval"], [have_stacktrace="yes"])
|
||
20 years ago
|
AM_CONDITIONAL(HAVE_STACKTRACE, test "$have_stacktrace" = "yes")
|
||
20 years ago
|
if test "$have_stacktrace" = "yes"; then
|
||
13 years ago
|
# 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
|
||
19 years ago
|
AC_CHECK_HEADER([demangle.h],
|
||
|
[AC_DEFINE([HAVE_DEMANGLE_H])],
|
||
11 years ago
|
[AC_MSG_WARN([Header "demangle.h" from the binutils not found!
|
||
19 years ago
|
- unfortunately, the bintils do not install this header
|
||
|
(even though they should)
|
||
13 years ago
|
- the required symbols are now declared in stacktrace.cxx according to my
|
||
17 years ago
|
own binutils version (binutils-2.16.1) it may or may not be compatible to
|
||
11 years ago
|
yours])])
|
||
|
AC_SEARCH_LIBS(cplus_demangle, [demangle iberty_pic iberty],
|
||
20 years ago
|
[AC_MSG_RESULT([OK, found cplus_demangle])],
|
||
20 years ago
|
[AC_MSG_ERROR([Function cplus_demangle not found!
|
||
11 years ago
|
- I looked in libdemangle and libiberty
|
||
10 years ago
|
- Try "find /usr/lib -name 'libdemangle*' -o -name 'libiberty*'"
|
||
20 years ago
|
- is one of them installed?
|
||
|
- If yes, try: "nm <filename> | grep cplus_demangle"
|
||
|
-> is the symbol defined?
|
||
10 years ago
|
- on Ubuntu (trusty) install libiberty-dev
|
||
20 years ago
|
- Try to compile with option --disable-stacktrace
|
||
|
If you are not a developer, you perhaps don't need it...?])])
|
||
19 years ago
|
if test "$have_dynamicstack" != "yes"; then
|
||
|
AC_DEFINE([NO_LTDL])
|
||
13 years ago
|
AC_SEARCH_LIBS(compress, z,
|
||
|
[AC_MSG_RESULT([OK, found libz])],
|
||
13 years ago
|
[AC_MSG_ERROR([zlib (libz) not found!
|
||
13 years ago
|
It is required for stack trace!
|
||
|
- install zlib development package
|
||
|
- or configure with option --enable-ltdl
|
||
13 years ago
|
- 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
|
||
13 years ago
|
- or configure with option --disable-stacktrace])])
|
||
19 years ago
|
AC_SEARCH_LIBS(bfd_openr, bfd,
|
||
13 years ago
|
[AC_MSG_RESULT([OK, found libbfd])],
|
||
19 years ago
|
[AC_MSG_ERROR([BFD library from the binutils package not found!
|
||
13 years ago
|
It is required for stack trace!
|
||
19 years ago
|
- install binutils or binutils-devel
|
||
|
- or configure with option --enable-ltdl
|
||
13 years ago
|
- or configure with option --disable-stacktrace])])
|
||
19 years ago
|
fi
|
||
13 years ago
|
# bug {
|
||
|
ac_includes_default=$old_ac_includes_default
|
||
|
# } bug
|
||
20 years ago
|
fi
|
||
20 years ago
|
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],
|
||
10 years ago
|
[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
|
||
20 years ago
|
done
|
||
|
AC_SUBST(BOOST_THREAD_LIB)
|
||
|
AM_CONDITIONAL(HAVE_BOOST_THREAD, test -n "$BOOST_THREAD_LIB")
|
||
13 years ago
|
AC_ARG_ENABLE(pedantic,
|
||
|
[AS_HELP_STRING([--enable-pedantic],
|
||
|
[enable all warnings and checks, abort on warnings])],
|
||
|
[have_pedantic="$enableval"; test "$enableval" = "yes" && \
|
||
10 years ago
|
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"])
|
||
13 years ago
|
dnl problem in libs: -Wshadow -Wcast-qual
|
||
13 years ago
|
dnl auto.hxx: -Wno-ctor-dtor-privacy (removed)
|
||
13 years ago
|
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")
|
||
20 years ago
|
AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"])
|
||
21 years ago
|
|
||
13 years ago
|
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")
|
||
|
|
||
10 years ago
|
|
||
|
# 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)
|
||
10 years ago
|
BUILD_NUMBER=${BUILD_NUMBER:-1}
|
||
|
AC_SUBST(BUILD_NUMBER)
|
||
10 years ago
|
BUILD_DATE=$(date -R)
|
||
|
AC_SUBST(BUILD_DATE)
|
||
|
|
||
|
# export macros
|
||
13 years ago
|
SRCDIR=${srcdir}
|
||
|
AC_SUBST(SRCDIR)
|
||
|
AC_SUBST(SRC_DIR)
|
||
|
AC_SUBST(TST_DIR)
|
||
|
AC_SUBST(DOC_DIR)
|
||
21 years ago
|
AC_SUBST(HAVE_DOT)
|
||
17 years ago
|
AC_SUBST(HAVE_DOXYGEN)
|
||
20 years ago
|
AC_SUBST(THREADS)
|
||
21 years ago
|
AC_SUBST(AM_CXXFLAGS)
|
||
|
AC_SUBST(AM_CPPFLAGS)
|
||
20 years ago
|
AC_SUBST(LIBS)
|
||
21 years ago
|
|
||
|
# create output
|
||
21 years ago
|
AC_OUTPUT
|
||
21 years ago
|
# infos and warnings
|
||
|
if test "$have_doxygen" = "no"; then
|
||
|
AC_MSG_WARN([Missing program doxygen!
|
||
|
- you cannot rebuild the documentation with make doc
|
||
20 years ago
|
- there are precompiled derived files in the distribution]); fi
|
||
21 years ago
|
if test "$have_dot" = "no"; then
|
||
|
AC_MSG_WARN([Missing program dot!
|
||
|
- when you rebild documentation with make doc, there are no generated images
|
||
20 years ago
|
- there are precompiled derived files in the distribution]); fi
|
||
17 years ago
|
if test "$have_doxygen" = "no"; then
|
||
|
AC_MSG_WARN([Disabled doxygen!
|
||
|
- documentation will not be built]); fi
|
||
20 years ago
|
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
|
||
19 years ago
|
if test "$have_pedantic" = "yes"; then
|
||
20 years ago
|
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
|
||
19 years ago
|
if test "$with_threads" = "no"; then
|
||
20 years ago
|
AC_MSG_WARN([Multithreading support is disabled!
|
||
|
- use --enable-threads to enable it
|
||
|
- actually, there's only support for automated function trace]); fi
|
||
18 years ago
|
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
|
||
20 years ago
|
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
|
||
20 years ago
|
if test "$have_ltdl" != "yes"; then
|
||
19 years ago
|
AC_MSG_WARN([mrw::DynamicLibrary dynamic library loading is disabled!
|
||
20 years ago
|
- 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!
|
||
19 years ago
|
- libmrwautofunctiontracestdout won't be built
|
||
20 years ago
|
- 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.
|
||
19 years ago
|
--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
|