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])
201 # AC_FUNC_MALLOC causes problems when cross-compiling.
205 # Check for pthread_setname_np and its signature
206 LTTNG_PTHREAD_SETNAME_NP
207 LTTNG_PTHREAD_GETNAME_NP
209 # Check dor dlopen() in -ldl or -lc
210 AC_CHECK_LIB([dl], [dlopen], [
214 # dlopen not found in libdl, check in libc
215 AC_CHECK_LIB([c], [dlopen], [
219 AC_MSG_ERROR([Cannot find dlopen in libdl nor libc. Use [LDFLAGS]=-Ldir to specify their location.])
224 # Check if libdl has dlmopen()
225 AC_CHECK_LIB([$libdl_name], [dlmopen], [
226 AC_DEFINE([HAVE_DLMOPEN], [1], [Define to 1 if dlmopen is available.])
229 # Require URCU >= 0.12 for DEFINE_URCU_TLS_INIT
230 PKG_CHECK_MODULES([URCU], [liburcu >= 0.12])
233 AM_CONDITIONAL([HAVE_CMAKE], [test "x$CMAKE" != "x"])
235 AC_MSG_CHECKING([whether shared libraries are enabled])
236 AS_IF([test "x$enable_shared" = "xyes"], [
240 AC_MSG_ERROR([LTTng-UST requires shared libraries to be enabled])
243 # Set architecture specific options
265 # Set os specific options
267 [freebsd*], [NO_NUMA=1]
270 # Configuration options, which will be installed in the config.h
271 AH_TEMPLATE([LTTNG_UST_HAVE_SDT_INTEGRATION], [SystemTap integration via sdt.h])
274 AM_CONDITIONAL([ENABLE_UST_DL], [test "x${ac_cv_have_decl_RTLD_DI_LINKMAP}" = "xyes"])
277 AS_IF([test "x$NO_NUMA" = "x1"],[
278 AS_IF([test "x$enable_numa" = "x" ], [enable_numa=no])
281 AC_ARG_ENABLE([numa], [
282 AS_HELP_STRING([--disable-numa], [disable NUMA support])
284 enable_numa=$enableval
289 AS_IF([test "x$enable_numa" = "xyes"], [
290 # numa - check that numa lib is available
291 AC_CHECK_LIB([numa], [numa_available], [],
292 [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.])])
295 AM_CONDITIONAL([ENABLE_NUMA], [test "x$have_libnuma" = "xyes"])
297 AM_CONDITIONAL([HAVE_PERF_EVENT], [test "x$ac_cv_header_linux_perf_event_h" = "xyes"])
299 # Check for JNI header files if requested
300 AC_ARG_ENABLE([jni-interface], [
301 AS_HELP_STRING([--enable-jni-interface], [build JNI interface between C and Java. Needs Java include files [default=no]])
303 jni_interface=$enableval
308 AM_CONDITIONAL([ENABLE_JNI_INTERFACE], [test "x$jni_interface" = "xyes"])
311 AC_ARG_ENABLE([java-agent-jul], [
312 AS_HELP_STRING([--enable-java-agent-jul], [build the LTTng UST Java agent with JUL support [default=no]])
314 java_agent_jul=$enableval
319 AC_ARG_ENABLE([java-agent-log4j], [
320 AS_HELP_STRING([--enable-java-agent-log4j], [build the LTTng UST Java agent with Log4j support [default=no]])
322 java_agent_log4j=$enableval
327 AC_ARG_ENABLE([java-agent-all], [
328 AS_HELP_STRING([--enable-java-agent-all], [build the LTTng UST Java agent with all supported backends [default=no]])
330 java_agent_jul=$enableval
331 java_agent_log4j=$enableval
334 AM_CONDITIONAL([ENABLE_JAVA_AGENT], [test "x$java_agent_jul" = "xyes" || test "x$java_agent_log4j" = "xyes"])
335 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_JUL], [test "x$java_agent_jul" = "xyes"])
336 AM_CONDITIONAL([ENABLE_JAVA_AGENT_WITH_LOG4J], [test "x$java_agent_log4j" = "xyes"])
338 AS_IF([test "x$jni_interface" = "xyes" || test "x$java_agent_jul" = "xyes" || test "x$java_agent_log4j" = "xyes"], [
340 AC_ARG_VAR([CLASSPATH], [Java class path])
343 for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
345 JNI_CPPFLAGS="$JNI_CPPFLAGS -I$JNI_INCLUDE_DIR"
348 saved_CPPFLAGS="$CPPFLAGS"
349 CPPFLAGS="$CPPFLAGS $JNI_CPPFLAGS"
351 CPPFLAGS="$saved_CPPFLAGS"
354 AM_CONDITIONAL([HAVE_JAVAH], [test "x$JAVAH" != "x"])
356 AS_IF([test "x$java_agent_log4j" = "xyes"], [
358 AX_CHECK_CLASS([org.apache.log4j.Logger])
359 AS_IF([test "x$ac_cv_class_org_apache_log4j_Logger" = "xno"], [
360 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"])
364 # Option to build the python agent
365 AC_ARG_ENABLE([python-agent], [
366 AS_HELP_STRING([--enable-python-agent], [build the LTTng UST Python agent [default=no]])
368 python_agent=$enableval
370 AM_CONDITIONAL([ENABLE_PYTHON_AGENT], [test "x$python_agent" = "xyes"])
374 AS_HELP_STRING([--with-sdt], [provide SystemTap integration via sdt.h [default=no]])
381 AS_IF([test "x$with_sdt" = "xyes"], [
382 AC_MSG_CHECKING([STAP_PROBEV()])
383 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
384 #define SDT_USE_VARIADIC
388 STAP_PROBEV(provider,name,1,2,3,4,5,6,7,8,9,10);
392 AC_DEFINE([LTTNG_UST_HAVE_SDT_INTEGRATION], [1])
395 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])
399 AC_ARG_WITH([lttng-system-rundir], [
400 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".]),
402 lttng_system_rundir="$withval"
404 lttng_system_rundir="/var/run/lttng"
406 AC_DEFINE_UNQUOTED([LTTNG_SYSTEM_RUNDIR], ["$lttng_system_rundir"],
407 [LTTng system runtime directory])
409 AM_CONDITIONAL([ENABLE_GEN_TP_EXAMPLES], [test "x$PYTHON" != "x"])
411 # Enable building examples
415 [--disable-examples],
416 [Do not build and install examples]
418 [enable_examples=$enableval],
419 [enable_examples=yes]
422 AM_CONDITIONAL([ENABLE_EXAMPLES], [test "x$enable_examples" != "xno"])
424 # Enable building man pages (user's intention).
428 [--disable-man-pages],
429 [Do not build and install man pages (already built in a distributed tarball)]
431 [man_pages_opt=$enableval],
435 # Check for asciidoc and xmlto if we enabled building the man pages.
436 have_asciidoc_xmlto=no
437 warn_prebuilt_man_pages=no
439 AS_IF([test "x$man_pages_opt" = "xyes"], [
440 AS_IF([test "x$ASCIIDOC" = "x" || test "x$XMLTO" = "x"], [
442 # This is an error because we're in the Git repo, which
443 # means the man pages are not already generated for us,
444 # thus asciidoc/xmlto are required because we were asked
445 # to build the man pages.
447 Both asciidoc and xmlto are needed to build the LTTng-UST man pages. Use
448 --disable-man-pages to disable building the man pages, in which case
449 they will not be installed.
452 # Only warn here: since we're in the tarball, the man
453 # pages should already be generated at this point, thus
454 # asciidoc/xmlto are not strictly required.
455 warn_prebuilt_man_pages=yes
458 have_asciidoc_xmlto=yes
462 # Export man page build condition: build the man pages if the user
463 # asked for it, and if the tools are available.
464 AM_CONDITIONAL([ENABLE_MAN_PAGES], [test "x$man_pages_opt" != "xno"])
465 AM_CONDITIONAL([HAVE_ASCIIDOC_XMLTO], [test "x$have_asciidoc_xmlto" = "xyes"])
468 # Defined in include/lttng/ust-version.h
469 AC_DEFINE([LTTNG_UST_MAJOR_VERSION], ust_version_major, [LTTng UST major version])
470 AC_DEFINE([LTTNG_UST_MINOR_VERSION], ust_version_minor, [LTTng UST minor version])
471 AC_DEFINE([LTTNG_UST_PATCHLEVEL_VERSION], ust_version_patch, [LTTng UST patch version])
472 AC_DEFINE([LTTNG_UST_VERSION], ["]ust_version["], [LTTng UST version string])
473 AC_DEFINE([LTTNG_UST_LIB_SONAME_MAJOR], [ust_lib_version_current], [Major SONAME number of liblttng-ust])
474 AC_DEFINE([LTTNG_UST_CTL_LIB_SONAME_MAJOR], [ust_ctl_lib_version_current], [Major SONAME number of liblttng-ust-ctl])
477 AM_CFLAGS="-Wall $URCU_CFLAGS $PTHREAD_CFLAGS"
480 AM_CXXFLAGS="$AM_CFLAGS"
481 AC_SUBST(AM_CXXFLAGS)
483 # The order in which the include folders are searched is important.
484 # The top_builddir should always be searched first in the event that a build
485 # time generated file is included.
486 AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_srcdir)/include -include config.h"
487 AC_SUBST(AM_CPPFLAGS)
489 AC_SUBST(JNI_CPPFLAGS)
493 ## Output files generated by configure ##
496 # List of files to be generated from '.in' templates by AC_OUTPUT
500 doc/examples/Makefile
506 libringbuffer/Makefile
507 liblttng-ust-comm/Makefile
508 liblttng-ust/Makefile
509 liblttng-ust-ctl/Makefile
510 liblttng-ust-fork/Makefile
511 liblttng-ust-dl/Makefile
512 liblttng-ust-fd/Makefile
513 liblttng-ust-java/Makefile
514 liblttng-ust-java-agent/Makefile
515 liblttng-ust-java-agent/java/Makefile
516 liblttng-ust-java-agent/java/lttng-ust-agent-all/Makefile
517 liblttng-ust-java-agent/java/lttng-ust-agent-common/Makefile
518 liblttng-ust-java-agent/java/lttng-ust-agent-jul/Makefile
519 liblttng-ust-java-agent/java/lttng-ust-agent-log4j/Makefile
520 liblttng-ust-java-agent/jni/Makefile
521 liblttng-ust-java-agent/jni/common/Makefile
522 liblttng-ust-java-agent/jni/jul/Makefile
523 liblttng-ust-java-agent/jni/log4j/Makefile
524 liblttng-ust-libc-wrapper/Makefile
525 liblttng-ust-cyg-profile/Makefile
526 liblttng-ust-python-agent/Makefile
527 python-lttngust/Makefile
528 python-lttngust/setup.py
529 python-lttngust/lttngust/__init__.py
532 tests/compile/Makefile
533 tests/compile/ctf-types/Makefile
534 tests/compile/hello.cxx/Makefile
535 tests/compile/hello/Makefile
536 tests/compile/hello-many/Makefile
537 tests/compile/same_line_tracepoint/Makefile
538 tests/compile/test-app-ctx/Makefile
539 tests/benchmark/Makefile
540 tests/unit/gcc-weak-hidden/Makefile
541 tests/unit/libmsgpack/Makefile
543 tests/unit/libringbuffer/Makefile
544 tests/unit/pthread_name/Makefile
545 tests/unit/snprintf/Makefile
546 tests/unit/ust-elf/Makefile
556 ## Mini-report on what will be built. ##
564 AS_IF([test -n "ust_version_name"], [
565 AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION \"ust_version_name\"$PPRINT_COLOR_RST")
567 AS_ECHO("${PPRINT_COLOR_BLDBLU}LTTng-ust $PACKAGE_VERSION")
572 AS_IF([test -n "ust_version_description"], [
573 AS_IF([test -n "$FOLD"], [
574 AS_ECHO("`AS_ECHO("ust_version_description") | $FOLD -s`")
576 AS_ECHO("ust_version_description")
581 PPRINT_SUBTITLE([System])
583 PPRINT_PROP_STRING([Target architecture], $host_cpu)
585 AS_IF([test "x$UNSUPPORTED_ARCH" = "x1"],[
586 PPRINT_WARN([Your architecture ($host_cpu) is unsupported, using safe default of no unaligned access.])
590 PPRINT_SUBTITLE([Features])
593 test "x$with_sdt" = "xyes" && value=1 || value=0
594 PPRINT_PROP_BOOL_CUSTOM([sdt.h integration], $value, [use --with-sdt])
596 test "x$java_agent_jul" = xyes && value=1 || value=0
597 PPRINT_PROP_BOOL_CUSTOM([Java agent (JUL support)], $value, [use --enable-java-agent-jul])
599 test "x$java_agent_log4j" = xyes && value=1 || value=0
600 PPRINT_PROP_BOOL_CUSTOM([Java agent (Log4j support)], $value, [use --enable-java-agent-log4j])
602 test "x$jni_interface" = xyes && value=1 || value=0
603 PPRINT_PROP_BOOL_CUSTOM([JNI interface (JNI)], $value, [use --enable-jni-interface])
605 test "x$python_agent" = xyes && value=1 || value=0
606 PPRINT_PROP_BOOL_CUSTOM([Python agent], $value, [use --enable-python-agent])
608 test "x$ac_cv_header_linux_perf_event_h" = "xyes" && value=1 || value=0
609 PPRINT_PROP_BOOL_CUSTOM([Perf event integration], $value)
611 test "x$enable_numa" = xyes && value=1 || value=0
612 PPRINT_PROP_BOOL([NUMA], $value)
617 test "x$enable_examples" = xyes && value=1 || value=0
618 PPRINT_PROP_BOOL([Build and install examples], $value, $PPRINT_COLOR_SUBTITLE)
620 # man pages build enabled/disabled
621 m4_pushdef([build_man_pages_msg], [Build and install man pages])
623 AS_IF([test "x$man_pages_opt" != "xno"], [
625 PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
627 AS_IF([test "x$have_asciidoc_xmlto" = "xyes"], [
628 PPRINT_PROP_BOOL([build_man_pages_msg], 1, $PPRINT_COLOR_SUBTITLE)
630 PPRINT_PROP_STRING([build_man_pages_msg],
631 [${PPRINT_COLOR_BLDGRN}yes (already built)],
632 $PPRINT_COLOR_SUBTITLE)
636 PPRINT_PROP_BOOL([build_man_pages_msg], 0, $PPRINT_COLOR_SUBTITLE)
639 m4_popdef([build_man_pages_msg])
643 report_bindir="`eval eval echo $bindir`"
644 report_libdir="`eval eval echo $libdir`"
646 # Print the bindir and libdir this `make install' will install into.
648 PPRINT_SUBTITLE([Install directories])
649 PPRINT_PROP_STRING([Binaries], [$report_bindir])
650 PPRINT_PROP_STRING([Libraries], [$report_libdir])
653 PPRINT_SUBTITLE([System directories])
655 PPRINT_PROP_STRING([lttng-sessiond rundir], [$lttng_system_rundir])
659 AS_IF([test "x$warn_prebuilt_man_pages" = "xyes" ], [
661 PPRINT_WARN([Both asciidoc and xmlto are needed to build the LTTng-UST man pages.
663 Note that the man pages are already built in this distribution tarball,
664 therefore asciidoc and xmlto are only needed if you intend to modify
667 Use --disable-man-pages to completely disable building and installing