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>]])
145 ## Programs checks ##
154 AC_CHECK_PROGS([ASCIIDOC], [asciidoc])
155 AC_CHECK_PROGS([CMAKE], [cmake])
156 AC_CHECK_PROGS([FOLD], [fold])
157 AC_CHECK_PROGS([XMLTO], [xmlto])
159 AM_PATH_PYTHON([2.7], [], [PYTHON=""])
165 # Initialize and configure libtool
166 LT_INIT([disable-static])
169 AM_CONDITIONAL([HAVE_CMAKE], [test "x$CMAKE" != "x"])
171 AC_MSG_CHECKING([whether shared libraries are enabled])
172 AS_IF([test "x$enable_shared" = "xyes"], [
176 AC_MSG_ERROR([LTTng-UST requires shared libraries to be enabled])
179 # Checks for library functions.
209 # Check for pthread_setname_np and its signature
210 LTTNG_PTHREAD_SETNAME_NP
211 LTTNG_PTHREAD_GETNAME_NP
213 # AC_FUNC_MALLOC causes problems when cross-compiling.
216 # Set architecture specific options
238 # Set os specific options
240 [freebsd*], [NO_NUMA=1]
243 # Configuration options, which will be installed in the config.h
244 AH_TEMPLATE([LTTNG_UST_HAVE_SDT_INTEGRATION], [SystemTap integration via sdt.h])
246 # Checks for libraries.
247 AC_CHECK_LIB([dl], [dlopen], [
251 #libdl not found, check for dlopen in libc.
252 AC_CHECK_LIB([c], [dlopen], [
256 AC_MSG_ERROR([Cannot find dlopen in libdl nor libc. Use [LDFLAGS]=-Ldir to specify their location.])
261 # Check if libdl has dlmopen support.
262 AH_TEMPLATE([HAVE_DLMOPEN], ["Define to 1 if dlmopen is available."])
263 AC_CHECK_LIB([$libdl_name], [dlmopen],
264 [AC_DEFINE([HAVE_DLMOPEN], [1])]
267 AM_CONDITIONAL([ENABLE_UST_DL], [test "x${ac_cv_have_decl_RTLD_DI_LINKMAP}" = "xyes"])
269 # Require URCU >= 0.12 for DEFINE_URCU_TLS_INIT
270 PKG_CHECK_MODULES([URCU], [liburcu >= 0.12])
273 AS_IF([test "x$NO_NUMA" = "x1"],[
274 AS_IF([test "x$enable_numa" = "x" ], [enable_numa=no])
277 AC_ARG_ENABLE([numa], [
278 AS_HELP_STRING([--disable-numa], [disable NUMA support])
280 enable_numa=$enableval
285 AS_IF([test "x$enable_numa" = "xyes"], [
286 # numa - check that numa lib is available
287 AC_CHECK_LIB([numa], [numa_available], [],
288 [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.])])
291 AM_CONDITIONAL([ENABLE_NUMA], [test "x$have_libnuma" = "xyes"])
293 AM_CONDITIONAL([HAVE_PERF_EVENT], [test "x$ac_cv_header_linux_perf_event_h" = "xyes"])
295 # Check for JNI header files if requested
296 AC_ARG_ENABLE([jni-interface], [
297 AS_HELP_STRING([--enable-jni-interface], [build JNI interface between C and Java. Needs Java include files [default=no]])
299 jni_interface=$enableval
304 AM_CONDITIONAL([ENABLE_JNI_INTERFACE], [test "x$jni_interface" = "xyes"])
307 AC_ARG_ENABLE([java-agent-jul], [
308 AS_HELP_STRING([--enable-java-agent-jul], [build the LTTng UST Java agent with JUL support [default=no]])
310 java_agent_jul=$enableval
315 AC_ARG_ENABLE([java-agent-log4j], [
316 AS_HELP_STRING([--enable-java-agent-log4j], [build the LTTng UST Java agent with Log4j support [default=no]])
318 java_agent_log4j=$enableval
323 AC_ARG_ENABLE([java-agent-all], [
324 AS_HELP_STRING([--enable-java-agent-all], [build the LTTng UST Java agent with all supported backends [default=no]])
326 java_agent_jul=$enableval
327 java_agent_log4j=$enableval
330 AM_CONDITIONAL([ENABLE_JAVA_AGENT], [test "x$java_agent_jul" = "xyes" || test "x$java_agent_log4j" = "xyes"])
331 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_JUL], [test "x$java_agent_jul" = "xyes"])
332 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_LOG4J], [test "x$java_agent_log4j" = "xyes"])
334 AS_IF([test "x$jni_interface" = "xyes" || test "x$java_agent_jul" = "xyes" || test "x$java_agent_log4j" = "xyes"], [
336 AC_ARG_VAR([CLASSPATH], [Java class path])
339 for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
341 JNI_CPPFLAGS="$JNI_CPPFLAGS -I$JNI_INCLUDE_DIR"
344 saved_CPPFLAGS="$CPPFLAGS"
345 CPPFLAGS="$CPPFLAGS $JNI_CPPFLAGS"
347 CPPFLAGS="$saved_CPPFLAGS"
350 AM_CONDITIONAL([HAVE_JAVAH], [test "x$JAVAH" != "x"])
352 AS_IF([test "x$java_agent_log4j" = "xyes"], [
354 AX_CHECK_CLASS([org.apache.log4j.Logger])
355 AS_IF([test "x$ac_cv_class_org_apache_log4j_Logger" = "xno"], [
356 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"])
360 # Option to build the python agent
361 AC_ARG_ENABLE([python-agent], [
362 AS_HELP_STRING([--enable-python-agent], [build the LTTng UST Python agent [default=no]])
364 python_agent=$enableval
366 AM_CONDITIONAL([ENABLE_PYTHON_AGENT], [test "x$python_agent" = "xyes"])
370 AS_HELP_STRING([--with-sdt], [provide SystemTap integration via sdt.h [default=no]])
377 AS_IF([test "x$with_sdt" = "xyes"], [
378 AC_MSG_CHECKING([STAP_PROBEV()])
379 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
380 #define SDT_USE_VARIADIC
384 STAP_PROBEV(provider,name,1,2,3,4,5,6,7,8,9,10);
388 AC_DEFINE([LTTNG_UST_HAVE_SDT_INTEGRATION], [1])
391 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])
395 AC_ARG_WITH([lttng-system-rundir], [
396 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".]),
398 lttng_system_rundir="$withval"
400 lttng_system_rundir="/var/run/lttng"
402 AC_DEFINE_UNQUOTED([LTTNG_SYSTEM_RUNDIR], ["$lttng_system_rundir"],
403 [LTTng system runtime directory])
405 AM_CONDITIONAL([ENABLE_GEN_TP_EXAMPLES], [test "x$PYTHON" != "x"])
407 # Enable building examples
411 [--disable-examples],
412 [Do not build and install examples]
414 [enable_examples=$enableval],
415 [enable_examples=yes]
418 AM_CONDITIONAL([ENABLE_EXAMPLES], [test "x$enable_examples" != "xno"])
420 # Enable building man pages (user's intention).
424 [--disable-man-pages],
425 [Do not build and install man pages (already built in a distributed tarball)]
427 [man_pages_opt=$enableval],
431 # Check for asciidoc and xmlto if we enabled building the man pages.
432 have_asciidoc_xmlto=no
433 warn_prebuilt_man_pages=no
435 AS_IF([test "x$man_pages_opt" = "xyes"], [
436 AS_IF([test "x$ASCIIDOC" = "x" || test "x$XMLTO" = "x"], [
438 # This is an error because we're in the Git repo, which
439 # means the man pages are not already generated for us,
440 # thus asciidoc/xmlto are required because we were asked
441 # to build the man pages.
443 Both asciidoc and xmlto are needed to build the LTTng-UST man pages. Use
444 --disable-man-pages to disable building the man pages, in which case
445 they will not be installed.
448 # Only warn here: since we're in the tarball, the man
449 # pages should already be generated at this point, thus
450 # asciidoc/xmlto are not strictly required.
451 warn_prebuilt_man_pages=yes
454 have_asciidoc_xmlto=yes
458 # Export man page build condition: build the man pages if the user
459 # asked for it, and if the tools are available.
460 AM_CONDITIONAL([ENABLE_MAN_PAGES], [test "x$man_pages_opt" != "xno"])
461 AM_CONDITIONAL([HAVE_ASCIIDOC_XMLTO], [test "x$have_asciidoc_xmlto" = "xyes"])
464 # Defined in include/lttng/ust-version.h
465 AC_DEFINE([LTTNG_UST_MAJOR_VERSION], ust_version_major, [LTTng UST major version])
466 AC_DEFINE([LTTNG_UST_MINOR_VERSION], ust_version_minor, [LTTng UST minor version])
467 AC_DEFINE([LTTNG_UST_PATCHLEVEL_VERSION], ust_version_patch, [LTTng UST patch version])
468 AC_DEFINE([LTTNG_UST_VERSION], ["]ust_version["], [LTTng UST version string])
469 AC_DEFINE([LTTNG_UST_LIB_SONAME_MAJOR], [ust_lib_version_current], [Major SONAME number of liblttng-ust])
470 AC_DEFINE([LTTNG_UST_CTL_LIB_SONAME_MAJOR], [ust_ctl_lib_version_current], [Major SONAME number of liblttng-ust-ctl])
473 AM_CFLAGS="-Wall $URCU_CFLAGS $PTHREAD_CFLAGS"
476 AM_CXXFLAGS="$AM_CFLAGS"
477 AC_SUBST(AM_CXXFLAGS)
479 # The order in which the include folders are searched is important.
480 # The top_builddir should always be searched first in the event that a build
481 # time generated file is included.
482 AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_srcdir)/include -include config.h"
483 AC_SUBST(AM_CPPFLAGS)
485 AC_SUBST(JNI_CPPFLAGS)
489 ## Output files generated by configure ##
492 # List of files to be generated from '.in' templates by AC_OUTPUT
496 doc/examples/Makefile
502 libringbuffer/Makefile
503 liblttng-ust-comm/Makefile
504 liblttng-ust/Makefile
505 liblttng-ust-ctl/Makefile
506 liblttng-ust-fork/Makefile
507 liblttng-ust-dl/Makefile
508 liblttng-ust-fd/Makefile
509 liblttng-ust-java/Makefile
510 liblttng-ust-java-agent/Makefile
511 liblttng-ust-java-agent/java/Makefile
512 liblttng-ust-java-agent/java/lttng-ust-agent-all/Makefile
513 liblttng-ust-java-agent/java/lttng-ust-agent-common/Makefile
514 liblttng-ust-java-agent/java/lttng-ust-agent-jul/Makefile
515 liblttng-ust-java-agent/java/lttng-ust-agent-log4j/Makefile
516 liblttng-ust-java-agent/jni/Makefile
517 liblttng-ust-java-agent/jni/common/Makefile
518 liblttng-ust-java-agent/jni/jul/Makefile
519 liblttng-ust-java-agent/jni/log4j/Makefile
520 liblttng-ust-libc-wrapper/Makefile
521 liblttng-ust-cyg-profile/Makefile
522 liblttng-ust-python-agent/Makefile
523 python-lttngust/Makefile
524 python-lttngust/setup.py
525 python-lttngust/lttngust/__init__.py
528 tests/compile/Makefile
529 tests/compile/ctf-types/Makefile
530 tests/compile/hello.cxx/Makefile
531 tests/compile/hello/Makefile
532 tests/compile/hello-many/Makefile
533 tests/compile/same_line_tracepoint/Makefile
534 tests/compile/test-app-ctx/Makefile
535 tests/benchmark/Makefile
536 tests/unit/gcc-weak-hidden/Makefile
537 tests/unit/libmsgpack/Makefile
539 tests/unit/libringbuffer/Makefile
540 tests/unit/pthread_name/Makefile
541 tests/unit/snprintf/Makefile
542 tests/unit/ust-elf/Makefile
552 ## Mini-report on what will be built. ##
560 AS_IF([test -n "ust_version_name"], [
561 AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION \"ust_version_name\"$PPRINT_COLOR_RST")
563 AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION")
568 AS_IF([test -n "ust_version_description"], [
569 AS_IF([test -n "$FOLD"], [
570 AS_ECHO("`AS_ECHO("ust_version_description") | $FOLD -s`")
572 AS_ECHO("ust_version_description")
577 PPRINT_SUBTITLE([System])
579 PPRINT_PROP_STRING([Target architecture], $host_cpu)
581 AS_IF([test "x$UNSUPPORTED_ARCH" = "x1"],[
582 PPRINT_WARN([Your architecture ($host_cpu) is unsupported, using safe default of no unaligned access.])
586 PPRINT_SUBTITLE([Features])
589 test "x$with_sdt" = "xyes" && value=1 || value=0
590 PPRINT_PROP_BOOL_CUSTOM([sdt.h integration], $value, [use --with-sdt])
592 test "x$java_agent_jul" = xyes && value=1 || value=0
593 PPRINT_PROP_BOOL_CUSTOM([Java agent (JUL support)], $value, [use --enable-java-agent-jul])
595 test "x$java_agent_log4j" = xyes && value=1 || value=0
596 PPRINT_PROP_BOOL_CUSTOM([Java agent (Log4j support)], $value, [use --enable-java-agent-log4j])
598 test "x$jni_interface" = xyes && value=1 || value=0
599 PPRINT_PROP_BOOL_CUSTOM([JNI interface (JNI)], $value, [use --enable-jni-interface])
601 test "x$python_agent" = xyes && value=1 || value=0
602 PPRINT_PROP_BOOL_CUSTOM([Python agent], $value, [use --enable-python-agent])
604 test "x$ac_cv_header_linux_perf_event_h" = "xyes" && value=1 || value=0
605 PPRINT_PROP_BOOL_CUSTOM([Perf event integration], $value)
607 test "x$enable_numa" = xyes && value=1 || value=0
608 PPRINT_PROP_BOOL([NUMA], $value)
613 test "x$enable_examples" = xyes && value=1 || value=0
614 PPRINT_PROP_BOOL([Build and install examples], $value, $PPRINT_COLOR_SUBTITLE)
616 # man pages build enabled/disabled
617 m4_pushdef([build_man_pages_msg], [Build and install man pages])
619 AS_IF([test "x$man_pages_opt" != "xno"], [
621 PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
623 AS_IF([test "x$have_asciidoc_xmlto" = "xyes"], [
624 PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
626 PPRINT_PROP_STRING([build_man_pages_msg],
627 [${PPRINT_COLOR_BLDGRN}yes (already built)],
628 $PPRINT_COLOR_SUBTITLE)
632 PPRINT_PROP_BOOL([build_man_pages_msg], 0, $PPRINT_COLOR_SUBTITLE)
635 m4_popdef([build_man_pages_msg])
639 report_bindir="`eval eval echo $bindir`"
640 report_libdir="`eval eval echo $libdir`"
642 # Print the bindir and libdir this `make install' will install into.
644 PPRINT_SUBTITLE([Install directories])
645 PPRINT_PROP_STRING([Binaries], [$report_bindir])
646 PPRINT_PROP_STRING([Libraries], [$report_libdir])
649 PPRINT_SUBTITLE([System directories])
651 PPRINT_PROP_STRING([lttng-sessiond rundir], [$lttng_system_rundir])
655 AS_IF([test "x$warn_prebuilt_man_pages" = "xyes" ], [
657 PPRINT_WARN([Both asciidoc and xmlto are needed to build the LTTng-UST man pages.
659 Note that the man pages are already built in this distribution tarball,
660 therefore asciidoc and xmlto are only needed if you intend to modify
663 Use --disable-man-pages to completely disable building and installing