fix: handle EINTR correctly in get_cpu_mask_from_sysfs
[lttng-ust.git] / configure.ac
index cf2e0e3e75f04d18dbc85fff2781c7203e60238b..a1c12412e7445c6cd8699a527488cb7fad9203d5 100644 (file)
@@ -7,12 +7,12 @@ dnl Process this file with autoconf to produce a configure script.
 
 # Project version information
 m4_define([ust_version_major], [2])
-m4_define([ust_version_minor], [13])
+m4_define([ust_version_minor], [14])
 m4_define([ust_version_patch], [0])
 m4_define([ust_version_dev_stage], [-pre])
 m4_define([ust_version], ust_version_major[.]ust_version_minor[.]ust_version_patch[]ust_version_dev_stage)
-m4_define([ust_version_name], [[Codename TBD]])
-m4_define([ust_version_description], [[Description TBD]])
+m4_define([ust_version_name], [[O-Beer]])
+m4_define([ust_version_description], [[An alcoholic drink made from yeast-fermented malt flavored with hops.]])
 
 # Library version information of "liblttng-ust"
 # Following the numbering scheme proposed by libtool for the library version
@@ -162,6 +162,7 @@ m4_define([WARN_FLAGS_LIST], [ dnl
   -Wno-sign-compare dnl
   -Wno-missing-field-initializers dnl
   -Wno-null-dereference dnl
+  -Wno-gnu dnl Disable warnings for GNU extensions on Clang
 ])
 
 # Pass -Werror as an extra flag during the test: this is needed to make the
@@ -179,6 +180,11 @@ AC_LANG_POP([C])
 # Clang >= 3.3 (required by the project) and are only valid for C code.
 WARN_CFLAGS="${WARN_CFLAGS} -Wold-style-definition -Wstrict-prototypes"
 
+# Disable 'strict aliasing' if the compiler supports it.
+AC_LANG_PUSH([C])
+AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing], [OPT_CFLAGS], [-Werror])
+AC_LANG_POP([C])
+
 
 ##                     ##
 ## C++ compiler checks ##
