1 dnl SPDX-License-Identifier: LGPL-2.1-only
3 dnl Copyright (C) 2021 EfficiOS, Inc.
5 dnl Process this file with autoconf to produce a configure script.
8 # Project version information
9 m4_define([ust_version_major], [2])
10 m4_define([ust_version_minor], [13])
11 m4_define([ust_version_patch], [0])
12 m4_define([ust_version_dev_stage], [-pre])
13 m4_define([ust_version], ust_version_major[.]ust_version_minor[.]ust_version_patch[]ust_version_dev_stage)
14 m4_define([ust_version_name], [[Codename TBD]])
15 m4_define([ust_version_description], [[Description TBD]])
17 # Library version information of "liblttng-ust"
18 # Following the numbering scheme proposed by libtool for the library version
19 # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
20 m4_define([ust_lib_version_current], [1])
21 m4_define([ust_lib_version_revision], [0])
22 m4_define([ust_lib_version_age], [0])
23 m4_define([ust_lib_version], ust_lib_version_current[:]ust_lib_version_revision[:]ust_lib_version_age)
25 # Library version information of "liblttng-ust-ctl"
26 # Following the numbering scheme proposed by libtool for the library version
27 # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
28 m4_define([ust_ctl_lib_version_current], [5])
29 m4_define([ust_ctl_lib_version_revision], [0])
30 m4_define([ust_ctl_lib_version_age], [0])
31 m4_define([ust_ctl_lib_version], ust_ctl_lib_version_current[:]ust_ctl_lib_version_revision[:]ust_ctl_lib_version_age)
35 ## Autoconf base setup ##
39 AC_INIT([lttng-ust],[ust_version],[mathieu dot desnoyers at efficios dot com],[],[https://lttng.org])
41 AC_CONFIG_HEADERS([include/config.h include/lttng/ust-config.h include/lttng/ust-version.h])
42 AC_CONFIG_AUX_DIR([config])
43 AC_CONFIG_MACRO_DIR([m4])
44 AC_CONFIG_SRCDIR([include/lttng/tracepoint.h])
51 ## Automake base setup ##
54 AM_INIT_AUTOMAKE([1.12 foreign dist-bzip2 no-dist-gzip tar-ustar nostdinc -Wall -Wno-portability -Werror])
55 AM_MAINTAINER_MODE([enable])
57 # Enable silent rules by default
58 AM_SILENT_RULES([yes])
62 ## C compiler checks ##
65 # Choose the C compiler
67 # AC_PROG_CC_STDC was merged in AC_PROG_CC in autoconf 2.70
68 m4_version_prereq([2.70], [], [AC_PROG_CC_STDC])
70 # Make sure the C compiler supports C99
71 AS_IF([test "$ac_cv_prog_cc_c99" = "no"], [AC_MSG_ERROR([The compiler does not support C99])])
73 # Enable available system extensions and LFS support
74 AC_USE_SYSTEM_EXTENSIONS
77 # Make sure the C compiler supports __attribute__
79 AS_IF([test "x$ax_cv___attribute__" != "xyes"],
80 [AC_MSG_ERROR([The compiler does not support __attribute__ extensions])])
82 # Make sure we have pthread support
83 AX_PTHREAD([], [AC_MSG_ERROR([Could not configure pthread support])])
85 # Make sure the C compiler supports weak symbols
87 AS_IF([test "x$ax_cv_sys_weak_alias" = "xno"],
88 [AC_MSG_ERROR([Your platform doesn't support weak symbols.])])
90 # Checks for typedefs, structures, and compiler characteristics.
107 AC_CHECK_TYPES([ptrdiff_t])
111 ## C++ compiler checks ##
114 # Find an optional C++11 compiler without GNU extensions (-std=c++11)
115 AX_CXX_COMPILE_STDCXX([11], [noext], [optional])
116 AM_CONDITIONAL([HAVE_CXX], [test "$HAVE_CXX11" = "1"])
138 # Check for dlinfo() by testing for RTLD_DI_LINKMAP in dlfcn.h
139 AS_IF([test "x$ac_cv_header_dlfcn_h" = "xyes"], [
140 AC_CHECK_DECL([RTLD_DI_LINKMAP], [], [], [[#include <dlfcn.h>]])
144 # Checks for programs.
151 AC_CHECK_PROG([CMAKE], [cmake])
152 AM_CONDITIONAL([HAVE_CMAKE], [test "x$CMAKE" != "x"])
154 # libtool link_all_deplibs fixup. See http://bugs.lttng.org/issues/321.
155 AC_ARG_ENABLE([libtool-linkdep-fixup], [
156 AS_HELP_STRING([--disable-libtool-linkdep-fixup], [disable the libtool fixup for linking all dependent libraries (link_all_deplibs)])
158 libtool_fixup=$enableval
163 AS_IF([test "x$libtool_fixup" = "xyes"], [
164 libtool_m4="$srcdir/m4/libtool.m4"
165 libtool_flag_pattern=".*link_all_deplibs\s*,\s*\$1\s*)"
166 AC_MSG_CHECKING([for occurence(s) of link_all_deplibs = no in $libtool_m4])
167 libtool_flag_pattern_count=$(grep -c "$libtool_flag_pattern\s*=\s*no" $libtool_m4)
169 AS_IF([test $libtool_flag_pattern_count -ne 0], [
170 AC_MSG_RESULT([$libtool_flag_pattern_count])
171 AC_MSG_WARN([the detected libtool will not link all dependencies, forcing link_all_deplibs = unknown])
172 $SED -i "s/\($libtool_flag_pattern\)\s*=\s*no/\1=unknown/g" $libtool_m4
174 AC_MSG_RESULT([none])
177 LT_INIT([disable-static])
179 AC_MSG_CHECKING([whether shared libraries are enabled])
180 AS_IF([test "x$enable_shared" = "xyes"], [
184 AC_MSG_ERROR([LTTng-UST requires shared libraries to be enabled])
187 # Checks for library functions.
217 # Check for pthread_setname_np and its signature
218 LTTNG_PTHREAD_SETNAME_NP
219 LTTNG_PTHREAD_GETNAME_NP
221 # AC_FUNC_MALLOC causes problems when cross-compiling.
224 # Set architecture specific options
246 # Set os specific options
248 [freebsd*], [NO_NUMA=1]
251 # Configuration options, which will be installed in the config.h
252 AH_TEMPLATE([LTTNG_UST_HAVE_SDT_INTEGRATION], [SystemTap integration via sdt.h])
254 # Checks for libraries.
255 AC_CHECK_LIB([dl], [dlopen], [
259 #libdl not found, check for dlopen in libc.
260 AC_CHECK_LIB([c], [dlopen], [
264 AC_MSG_ERROR([Cannot find dlopen in libdl nor libc. Use [LDFLAGS]=-Ldir to specify their location.])
269 # Check if libdl has dlmopen support.
270 AH_TEMPLATE([HAVE_DLMOPEN], ["Define to 1 if dlmopen is available."])
271 AC_CHECK_LIB([$libdl_name], [dlmopen],
272 [AC_DEFINE([HAVE_DLMOPEN], [1])]
275 AM_CONDITIONAL([ENABLE_UST_DL], [test "x${ac_cv_have_decl_RTLD_DI_LINKMAP}" = "xyes"])
277 # Require URCU >= 0.12 for DEFINE_URCU_TLS_INIT
278 PKG_CHECK_MODULES([URCU], [liburcu >= 0.12])
281 AS_IF([test "x$NO_NUMA" = "x1"],[
282 AS_IF([test "x$enable_numa" = "x" ], [enable_numa=no])
285 AC_ARG_ENABLE([numa], [
286 AS_HELP_STRING([--disable-numa], [disable NUMA support])
288 enable_numa=$enableval
293 AS_IF([test "x$enable_numa" = "xyes"], [
294 # numa - check that numa lib is available
295 AC_CHECK_LIB([numa], [numa_available], [],
296 [AC_MSG_ERROR([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 argument to disable NUMA support.])])
299 AM_CONDITIONAL([ENABLE_NUMA], [test "x$have_libnuma" = "xyes"])
301 AM_CONDITIONAL([HAVE_PERF_EVENT], [test "x$ac_cv_header_linux_perf_event_h" = "xyes"])
303 # Check for JNI header files if requested
304 AC_ARG_ENABLE([jni-interface], [
305 AS_HELP_STRING([--enable-jni-interface], [build JNI interface between C and Java. Needs Java include files [default=no]])
307 jni_interface=$enableval
312 AM_CONDITIONAL([ENABLE_JNI_INTERFACE], [test "x$jni_interface" = "xyes"])
315 AC_ARG_ENABLE([java-agent-jul], [
316 AS_HELP_STRING([--enable-java-agent-jul], [build the LTTng UST Java agent with JUL support [default=no]])
318 java_agent_jul=$enableval
323 AC_ARG_ENABLE([java-agent-log4j], [
324 AS_HELP_STRING([--enable-java-agent-log4j], [build the LTTng UST Java agent with Log4j support [default=no]])
326 java_agent_log4j=$enableval
331 AC_ARG_ENABLE([java-agent-all], [
332 AS_HELP_STRING([--enable-java-agent-all], [build the LTTng UST Java agent with all supported backends [default=no]])
334 java_agent_jul=$enableval
335 java_agent_log4j=$enableval
338 AM_CONDITIONAL([ENABLE_JAVA_AGENT], [test "x$java_agent_jul" = "xyes" || test "x$java_agent_log4j" = "xyes"])
339 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_JUL], [test "x$java_agent_jul" = "xyes"])
340 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_LOG4J], [test "x$java_agent_log4j" = "xyes"])
342 AS_IF([test "x$jni_interface" = "xyes" || test "x$java_agent_jul" = "xyes" || test "x$java_agent_log4j" = "xyes"], [
347 AC_ARG_VAR([CLASSPATH], [Java class path])
350 for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
352 JNI_CPPFLAGS="$JNI_CPPFLAGS -I$JNI_INCLUDE_DIR"
355 saved_CPPFLAGS="$CPPFLAGS"
356 CPPFLAGS="$CPPFLAGS $JNI_CPPFLAGS"
358 CPPFLAGS="$saved_CPPFLAGS"
361 AM_CONDITIONAL([HAVE_JAVAH], [test "x$JAVAH" != "x"])
363 AS_IF([test "x$java_agent_log4j" = "xyes"], [
365 AX_CHECK_CLASS([org.apache.log4j.Logger])
366 AS_IF([test "x$ac_cv_class_org_apache_log4j_Logger" = "xno"], [
367 AC_MSG_ERROR([The UST Java agent support for log4j was requested but the Log4j classes were not found. Please specify the location of the Log4j jar via the Java CLASSPATH e.g: export CLASSPATH="/path/to/log4j.jar"])
371 # Option to build the python agent
372 AC_ARG_ENABLE([python-agent], [
373 AS_HELP_STRING([--enable-python-agent], [build the LTTng UST Python agent [default=no]])
375 python_agent=$enableval
377 AM_CONDITIONAL([ENABLE_PYTHON_AGENT], [test "x$python_agent" = "xyes"])
378 AS_IF([test "x$python_agent" = "xyes"], [
379 AM_PATH_PYTHON([2.7])
384 AS_HELP_STRING([--with-sdt], [provide SystemTap integration via sdt.h [default=no]])
391 AS_IF([test "x$with_sdt" = "xyes"], [
392 AC_MSG_CHECKING([STAP_PROBEV()])
393 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
394 #define SDT_USE_VARIADIC
398 STAP_PROBEV(provider,name,1,2,3,4,5,6,7,8,9,10);
402 AC_DEFINE([LTTNG_UST_HAVE_SDT_INTEGRATION], [1])
405 AC_MSG_ERROR([The sdt.h integration was requested but the STAP_PROBEV define cannot be used. Make sure it is installed, and up to date, or use CPPFLAGS=-I/path/ to specify a non-standard path to sys/sdt.h])
409 AC_ARG_WITH([lttng-system-rundir], [
410 AS_HELP_STRING([--with-lttng-system-rundir], [Location of the system directory where LTTng-UST expects the system-wide lttng-sessiond runtime files. The default is "/var/run/lttng".]),
412 lttng_system_rundir="$withval"
414 lttng_system_rundir="/var/run/lttng"
416 AC_DEFINE_UNQUOTED([LTTNG_SYSTEM_RUNDIR], ["$lttng_system_rundir"],
417 [LTTng system runtime directory])
419 AC_CHECK_PROG([ENABLE_GEN_TP_EXAMPLES], [python], ["yes"])
420 AM_CONDITIONAL([ENABLE_GEN_TP_EXAMPLES], [test "x$ENABLE_GEN_TP_EXAMPLES" = "xyes"])
422 # Enable building examples
426 [--disable-examples],
427 [Do not build and install examples]
429 [enable_examples=$enableval],
430 [enable_examples=yes]
433 AM_CONDITIONAL([ENABLE_EXAMPLES], [test "x$enable_examples" != "xno"])
435 # Enable building man pages (user's intention).
439 [--disable-man-pages],
440 [Do not build and install man pages (already built in a distributed tarball)]
442 [man_pages_opt=$enableval],
446 # Check for asciidoc and xmlto if we enabled building the man pages.
447 have_asciidoc_xmlto=no
448 warn_prebuilt_man_pages=no
450 AS_IF([test "x$man_pages_opt" = "xyes"], [
451 AC_PATH_PROG([ASCIIDOC], [asciidoc], [no])
452 AC_PATH_PROG([XMLTO], [xmlto], [no])
454 AS_IF([test "x$ASCIIDOC" = "xno" || test "x$XMLTO" = "xno"], [
456 # This is an error because we're in the Git repo, which
457 # means the man pages are not already generated for us,
458 # thus asciidoc/xmlto are required because we were asked
459 # to build the man pages.
461 Both asciidoc and xmlto are needed to build the LTTng-UST man pages. Use
462 --disable-man-pages to disable building the man pages, in which case
463 they will not be installed.
466 # Only warn here: since we're in the tarball, the man
467 # pages should already be generated at this point, thus
468 # asciidoc/xmlto are not strictly required.
469 warn_prebuilt_man_pages=yes
472 have_asciidoc_xmlto=yes
476 # Export man page build condition: build the man pages if the user
477 # asked for it, and if the tools are available.
478 AM_CONDITIONAL([ENABLE_MAN_PAGES], [test "x$man_pages_opt" != "xno"])
479 AM_CONDITIONAL([HAVE_ASCIIDOC_XMLTO], [test "x$have_asciidoc_xmlto" = "xyes"])
482 # Defined in include/lttng/ust-version.h
483 AC_DEFINE([LTTNG_UST_MAJOR_VERSION], ust_version_major, [LTTng UST major version])
484 AC_DEFINE([LTTNG_UST_MINOR_VERSION], ust_version_minor, [LTTng UST minor version])
485 AC_DEFINE([LTTNG_UST_PATCHLEVEL_VERSION], ust_version_patch, [LTTng UST patch version])
486 AC_DEFINE([LTTNG_UST_VERSION], ["]ust_version["], [LTTng UST version string])
487 AC_DEFINE([LTTNG_UST_LIB_SONAME_MAJOR], [ust_lib_version_current], [Major SONAME number of liblttng-ust])
488 AC_DEFINE([LTTNG_UST_CTL_LIB_SONAME_MAJOR], [ust_ctl_lib_version_current], [Major SONAME number of liblttng-ust-ctl])
491 AM_CFLAGS="-Wall $URCU_CFLAGS $PTHREAD_CFLAGS"
494 AM_CXXFLAGS="$AM_CFLAGS"
495 AC_SUBST(AM_CXXFLAGS)
497 # The order in which the include folders are searched is important.
498 # The top_builddir should always be searched first in the event that a build
499 # time generated file is included.
500 AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_srcdir)/include -include config.h"
501 AC_SUBST(AM_CPPFLAGS)
503 AC_SUBST(JNI_CPPFLAGS)
507 ## Output files generated by configure ##
510 # List of files to be generated from '.in' templates by AC_OUTPUT
514 doc/examples/Makefile
520 libringbuffer/Makefile
521 liblttng-ust-comm/Makefile
522 liblttng-ust/Makefile
523 liblttng-ust-ctl/Makefile
524 liblttng-ust-fork/Makefile
525 liblttng-ust-dl/Makefile
526 liblttng-ust-fd/Makefile
527 liblttng-ust-java/Makefile
528 liblttng-ust-java-agent/Makefile
529 liblttng-ust-java-agent/java/Makefile
530 liblttng-ust-java-agent/java/lttng-ust-agent-all/Makefile
531 liblttng-ust-java-agent/java/lttng-ust-agent-common/Makefile
532 liblttng-ust-java-agent/java/lttng-ust-agent-jul/Makefile
533 liblttng-ust-java-agent/java/lttng-ust-agent-log4j/Makefile
534 liblttng-ust-java-agent/jni/Makefile
535 liblttng-ust-java-agent/jni/common/Makefile
536 liblttng-ust-java-agent/jni/jul/Makefile
537 liblttng-ust-java-agent/jni/log4j/Makefile
538 liblttng-ust-libc-wrapper/Makefile
539 liblttng-ust-cyg-profile/Makefile
540 liblttng-ust-python-agent/Makefile
541 python-lttngust/Makefile
542 python-lttngust/setup.py
543 python-lttngust/lttngust/__init__.py
546 tests/compile/Makefile
547 tests/compile/ctf-types/Makefile
548 tests/compile/hello.cxx/Makefile
549 tests/compile/hello/Makefile
550 tests/compile/hello-many/Makefile
551 tests/compile/same_line_tracepoint/Makefile
552 tests/compile/test-app-ctx/Makefile
553 tests/benchmark/Makefile
554 tests/unit/gcc-weak-hidden/Makefile
555 tests/unit/libmsgpack/Makefile
557 tests/unit/libringbuffer/Makefile
558 tests/unit/pthread_name/Makefile
559 tests/unit/snprintf/Makefile
560 tests/unit/ust-elf/Makefile
570 ## Mini-report on what will be built. ##
578 AS_IF([test -n "ust_version_name"], [
579 AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION \"ust_version_name\"$PPRINT_COLOR_RST")
581 AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION")
586 AS_IF([test -n "ust_version_description"], [
587 AS_IF([test -n "$FOLD"], [
588 AS_ECHO("`AS_ECHO("ust_version_description") | $FOLD -s`")
590 AS_ECHO("ust_version_description")
595 PPRINT_SUBTITLE([System])
597 PPRINT_PROP_STRING([Target architecture], $host_cpu)
599 AS_IF([test "x$UNSUPPORTED_ARCH" = "x1"],[
600 PPRINT_WARN([Your architecture ($host_cpu) is unsupported, using safe default of no unaligned access.])
604 PPRINT_SUBTITLE([Features])
607 test "x$with_sdt" = "xyes" && value=1 || value=0
608 PPRINT_PROP_BOOL_CUSTOM([sdt.h integration], $value, [use --with-sdt])
610 test "x$java_agent_jul" = xyes && value=1 || value=0
611 PPRINT_PROP_BOOL_CUSTOM([Java agent (JUL support)], $value, [use --enable-java-agent-jul])
613 test "x$java_agent_log4j" = xyes && value=1 || value=0
614 PPRINT_PROP_BOOL_CUSTOM([Java agent (Log4j support)], $value, [use --enable-java-agent-log4j])
616 test "x$jni_interface" = xyes && value=1 || value=0
617 PPRINT_PROP_BOOL_CUSTOM([JNI interface (JNI)], $value, [use --enable-jni-interface])
619 test "x$python_agent" = xyes && value=1 || value=0
620 PPRINT_PROP_BOOL_CUSTOM([Python agent], $value, [use --enable-python-agent])
622 test "x$ac_cv_header_linux_perf_event_h" = "xyes" && value=1 || value=0
623 PPRINT_PROP_BOOL_CUSTOM([Perf event integration], $value)
625 test "x$enable_numa" = xyes && value=1 || value=0
626 PPRINT_PROP_BOOL([NUMA], $value)
631 test "x$enable_examples" = xyes && value=1 || value=0
632 PPRINT_PROP_BOOL([Build and install examples], $value, $PPRINT_COLOR_SUBTITLE)
634 # man pages build enabled/disabled
635 m4_pushdef([build_man_pages_msg], [Build and install man pages])
637 AS_IF([test "x$man_pages_opt" != "xno"], [
639 PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
641 AS_IF([test "x$have_asciidoc_xmlto" = "xyes"], [
642 PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
644 PPRINT_PROP_STRING([build_man_pages_msg],
645 [${PPRINT_COLOR_BLDGRN}yes (already built)],
646 $PPRINT_COLOR_SUBTITLE)
650 PPRINT_PROP_BOOL([build_man_pages_msg], 0, $PPRINT_COLOR_SUBTITLE)
653 m4_popdef([build_man_pages_msg])
657 report_bindir="`eval eval echo $bindir`"
658 report_libdir="`eval eval echo $libdir`"
660 # Print the bindir and libdir this `make install' will install into.
662 PPRINT_SUBTITLE([Install directories])
663 PPRINT_PROP_STRING([Binaries], [$report_bindir])
664 PPRINT_PROP_STRING([Libraries], [$report_libdir])
667 PPRINT_SUBTITLE([System directories])
669 PPRINT_PROP_STRING([lttng-sessiond rundir], [$lttng_system_rundir])
673 AS_IF([test "x$warn_prebuilt_man_pages" = "xyes" ], [
675 PPRINT_WARN([Both asciidoc and xmlto are needed to build the LTTng-UST man pages.
677 Note that the man pages are already built in this distribution tarball,
678 therefore asciidoc and xmlto are only needed if you intend to modify
681 Use --disable-man-pages to completely disable building and installing