bf6c5471aeacd77de44f35b40f5bf0afbce5d50a
[babeltrace.git] / configure.ac
1 dnl SPDX-License-Identifier: MIT
2 dnl
3 dnl Copyright (C) 2017 EfficiOS, Inc.
4 dnl
5 dnl Process this file with autoconf to produce a configure script.
6
7 # Project version information
8 m4_define([bt_version_major], [2])
9 m4_define([bt_version_minor], [1])
10 m4_define([bt_version_patch], [0])
11 m4_define([bt_version_dev_stage], [-rc1])
12 m4_define([bt_version], bt_version_major[.]bt_version_minor[.]bt_version_patch[]bt_version_dev_stage)
13 m4_define([bt_version_name], [[Codename TBD]])
14 m4_define([bt_version_description], [[Description TBD]])
15
16 # Library version information of "libbabeltrace2"
17 # Following the numbering scheme proposed by libtool for the library version
18 # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
19 m4_define([bt_lib_version_current], [0])
20 m4_define([bt_lib_version_revision], [0])
21 m4_define([bt_lib_version_age], [0])
22 m4_define([bt_lib_version], bt_lib_version_current[:]bt_lib_version_revision[:]bt_lib_version_age)
23
24
25 ## ##
26 ## Autoconf base setup ##
27 ## ##
28
29 AC_PREREQ([2.69])
30 AC_INIT([babeltrace2],[bt_version],[jeremie dot galarneau at efficios dot com],[],[https://efficios.com/babeltrace/])
31
32 AC_SUBST([BABELTRACE_LIBRARY_VERSION], bt_lib_version)
33
34 AC_CONFIG_HEADERS([src/common/config.h])
35 AC_CONFIG_AUX_DIR([config])
36 AC_CONFIG_MACRO_DIR([m4])
37
38 AC_DEFINE([BT_VERSION_MAJOR], bt_version_major, [Babeltrace major version])
39 AC_DEFINE([BT_VERSION_MINOR], bt_version_minor, [Babeltrace minor version])
40 AC_DEFINE([BT_VERSION_PATCH], bt_version_patch, [Babeltrace patch version])
41 AC_DEFINE([BT_VERSION_DEV_STAGE], ["]bt_version_dev_stage["], [Babeltrace version development stage (can be empty)])
42 AC_DEFINE([BT_VERSION_NAME], ["]bt_version_name["], [Babeltrace version name])
43 AC_DEFINE([BT_VERSION_DESCRIPTION], ["]AS_ESCAPE(bt_version_description)["], [Babeltrace version description])
44
45 AC_CANONICAL_TARGET
46 AC_CANONICAL_HOST
47
48
49 ## ##
50 ## Automake base setup ##
51 ## ##
52
53 AM_INIT_AUTOMAKE([1.12 foreign dist-bzip2 no-dist-gzip tar-ustar nostdinc -Wall -Wno-portability -Werror])
54 AM_MAINTAINER_MODE([enable])
55
56 # Enable silent rules by default
57 AM_SILENT_RULES([yes])
58
59
60 ## ##
61 ## OS specific defaults ##
62 ## ##
63
64 MINGW32=no
65 LT_NO_UNDEFINED=""
66 AS_CASE([$host_os],
67 [solaris*|darwin*],
68 [
69 AE_FEATURE_DISABLE([debug-info])
70 ],
71 [freebsd*],
72 [
73 AE_FEATURE_DISABLE([debug-info])
74 ],
75 [cygwin*],
76 [
77 AE_FEATURE_DISABLE([debug-info])
78 LT_NO_UNDEFINED="-no-undefined"
79 ],
80 [mingw*],
81 [
82 MINGW32=yes
83 AE_FEATURE_DISABLE([debug-info])
84 LT_NO_UNDEFINED="-no-undefined"
85 ]
86 )
87
88 AM_CONDITIONAL([BABELTRACE_BUILD_WITH_MINGW], [test "x$MINGW32" = "xyes"])
89 AC_SUBST(LT_NO_UNDEFINED)
90
91
92 ## ##
93 ## C compiler checks ##
94 ## ##
95
96 # Choose the C compiler
97 AC_PROG_CC
98 # AC_PROG_CC_STDC was merged in AC_PROG_CC in autoconf 2.70
99 m4_version_prereq([2.70], [], [AC_PROG_CC_STDC])
100
101 # Make sure the C compiler supports C99
102 AS_IF([test "$ac_cv_prog_cc_c99" = "no"], [AC_MSG_ERROR([The compiler does not support C99])])
103
104 # Enable available system extensions and LFS support
105 AC_USE_SYSTEM_EXTENSIONS
106 AC_SYS_LARGEFILE
107
108 # Make sure the C compiler supports __attributes__
109 AX_C___ATTRIBUTE__
110 AS_IF([test "x$ax_cv___attribute__" != "xyes"],
111 [AC_MSG_ERROR([The compiler does not support __attribute__ extensions])])
112
113 # Make sur we have pthread support
114 AX_PTHREAD([], [AC_MSG_ERROR([Could not configure pthread support])])
115
116 # Checks for typedefs, structures, and compiler characteristics.
117 AC_C_INLINE
118 AC_C_TYPEOF
119 AC_TYPE_INT16_T
120 AC_TYPE_INT32_T
121 AC_TYPE_INT64_T
122 AC_TYPE_INT8_T
123 AC_TYPE_OFF_T
124 AC_TYPE_PID_T
125 AC_TYPE_SIZE_T
126 AC_TYPE_SSIZE_T
127 AC_TYPE_UINT16_T
128 AC_TYPE_UINT32_T
129 AC_TYPE_UINT64_T
130 AC_TYPE_UINT8_T
131 AC_CHECK_TYPES([ptrdiff_t])
132
133
134 ## ##
135 ## C++ compiler checks ##
136 ## ##
137
138 # Require a C++11 compiler without GNU extensions (-std=c++11)
139 AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
140
141
142 ## ##
143 ## Header checks ##
144 ## ##
145
146 AC_HEADER_STDBOOL
147 AC_CHECK_HEADERS([ \
148 fcntl.h \
149 float.h \
150 ftw.h \
151 libintl.h \
152 limits.h \
153 malloc.h \
154 netdb.h \
155 netinet/in.h \
156 stddef.h \
157 sys/socket.h \
158 sys/time.h
159 ])
160
161
162 ## ##
163 ## Linker checks ##
164 ## ##
165
166 # Check if the linker supports no-as-needed
167 AX_APPEND_LINK_FLAGS([-Wl,--no-as-needed], [LD_NO_AS_NEEDED])
168 AC_SUBST([LD_NO_AS_NEEDED])
169
170 # Check if the linker supports whole-archive
171 AX_CHECK_LINK_FLAG([-Wl,--whole-archive,--no-whole-archive],
172 [
173 AC_SUBST([LD_WHOLE_ARCHIVE], [-Wl,--whole-archive,])
174 AC_SUBST([LD_NO_WHOLE_ARCHIVE], [,--no-whole-archive])
175 ],[
176 # Fallback to force_load for the macOS linker
177 AX_CHECK_LINK_FLAG([-Wl,-force_load],
178 [
179 AC_SUBST([LD_WHOLE_ARCHIVE], [-Wl,-force_load,])
180 AC_SUBST([LD_NO_WHOLE_ARCHIVE], [])
181 ],[
182 AC_MSG_WARN([Can't find a linker option to force the inclusion of the static plugin archive objects.])
183 ]
184 )
185 ]
186 )
187
188 # Check if the linker supports the "notext" keyword
189 AX_CHECK_LINK_FLAG([-Wl,-z,notext],[
190 AC_SUBST([LD_NOTEXT], [-Wl,-z,notext])
191 ])
192
193
194 ## ##
195 ## Programs checks ##
196 ## ##
197
198 AM_PROG_AR
199 AC_PROG_MAKE_SET
200 AC_PROG_MKDIR_P
201 AC_PROG_LN_S
202 AC_PROG_SED
203 AC_CHECK_PROGS([FOLD], [fold])
204 AC_CHECK_PROGS([ASCIIDOC], [asciidoc])
205 AC_CHECK_PROGS([XMLTO], [xmlto])
206
207 # set $IN_GIT_REPO if we're in the Git repository; the `bootstrap` file
208 # is not distributed in tarballs
209 AS_IF([test -f "$srcdir/bootstrap"], [in_git_repo=yes], [in_git_repo=no])
210 AM_CONDITIONAL([IN_GIT_REPO], [test "x$in_git_repo" = "xyes"])
211
212 # check for bison
213 AC_PROG_YACC
214 AX_PROG_BISON_VERSION([2.5], [have_bison=yes])
215
216 AS_IF([test "x$have_bison" != "xyes"], [
217 AS_IF([test "x$in_git_repo" = "xyes"], [
218 AC_MSG_FAILURE([dnl
219 Bison >= 2.4 is required when building from the Git repository. You can
220 set the YACC variable to override automatic detection.
221 ])
222 ], [
223 AC_MSG_WARN([dnl
224 Missing Bison >= 2.4. Note that the parser files are already built in
225 this distribution tarball, so Bison is only needed if you intend to
226 modify their sources. You can set the YACC variable to override automatic
227 detection.
228 ])
229 ])
230 ])
231 AM_CONDITIONAL([HAVE_BISON], [test "x$have_bison" = "xyes"])
232
233 # check for flex
234 # Prior to autoconf 2.70, AC_PROG_FLEX did not take an argument. This is not a
235 # problem since the argument is silently ignored by older versions.
236 AC_PROG_LEX([noyywrap])
237 AX_PROG_FLEX_VERSION([2.5.35], [have_flex=yes])
238
239 AS_IF([test "x$have_flex" != "xyes"], [
240 AS_IF([test "x$in_git_repo" = "xyes"], [
241 AC_MSG_FAILURE([dnl
242 Flex >= 2.5.35 is required when building from the Git repository. You can
243 set the LEX variable to override automatic detection.
244 ])
245 ], [
246 AC_MSG_WARN([dnl
247 Missing Flex >= 2.5.35. Note that the lexer files are already built in
248 this distribution tarball, so Flex is only needed if you intend to
249 modify their sources. You can set the LEX variable to override automatic
250 detection.
251 ])
252 ])
253 ])
254 AM_CONDITIONAL([HAVE_FLEX], [test "x$have_flex" = "xyes"])
255
256 # Always check for python, we will fail later if some features require it and
257 # it's unavailable.
258 AM_PATH_PYTHON([3.0], [
259 AE_PATH_PYTHON_MODULES([PYTHON])
260
261 # pythondir is the path where extra modules are to be installed
262 pythondir=$PYTHON_PREFIX/$PYTHON_MODULES_PATH
263
264 # pyexecdir is the path that contains shared objects used by the extra modules
265 pyexecdir=$PYTHON_EXEC_PREFIX/$PYTHON_MODULES_PATH
266
267 # If no PYTHON_CONFIG was specified by the user, try to find it, starting
268 # with the one specific to the configured python version.
269 AS_IF([test "x$PYTHON_CONFIG" = "x"], [
270 AC_CHECK_PROGS([PYTHON_CONFIG], [python$PYTHON_VERSION-config python-config])
271 ])
272
273 # If PYTHON_CONFIG is set use it to get the includes and ld flags, unless
274 # they were specified by the user.
275 AS_IF([test "x$PYTHON_CONFIG" != "x" ], [
276 AS_IF([test "x$PYTHON_INCLUDE" = "x"], [
277 AC_MSG_CHECKING([Python include flags])
278 PYTHON_INCLUDE=`$PYTHON_CONFIG --includes`
279 AC_MSG_RESULT([$PYTHON_INCLUDE])
280 ])
281
282 AS_IF([test "x$PYTHON_LDFLAGS" = "x"], [
283 AC_MSG_CHECKING([Python library flags])
284 # Python 3.8+ requires that we pass --embed to get the -lpython3.x flag.
285 AS_IF([! PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags --embed`], [
286 PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags`
287 ])
288 AC_MSG_RESULT([$PYTHON_LDFLAGS])
289 ])
290 ])
291 ], [:])
292
293 # Initialize and configure libtool
294 LT_INIT([win32-dll])
295
296
297 ## ##
298 ## Library checks ##
299 ## ##
300
301 # Check what libraries are required on this platform to link sockets programs.
302 AX_LIB_SOCKET_NSL
303
304 # Check for glib >= 2.28 with gmodule support
305 AM_PATH_GLIB_2_0([2.28.0], [],
306 AC_MSG_ERROR([glib >= 2.28 is required - download it from ftp://ftp.gtk.org/pub/gtk]),
307 [gmodule-no-export]
308 )
309
310 # Checks for library functions.
311 AC_FUNC_ALLOCA
312 AC_FUNC_FORK
313 AC_FUNC_MKTIME
314 AC_FUNC_MMAP
315 AC_FUNC_STRERROR_R
316 AC_FUNC_STRNLEN
317 AC_CHECK_FUNCS([ \
318 atexit \
319 dup2 \
320 ftruncate \
321 gethostbyname \
322 gettimeofday \
323 localtime_r \
324 memchr \
325 memset \
326 mkdir \
327 mkdtemp \
328 munmap \
329 rmdir \
330 setenv \
331 socket \
332 strchr \
333 strdup \
334 strerror \
335 strndup \
336 strnlen \
337 strrchr \
338 strstr \
339 strtoul \
340 strtoull \
341 tzset \
342 ])
343
344 # AC_FUNC_MALLOC causes problems when cross-compiling.
345 #AC_FUNC_MALLOC
346 #AC_FUNC_REALLOC
347
348 # Check for fmemopen
349 AC_CHECK_LIB([c], [fmemopen],
350 [AC_DEFINE_UNQUOTED([BABELTRACE_HAVE_FMEMOPEN], 1, [Has fmemopen support.])]
351 )
352
353 # Check for open_memstream
354 AC_CHECK_LIB([c], [open_memstream],
355 [AC_DEFINE_UNQUOTED([BABELTRACE_HAVE_OPEN_MEMSTREAM], 1, [Has open_memstream support.])]
356 )
357
358 # Check for posix_fallocate
359 AC_CHECK_LIB([c], [posix_fallocate],
360 [AC_DEFINE_UNQUOTED([BABELTRACE_HAVE_POSIX_FALLOCATE], 1, [Has posix_fallocate support.])]
361 )
362
363
364 ## ##
365 ## User variables ##
366 ## ##
367
368 AC_ARG_VAR([PYTHON_INCLUDE], [Include flags for Python, bypassing python-config])
369 AC_ARG_VAR([PYTHON_LDFLAGS], [Linker flags for Python, bypassing python-config])
370 AC_ARG_VAR([PYTHON_CONFIG], [Path to python-config])
371
372 # BABELTRACE_PLUGINS_DIR: Plugins directory
373 AC_ARG_VAR([BABELTRACE_PLUGINS_DIR], [built-in plugins install directory [LIBDIR/babeltrace2/plugins]])
374 AS_IF([test "x$BABELTRACE_PLUGINS_DIR" = x], [BABELTRACE_PLUGINS_DIR='${libdir}/babeltrace2/plugins'])
375
376 # BABELTRACE_PLUGIN_PROVIDERS_DIR: Plugin providers directory
377 AC_ARG_VAR([BABELTRACE_PLUGIN_PROVIDERS_DIR], [built-in plugin providers install directory [LIBDIR/babeltrace2/plugin-providers]])
378 AS_IF([test "x$BABELTRACE_PLUGIN_PROVIDERS_DIR" = x], [BABELTRACE_PLUGIN_PROVIDERS_DIR='${libdir}/babeltrace2/plugin-providers'])
379
380 # BABELTRACE_MINIMAL_LOG_LEVEL:
381 AC_ARG_VAR([BABELTRACE_MINIMAL_LOG_LEVEL], [Minimal log level for Babeltrace program, library, and plugins (TRACE, DEBUG (default), or INFO)])
382 AS_IF([test "x$BABELTRACE_MINIMAL_LOG_LEVEL" = x], [BABELTRACE_MINIMAL_LOG_LEVEL="DEBUG"])
383 AS_IF([test "$BABELTRACE_MINIMAL_LOG_LEVEL" != "TRACE" && \
384 test "$BABELTRACE_MINIMAL_LOG_LEVEL" != "DEBUG" && \
385 test "$BABELTRACE_MINIMAL_LOG_LEVEL" != "INFO"],
386 [AC_MSG_ERROR([Invalid BABELTRACE_MINIMAL_LOG_LEVEL value ($BABELTRACE_MINIMAL_LOG_LEVEL): use TRACE, DEBUG, or INFO.])]
387 )
388 AC_DEFINE_UNQUOTED([BT_MINIMAL_LOG_LEVEL], [BT_LOG_$BABELTRACE_MINIMAL_LOG_LEVEL], [Minimal log level])
389
390 # BABELTRACE_DEV_MODE:
391 AC_ARG_VAR([BABELTRACE_DEV_MODE], [Set to 1 to enable the Babeltrace developer mode (enables run-time checks for plugin developers)])
392 AS_IF([test "x$BABELTRACE_DEV_MODE" = x1], [
393 AC_DEFINE([BT_DEV_MODE], 1, [Babeltrace developer mode])
394 ], [BABELTRACE_DEV_MODE=0])
395 AM_CONDITIONAL([DEV_MODE], [test "x$BABELTRACE_DEV_MODE" = x1])
396
397 # BABELTRACE_DEBUG_MODE:
398 AC_ARG_VAR([BABELTRACE_DEBUG_MODE], [Set to 1 to enable the Babeltrace debug mode (enables internal assertions for Babeltrace maintainers)])
399 AS_IF([test "x$BABELTRACE_DEBUG_MODE" = x1], [
400 AC_DEFINE([BT_DEBUG_MODE], 1, [Babeltrace debug mode])
401 ], [BABELTRACE_DEBUG_MODE=0])
402
403
404 ## ##
405 ## Optionnal features selection ##
406 ## ##
407
408 # Python bindings
409 # Disabled by default
410 AE_FEATURE_DEFAULT_DISABLE
411 AE_FEATURE([python-bindings],[build the Python bindings])
412
413 # Python bindings documentation
414 # Disabled by default
415 AE_FEATURE_DEFAULT_DISABLE
416 AE_FEATURE([python-bindings-doc],[build the Python bindings documentation])
417
418 # Python plugins
419 # Disabled by default
420 AE_FEATURE_DEFAULT_DISABLE
421 AE_FEATURE([python-plugins],[enable the Python plugins support for the library and converter])
422
423 # Debug info
424 # Enabled by default, except on some platforms
425 AE_FEATURE_DEFAULT_ENABLE
426 AE_FEATURE([debug-info],[disable the debug info support (default on macOS, Solaris and Windows)])
427
428 # API documentation
429 # Disabled by default
430 AE_FEATURE_DEFAULT_DISABLE
431 AE_FEATURE([api-doc],[build the HTML API documentation])
432
433 # Built-in plugins
434 # Disabled by default
435 AE_FEATURE_DEFAULT_DISABLE
436 AE_FEATURE([built-in-plugins],[Statically-link in-tree plug-ins into the babeltrace2 executable])
437
438 # Built-in python plugin support
439 # Disabled by default
440 AE_FEATURE_DEFAULT_DISABLE
441 AE_FEATURE([built-in-python-plugin-support],[Statically-link Python plugin support into the babeltrace library])
442
443 # Man pages
444 # Enabled by default
445 AE_FEATURE_DEFAULT_ENABLE
446 AE_FEATURE([man-pages],[Do not build and install man pages (already built in a distributed tarball])
447
448 # When given, add -Werror to WARN_CFLAGS and WARN_CXXFLAGS.
449 # Disabled by default
450 AE_FEATURE_DEFAULT_DISABLE
451 AE_FEATURE([Werror],[Treat compiler warnings as errors.])
452
453 # When given, build with AddressSanitizer.
454 AE_FEATURE_DEFAULT_DISABLE
455 AE_FEATURE([asan],[Build with AddressSanitizer.])
456
457 ## ##
458 ## Check for conflicting features selection ##
459 ## ##
460
461 # Check for conflicting Python related features user choices.
462 AE_IF_FEATURE_ENABLED([python-plugins], [
463 AE_IF_FEATURE_UNDEF([python-bindings], [
464 # --enable-python-plugins was provided but --enable-python-bindings was
465 # omitted. Turn the Python bindings ON anyway because it's needed to
466 # use the Python plugins.
467 AE_FEATURE_ENABLE([python-bindings])
468 ], [
469 AE_IF_FEATURE_DISABLED([python-bindings], [
470 # --enable-python-plugins _and_ --disable-python-bindings were
471 # used. This is invalid because Python plugins need the Python
472 # bindings to be useful.
473 AC_MSG_ERROR(--enable-python-bindings must be used to support Python plugins)
474 ])
475 ])
476 ])
477
478 # Check for conflicting optional features user choices
479 AE_IF_FEATURE_ENABLED([built-in-plugins], [
480 # Built-in plug-ins are only available when the --disable-shared --enable-static options are used.
481 AE_IF_FEATURE_NOT_ENABLED([static], [AC_MSG_ERROR(--enable-static must be used to bundle plug-ins in the babeltrace2 executable)])
482 AE_IF_FEATURE_ENABLED([shared], [AC_MSG_ERROR(--disable-shared must be used to bundle plug-ins in the babeltrace2 executable)])
483 ])
484
485 AE_IF_FEATURE_ENABLED([built-in-python-plugin-support], [
486 AE_IF_FEATURE_NOT_ENABLED([python-plugins], [AC_MSG_ERROR([--enable-python-plugins must be used to bundle Python plugin support in the babeltrace2 executable])])
487 # Built-in plug-ins are only available when the --disable-shared --enable-static options are used.
488 AE_IF_FEATURE_NOT_ENABLED([static], [AC_MSG_ERROR(--enable-static must be used to bundle Python plugin support in the babeltrace2 executable)])
489 AE_IF_FEATURE_ENABLED([shared], [AC_MSG_ERROR(--disable-shared must be used to bundle Python plugin support in the babeltrace2 executable)])
490 ])
491
492
493 ## ##
494 ## Set automake variables for optional feature conditionnals in Makefile.am ##
495 ## ##
496
497 AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS], AE_IS_FEATURE_ENABLED([python-bindings]))
498 AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS_DOC], AE_IS_FEATURE_ENABLED([python-bindings-doc]))
499 AM_CONDITIONAL([ENABLE_PYTHON_PLUGINS], AE_IS_FEATURE_ENABLED([python-plugins]))
500 AM_CONDITIONAL([ENABLE_DEBUG_INFO], AE_IS_FEATURE_ENABLED([debug-info]))
501 AM_CONDITIONAL([ENABLE_API_DOC], AE_IS_FEATURE_ENABLED([api-doc]))
502 AM_CONDITIONAL([ENABLE_BUILT_IN_PLUGINS], AE_IS_FEATURE_ENABLED([built-in-plugins]))
503 AM_CONDITIONAL([ENABLE_BUILT_IN_PYTHON_PLUGIN_SUPPORT], AE_IS_FEATURE_ENABLED([built-in-python-plugin-support]))
504 AM_CONDITIONAL([ENABLE_MAN_PAGES], AE_IS_FEATURE_ENABLED([man-pages]))
505 AM_CONDITIONAL([ENABLE_PYTHON_COMMON_DEPS], AE_IS_FEATURE_ENABLED([python-bindings]) || AE_IS_FEATURE_ENABLED([python-plugins]))
506 AM_CONDITIONAL([ENABLE_ASAN], AE_IS_FEATURE_ENABLED([asan]))
507
508
509 ## ##
510 ## Set defines for optional features conditionnals in the source code ##
511 ## ##
512
513 AE_IF_FEATURE_ENABLED([built-in-plugins],
514 [AC_DEFINE([BT_BUILT_IN_PLUGINS], [1], [Define to 1 to register plug-in attributes in static executable sections])]
515 )
516
517 AE_IF_FEATURE_ENABLED([built-in-python-plugin-support],
518 [AC_DEFINE([BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT], [1], [Define to 1 to register plug-in attributes in static executable sections])]
519 )
520
521 AE_IF_FEATURE_ENABLED([debug-info], [ENABLE_DEBUG_INFO_VAL=1], [ENABLE_DEBUG_INFO_VAL=0])
522 AC_SUBST([ENABLE_DEBUG_INFO_VAL])
523
524 AE_IF_FEATURE_ENABLED([asan], [ENABLE_ASAN=1], [ENABLE_ASAN=0])
525 AC_SUBST([ENABLE_ASAN])
526
527 ## ##
528 ## Check for optional features dependencies ##
529 ## ##
530
531 # The Python bindings require SWIG
532 AE_IF_FEATURE_ENABLED([python-bindings],
533 [AX_PKG_SWIG(2.0.0, [], [AC_MSG_ERROR([SWIG 2.0.0 or newer is required to build the python bindings])])]
534 )
535
536 AS_IF([test "$PYTHON" != :], [have_python=yes], [have_python=no])
537 AS_IF([test -n "$PYTHON_CONFIG"], [have_python_dev=yes], [have_python_dev=no])
538
539 AM_CONDITIONAL([HAVE_PYTHON], [test "x$have_python" = xyes])
540 AM_CONDITIONAL([HAVE_PYTHON_DEV], [test "x$have_python_dev" = xyes])
541
542 AS_IF([AE_IS_FEATURE_ENABLED([python-bindings]) || AE_IS_FEATURE_ENABLED([python-plugins])], [
543 AS_IF([test "x$have_python_dev" = xno], [
544 AC_MSG_ERROR([Cannot find a suitable python-config. You can override the python-config path with the PYTHON_CONFIG environment variable.])
545 ])
546 ])
547
548 AE_IF_FEATURE_ENABLED([python-bindings-doc],
549 [
550 AE_CHECK_PYTHON_SPHINX([PYTHON])
551 AS_IF([test "x$PYTHON_SPHINX_EXISTS" = xno], [
552 AC_MSG_ERROR([The Sphinx package for Python 3 is required to build the Python bindings documentation])
553 ])
554
555 AE_IF_FEATURE_NOT_ENABLED([python-bindings], [
556 AC_MSG_ERROR([The Python bindings are required to build their documentation])
557 ])
558 ]
559 )
560
561 AE_IF_FEATURE_ENABLED([debug-info], [
562 # Check if libelf and libdw are present
563 PKG_CHECK_MODULES([ELFUTILS], [libelf >= 0.154 libdw >= 0.154],
564 [
565 dnl PKG_CHECK_MODULES defines ELFUTILS_LIBS
566 ],
567 [
568 AC_MSG_WARN([pkg-config was unable to find a valid .pc for libelf/libdw. Set PKG_CONFIG_PATH to specify the pkg-config configuration file location.])
569
570 # Turns out SLES12 doesn't bother shipping .pc file for libelf
571 AC_MSG_WARN([Finding libelf without pkg-config.])
572 AC_CHECK_LIB([elf], [elf_version], [], [AC_MSG_ERROR(Missing libelf (from elfutils >= 0.154) which is required by debug info. You can disable this feature using --disable-debug-info.)])
573 AC_CHECK_LIB([dw], [dwarf_begin], [], [AC_MSG_ERROR(Missing libdw (from elfutils >= 0.154) which is required by debug info. You can disable this feature using --disable-debug-info.)])
574 AE_LIB_ELFUTILS([0], [154], [], [AC_MSG_ERROR(elfutils >= 0.154 is required to use the debug info feature. You can disable this feature using --disable-debug-info.)])
575 ELFUTILS_LIBS="-lelf -ldw"
576 ])
577 ])
578 AC_SUBST([ELFUTILS_LIBS])
579
580 AE_IF_FEATURE_ENABLED([api-doc],
581 [
582 DX_DOXYGEN_FEATURE(ON)
583 DX_DOT_FEATURE(OFF)
584 DX_HTML_FEATURE(ON)
585 DX_CHM_FEATURE(OFF)
586 DX_CHI_FEATURE(OFF)
587 DX_MAN_FEATURE(OFF)
588 DX_RTF_FEATURE(OFF)
589 DX_XML_FEATURE(OFF)
590 DX_PDF_FEATURE(OFF)
591 DX_PS_FEATURE(OFF)
592 DX_INIT_DOXYGEN([Babeltrace 2], [$(builddir)/Doxyfile], [output])
593 AS_IF([test -z "$DX_DOXYGEN"],
594 [AC_MSG_ERROR([You need doxygen to enable the API documentation])]
595 )
596 ]
597 )
598
599 have_asciidoc_xmlto=no
600 warn_prebuilt_man_pages=no
601
602 AE_IF_FEATURE_ENABLED([man-pages], [
603 AS_IF([test "x$ASCIIDOC" = "x" || test "x$XMLTO" = "x"], [
604 AS_IF([test "x$in_git_repo" = "xyes"], [
605 # this is an error because we're in the Git repo, which
606 # means the man pages are not already generated for us,
607 # thus asciixmlto are required because we were asked
608 # to build the man pages
609 AC_MSG_ERROR([
610 You need asciidoc and xmlto to build the Babeltrace man pages. Use
611 --disable-man-pages to disable building the man pages, in which case
612 they will not be installed.
613 ])
614 ], [
615 # only warn here: since we're in the tarball, the man
616 # pages should already be generated at this point, thus
617 # asciidoc/xmlto are not strictly required
618 warn_prebuilt_man_pages=yes
619 ])
620 ], [
621 have_asciidoc_xmlto=yes
622 ])
623 ])
624
625 # export AsciiDoc and xmlto existence
626 AM_CONDITIONAL([HAVE_ASCIIDOC_XMLTO], [test "x$have_asciidoc_xmlto" = "xyes"])
627
628 # a wonderful hack that seems necessary because $libdir is
629 # literally `${exec_prefix}/lib`, and $exec_prefix is set to `NONE`
630 # by autoconf when it's not specified by the user
631 AS_IF([test "x$exec_prefix" = xNONE], [
632 AS_IF([test "x$prefix" = xNONE], [
633 PREFIX="$ac_default_prefix"
634 ], [
635 PREFIX="$prefix"
636 ])
637
638 LIBDIR="$PREFIX/lib"
639 ], [
640 LIBDIR="$libdir"
641 ])
642
643 AC_SUBST(LIBDIR)
644
645 # If --enable-asan is used...
646 AE_IF_FEATURE_ENABLED([asan], [
647 # ... add -fsanitize=address to the *FLAGS variables.
648 ASAN_CFLAGS="-fsanitize=address"
649 ASAN_CXXFLAGS="-fsanitize=address"
650 ASAN_LDFLAGS="-fsanitize=address"
651 ])
652
653
654
655 # CFLAGS from libraries (the glib ones are needed for the following sizeof
656 # test).
657 AM_CFLAGS="${PTHREAD_CFLAGS} ${GLIB_CFLAGS} ${ASAN_CFLAGS}"
658 AM_CXXFLAGS="${PTHREAD_CFLAGS} ${GLIB_CFLAGS} ${ASAN_CXXFLAGS}"
659 AM_LDFLAGS="${ASAN_LDFLAGS}"
660
661 # Check that the current size_t matches the size that glib thinks it should
662 # be. This catches problems on multi-arch where people try to do a 32-bit
663 # build while pointing at 64-bit glib headers. This is a common error because
664 # glib.h is not platform specific but it includes glibconfig.h which is and
665 # is usually installed in a non-standard path.
666
667 # Do this before enabling all the warning flags, as the
668 # AC_LANG_PROGRAM-generated program may generate some warning, which makes this
669 # test fail unnecessarily.
670
671 # Older versions of the pkg-config macros disallows PKG_* in the autoconf
672 # output. Specifically allow pkg_config_libdir to be able to print the
673 # error message.
674 m4_pattern_allow([PKG_CONFIG_LIBDIR])
675
676 save_CFLAGS=${CFLAGS}
677 CFLAGS="${CFLAGS} ${AM_CFLAGS}"
678 AC_COMPILE_IFELSE([
679 AC_LANG_PROGRAM([dnl
680 #include <glib.h>
681 #include <unistd.h>
682 ], [dnl
683 G_STATIC_ASSERT(sizeof(size_t) == GLIB_SIZEOF_SIZE_T);
684 ])
685 ],[:],[
686 AC_MSG_ERROR([dnl
687 sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T. You probably need to set
688 PKG_CONFIG_LIBDIR to point to the right pkg-config files for your build
689 target.
690 ])
691 ])
692 CFLAGS=${save_CFLAGS}
693
694 # Detect C and LD warning flags supported by the compiler.
695
696 # Detect warning flags supported by the C and C++ compilers and append them to
697 # WARN_CFLAGS and WARN_CXXFLAGS.
698 #
699 m4_define([WARN_FLAGS_LIST], [ dnl
700 -Wall dnl
701 -Wextra dnl
702 -Wmissing-prototypes dnl
703 -Wmissing-declarations dnl
704 -Wnull-dereference dnl
705 -Wundef dnl
706 -Wredundant-decls dnl
707 -Wshadow dnl
708 -Wjump-misses-init dnl
709 -Wsuggest-attribute=format dnl
710 -Wtautological-constant-out-of-range-compare dnl
711 -Wnested-externs dnl
712 -Wwrite-strings dnl
713 -Wformat=2 dnl
714 -Wstrict-aliasing dnl
715 -Wmissing-noreturn dnl
716 -Winit-self dnl
717 -Wduplicated-cond dnl
718 -Wduplicated-branches dnl
719 -Wlogical-op dnl
720 -Wno-unused-parameter dnl
721 -Wno-sign-compare dnl
722 dnl
723 dnl Some versions of SWIG (like 3.0.12) generate code that produces
724 dnl -Wcast-function-type warnings. This warning is present in gcc >= 8. This
725 dnl combo happens on RHEL/Centos 8, for example. Later versions of SWIG (like
726 dnl 4.0.1) have the correct function signatures to not produce this warning.
727 dnl It's simpler to just disable the warning globally.
728 dnl
729 dnl Note that the Debian/Ubuntu SWIG package 3.0.12-2 contains a local patch to
730 dnl fix this (python-fix-function-cast-warnings.patch), so you won't be able to
731 dnl reproduce the warning using that package.
732 dnl
733 dnl Ref: https://github.com/swig/swig/issues/1259
734 -Wno-cast-function-type dnl
735 -Wno-missing-field-initializers dnl
736 ])
737
738 # Pass -Werror as an extra flag during the test: this is needed to make the
739 # -Wunknown-warning-option diagnostic fatal with clang.
740 AC_LANG([C++])
741 AX_APPEND_COMPILE_FLAGS([WARN_FLAGS_LIST], [WARN_CXXFLAGS], [-Werror])
742 AC_LANG([C])
743 AX_APPEND_COMPILE_FLAGS([WARN_FLAGS_LIST], [WARN_CFLAGS], [-Werror])
744
745 AE_IF_FEATURE_ENABLED([Werror], [WARN_CXXFLAGS="${WARN_CXXFLAGS} -Werror"])
746 AE_IF_FEATURE_ENABLED([Werror], [WARN_CFLAGS="${WARN_CFLAGS} -Werror"])
747
748 # The test used in AX_APPEND_COMPILE_FLAGS, generated using AC_LANG_PROGRAM, is
749 # written in such a way that it triggers warnings with the following warning
750 # flags. So they would always end up disabled if we put them there, because
751 # the test program would not build.
752 #
753 # Enable them here unconditionally. They are supported by GCC >= 4.8 and by
754 # Clang >= 3.3 (required by the project) and are only valid for C code.
755 WARN_CFLAGS="${WARN_CFLAGS} -Wold-style-definition -Wstrict-prototypes"
756
757 # CFLAGS from AX_APPEND_COMPILE_FLAGS.
758 AM_CXXFLAGS="${AM_CXXFLAGS} ${WARN_CXXFLAGS}"
759 AM_CFLAGS="${AM_CFLAGS} ${WARN_CFLAGS}"
760
761 # Done for AM_CXXFLAGS, AM_CFLAGS and AM_LDFLAGS.
762 AC_SUBST(AM_CXXFLAGS)
763 AC_SUBST(AM_CFLAGS)
764 AC_SUBST(AM_LDFLAGS)
765
766 # Set global CPPFLAGS in AM_CPPFLAGS
767 AM_CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/src -I\$(top_srcdir)/src -include common/config.h"
768 AC_SUBST(AM_CPPFLAGS)
769
770 # Add glib to global link libs
771 LIBS="$LIBS $GLIB_LIBS"
772
773 # Abuse autoconf's AC_ARG_PROGRAM output variable 'program_transform_name'
774 # to rename babeltrace2.bin to babeltrace2 at install time.
775 program_transform_name="s&babeltrace2\.bin&babeltrace2&;$program_transform_name"
776 AC_SUBST(program_transform_name)
777
778 AC_CONFIG_FILES([
779 doc/api/Makefile
780 doc/api/libbabeltrace2/Doxyfile
781 doc/api/libbabeltrace2/Makefile
782 doc/bindings/Makefile
783 doc/bindings/python/Makefile
784 doc/contributing-images/Makefile
785 doc/Makefile
786 doc/man/asciidoc-attrs.conf
787 doc/man/Makefile
788 include/Makefile
789 Makefile
790 src/argpar/Makefile
791 src/autodisc/Makefile
792 src/babeltrace2-ctf-writer.pc
793 src/babeltrace2.pc
794 src/bindings/Makefile
795 src/bindings/python/bt2/bt2/version.py
796 src/bindings/python/bt2/Makefile
797 src/bindings/python/bt2/setup.py
798 src/bindings/python/Makefile
799 src/cli/Makefile
800 src/common/Makefile
801 src/compat/Makefile
802 src/ctfser/Makefile
803 src/ctf-writer/Makefile
804 src/fd-cache/Makefile
805 src/lib/graph/Makefile
806 src/lib/graph/message/Makefile
807 src/lib/Makefile
808 src/lib/plugin/Makefile
809 src/lib/prio-heap/Makefile
810 src/lib/trace-ir/Makefile
811 src/logging/Makefile
812 src/Makefile
813 src/plugins/common/Makefile
814 src/plugins/common/muxing/Makefile
815 src/plugins/common/param-validation/Makefile
816 src/plugins/ctf/common/bfcr/Makefile
817 src/plugins/ctf/common/Makefile
818 src/plugins/ctf/common/metadata/Makefile
819 src/plugins/ctf/common/msg-iter/Makefile
820 src/plugins/ctf/fs-sink/Makefile
821 src/plugins/ctf/fs-src/Makefile
822 src/plugins/ctf/lttng-live/Makefile
823 src/plugins/ctf/Makefile
824 src/plugins/lttng-utils/debug-info/Makefile
825 src/plugins/lttng-utils/Makefile
826 src/plugins/Makefile
827 src/plugins/text/dmesg/Makefile
828 src/plugins/text/Makefile
829 src/plugins/text/pretty/Makefile
830 src/plugins/text/details/Makefile
831 src/plugins/utils/counter/Makefile
832 src/plugins/utils/dummy/Makefile
833 src/plugins/utils/Makefile
834 src/plugins/utils/muxer/Makefile
835 src/plugins/utils/trimmer/Makefile
836 src/py-common/Makefile
837 src/python-plugin-provider/Makefile
838 src/param-parse/Makefile
839 src/string-format/Makefile
840 tests/bitfield/Makefile
841 tests/ctf-writer/Makefile
842 tests/lib/Makefile
843 tests/lib/test-plugin-plugins/Makefile
844 tests/lib/conds/Makefile
845 tests/Makefile
846 tests/param-validation/Makefile
847 tests/plugins/Makefile
848 tests/plugins/src.ctf.fs/Makefile
849 tests/plugins/src.ctf.fs/succeed/Makefile
850 tests/plugins/sink.ctf.fs/Makefile
851 tests/plugins/sink.ctf.fs/succeed/Makefile
852 tests/plugins/flt.lttng-utils.debug-info/Makefile
853 tests/plugins/flt.utils.muxer/Makefile
854 tests/plugins/flt.utils.muxer/succeed/Makefile
855 tests/plugins/flt.utils.trimmer/Makefile
856 tests/plugins/sink.text.pretty/Makefile
857 tests/utils/Makefile
858 tests/utils/tap/Makefile
859 ])
860
861 AC_CONFIG_FILES([tests/utils/env.sh],[chmod +x tests/utils/env.sh])
862
863 AC_OUTPUT
864
865 #
866 # Mini-report on what will be built.
867 #
868
869 PPRINT_INIT
870 PPRINT_SET_INDENT(1)
871 PPRINT_SET_TS(38)
872
873 AS_ECHO
874
875 AS_IF([test -n "bt_version_name"], [
876 AS_ECHO("${PPRINT_COLOR_BLDBLU}Babeltrace $PACKAGE_VERSION \"bt_version_name\"$PPRINT_COLOR_RST")
877 ], [
878 AS_ECHO("${PPRINT_COLOR_BLDBLU}Babeltrace $PACKAGE_VERSION")
879 ])
880
881 AS_ECHO
882
883 AS_IF([test -n "bt_version_description"], [
884 AS_IF([test -n "$FOLD"], [
885 AS_ECHO("`AS_ECHO("bt_version_description") | $FOLD -s`")
886 ], [
887 AS_ECHO("bt_version_description")
888 ])
889
890 AS_ECHO
891 ])
892
893 PPRINT_SUBTITLE([System])
894
895 # Target architecture we're building for.
896 target_arch=$host_cpu
897 [
898 for f in $CFLAGS; do
899 if test $f = "-m32"; then
900 target_arch="32-bit"
901 elif test $f = "-m64"; then
902 target_arch="64-bit"
903 fi
904 done
905 ]
906
907 PPRINT_PROP_STRING([Target architecture], $target_arch)
908
909 AS_ECHO
910 PPRINT_SUBTITLE([Python 3 language support])
911 test "x$have_python" = "xyes" && value=1 || value=0
912 PPRINT_PROP_BOOL([Have Python interpreter], $value)
913 test "x$have_python_dev" = "xyes" && value=1 || value=0
914 PPRINT_PROP_BOOL([Have Python development libraries], $value)
915 test "x$enable_python_bindings" = "xyes" && value=1 || value=0
916 PPRINT_PROP_BOOL_CUSTOM([Python bindings], $value, [To enable, use --enable-python-bindings])
917 test "x$enable_python_plugins" = "xyes" && value=1 || value=0
918 PPRINT_PROP_BOOL_CUSTOM([Python plugin support], $value, [To enable, use --enable-python-plugins])
919 AS_IF([test "x$have_python" = "xyes"], [
920 PPRINT_PROP_STRING([Python interpreter path], [$PYTHON])
921 ])
922 AS_IF([test "x$have_python_dev" = "xyes"], [
923 PPRINT_PROP_STRING([python-config path], [$PYTHON_CONFIG])
924 PPRINT_PROP_STRING([Python include paths], [$PYTHON_INCLUDE])
925 PPRINT_PROP_STRING([Python linker flags], [$PYTHON_LDFLAGS])
926 ])
927 AE_IF_FEATURE_ENABLED([python-bindings], [
928 PPRINT_PROP_STRING([SWIG executable], [$SWIG])
929 PPRINT_PROP_STRING([SWIG library], [$SWIG_LIB])
930 ])
931
932 AS_ECHO
933 PPRINT_SUBTITLE([Plugins])
934 PPRINT_PROP_BOOL(['ctf' plugin], 1)
935 test "x$enable_debug_info" = "xyes" && value=1 || value=0
936 PPRINT_PROP_BOOL_CUSTOM(['lttng-utils' plugin], $value, [To enable, use --enable-debug-info])
937 PPRINT_PROP_BOOL(['text' plugin], 1)
938 PPRINT_PROP_BOOL(['utils' plugin], 1)
939
940 AS_ECHO
941 PPRINT_SUBTITLE([Built-in features])
942 test "x$enable_built_in_plugins" = "xyes" && value=1 || value=0
943 PPRINT_PROP_BOOL_CUSTOM([Built-in plugins], $value, [To enable, use --enable-built-in-plugins])
944 test "x$enable_built_in_python_plugin_support" = "xyes" && value=1 || value=0
945 PPRINT_PROP_BOOL_CUSTOM([Built-in Python plugin support], $value, [To enable, use --enable-built-in-python-plugin-support])
946
947 AS_ECHO
948 PPRINT_SUBTITLE([Documentation])
949
950 # man pages build enabled/disabled
951 m4_pushdef([build_man_pages_msg], [Build and install man pages])
952
953 AS_IF([test "x$enable_man_pages" != "xno"], [
954 AS_IF([test "x$in_git_repo" = "xyes"], [
955 PPRINT_PROP_BOOL([build_man_pages_msg], 1)
956 ], [
957 AS_IF([test "x$have_asciidoc_xmlto" = "xyes"], [
958 PPRINT_PROP_BOOL([build_man_pages_msg], 1)
959 ], [
960 PPRINT_PROP_STRING([build_man_pages_msg],
961 [${PPRINT_COLOR_BLDGRN}yes (already built)],
962 $PPRINT_COLOR_SUBTITLE)
963 ])
964 ])
965 ], [
966 PPRINT_PROP_BOOL_CUSTOM([build_man_pages_msg], 0, [To build man pages, use --enable-man-pages])
967 ])
968
969 m4_popdef([build_man_pages_msg])
970
971 test "x$enable_api_doc" = "xyes" && value=1 || value=0
972 PPRINT_PROP_BOOL_CUSTOM([HTML API documentation], $value, [To build documentation, use --enable-api-doc])
973 test "x$enable_python_bindings_doc" = "xyes" && value=1 || value=0
974 PPRINT_PROP_BOOL_CUSTOM([Python bindings documentation], $value, [To build the Python bindings documentation, use --enable-python-bindings-doc])
975
976 AS_ECHO
977 PPRINT_SUBTITLE([Logging])
978 PPRINT_PROP_STRING([Minimal log level], $BABELTRACE_MINIMAL_LOG_LEVEL)
979
980 AS_ECHO
981 PPRINT_SUBTITLE([Special build modes])
982 PPRINT_PROP_BOOL_CUSTOM([Debug mode], $BABELTRACE_DEBUG_MODE, [To enable, set the BABELTRACE_DEBUG_MODE environment variable to 1])
983 PPRINT_PROP_BOOL_CUSTOM([Developer mode], $BABELTRACE_DEV_MODE, [To enable, set the BABELTRACE_DEV_MODE environment variable to 1])
984
985 report_bindir="`eval eval echo $bindir`"
986 report_libdir="`eval eval echo $libdir`"
987 report_sysconfdif="`eval eval echo $sysconfdir`"
988 report_pluginsdir="`eval eval eval echo $BABELTRACE_PLUGINS_DIR`"
989 report_pluginprovidersdir="`eval eval eval echo $BABELTRACE_PLUGIN_PROVIDERS_DIR`"
990
991 # Print the bindir and libdir this `make install' will install into.
992 AS_ECHO
993 PPRINT_SUBTITLE([Install directories])
994 PPRINT_PROP_STRING([Binaries], [$report_bindir])
995 PPRINT_PROP_STRING([Libraries], [$report_libdir])
996 PPRINT_PROP_STRING([Plugins], [$report_pluginsdir])
997 PPRINT_PROP_STRING([Plugin providers], [$report_pluginprovidersdir])
998 PPRINT_PROP_STRING([Configuration], [$report_sysconfdif])
999
1000 # vim: shiftwidth=2 softtabstop=2 expandtab
This page took 0.049067 seconds and 4 git commands to generate.