@@ -256,6 +262,7 @@ AC_CHECK_FUNCS([ \
   clock_gettime \
   ftruncate \
   getpagesize \
+  gettid \
   gettimeofday \
   localeconv \
   memchr \
@@ -279,8 +286,8 @@ AC_CHECK_FUNCS([ \
 #AC_FUNC_REALLOC
 
 # Check for pthread_setname_np and its signature
-LTTNG_PTHREAD_SETNAME_NP
-LTTNG_PTHREAD_GETNAME_NP
+AE_PTHREAD_SETNAME_NP
+AE_PTHREAD_GETNAME_NP
 
 # Check dor dlopen() in -ldl or -lc
 AC_CHECK_LIB([dl], [dlopen], [
@@ -313,10 +320,15 @@ PKG_CHECK_MODULES([URCU], [liburcu >= 0.12])
 # Additional variables captured during ./configure
 
 AC_ARG_VAR([CLASSPATH], [Java class path])
+AC_ARG_VAR([JAVACFLAGS], [Java compiler flags])
+AC_ARG_VAR([JAVAC], [Java compiler])
+AC_ARG_VAR([JAVAFLAGS], [Java VM flags])
+AC_ARG_VAR([JAVA], [Java VM])
+AC_ARG_VAR([JAVAPREFIX], [prefix where Java runtime is installed])
 
 
 ##                              ##
-## Optionnal features selection ##
+## Optional features selection ##
 ##                              ##
 
 # numa integration
@@ -334,10 +346,15 @@ AE_FEATURE([jni-interface], [build JNI interface between C and Java])
 AE_FEATURE_DEFAULT_DISABLE
 AE_FEATURE([java-agent-jul],[build the LTTng UST Java agent with JUL support])
 
-# Build the Java Log4j agent
+# Build the Java Log4j 1.x agent
+# Disabled by default
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([java-agent-log4j],[build the LTTng UST Java agent with Log4j 1.x support (deprecated)])
+
+# Build the Java Log4j 2.x agent
 # Disabled by default
 AE_FEATURE_DEFAULT_DISABLE
-AE_FEATURE([java-agent-log4j],[build the LTTng UST Java agent with Log4j support])
+AE_FEATURE([java-agent-log4j2],[build the LTTng UST Java agent with Log4j 2.x support])
 
 # Build both Java agents
 # Disabled by default
@@ -374,9 +391,6 @@ AS_HELP_STRING([--with-lttng-system-rundir], [Location of the system directory w
   lttng_system_rundir="/var/run/lttng"
 ])
 
-# Add the java command line arguments like '--wit-java-prefix'
-AX_JAVA_OPTIONS
-
 
 ##                                          ##
 ## Check for conflicting features selection ##
@@ -386,9 +400,14 @@ AE_IF_FEATURE_DISABLED([shared], [
   AC_MSG_ERROR(LTTng-UST requires shared libraries to be enabled)
 ])
 
+AE_IF_FEATURE_ENABLED([static], [
+  AC_MSG_ERROR(Static linking LTTng-UST is currently unsupported)
+])
+
 AE_IF_FEATURE_ENABLED([java-agent-all], [
   AE_FEATURE_ENABLE([java-agent-jul])
   AE_FEATURE_ENABLE([java-agent-log4j])
+  AE_FEATURE_ENABLE([java-agent-log4j2])
 ])
 
 
@@ -398,7 +417,9 @@ AE_IF_FEATURE_ENABLED([java-agent-all], [
 
 # The numa integration requires libnuma
 AE_IF_FEATURE_ENABLED([numa], [
-  AC_CHECK_LIB([numa], [numa_available], [], [
+  AC_CHECK_LIB([numa], [numa_available], [
+    AC_DEFINE([HAVE_LIBNUMA], [1], [Define to 1 if libnuma is available.])
+  ], [
     AC_MSG_ERROR([dnl
 libnuma is not available. Please either install it (e.g. libnuma-dev) or use
 [LDFLAGS]=-Ldir to specify the right location, or use --disable-numa configure
@@ -408,12 +429,13 @@ argument to disable NUMA support.
 ])
 
 # The JNI interface and Java Agents require a working Java JDK
-AS_IF([AE_IS_FEATURE_ENABLED([jni-interface]) || AE_IS_FEATURE_ENABLED([java-agent-jul]) || AE_IS_FEATURE_ENABLED([java-agent-log4j])], [
+AS_IF([AE_IS_FEATURE_ENABLED([jni-interface]) || AE_IS_FEATURE_ENABLED([java-agent-jul]) || \
+    AE_IS_FEATURE_ENABLED([java-agent-log4j]) || AE_IS_FEATURE_ENABLED([java-agent-log4j2])], [
   AX_PROG_JAVAC
   AX_PROG_JAVA
   AX_PROG_JAR
 
-  # Get the CPPFLAGS required to build jni libaries
+  # Get the CPPFLAGS required to build jni libraries
   AX_JNI_INCLUDE_DIR
   for jni_include_dir in $JNI_INCLUDE_DIRS; do
     JNI_CPPFLAGS="$JNI_CPPFLAGS -I$jni_include_dir"
@@ -426,7 +448,7 @@ AS_IF([AE_IS_FEATURE_ENABLED([jni-interface]) || AE_IS_FEATURE_ENABLED([java-age
   CPPFLAGS="$saved_CPPFLAGS"
 ])
 
-# The log4j agent requires the log4j jar in the classpath
+# The log4j 1.x agent requires the log4j jar in the classpath
 AE_IF_FEATURE_ENABLED([java-agent-log4j], [
   AX_CHECK_CLASS([org.apache.log4j.Logger])
   AS_IF([test "x$ac_cv_class_org_apache_log4j_Logger" = "xno"], [
@@ -440,6 +462,21 @@ Current CLASSPATH: "$CLASSPATH"
   ])
 ])
 
+# The log4j 2.x agent requires the log4j core and api jars in the classpath
+AE_IF_FEATURE_ENABLED([java-agent-log4j2], [
+  AX_CHECK_CLASS([org.apache.logging.log4j.Logger])
+  AX_CHECK_CLASS([org.apache.logging.log4j.core.Core])
+  AS_IF([test "x$ac_cv_class_org_apache_logging_log4j_Logger" = "xno" || test "x$ac_cv_class_org_apache_logging_log4j_core_Core" = "xno"], [
+    AC_MSG_ERROR([dnl
+The UST Java agent support for log4j was requested but the Log4j classes were
+not found. Please specify the location of the Log4j API and core 2.x jars via the Java CLASSPATH
+environment variable, e.g. ./configure CLASSPATH="/path/to/log4j-core.jar:/path/to/log4j-api.jar"
+
+Current CLASSPATH: "$CLASSPATH"
+    ])
+  ])
+])
+
 # The python agent requires a python interpreter
 AE_IF_FEATURE_ENABLED([python-agent], [
   AS_IF([test "x$PYTHON" = "x"], [
@@ -448,6 +485,17 @@ Cannot find a suitable python interpreter. You can override it with the PYTHON
 environment variable.
     ])
   ])
+
+  AX_COMPARE_VERSION(["$PYTHON_VERSION"], [ge], ["3.12"], [
+    have_python_312_or_greater=yes
+    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.])
+    ])
+  ])
 ])
 
 # Check for asciidoc and xmlto if we enabled building the man pages.
@@ -518,9 +566,11 @@ AC_DEFINE([LTTNG_UST_CTL_LIB_SONAME_MAJOR], [ust_ctl_lib_version_current], [Majo
 
 AM_CONDITIONAL([ENABLE_EXAMPLES], AE_IS_FEATURE_ENABLED([examples]))
 AM_CONDITIONAL([ENABLE_GEN_TP_EXAMPLES], [test "x$PYTHON" != "x"])
-AM_CONDITIONAL([ENABLE_JAVA_AGENT], AE_IS_FEATURE_ENABLED([java-agent-jul]) || AE_IS_FEATURE_ENABLED([java-agent-log4j]))
+AM_CONDITIONAL([ENABLE_JAVA_AGENT], AE_IS_FEATURE_ENABLED([java-agent-jul]) || AE_IS_FEATURE_ENABLED([java-agent-log4j]) || AE_IS_FEATURE_ENABLED([java-agent-log4j2]))
 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_JUL], AE_IS_FEATURE_ENABLED([java-agent-jul]))
 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_LOG4J], AE_IS_FEATURE_ENABLED([java-agent-log4j]))
+AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_LOG4J2], AE_IS_FEATURE_ENABLED([java-agent-log4j2]))
+AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_LOG4J_COMMON], AE_IS_FEATURE_ENABLED([java-agent-log4j]) || AE_IS_FEATURE_ENABLED([java-agent-log4j2]))
 AM_CONDITIONAL([ENABLE_JNI_INTERFACE], AE_IS_FEATURE_ENABLED([jni-interface]))
 AM_CONDITIONAL([ENABLE_MAN_PAGES], AE_IS_FEATURE_ENABLED([man-pages]))
 AM_CONDITIONAL([ENABLE_NUMA], AE_IS_FEATURE_ENABLED([numa]))
@@ -531,6 +581,7 @@ AM_CONDITIONAL([HAVE_CMAKE], [test "x$CMAKE" != "x"])
 AM_CONDITIONAL([HAVE_CXX], [test "$HAVE_CXX11" = "1"])
 AM_CONDITIONAL([HAVE_JAVAH], [test "x$JAVAH" != "x"])
 AM_CONDITIONAL([HAVE_PERF_EVENT], [test "x$ac_cv_header_linux_perf_event_h" = "xyes"])
+AM_CONDITIONAL([HAVE_PYTHON_312_OR_GREATER], [test "x$have_python_312_or_greater" = "xyes"])
 
 
 ##                                             ##
@@ -544,7 +595,7 @@ AC_SUBST([LTTNG_UST_CTL_LIBRARY_VERSION], ust_ctl_lib_version)
 # Major soname for python-lttngust
 AC_SUBST([LTTNG_UST_LIB_SONAME_MAJOR], [ust_lib_version_current])
 
-AM_CFLAGS="$WARN_CFLAGS $URCU_CFLAGS $PTHREAD_CFLAGS"
+AM_CFLAGS="$OPT_CFLAGS $WARN_CFLAGS $URCU_CFLAGS $PTHREAD_CFLAGS"
 AC_SUBST(AM_CFLAGS)
 
 AM_CXXFLAGS="$WARN_CXXFLAGS $URCU_CFLAGS $PTHREAD_CFLAGS"
@@ -569,6 +620,7 @@ AC_CONFIG_FILES([
   doc/examples/Makefile
   doc/Makefile
   doc/man/Makefile
+  extras/Makefile
   include/Makefile
   src/common/Makefile
   src/lib/lttng-ust-common/Makefile
@@ -581,6 +633,7 @@ AC_CONFIG_FILES([
   src/lib/lttng-ust-java-agent/java/lttng-ust-agent-common/Makefile
   src/lib/lttng-ust-java-agent/java/lttng-ust-agent-jul/Makefile
   src/lib/lttng-ust-java-agent/java/lttng-ust-agent-log4j/Makefile
+  src/lib/lttng-ust-java-agent/java/lttng-ust-agent-log4j2/Makefile
   src/lib/lttng-ust-java-agent/java/Makefile
   src/lib/lttng-ust-java-agent/jni/common/Makefile
   src/lib/lttng-ust-java-agent/jni/jul/Makefile
@@ -594,22 +647,32 @@ AC_CONFIG_FILES([
   src/lib/lttng-ust/Makefile
   src/lib/lttng-ust-python-agent/Makefile
   src/lib/Makefile
-  src/lttng-ust-ctl.pc
-  src/lttng-ust.pc
+  src/lib/lttng-ust-ctl.pc
+  src/lib/lttng-ust.pc
   src/Makefile
   src/python-lttngust/lttngust/version.py
   src/python-lttngust/Makefile
   src/python-lttngust/setup.py
   tests/benchmark/Makefile
-  tests/compile/ctf-types/Makefile
-  tests/compile/hello.cxx/Makefile
-  tests/compile/hello/Makefile
-  tests/compile/hello-many/Makefile
+  tests/compile/api0/ctf-types/Makefile
+  tests/compile/api0/hello.cxx/Makefile
+  tests/compile/api0/hello/Makefile
+  tests/compile/api0/hello-many/Makefile
+  tests/compile/api0/Makefile
+  tests/compile/api0/same_line_tracepoint/Makefile
+  tests/compile/api1/ust-fields/Makefile
+  tests/compile/api1/hello.cxx/Makefile
+  tests/compile/api1/hello/Makefile
+  tests/compile/api1/hello-many/Makefile
+  tests/compile/api1/Makefile
+  tests/compile/api1/same_line_tracepoint/Makefile
+  tests/compile/api1/test-app-ctx/Makefile
   tests/compile/Makefile
-  tests/compile/same_line_tracepoint/Makefile
-  tests/compile/test-app-ctx/Makefile
   tests/Makefile
+  tests/regression/abi0-conflict/Makefile
+  tests/regression/Makefile
   tests/unit/gcc-weak-hidden/Makefile
+  tests/unit/libcommon/Makefile
   tests/unit/libmsgpack/Makefile
   tests/unit/libringbuffer/Makefile
   tests/unit/Makefile
@@ -629,109 +692,112 @@ AC_OUTPUT
 ## Mini-report on what will be built. ##
 ##                                    ##
 
-PPRINT_INIT
-PPRINT_SET_INDENT(1)
-PPRINT_SET_TS(38)
+AE_PPRINT_INIT
+AE_PPRINT_SET_INDENT(1)
+AE_PPRINT_SET_TS(38)
 
 AS_ECHO
 AS_IF([test -n "ust_version_name"], [
-  AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION \"ust_version_name\"$PPRINT_COLOR_RST")
+  AS_ECHO("${AE_PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION \"ust_version_name\"$AE_PPRINT_COLOR_RST")
 ], [
-  AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION")
+  AS_ECHO("${AE_PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION")
 ])
 
 AS_ECHO
 
 AS_IF([test -n "ust_version_description"], [
   AS_IF([test -n "$FOLD"], [
-    AS_ECHO("`AS_ECHO("ust_version_description") | $FOLD -s`")
+    AS_ECHO(["ust_version_description"]) | $FOLD -s
   ], [
-    AS_ECHO("ust_version_description")
+    AS_ECHO(["ust_version_description"])
   ])
   AS_ECHO
 ])
 
-PPRINT_SUBTITLE([System])
+AE_PPRINT_SUBTITLE([System])
 
-PPRINT_PROP_STRING([Target architecture], $host_cpu)
+AE_PPRINT_PROP_STRING([Target architecture], $host_cpu)
 
 AS_IF([test "x$unsupported_arch" = "xyes"],[
-       PPRINT_WARN([Your architecture ($host_cpu) is unsupported, using safe default of no unaligned access.])
+       AE_PPRINT_WARN([Your architecture ($host_cpu) is unsupported, using safe default of no unaligned access.])
 ])
 
 AS_ECHO
-PPRINT_SUBTITLE([Features])
-PPRINT_SET_INDENT(1)
+AE_PPRINT_SUBTITLE([Features])
+AE_PPRINT_SET_INDENT(1)
 
 test "x$with_sdt" = "xyes" && value=1 || value=0
-PPRINT_PROP_BOOL_CUSTOM([sdt.h integration], $value, [use --with-sdt])
+AE_PPRINT_PROP_BOOL_CUSTOM([sdt.h integration], $value, [use --with-sdt])
 
 AE_IS_FEATURE_ENABLED([java-agent-jul]) && value=1 || value=0
-PPRINT_PROP_BOOL_CUSTOM([Java agent (JUL support)], $value, [use --enable-java-agent-jul])
+AE_PPRINT_PROP_BOOL_CUSTOM([Java agent (JUL support)], $value, [use --enable-java-agent-jul])
 
 AE_IS_FEATURE_ENABLED([java-agent-log4j]) && value=1 || value=0
-PPRINT_PROP_BOOL_CUSTOM([Java agent (Log4j support)], $value, [use --enable-java-agent-log4j])
+AE_PPRINT_PROP_BOOL_CUSTOM([Java agent (Log4j 1.x support (deprecated))], $value, [use --enable-java-agent-log4j])
+
+AE_IS_FEATURE_ENABLED([java-agent-log4j2]) && value=1 || value=0
+AE_PPRINT_PROP_BOOL_CUSTOM([Java agent (Log4j 2.x support)], $value, [use --enable-java-agent-log4j2])
 
 AE_IS_FEATURE_ENABLED([jni-interface]) && value=1 || value=0
-PPRINT_PROP_BOOL_CUSTOM([JNI interface (JNI)], $value, [use --enable-jni-interface])
+AE_PPRINT_PROP_BOOL_CUSTOM([JNI interface (JNI)], $value, [use --enable-jni-interface])
 
 AE_IS_FEATURE_ENABLED([python-agent]) && value=1 || value=0
-PPRINT_PROP_BOOL_CUSTOM([Python agent], $value, [use --enable-python-agent])
+AE_PPRINT_PROP_BOOL_CUSTOM([Python agent], $value, [use --enable-python-agent])
 
 test "x$ac_cv_header_linux_perf_event_h" = "xyes" && value=1 || value=0
-PPRINT_PROP_BOOL_CUSTOM([Perf event integration], $value)
+AE_PPRINT_PROP_BOOL_CUSTOM([Perf event integration], $value)
 
 AE_IS_FEATURE_ENABLED([numa]) && value=1 || value=0
-PPRINT_PROP_BOOL([NUMA], $value)
+AE_PPRINT_PROP_BOOL([NUMA], $value)
 
 AS_ECHO
-PPRINT_SET_INDENT(0)
+AE_PPRINT_SET_INDENT(0)
 
 AE_IS_FEATURE_ENABLED([examples]) && value=1 || value=0
-PPRINT_PROP_BOOL([Build and install examples], $value, $PPRINT_COLOR_SUBTITLE)
+AE_PPRINT_PROP_BOOL([Build and install examples], $value, $AE_PPRINT_COLOR_SUBTITLE)
 
 # man pages build enabled/disabled
 m4_pushdef([build_man_pages_msg], [Build and install man pages])
 
 AE_IF_FEATURE_ENABLED([man-pages], [
   AE_IF_IN_GIT_REPO([
-    PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
+    AE_PPRINT_PROP_BOOL([build_man_pages_msg], 1, $AE_PPRINT_COLOR_SUBTITLE)
   ], [
     AS_IF([test "x$have_asciidoc_xmlto" = "xyes"], [
-      PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
+      AE_PPRINT_PROP_BOOL([build_man_pages_msg], 1, $AE_PPRINT_COLOR_SUBTITLE)
     ], [
-      PPRINT_PROP_STRING([build_man_pages_msg],
-        [${PPRINT_COLOR_BLDGRN}yes (already built)],
-        $PPRINT_COLOR_SUBTITLE)
+      AE_PPRINT_PROP_STRING([build_man_pages_msg],
+        [${AE_PPRINT_COLOR_BLDGRN}yes (already built)],
+        $AE_PPRINT_COLOR_SUBTITLE)
     ])
   ])
 ], [
-  PPRINT_PROP_BOOL([build_man_pages_msg], 0, $PPRINT_COLOR_SUBTITLE)
+  AE_PPRINT_PROP_BOOL([build_man_pages_msg], 0, $AE_PPRINT_COLOR_SUBTITLE)
 ])
 
 m4_popdef([build_man_pages_msg])
 
-PPRINT_SET_INDENT(1)
+AE_PPRINT_SET_INDENT(1)
 
 report_bindir="`eval eval echo $bindir`"
 report_libdir="`eval eval echo $libdir`"
 
 # Print the bindir and libdir this `make install' will install into.
 AS_ECHO
-PPRINT_SUBTITLE([Install directories])
-PPRINT_PROP_STRING([Binaries], [$report_bindir])
-PPRINT_PROP_STRING([Libraries], [$report_libdir])
+AE_PPRINT_SUBTITLE([Install directories])
+AE_PPRINT_PROP_STRING([Binaries], [$report_bindir])
+AE_PPRINT_PROP_STRING([Libraries], [$report_libdir])
 
 AS_ECHO
-PPRINT_SUBTITLE([System directories])
+AE_PPRINT_SUBTITLE([System directories])
 
-PPRINT_PROP_STRING([lttng-sessiond rundir], [$lttng_system_rundir])
+AE_PPRINT_PROP_STRING([lttng-sessiond rundir], [$lttng_system_rundir])
 
-PPRINT_SET_INDENT(0)
+AE_PPRINT_SET_INDENT(0)
 
 AS_IF([test "x$warn_prebuilt_man_pages" = "xyes" ], [
   AS_ECHO
-  PPRINT_WARN([dnl
+  AE_PPRINT_WARN([dnl
 Both asciidoc and xmlto are needed to build the LTTng-UST man pages.
 
 Note that the man pages are already built in this distribution tarball,
This page took 0.029567 seconds and 4 git commands to generate.