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 ## OS and Arch specific defaults ##
65 # Set os specific options
67 [freebsd*], [NO_NUMA=1]
70 # Set architecture specific options
89 unsupported_arch="yes"
94 ## C compiler checks ##
97 # Choose the C compiler
99 # AC_PROG_CC_STDC was merged in AC_PROG_CC in autoconf 2.70
100 m4_version_prereq([2.70], [], [AC_PROG_CC_STDC])
102 # Make sure the C compiler supports C99
103 AS_IF([test "$ac_cv_prog_cc_c99" = "no"], [AC_MSG_ERROR([The compiler does not support C99])])
105 # Enable available system extensions and LFS support
106 AC_USE_SYSTEM_EXTENSIONS
109 # Make sure the C compiler supports __attribute__
111 AS_IF([test "x$ax_cv___attribute__" != "xyes"],
112 [AC_MSG_ERROR([The compiler does not support __attribute__ extensions])])
114 # Make sure we have pthread support
115 AX_PTHREAD([], [AC_MSG_ERROR([Could not configure pthread support])])
117 # Make sure the C compiler supports weak symbols
119 AS_IF([test "x$ax_cv_sys_weak_alias" = "xno"],
120 [AC_MSG_ERROR([Your platform doesn't support weak symbols.])])
122 # Checks for typedefs, structures, and compiler characteristics.
139 AC_CHECK_TYPES([ptrdiff_t])
143 ## C++ compiler checks ##
146 # Find an optional C++11 compiler without GNU extensions (-std=c++11)
147 AX_CXX_COMPILE_STDCXX([11], [noext], [optional])
148 AM_CONDITIONAL([HAVE_CXX], [test "$HAVE_CXX11" = "1"])
170 # Check for dlinfo() by testing for RTLD_DI_LINKMAP in dlfcn.h
171 AS_IF([test "x$ac_cv_header_dlfcn_h" = "xyes"], [
172 AC_CHECK_DECL([RTLD_DI_LINKMAP], [], [], [[#include <dlfcn.h>]])
177 ## Programs checks ##
186 AC_CHECK_PROGS([ASCIIDOC], [asciidoc])
187 AC_CHECK_PROGS([CMAKE], [cmake])
188 AC_CHECK_PROGS([FOLD], [fold])
189 AC_CHECK_PROGS([XMLTO], [xmlto])
191 AM_PATH_PYTHON([2.7], [], [PYTHON=""])
197 # Initialize and configure libtool
198 LT_INIT([disable-static])
233 # AC_FUNC_MALLOC causes problems when cross-compiling.
237 # Check for pthread_setname_np and its signature
238 LTTNG_PTHREAD_SETNAME_NP
239 LTTNG_PTHREAD_GETNAME_NP
241 # Check dor dlopen() in -ldl or -lc
242 AC_CHECK_LIB([dl], [dlopen], [
246 # dlopen not found in libdl, check in libc
247 AC_CHECK_LIB([c], [dlopen], [
251 AC_MSG_ERROR([Cannot find dlopen in libdl nor libc. Use [LDFLAGS]=-Ldir to specify their location.])
256 # Check if libdl has dlmopen()
257 AC_CHECK_LIB([$libdl_name], [dlmopen], [
258 AC_DEFINE([HAVE_DLMOPEN], [1], [Define to 1 if dlmopen is available.])
261 # Require URCU >= 0.12 for DEFINE_URCU_TLS_INIT
262 PKG_CHECK_MODULES([URCU], [liburcu >= 0.12])
265 AM_CONDITIONAL([HAVE_CMAKE], [test "x$CMAKE" != "x"])
267 AC_MSG_CHECKING([whether shared libraries are enabled])
268 AS_IF([test "x$enable_shared" = "xyes"], [
272 AC_MSG_ERROR([LTTng-UST requires shared libraries to be enabled])
275 # Configuration options, which will be installed in the config.h
276 AH_TEMPLATE([LTTNG_UST_HAVE_SDT_INTEGRATION], [SystemTap integration via sdt.h])
279 AM_CONDITIONAL([ENABLE_UST_DL], [test "x${ac_cv_have_decl_RTLD_DI_LINKMAP}" = "xyes"])
282 AS_IF([test "x$NO_NUMA" = "x1"],[
283 AS_IF([test "x$enable_numa" = "x" ], [enable_numa=no])
286 AC_ARG_ENABLE([numa], [
287 AS_HELP_STRING([--disable-numa], [disable NUMA support])
289 enable_numa=$enableval
294 AS_IF([test "x$enable_numa" = "xyes"], [
295 # numa - check that numa lib is available
296 AC_CHECK_LIB([numa], [numa_available], [],
297 [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.])])
300 AM_CONDITIONAL([ENABLE_NUMA], [test "x$have_libnuma" = "xyes"])
302 AM_CONDITIONAL([HAVE_PERF_EVENT], [test "x$ac_cv_header_linux_perf_event_h" = "xyes"])
304 # Check for JNI header files if requested
305 AC_ARG_ENABLE([jni-interface], [
306 AS_HELP_STRING([--enable-jni-interface], [build JNI interface between C and Java. Needs Java include files [default=no]])
308 jni_interface=$enableval
313 AM_CONDITIONAL([ENABLE_JNI_INTERFACE], [test "x$jni_interface" = "xyes"])
316 AC_ARG_ENABLE([java-agent-jul], [
317 AS_HELP_STRING([--enable-java-agent-jul], [build the LTTng UST Java agent with JUL support [default=no]])
319 java_agent_jul=$enableval
324 AC_ARG_ENABLE([java-agent-log4j], [
325 AS_HELP_STRING([--enable-java-agent-log4j], [build the LTTng UST Java agent with Log4j support [default=no]])
327 java_agent_log4j=$enableval
332 AC_ARG_ENABLE([java-agent-all], [
333 AS_HELP_STRING([--enable-java-agent-all], [build the LTTng UST Java agent with all supported backends [default=no]])
335 java_agent_jul=$enableval
336 java_agent_log4j=$enableval
339 AM_CONDITIONAL([ENABLE_JAVA_AGENT], [test "x$java_agent_jul" = "xyes" || test "x$java_agent_log4j" = "xyes"])
340 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_JUL], [test "x$java_agent_jul" = "xyes"])
341 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_LOG4J], [test "x$java_agent_log4j" = "xyes"])
343 AS_IF([test "x$jni_interface" = "xyes" || test "x$java_agent_jul" = "xyes" || test "x$java_agent_log4j" = "xyes"], [
345 AC_ARG_VAR([CLASSPATH], [Java class path])
348 for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
350 JNI_CPPFLAGS="$JNI_CPPFLAGS -I$JNI_INCLUDE_DIR"
353 saved_CPPFLAGS="$CPPFLAGS"
354 CPPFLAGS="$CPPFLAGS $JNI_CPPFLAGS"
356 CPPFLAGS="$saved_CPPFLAGS"
359 AM_CONDITIONAL([HAVE_JAVAH], [test "x$JAVAH" != "x"])
361 AS_IF([test "x$java_agent_log4j" = "xyes"], [
363 AX_CHECK_CLASS([org.apache.log4j.Logger])
364 AS_IF([test "x$ac_cv_class_org_apache_log4j_Logger" = "xno"], [
365 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"])
369 # Option to build the python agent
370 AC_ARG_ENABLE([python-agent], [
371 AS_HELP_STRING([--enable-python-agent], [build the LTTng UST Python agent [default=no]])
373 python_agent=$enableval
375 AM_CONDITIONAL([ENABLE_PYTHON_AGENT], [test "x$python_agent" = "xyes"])
379 AS_HELP_STRING([--with-sdt], [provide SystemTap integration via sdt.h [default=no]])
386 AS_IF([test "x$with_sdt" = "xyes"], [
387 AC_MSG_CHECKING([STAP_PROBEV()])
388 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
389 #define SDT_USE_VARIADIC
393 STAP_PROBEV(provider,name,1,2,3,4,5,6,7,8,9,10);
397 AC_DEFINE([LTTNG_UST_HAVE_SDT_INTEGRATION], [1])
400 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])
404 AC_ARG_WITH([lttng-system-rundir], [
405 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".]),
407 lttng_system_rundir="$withval"
409 lttng_system_rundir="/var/run/lttng"
411 AC_DEFINE_UNQUOTED([LTTNG_SYSTEM_RUNDIR], ["$lttng_system_rundir"],
412 [LTTng system runtime directory])
414 AM_CONDITIONAL([ENABLE_GEN_TP_EXAMPLES], [test "x$PYTHON" != "x"])
416 # Enable building examples
420 [--disable-examples],
421 [Do not build and install examples]
423 [enable_examples=$enableval],
424 [enable_examples=yes]
427 AM_CONDITIONAL([ENABLE_EXAMPLES], [test "x$enable_examples" != "xno"])
429 # Enable building man pages (user's intention).
433 [--disable-man-pages],
434 [Do not build and install man pages (already built in a distributed tarball)]
436 [man_pages_opt=$enableval],
440 # Check for asciidoc and xmlto if we enabled building the man pages.
441 have_asciidoc_xmlto=no
442 warn_prebuilt_man_pages=no
444 AS_IF([test "x$man_pages_opt" = "xyes"], [
445 AS_IF([test "x$ASCIIDOC" = "x" || test "x$XMLTO" = "x"], [
447 # This is an error because we're in the Git repo, which
448 # means the man pages are not already generated for us,
449 # thus asciidoc/xmlto are required because we were asked
450 # to build the man pages.
452 Both asciidoc and xmlto are needed to build the LTTng-UST man pages. Use
453 --disable-man-pages to disable building the man pages, in which case
454 they will not be installed.
457 # Only warn here: since we're in the tarball, the man
458 # pages should already be generated at this point, thus
459 # asciidoc/xmlto are not strictly required.
460 warn_prebuilt_man_pages=yes
463 have_asciidoc_xmlto=yes
467 # Export man page build condition: build the man pages if the user
468 # asked for it, and if the tools are available.
469 AM_CONDITIONAL([ENABLE_MAN_PAGES], [test "x$man_pages_opt" != "xno"])
470 AM_CONDITIONAL([HAVE_ASCIIDOC_XMLTO], [test "x$have_asciidoc_xmlto" = "xyes"])
473 # Defined in include/lttng/ust-version.h
474 AC_DEFINE([LTTNG_UST_MAJOR_VERSION], ust_version_major, [LTTng UST major version])
475 AC_DEFINE([LTTNG_UST_MINOR_VERSION], ust_version_minor, [LTTng UST minor version])
476 AC_DEFINE([LTTNG_UST_PATCHLEVEL_VERSION], ust_version_patch, [LTTng UST patch version])
477 AC_DEFINE([LTTNG_UST_VERSION], ["]ust_version["], [LTTng UST version string])
478 AC_DEFINE([LTTNG_UST_LIB_SONAME_MAJOR], [ust_lib_version_current], [Major SONAME number of liblttng-ust])
479 AC_DEFINE([LTTNG_UST_CTL_LIB_SONAME_MAJOR], [ust_ctl_lib_version_current], [Major SONAME number of liblttng-ust-ctl])
482 AM_CFLAGS="-Wall $URCU_CFLAGS $PTHREAD_CFLAGS"
485 AM_CXXFLAGS="$AM_CFLAGS"
486 AC_SUBST(AM_CXXFLAGS)
488 # The order in which the include folders are searched is important.
489 # The top_builddir should always be searched first in the event that a build
490 # time generated file is included.
491 AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_srcdir)/include -include config.h"
492 AC_SUBST(AM_CPPFLAGS)
494 AC_SUBST(JNI_CPPFLAGS)
498 ## Output files generated by configure ##
501 # List of files to be generated from '.in' templates by AC_OUTPUT
505 doc/examples/Makefile
511 libringbuffer/Makefile
512 liblttng-ust-comm/Makefile
513 liblttng-ust/Makefile
514 liblttng-ust-ctl/Makefile
515 liblttng-ust-fork/Makefile
516 liblttng-ust-dl/Makefile
517 liblttng-ust-fd/Makefile
518 liblttng-ust-java/Makefile
519 liblttng-ust-java-agent/Makefile
520 liblttng-ust-java-agent/java/Makefile
521 liblttng-ust-java-agent/java/lttng-ust-agent-all/Makefile
522 liblttng-ust-java-agent/java/lttng-ust-agent-common/Makefile
523 liblttng-ust-java-agent/java/lttng-ust-agent-jul/Makefile
524 liblttng-ust-java-agent/java/lttng-ust-agent-log4j/Makefile
525 liblttng-ust-java-agent/jni/Makefile
526 liblttng-ust-java-agent/jni/common/Makefile
527 liblttng-ust-java-agent/jni/jul/Makefile
528 liblttng-ust-java-agent/jni/log4j/Makefile
529 liblttng-ust-libc-wrapper/Makefile
530 liblttng-ust-cyg-profile/Makefile
531 liblttng-ust-python-agent/Makefile
532 python-lttngust/Makefile
533 python-lttngust/setup.py
534 python-lttngust/lttngust/__init__.py
537 tests/compile/Makefile
538 tests/compile/ctf-types/Makefile
539 tests/compile/hello.cxx/Makefile
540 tests/compile/hello/Makefile
541 tests/compile/hello-many/Makefile
542 tests/compile/same_line_tracepoint/Makefile
543 tests/compile/test-app-ctx/Makefile
544 tests/benchmark/Makefile
545 tests/unit/gcc-weak-hidden/Makefile
546 tests/unit/libmsgpack/Makefile
548 tests/unit/libringbuffer/Makefile
549 tests/unit/pthread_name/Makefile
550 tests/unit/snprintf/Makefile
551 tests/unit/ust-elf/Makefile
561 ## Mini-report on what will be built. ##
569 AS_IF([test -n "ust_version_name"], [
570 AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION \"ust_version_name\"$PPRINT_COLOR_RST")
572 AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION")
577 AS_IF([test -n "ust_version_description"], [
578 AS_IF([test -n "$FOLD"], [
579 AS_ECHO("`AS_ECHO("ust_version_description") | $FOLD -s`")
581 AS_ECHO("ust_version_description")
586 PPRINT_SUBTITLE([System])
588 PPRINT_PROP_STRING([Target architecture], $host_cpu)
590 AS_IF([test "x$unsupported_arch" = "xyes"],[
591 PPRINT_WARN([Your architecture ($host_cpu) is unsupported, using safe default of no unaligned access.])
595 PPRINT_SUBTITLE([Features])
598 test "x$with_sdt" = "xyes" && value=1 || value=0
599 PPRINT_PROP_BOOL_CUSTOM([sdt.h integration], $value, [use --with-sdt])
601 test "x$java_agent_jul" = xyes && value=1 || value=0
602 PPRINT_PROP_BOOL_CUSTOM([Java agent (JUL support)], $value, [use --enable-java-agent-jul])
604 test "x$java_agent_log4j" = xyes && value=1 || value=0
605 PPRINT_PROP_BOOL_CUSTOM([Java agent (Log4j support)], $value, [use --enable-java-agent-log4j])
607 test "x$jni_interface" = xyes && value=1 || value=0
608 PPRINT_PROP_BOOL_CUSTOM([JNI interface (JNI)], $value, [use --enable-jni-interface])
610 test "x$python_agent" = xyes && value=1 || value=0
611 PPRINT_PROP_BOOL_CUSTOM([Python agent], $value, [use --enable-python-agent])
613 test "x$ac_cv_header_linux_perf_event_h" = "xyes" && value=1 || value=0
614 PPRINT_PROP_BOOL_CUSTOM([Perf event integration], $value)
616 test "x$enable_numa" = xyes && value=1 || value=0
617 PPRINT_PROP_BOOL([NUMA], $value)
622 test "x$enable_examples" = xyes && value=1 || value=0
623 PPRINT_PROP_BOOL([Build and install examples], $value, $PPRINT_COLOR_SUBTITLE)
625 # man pages build enabled/disabled
626 m4_pushdef([build_man_pages_msg], [Build and install man pages])
628 AS_IF([test "x$man_pages_opt" != "xno"], [
630 PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
632 AS_IF([test "x$have_asciidoc_xmlto" = "xyes"], [
633 PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
635 PPRINT_PROP_STRING([build_man_pages_msg],
636 [${PPRINT_COLOR_BLDGRN}yes (already built)],
637 $PPRINT_COLOR_SUBTITLE)
641 PPRINT_PROP_BOOL([build_man_pages_msg], 0, $PPRINT_COLOR_SUBTITLE)
644 m4_popdef([build_man_pages_msg])
648 report_bindir="`eval eval echo $bindir`"
649 report_libdir="`eval eval echo $libdir`"
651 # Print the bindir and libdir this `make install' will install into.
653 PPRINT_SUBTITLE([Install directories])
654 PPRINT_PROP_STRING([Binaries], [$report_bindir])
655 PPRINT_PROP_STRING([Libraries], [$report_libdir])
658 PPRINT_SUBTITLE([System directories])
660 PPRINT_PROP_STRING([lttng-sessiond rundir], [$lttng_system_rundir])
664 AS_IF([test "x$warn_prebuilt_man_pages" = "xyes" ], [
666 PPRINT_WARN([Both asciidoc and xmlto are needed to build the LTTng-UST man pages.
668 Note that the man pages are already built in this distribution tarball,
669 therefore asciidoc and xmlto are only needed if you intend to modify
672 Use --disable-man-pages to completely disable building and installing