X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=configure.ac;h=ca24ee79f7e25bb4c7ebb592236ac3b4691b0661;hp=6634c4c496de155f2518930b8920c2250879180c;hb=HEAD;hpb=900ddc21d5dd2d67c6a7330eb7bde4ccfda114b9 diff --git a/configure.ac b/configure.ac index 6634c4c4..799df2f7 100644 --- a/configure.ac +++ b/configure.ac @@ -4,29 +4,30 @@ dnl Copyright (C) 2017 EfficiOS, Inc. dnl dnl Process this file with autoconf to produce a configure script. -## ## -## Autoconf base setup ## -## ## - -AC_PREREQ([2.69]) - +# Project version information m4_define([bt_version_major], [2]) m4_define([bt_version_minor], [1]) m4_define([bt_version_patch], [0]) m4_define([bt_version_dev_stage], [-rc1]) m4_define([bt_version], bt_version_major[.]bt_version_minor[.]bt_version_patch[]bt_version_dev_stage) -m4_define([bt_version_name], []) - -AC_INIT([babeltrace2],[bt_version],[jeremie dot galarneau at efficios dot com],[],[https://efficios.com/babeltrace/]) +m4_define([bt_version_name], [[Codename TBD]]) +m4_define([bt_version_description], [[Description TBD]]) +# Library version information of "libbabeltrace2" # Following the numbering scheme proposed by libtool for the library version # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html m4_define([bt_lib_version_current], [0]) m4_define([bt_lib_version_revision], [0]) m4_define([bt_lib_version_age], [0]) m4_define([bt_lib_version], bt_lib_version_current[:]bt_lib_version_revision[:]bt_lib_version_age) -m4_define([bt_version_description], []) -m4_define([bt_version_description_c_safe], AS_ESCAPE(bt_version_description)) + + +## ## +## Autoconf base setup ## +## ## + +AC_PREREQ([2.69]) +AC_INIT([babeltrace2],[bt_version],[jeremie dot galarneau at efficios dot com],[],[https://efficios.com/babeltrace/]) AC_SUBST([BABELTRACE_LIBRARY_VERSION], bt_lib_version) @@ -39,7 +40,7 @@ AC_DEFINE([BT_VERSION_MINOR], bt_version_minor, [Babeltrace minor version]) AC_DEFINE([BT_VERSION_PATCH], bt_version_patch, [Babeltrace patch version]) AC_DEFINE([BT_VERSION_DEV_STAGE], ["]bt_version_dev_stage["], [Babeltrace version development stage (can be empty)]) AC_DEFINE([BT_VERSION_NAME], ["]bt_version_name["], [Babeltrace version name]) -AC_DEFINE([BT_VERSION_DESCRIPTION], ["]bt_version_description_c_safe["], [Babeltrace version description]) +AC_DEFINE([BT_VERSION_DESCRIPTION], ["]AS_ESCAPE(bt_version_description)["], [Babeltrace version description]) AC_CANONICAL_TARGET AC_CANONICAL_HOST @@ -49,7 +50,7 @@ AC_CANONICAL_HOST ## Automake base setup ## ## ## -AM_INIT_AUTOMAKE([1.12 foreign dist-bzip2 no-dist-gzip tar-ustar nostdinc -Wall -Wno-portability -Werror]) +AM_INIT_AUTOMAKE([1.13 foreign dist-bzip2 no-dist-gzip tar-ustar nostdinc subdir-objects -Wall -Wno-portability -Werror]) AM_MAINTAINER_MODE([enable]) # Enable silent rules by default @@ -109,7 +110,7 @@ AX_C___ATTRIBUTE__ AS_IF([test "x$ax_cv___attribute__" != "xyes"], [AC_MSG_ERROR([The compiler does not support __attribute__ extensions])]) -# Make sur we have pthread support +# Make sure we have pthread support AX_PTHREAD([], [AC_MSG_ERROR([Could not configure pthread support])]) # Checks for typedefs, structures, and compiler characteristics. @@ -199,26 +200,23 @@ AC_PROG_MAKE_SET AC_PROG_MKDIR_P AC_PROG_LN_S AC_PROG_SED -AC_PATH_PROG([report_fold], [fold]) - -# set $IN_GIT_REPO if we're in the Git repository; the `bootstrap` file -# is not distributed in tarballs -AS_IF([test -f "$srcdir/bootstrap"], [in_git_repo=yes], [in_git_repo=no]) -AM_CONDITIONAL([IN_GIT_REPO], [test "x$in_git_repo" = "xyes"]) +AC_CHECK_PROGS([FOLD], [fold]) +AC_CHECK_PROGS([ASCIIDOC], [asciidoc]) +AC_CHECK_PROGS([XMLTO], [xmlto]) # check for bison AC_PROG_YACC AX_PROG_BISON_VERSION([2.5], [have_bison=yes]) AS_IF([test "x$have_bison" != "xyes"], [ - AS_IF([test "x$in_git_repo" = "xyes"], [ + AE_IF_IN_GIT_REPO([ AC_MSG_FAILURE([dnl -Bison >= 2.4 is required when building from the Git repository. You can +Bison >= 2.5 is required when building from the Git repository. You can set the YACC variable to override automatic detection. ]) ], [ AC_MSG_WARN([dnl -Missing Bison >= 2.4. Note that the parser files are already built in +Missing Bison >= 2.5. Note that the parser files are already built in this distribution tarball, so Bison is only needed if you intend to modify their sources. You can set the YACC variable to override automatic detection. @@ -234,7 +232,7 @@ AC_PROG_LEX([noyywrap]) AX_PROG_FLEX_VERSION([2.5.35], [have_flex=yes]) AS_IF([test "x$have_flex" != "xyes"], [ - AS_IF([test "x$in_git_repo" = "xyes"], [ + AE_IF_IN_GIT_REPO([ AC_MSG_FAILURE([dnl Flex >= 2.5.35 is required when building from the Git repository. You can set the LEX variable to override automatic detection. @@ -250,6 +248,43 @@ detection. ]) AM_CONDITIONAL([HAVE_FLEX], [test "x$have_flex" = "xyes"]) +# Always check for python, we will fail later if some features require it and +# it's unavailable. +AM_PATH_PYTHON([3.4], [ + AE_PATH_PYTHON_MODULES([PYTHON]) + + # pythondir is the path where extra modules are to be installed + pythondir=$PYTHON_PREFIX/$PYTHON_MODULES_PATH + + # pyexecdir is the path that contains shared objects used by the extra modules + pyexecdir=$PYTHON_EXEC_PREFIX/$PYTHON_MODULES_PATH + + # If no PYTHON_CONFIG was specified by the user, try to find it, starting + # with the one specific to the configured python version. + AS_IF([test "x$PYTHON_CONFIG" = "x"], [ + AC_CHECK_PROGS([PYTHON_CONFIG], [python$PYTHON_VERSION-config python-config]) + ]) + + # If PYTHON_CONFIG is set use it to get the includes and ld flags, unless + # they were specified by the user. + AS_IF([test "x$PYTHON_CONFIG" != "x" ], [ + AS_IF([test "x$PYTHON_INCLUDE" = "x"], [ + AC_MSG_CHECKING([Python include flags]) + PYTHON_INCLUDE=`$PYTHON_CONFIG --includes` + AC_MSG_RESULT([$PYTHON_INCLUDE]) + ]) + + AS_IF([test "x$PYTHON_LDFLAGS" = "x"], [ + AC_MSG_CHECKING([Python library flags]) + # Python 3.8+ requires that we pass --embed to get the -lpython3.x flag. + AS_IF([! PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags --embed`], [ + PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags` + ]) + AC_MSG_RESULT([$PYTHON_LDFLAGS]) + ]) + ]) +], [:]) + # Initialize and configure libtool LT_INIT([win32-dll]) @@ -345,7 +380,7 @@ AS_IF([test "$BABELTRACE_MINIMAL_LOG_LEVEL" != "TRACE" && \ test "$BABELTRACE_MINIMAL_LOG_LEVEL" != "INFO"], [AC_MSG_ERROR([Invalid BABELTRACE_MINIMAL_LOG_LEVEL value ($BABELTRACE_MINIMAL_LOG_LEVEL): use TRACE, DEBUG, or INFO.])] ) -AC_DEFINE_UNQUOTED([BT_MINIMAL_LOG_LEVEL], [BT_LOG_$BABELTRACE_MINIMAL_LOG_LEVEL], [Minimal log level]) +AC_DEFINE_UNQUOTED([BT_LOG_MINIMAL_LEVEL], [__BT_LOGGING_LEVEL_$BABELTRACE_MINIMAL_LOG_LEVEL], [Minimal log level]) # BABELTRACE_DEV_MODE: AC_ARG_VAR([BABELTRACE_DEV_MODE], [Set to 1 to enable the Babeltrace developer mode (enables run-time checks for plugin developers)]) @@ -361,9 +396,9 @@ AS_IF([test "x$BABELTRACE_DEBUG_MODE" = x1], [ ], [BABELTRACE_DEBUG_MODE=0]) -## ## -## Optionnal features selection ## -## ## +## ## +## Optional features selection ## +## ## # Python bindings # Disabled by default @@ -413,6 +448,7 @@ AE_FEATURE([Werror],[Treat compiler warnings as errors.]) # When given, build with AddressSanitizer. AE_FEATURE_DEFAULT_DISABLE AE_FEATURE([asan],[Build with AddressSanitizer.]) +AE_FEATURE([ubsan],[Build with UndefinedBehaviorSanitizer.]) ## ## ## Check for conflicting features selection ## @@ -478,6 +514,9 @@ AE_IF_FEATURE_ENABLED([built-in-python-plugin-support], [AC_DEFINE([BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT], [1], [Define to 1 to register plug-in attributes in static executable sections])] ) +AE_IF_FEATURE_ENABLED([python-plugins], [ENABLE_PYTHON_PLUGINS=1], [ENABLE_PYTHON_PLUGINS=0]) +AC_SUBST([ENABLE_PYTHON_PLUGINS]) + AE_IF_FEATURE_ENABLED([debug-info], [ENABLE_DEBUG_INFO_VAL=1], [ENABLE_DEBUG_INFO_VAL=0]) AC_SUBST([ENABLE_DEBUG_INFO_VAL]) @@ -493,52 +532,34 @@ AE_IF_FEATURE_ENABLED([python-bindings], [AX_PKG_SWIG(2.0.0, [], [AC_MSG_ERROR([SWIG 2.0.0 or newer is required to build the python bindings])])] ) -# Always check for python, we will fail later if some features require it and -# it's unavailable. -AM_PATH_PYTHON([3.0], [ - AE_PATH_PYTHON_MODULES([PYTHON]) - - # pythondir is the path where extra modules are to be installed - pythondir=$PYTHON_PREFIX/$PYTHON_MODULES_PATH - - # pyexecdir is the path that contains shared objects used by the extra modules - pyexecdir=$PYTHON_EXEC_PREFIX/$PYTHON_MODULES_PATH - - AS_IF([test -z "$PYTHON_CONFIG"], [ - AC_PATH_PROGS([PYTHON_CONFIG], - [python$PYTHON_VERSION-config python-config], - [], - [`dirname $PYTHON`]) - ]) - - AS_IF([test -n "$PYTHON_CONFIG"], [ - AS_IF([test -z "$PYTHON_INCLUDE"], [ - AC_MSG_CHECKING([Python include flags]) - PYTHON_INCLUDE=`$PYTHON_CONFIG --includes` - AC_MSG_RESULT([$PYTHON_INCLUDE]) - ]) - - AS_IF([test -z "$PYTHON_LDFLAGS"], [ - AC_MSG_CHECKING([Python library flags]) - # Python 3.8+ requires that we pass --embed to get the -lpython3.x flag. - AS_IF([! PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags --embed`], [ - PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags` - ]) - AC_MSG_RESULT([$PYTHON_LDFLAGS]) - ]) - ]) -], [:]) - AS_IF([test "$PYTHON" != :], [have_python=yes], [have_python=no]) AS_IF([test -n "$PYTHON_CONFIG"], [have_python_dev=yes], [have_python_dev=no]) AM_CONDITIONAL([HAVE_PYTHON], [test "x$have_python" = xyes]) AM_CONDITIONAL([HAVE_PYTHON_DEV], [test "x$have_python_dev" = xyes]) +AS_IF([test "x$have_python" = xyes], [ + AX_COMPARE_VERSION(["$PYTHON_VERSION"], [ge], ["3.12"], [ + have_python_312_or_greater=yes + ]) +]) + +AM_CONDITIONAL([HAVE_PYTHON_312_OR_GREATER], [test "x$have_python_312_or_greater" = xyes]) + AS_IF([AE_IS_FEATURE_ENABLED([python-bindings]) || AE_IS_FEATURE_ENABLED([python-plugins])], [ AS_IF([test "x$have_python_dev" = xno], [ AC_MSG_ERROR([Cannot find a suitable python-config. You can override the python-config path with the PYTHON_CONFIG environment variable.]) ]) + + AX_COMPARE_VERSION(["$PYTHON_VERSION"], [ge], ["3.12"], [ + AC_MSG_CHECKING([for python setuptools]) + AS_IF(["$PYTHON" -c "import setuptools" 2>/dev/null], [ + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Python >= 3.12 removed 'distutils', the 'setuptools' module needs to be installed for the selected interpreter.]) + ]) + ]) ]) AE_IF_FEATURE_ENABLED([python-bindings-doc], @@ -565,8 +586,8 @@ AE_IF_FEATURE_ENABLED([debug-info], [ # Turns out SLES12 doesn't bother shipping .pc file for libelf AC_MSG_WARN([Finding libelf without pkg-config.]) - AC_CHECK_LIB([elf], [elf_version], [], [AC_MSG_ERROR(Missing libelf (from elfutils >= 0.154) which is required by debug info. You can disable this feature using --disable-debug-info.)]) - AC_CHECK_LIB([dw], [dwarf_begin], [], [AC_MSG_ERROR(Missing libdw (from elfutils >= 0.154) which is required by debug info. You can disable this feature using --disable-debug-info.)]) + AC_CHECK_LIB([elf], [elf_version], [:], [AC_MSG_ERROR(Missing libelf (from elfutils >= 0.154) which is required by debug info. You can disable this feature using --disable-debug-info.)]) + AC_CHECK_LIB([dw], [dwarf_begin], [:], [AC_MSG_ERROR(Missing libdw (from elfutils >= 0.154) which is required by debug info. You can disable this feature using --disable-debug-info.)]) AE_LIB_ELFUTILS([0], [154], [], [AC_MSG_ERROR(elfutils >= 0.154 is required to use the debug info feature. You can disable this feature using --disable-debug-info.)]) ELFUTILS_LIBS="-lelf -ldw" ]) @@ -585,7 +606,7 @@ AE_IF_FEATURE_ENABLED([api-doc], DX_XML_FEATURE(OFF) DX_PDF_FEATURE(OFF) DX_PS_FEATURE(OFF) - DX_INIT_DOXYGEN([Babeltrace 2], [$(builddir)/Doxyfile], [output]) + DX_INIT_DOXYGEN([babeltrace2], [$(builddir)/Doxyfile], [output]) AS_IF([test -z "$DX_DOXYGEN"], [AC_MSG_ERROR([You need doxygen to enable the API documentation])] ) @@ -595,12 +616,9 @@ AE_IF_FEATURE_ENABLED([api-doc], have_asciidoc_xmlto=no warn_prebuilt_man_pages=no -AC_PATH_PROG([ASCIIDOC], [asciidoc], [no]) -AC_PATH_PROG([XMLTO], [xmlto], [no]) - AE_IF_FEATURE_ENABLED([man-pages], [ - AS_IF([test "x$ASCIIDOC" = "xno" || test "x$XMLTO" = "xno"], [ - AS_IF([test "x$in_git_repo" = "xyes"], [ + AS_IF([test "x$ASCIIDOC" = "x" || test "x$XMLTO" = "x"], [ + AE_IF_IN_GIT_REPO([ # this is an error because we're in the Git repo, which # means the man pages are not already generated for us, # thus asciixmlto are required because we were asked @@ -649,13 +667,19 @@ AE_IF_FEATURE_ENABLED([asan], [ ASAN_LDFLAGS="-fsanitize=address" ]) - +# If --enable-ubsan is used... +AE_IF_FEATURE_ENABLED([ubsan], [ + # ... add -fsanitize=undefined to the *FLAGS variables. + UBSAN_CFLAGS="-fsanitize=undefined" + UBSAN_CXXFLAGS="-fsanitize=undefined" + UBSAN_LDFLAGS="-fsanitize=undefined" +]) # CFLAGS from libraries (the glib ones are needed for the following sizeof # test). -AM_CFLAGS="${PTHREAD_CFLAGS} ${GLIB_CFLAGS} ${ASAN_CFLAGS}" -AM_CXXFLAGS="${PTHREAD_CFLAGS} ${GLIB_CFLAGS} ${ASAN_CXXFLAGS}" -AM_LDFLAGS="${ASAN_LDFLAGS}" +AM_CFLAGS="-fvisibility=hidden ${PTHREAD_CFLAGS} ${GLIB_CFLAGS} ${ASAN_CFLAGS} ${UBSAN_CFLAGS}" +AM_CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden ${PTHREAD_CFLAGS} ${GLIB_CFLAGS} ${ASAN_CXXFLAGS} ${UBSAN_CFLAGS}" +AM_LDFLAGS="${ASAN_LDFLAGS} ${UBSAN_CFLAGS}" # Check that the current size_t matches the size that glib thinks it should # be. This catches problems on multi-arch where people try to do a 32-bit @@ -704,6 +728,11 @@ m4_define([WARN_FLAGS_LIST], [ dnl -Wundef dnl -Wredundant-decls dnl -Wshadow dnl + dnl GCC's -Wshadow warns about constructor parameters shadowing fields, but + dnl Clang's does not. Enable Clang's `-Wshadow-field-in-constructor`, to make + dnl Clang warn about that. + -Wshadow-field-in-constructor dnl + -Wshadow-field dnl -Wjump-misses-init dnl -Wsuggest-attribute=format dnl -Wtautological-constant-out-of-range-compare dnl @@ -716,7 +745,7 @@ m4_define([WARN_FLAGS_LIST], [ dnl -Wduplicated-cond dnl -Wduplicated-branches dnl -Wlogical-op dnl - -Wno-unused-parameter dnl + -Wsuggest-override dnl -Wno-sign-compare dnl dnl dnl Some versions of SWIG (like 3.0.12) generate code that produces @@ -731,7 +760,7 @@ m4_define([WARN_FLAGS_LIST], [ dnl dnl dnl Ref: https://github.com/swig/swig/issues/1259 -Wno-cast-function-type dnl - -Wno-missing-field-initializers dnl + -Wno-maybe-uninitialized dnl ]) # Pass -Werror as an extra flag during the test: this is needed to make the @@ -769,78 +798,35 @@ AC_SUBST(AM_CPPFLAGS) # Add glib to global link libs LIBS="$LIBS $GLIB_LIBS" +# Disable exceptions for the {fmt} library. This means, for example, that a +# format error will result in an assertion failure (instead of throwing an +# `fmt::format_error` exception). +AC_DEFINE_UNQUOTED([FMT_EXCEPTIONS], 0, [Disable {fmt} exceptions.]) + # Abuse autoconf's AC_ARG_PROGRAM output variable 'program_transform_name' # to rename babeltrace2.bin to babeltrace2 at install time. program_transform_name="s&babeltrace2\.bin&babeltrace2&;$program_transform_name" AC_SUBST(program_transform_name) AC_CONFIG_FILES([ - doc/api/Makefile doc/api/libbabeltrace2/Doxyfile doc/api/libbabeltrace2/Makefile - doc/bindings/Makefile doc/bindings/python/Makefile - doc/contributing-images/Makefile doc/Makefile doc/man/asciidoc-attrs.conf doc/man/Makefile include/Makefile Makefile - src/argpar/Makefile - src/autodisc/Makefile src/babeltrace2-ctf-writer.pc src/babeltrace2.pc - src/bindings/Makefile src/bindings/python/bt2/bt2/version.py src/bindings/python/bt2/Makefile src/bindings/python/bt2/setup.py - src/bindings/python/Makefile src/cli/Makefile - src/common/Makefile - src/compat/Makefile - src/ctfser/Makefile - src/ctf-writer/Makefile - src/fd-cache/Makefile - src/lib/graph/Makefile - src/lib/graph/message/Makefile - src/lib/Makefile - src/lib/plugin/Makefile - src/lib/prio-heap/Makefile - src/lib/trace-ir/Makefile - src/logging/Makefile src/Makefile - src/plugins/common/Makefile - src/plugins/common/muxing/Makefile - src/plugins/common/param-validation/Makefile - src/plugins/ctf/common/bfcr/Makefile - src/plugins/ctf/common/Makefile - src/plugins/ctf/common/metadata/Makefile - src/plugins/ctf/common/msg-iter/Makefile - src/plugins/ctf/fs-sink/Makefile - src/plugins/ctf/fs-src/Makefile - src/plugins/ctf/lttng-live/Makefile - src/plugins/ctf/Makefile - src/plugins/lttng-utils/debug-info/Makefile - src/plugins/lttng-utils/Makefile - src/plugins/Makefile - src/plugins/text/dmesg/Makefile - src/plugins/text/Makefile - src/plugins/text/pretty/Makefile - src/plugins/text/details/Makefile - src/plugins/utils/counter/Makefile - src/plugins/utils/dummy/Makefile - src/plugins/utils/Makefile - src/plugins/utils/muxer/Makefile - src/plugins/utils/trimmer/Makefile - src/py-common/Makefile - src/python-plugin-provider/Makefile - src/param-parse/Makefile - src/string-format/Makefile tests/bitfield/Makefile tests/ctf-writer/Makefile tests/lib/Makefile - tests/lib/test-plugin-plugins/Makefile - tests/lib/conds/Makefile tests/Makefile tests/param-validation/Makefile tests/plugins/Makefile @@ -853,12 +839,11 @@ AC_CONFIG_FILES([ tests/plugins/flt.utils.muxer/succeed/Makefile tests/plugins/flt.utils.trimmer/Makefile tests/plugins/sink.text.pretty/Makefile + tests/utils/env.sh tests/utils/Makefile tests/utils/tap/Makefile ]) -AC_CONFIG_FILES([tests/utils/env.sh],[chmod +x tests/utils/env.sh]) - AC_OUTPUT # @@ -880,8 +865,8 @@ AS_IF([test -n "bt_version_name"], [ AS_ECHO AS_IF([test -n "bt_version_description"], [ - AS_IF([test -n "$report_fold"], [ - AS_ECHO("`AS_ECHO("bt_version_description") | $report_fold -s`") + AS_IF([test -n "$FOLD"], [ + AS_ECHO("`AS_ECHO("bt_version_description") | $FOLD -s`") ], [ AS_ECHO("bt_version_description") ]) @@ -949,8 +934,8 @@ PPRINT_SUBTITLE([Documentation]) # man pages build enabled/disabled m4_pushdef([build_man_pages_msg], [Build and install man pages]) -AS_IF([test "x$enable_man_pages" != "xno"], [ - AS_IF([test "x$in_git_repo" = "xyes"], [ +AE_IF_FEATURE_ENABLED([man-pages], [ + AE_IF_IN_GIT_REPO([ PPRINT_PROP_BOOL([build_man_pages_msg], 1) ], [ AS_IF([test "x$have_asciidoc_xmlto" = "xyes"], [