1 dnl Process this file with autoconf to produce a configure script.
2 dnl Configure input file for elfutils. -*-autoconf-*-
4 dnl Copyright (C) 1996-2019 Red Hat, Inc.
5 dnl Copyright (C) 2022 Mark J. Wielaard <mark@klomp.org>
7 dnl This file is part of elfutils.
9 dnl This file is free software; you can redistribute it and/or modify
10 dnl it under the terms of the GNU General Public License as published by
11 dnl the Free Software Foundation; either version 3 of the License, or
12 dnl (at your option) any later version.
14 dnl elfutils is distributed in the hope that it will be useful, but
15 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
16 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 dnl GNU General Public License for more details.
19 dnl You should have received a copy of the GNU General Public License
20 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
21 AC_INIT([elfutils],[0.188],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
23 dnl Workaround for older autoconf < 2.64
24 m4_ifndef([AC_PACKAGE_URL],
25 [AC_DEFINE([PACKAGE_URL], ["http://elfutils.org/"],
26 [Define to home page for this package])
27 AC_SUBST([PACKAGE_URL], ["http://elfutils.org/"])])
29 LIBDEBUGINFOD_SONAME=libdebuginfod.so.1
30 AC_SUBST([LIBDEBUGINFOD_SONAME])
32 # We want eu- as default program prefix if none was given by the user.
33 # But if the user explicitly provided --program-prefix="" then pretend
34 # it wasn't set at all (NONE). We want to test this really early before
35 # configure has a chance to use the value.
37 if test "x$program_prefix" = "xNONE"; then
38 AC_MSG_NOTICE([No --program-prefix given, using "eu-"])
40 elif test "x$program_prefix" = "x"; then
41 AC_MSG_NOTICE([Using no program-prefix])
45 AC_CONFIG_AUX_DIR([config])
46 AC_CONFIG_FILES([config/Makefile])
48 AC_COPYRIGHT([Copyright (C) 1996-2022 The elfutils developers.])
49 AC_PREREQ(2.63) dnl Minimum Autoconf version required.
51 dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
52 AM_INIT_AUTOMAKE([gnits 1.11 -Wno-portability dist-bzip2 no-dist-gzip parallel-tests])
55 AM_SILENT_RULES([yes])
57 AC_CONFIG_SRCDIR([libelf/libelf.h])
58 AC_CONFIG_FILES([Makefile])
59 AC_CONFIG_HEADERS([config.h])
61 dnl The RPM spec file. We substitute a few values in the file.
62 AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in])
64 dnl debuginfo-server client & server parts.
65 AC_CONFIG_FILES([debuginfod/Makefile debuginfod/debuginfod.h])
69 AC_ARG_ENABLE(deterministic-archives,
70 [AS_HELP_STRING([--enable-deterministic-archives],
71 [ar and ranlib default to -D behavior])], [
72 if test "${enableval}" = no; then
73 default_ar_deterministic=false
75 default_ar_deterministic=true
76 fi], [default_ar_deterministic=false])
77 AC_DEFINE_UNQUOTED(DEFAULT_AR_DETERMINISTIC, $default_ar_deterministic,
78 [Should ar and ranlib use -D behavior by default?])
80 AC_ARG_ENABLE([thread-safety],
81 AS_HELP_STRING([--enable-thread-safety],
82 [enable thread safety of libraries EXPERIMENTAL]),
83 use_locks=$enableval, use_locks=no)
84 AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes)
85 AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)])
86 AS_IF([test "$use_locks" = yes],
87 [AC_MSG_WARN([thread-safety is EXPERIMENTAL tests might fail.])])
89 AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
91 m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_C99])
95 AC_PROG_LEX([noyywrap])
96 # Only available since automake 1.12
97 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
98 AC_CHECK_TOOL([READELF], [readelf])
99 AC_CHECK_TOOL([NM], [nm])
101 AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))],
102 ac_cv_visibility, [dnl
103 save_CFLAGS="$CFLAGS"
104 CFLAGS="$save_CFLAGS -Werror"
105 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
106 int __attribute__((visibility("hidden")))
110 }])], ac_cv_visibility=yes, ac_cv_visibility=no)
111 CFLAGS="$save_CFLAGS"])
112 if test "$ac_cv_visibility" = "yes"; then
113 AC_DEFINE([HAVE_VISIBILITY], [1],
114 [Defined if __attribute__((visibility())) is supported])
117 AC_CACHE_CHECK([whether gcc supports __attribute__((gcc_struct))],
118 ac_cv_gcc_struct, [dnl
119 save_CFLAGS="$CFLAGS"
120 CFLAGS="$save_CFLAGS -Werror"
121 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
122 struct test { int x; } __attribute__((gcc_struct));
123 ])], ac_cv_gcc_struct=yes, ac_cv_gcc_struct=no)
124 CFLAGS="$save_CFLAGS"])
125 if test "$ac_cv_gcc_struct" = "yes"; then
126 AC_DEFINE([HAVE_GCC_STRUCT], [1],
127 [Defined if __attribute__((gcc_struct)) is supported])
130 AC_CACHE_CHECK([whether gcc supports -fPIC], ac_cv_fpic, [dnl
131 save_CFLAGS="$CFLAGS"
132 CFLAGS="$save_CFLAGS -fPIC -Werror"
133 AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpic=yes, ac_cv_fpic=no)
134 CFLAGS="$save_CFLAGS"
136 if test "$ac_cv_fpic" = "yes"; then
141 AC_SUBST([fpic_CFLAGS])
143 AC_CACHE_CHECK([whether gcc supports -fPIE], ac_cv_fpie, [dnl
144 save_CFLAGS="$CFLAGS"
145 CFLAGS="$save_CFLAGS -fPIE -Werror"
146 AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpie=yes, ac_cv_fpie=no)
147 CFLAGS="$save_CFLAGS"
149 if test "$ac_cv_fpie" = "yes"; then
154 AC_SUBST([fpie_CFLAGS])
156 dso_LDFLAGS="-shared"
158 ZDEFS_LDFLAGS="-Wl,-z,defs"
159 AC_CACHE_CHECK([whether gcc supports $ZDEFS_LDFLAGS], ac_cv_zdefs, [dnl
160 save_LDFLAGS="$LDFLAGS"
161 LDFLAGS="$ZDEFS_LDFLAGS $save_LDFLAGS"
162 AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zdefs=yes, ac_cv_zdefs=no)
163 LDFLAGS="$save_LDFLAGS"
165 if test "$ac_cv_zdefs" = "yes"; then
166 dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
169 # We really want build-ids. Warn and force generating them if gcc was
170 # configure without --enable-linker-build-id
171 AC_CACHE_CHECK([whether the compiler generates build-ids], ac_cv_buildid, [dnl
172 AC_LINK_IFELSE([AC_LANG_PROGRAM()],[ac_cv_buildid=yes; $READELF -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no],AC_MSG_FAILURE([unexpected compile failure]))])
173 if test "$ac_cv_buildid" = "no"; then
174 AC_MSG_WARN([compiler doesn't generate build-id by default])
175 LDFLAGS="$LDFLAGS -Wl,--build-id"
178 ZRELRO_LDFLAGS="-Wl,-z,relro"
179 AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl
180 save_LDFLAGS="$LDFLAGS"
181 LDFLAGS="$ZRELRO_LDFLAGS $save_LDFLAGS"
182 AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zrelro=yes, ac_cv_zrelro=no)
183 LDFLAGS="$save_LDFLAGS"
185 if test "$ac_cv_zrelro" = "yes"; then
186 dso_LDFLAGS="$dso_LDFLAGS $ZRELRO_LDFLAGS"
189 AC_SUBST([dso_LDFLAGS])
191 AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
192 # Use the same flags that we use for our DSOs, so the test is representative.
193 # Some old compiler/linker/libc combinations fail some ways and not others.
194 save_CFLAGS="$CFLAGS"
195 save_LDFLAGS="$LDFLAGS"
196 CFLAGS="$fpic_CFLAGS $CFLAGS"
197 LDFLAGS="$dso_LDFLAGS $LDFLAGS"
199 AC_LANG_PROGRAM([[#include <stdlib.h>
201 static __thread int a; int foo (int b) { return a + b; }]],
202 [[exit (foo (0));]])],
203 ac_cv_tls=yes, ac_cv_tls=no)
204 CFLAGS="$save_CFLAGS"
205 LDFLAGS="$save_LDFLAGS"])
206 AS_IF([test "x$ac_cv_tls" != xyes],
207 AC_MSG_ERROR([__thread support required]))
209 dnl Before 4.9 gcc doesn't ship stdatomic.h, but the necessary atomics are
210 dnl available by (at least) 4.7. So if the system doesn't have a stdatomic.h we
211 dnl fall back on one copied from FreeBSD that handles the difference.
212 AC_CACHE_CHECK([whether gcc provides stdatomic.h], ac_cv_has_stdatomic,
213 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdatomic.h>]])],
214 ac_cv_has_stdatomic=yes, ac_cv_has_stdatomic=no)])
215 AM_CONDITIONAL(HAVE_STDATOMIC_H, test "x$ac_cv_has_stdatomic" = xyes)
216 AS_IF([test "x$ac_cv_has_stdatomic" = xyes], [AC_DEFINE(HAVE_STDATOMIC_H)])
218 AH_TEMPLATE([HAVE_STDATOMIC_H], [Define to 1 if `stdatomic.h` is provided by the
219 system, 0 otherwise.])
221 dnl This test must come as early as possible after the compiler configuration
222 dnl tests, because the choice of the file model can (in principle) affect
223 dnl whether functions and headers are available, whether they work, etc.
226 dnl Older glibc had a broken fts that didn't work with Large File Systems.
227 dnl We want the version that can handler LFS, but include workaround if we
228 dnl get a bad one. Add define to CFLAGS (not AC_DEFINE it) since we need to
229 dnl check it before including config.h (which might define _FILE_OFFSET_BITS).
230 AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts,
231 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <fts.h>]])],
232 ac_cv_bad_fts=no, ac_cv_bad_fts=yes)])
233 AS_IF([test "x$ac_cv_bad_fts" = "xyes"],
234 [CFLAGS="$CFLAGS -DBAD_FTS=1" CXXFLAGS="$CXXFLAGS -DBAD_FTS=1"])
236 # See if we can add -D_FORTIFY_SOURCE=2 or =3. Don't do it if it is already
237 # (differently) defined or if it generates warnings/errors because we
238 # don't use the right optimisation level (string.h will warn about that).
239 AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 or =3 to CFLAGS])
241 *-D_FORTIFY_SOURCE=*)
242 AC_MSG_RESULT([no, already there])
245 save_CFLAGS="$CFLAGS"
247 CFLAGS="-D_FORTIFY_SOURCE=3 $save_CFLAGS -Werror"
249 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
251 int main() { return 0; }
252 ]])], [ AC_MSG_RESULT([yes -D_FORTIFY_SOURCE=3])
253 fortified_cflags="-D_FORTIFY_SOURCE=3" ], [])
255 # If that didn't work, try 2.
256 if test -z "$fortified_cflags"; then
257 CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS -Werror"
258 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
260 int main() { return 0; }
261 ]])], [ AC_MSG_RESULT([yes -D_FORTIFY_SOURCE=2])
262 fortified_cflags="-D_FORTIFY_SOURCE=2" ],
263 [ AC_MSG_RESULT([no, cannot be used])])
265 CFLAGS="$fortified_cflags $save_CFLAGS"
266 CXXFLAGS="$fortified_cflags $CXXFLAGS"
270 dnl enable debugging of branch prediction.
271 AC_ARG_ENABLE([debugpred],
272 AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
273 [use_debugpred=$enableval], [use_debugpred=no])
274 case $use_debugpred in
275 yes) use_debugpred_val=1 ;;
276 *) use_debugpred_val=0 ;;
278 AC_SUBST([DEBUGPRED], $use_debugpred_val)
280 dnl Enable gprof support.
281 AC_ARG_ENABLE([gprof],
282 AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
283 if test "$use_gprof" = yes; then
285 LDFLAGS="$LDFLAGS -pg"
287 AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
289 # Enable gcov support.
290 AC_ARG_ENABLE([gcov],
291 AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
292 if test "$use_gcov" = yes; then
293 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
294 CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
295 LDFLAGS="$LDFLAGS -fprofile-arcs"
296 AC_CHECK_PROG([GCOV], [gcov], [gcov])
297 AC_CHECK_PROG([LCOV], [lcov], [lcov])
298 AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])
300 AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
302 AC_ARG_ENABLE([sanitize-undefined],
303 AS_HELP_STRING([--enable-sanitize-undefined],
304 [Use gcc undefined behaviour sanitizer]),
305 [use_undefined=$enableval], [use_undefined=no])
306 if test "$use_undefined" = yes; then
308 old_CXXFLAGS="$CXXFLAGS"
309 # We explicitly use unaligned access when possible (see ALLOW_UNALIGNED)
310 # We want to fail immediately on first error, don't try to recover.
311 CFLAGS="$CFLAGS -fsanitize=undefined -fno-sanitize-recover"
312 CXXFLAGS="$CXXFLAGS -fsanitize=undefined -fno-sanitize-recover"
313 AC_LINK_IFELSE([AC_LANG_SOURCE([int main (int argc, char **argv) { return 0; }])], use_undefined=yes, use_undefined=no)
314 AS_IF([test "x$use_undefined" != xyes],
315 AC_MSG_WARN([gcc undefined behaviour sanitizer not available])
316 CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS")
318 case $use_undefined in
319 yes) check_undefined_val=1 ;;
320 *) check_undefined_val=0 ;;
322 AC_DEFINE_UNQUOTED(CHECK_UNDEFINED, $check_undefined_val,
323 [Building with -fsanitize=undefined or not])
325 AC_ARG_ENABLE([sanitize-address],
326 AS_HELP_STRING([--enable-sanitize-address],
327 [Use gcc address sanitizer]),
328 [use_address=$enableval], [use_address=no])
329 if test "$use_address" = yes; then
331 old_CXXFLAGS="$CXXFLAGS"
332 old_LDFLAGS="$LDFLAGS"
333 # We want to fail immediately on first error, don't try to recover.
334 CFLAGS="$CFLAGS -fsanitize=address -fno-sanitize-recover"
335 CXXFLAGS="$CXXFLAGS -fsanitize=address -fno-sanitize-recover"
336 # Some compilers don't handle -fsanatize=address correctly with --no-undefined
337 LDFLAGS="-Wl,-z,defs -shared"
338 AC_LINK_IFELSE([AC_LANG_SOURCE([int main (int argc, char **argv) { return 0; }])], use_address=yes, use_address=no)
339 AS_IF([test "x$use_address" != xyes],
340 AC_MSG_WARN([gcc address sanitizer not available])
341 CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS")
342 LDFLAGS="$old_LDFLAGS"
344 AM_CONDITIONAL(USE_ADDRESS_SANITIZER, test "$use_address" = yes)
346 AC_ARG_ENABLE([valgrind],
347 AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
348 [use_valgrind=$enableval], [use_valgrind=no])
349 if test "$use_valgrind" = yes; then
350 if test "$use_address" = yes; then
351 AC_MSG_ERROR([cannot enable valgrind and sanitize address together])
353 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
354 if test "$HAVE_VALGRIND" = "no"; then
355 AC_MSG_ERROR([valgrind not found])
358 AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
360 AC_ARG_WITH([valgrind],
361 AS_HELP_STRING([--with-valgrind],[include directory for Valgrind headers]),
362 [with_valgrind_headers=$withval], [with_valgrind_headers=no])
363 if test "x$with_valgrind_headers" != xno; then
364 save_CFLAGS="$CFLAGS"
365 CFLAGS="$CFLAGS -I$with_valgrind_headers"
366 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
367 #include <valgrind/valgrind.h>
368 int main() { return 0; }
369 ]])], [ HAVE_VALGRIND_HEADERS="yes"
370 CFLAGS="$save_CFLAGS -I$with_valgrind_headers" ],
371 [ AC_MSG_ERROR([invalid valgrind include directory: $with_valgrind_headers]) ])
374 AC_ARG_ENABLE([valgrind-annotations],
375 AS_HELP_STRING([--enable-valgrind-annotations],[insert extra annotations for better valgrind support]),
376 [use_vg_annotations=$enableval], [use_vg_annotations=no])
377 if test "$use_vg_annotations" = yes; then
378 if test "x$HAVE_VALGRIND_HEADERS" != "xyes"; then
379 AC_MSG_CHECKING([whether Valgrind headers are available])
380 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
381 #include <valgrind/valgrind.h>
382 int main() { return 0; }
383 ]])], [ AC_MSG_RESULT([yes]) ],
384 [ AC_MSG_ERROR([valgrind annotations requested but no headers are available]) ])
387 AM_CONDITIONAL(USE_VG_ANNOTATIONS, test "$use_vg_annotations" = yes)
389 AC_ARG_ENABLE([install-elfh],
390 AS_HELP_STRING([--enable-install-elfh],[install elf.h in include dir]),
391 [install_elfh=$enableval], [install_elfh=no])
392 AM_CONDITIONAL(INSTALL_ELFH, test "$install_elfh" = yes)
394 AM_CONDITIONAL(BUILD_STATIC, [dnl
395 test "$use_gprof" = yes -o "$use_gcov" = yes])
397 AC_ARG_ENABLE([tests-rpath],
398 AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
399 [tests_use_rpath=$enableval], [tests_use_rpath=no])
400 AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
402 dnl zlib is mandatory.
405 eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
406 AS_IF([test "x$with_zlib" = xno], [AC_MSG_ERROR([zlib not found but is required])])
409 dnl Test for bzlib and xz/lzma/zstd, gives BZLIB/LZMALIB/ZSTD .am
410 dnl conditional and config.h USE_BZLIB/USE_LZMALIB/USE_ZSTD #define.
413 eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
414 # We need this since bzip2 doesn't have a pkgconfig file.
417 eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
418 AS_IF([test "x$with_lzma" = xyes], [LIBLZMA="liblzma"], [LIBLZMA=""])
420 eu_ZIPLIB(zstd,ZSTD,zstd,ZSTD_decompress,[ZSTD (zst)])
421 AS_IF([test "x$with_zstd" = xyes], [LIBZSTD="libzstd"], [LIBLZSTD=""])
424 AC_SUBST([zstd_LIBS])
429 dnl zstd compression support requires libzstd 1.4.0+
430 AS_IF([test "x$with_zstd" = xyes], [
432 PKG_CHECK_MODULES([ZSTD_COMPRESS],[libzstd >= 1.4.0],
433 [with_zstd_compress="yes"],[with_zstd_compress="no"])],
434 [with_zstd_compress="no"])
435 AM_CONDITIONAL(USE_ZSTD_COMPRESS, test "x$with_zstd_compress" = "xyes")
436 AS_IF([test "x$with_zstd_compress" = "xyes"],
437 [AC_DEFINE([USE_ZSTD_COMPRESS], [1], [zstd compression support])])
439 AC_CHECK_DECLS([memrchr, rawmemchr],[],[],
441 #include <string.h>])
442 AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>])
443 AC_CHECK_DECLS([mempcpy],[],[],
445 #include <string.h>])
446 AC_CHECK_DECLS([reallocarray],[],[],
448 #include <stdlib.h>])
450 AC_CHECK_FUNCS([process_vm_readv mremap])
452 AS_IF([test "x$ac_cv_func_mremap" = "xno"],
453 [AC_MSG_WARN([elf_update needs mremap to support ELF_C_RDWR_MMAP])])
455 AC_CHECK_HEADERS([error.h])
456 AC_CHECK_HEADERS([err.h])
458 dnl for debuginfod concurrency heuristics
459 AC_CHECK_HEADERS([sched.h])
460 AC_CHECK_FUNCS([sched_getaffinity])
461 AC_CHECK_HEADERS([sys/resource.h])
462 AC_CHECK_FUNCS([getrlimit])
465 CFLAGS="$CFLAGS -D_GNU_SOURCE"
469 AC_ARG_ENABLE([demangler],
470 AS_HELP_STRING([--disable-demangler],
471 [Disable libstdc++ demangle support]),
472 [], [enable_demangler=yes])
473 AS_IF([test "x$enable_demangler" == xyes],
474 AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
475 AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
476 AM_CONDITIONAL(DEMANGLE, test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes")
477 AS_IF([test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes"],
478 [enable_demangler=yes],[enable_demangler=no]),
479 AM_CONDITIONAL(DEMANGLE, false))
481 AC_ARG_ENABLE([textrelcheck],
482 AS_HELP_STRING([--disable-textrelcheck],
483 [Disable textrelcheck being a fatal error]))
484 AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"])
485 AS_IF([test "x$enable_textrelcheck" != "xno"],
486 [enable_textrelcheck=yes],[enable_textrelcheck=no])
488 AC_ARG_ENABLE([symbol-versioning],
489 AS_HELP_STRING([--disable-symbol-versioning],
490 [Disable symbol versioning in shared objects]))
492 AC_CACHE_CHECK([whether symbol versioning is supported], ac_cv_symbol_versioning, [dnl
493 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
494 #define NEW_VERSION(name, version) \
495 asm (".symver " #name "," #name "@@@" #version);
496 int foo(int x) { return x + 1; }
497 NEW_VERSION (foo, ELFUTILS_12.12)
498 ])], ac_cv_symbol_versioning=yes, ac_cv_symbol_versioning=no)])
499 if test "$ac_cv_symbol_versioning" = "no"; then
500 if test "x$enable_symbol_versioning" != "xno"; then
501 AC_MSG_ERROR([Symbol versioning is not supported.
502 Use --disable-symbol-versioning to build without.])
506 AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"])
507 AS_IF([test "x$enable_symbol_versioning" = "xno"],
508 [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.])
509 enable_symbol_versioning=no],[enable_symbol_versioning=yes])
511 AC_CACHE_CHECK([whether gcc accepts -Wstack-usage], ac_cv_stack_usage, [dnl
513 CFLAGS="$CFLAGS -Wstack-usage=262144 -Werror"
514 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
515 ac_cv_stack_usage=yes, ac_cv_stack_usage=no)
516 CFLAGS="$old_CFLAGS"])
517 AM_CONDITIONAL(ADD_STACK_USAGE_WARNING, [test "x$ac_cv_stack_usage" != "xno"])
519 # -Wlogical-op was too fragile in the past, make sure we get a sane one.
520 AC_CACHE_CHECK([whether gcc has a sane -Wlogical-op], ac_cv_logical_op, [dnl
522 CFLAGS="$CFLAGS -Wlogical-op -Werror"
523 AC_COMPILE_IFELSE([AC_LANG_SOURCE(
525 int f (int r, int f) { return (r && (FLAG || (FLAG & f))); }])],
526 ac_cv_logical_op=yes, ac_cv_logical_op=no)
527 CFLAGS="$old_CFLAGS"])
528 AM_CONDITIONAL(SANE_LOGICAL_OP_WARNING,
529 [test "x$ac_cv_logical_op" != "xno"])
531 # -Wduplicated-cond was added by GCC6
532 AC_CACHE_CHECK([whether gcc accepts -Wduplicated-cond], ac_cv_duplicated_cond, [dnl
534 CFLAGS="$CFLAGS -Wduplicated-cond -Werror"
535 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
536 ac_cv_duplicated_cond=yes, ac_cv_duplicated_cond=no)
537 CFLAGS="$old_CFLAGS"])
538 AM_CONDITIONAL(HAVE_DUPLICATED_COND_WARNING,
539 [test "x$ac_cv_duplicated_cond" != "xno"])
541 # -Wnull-dereference was added by GCC6
542 AC_CACHE_CHECK([whether gcc accepts -Wnull-dereference], ac_cv_null_dereference, [dnl
544 CFLAGS="$CFLAGS -Wnull-dereference -Werror"
545 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
546 ac_cv_null_dereference=yes, ac_cv_null_dereference=no)
547 CFLAGS="$old_CFLAGS"])
548 AM_CONDITIONAL(HAVE_NULL_DEREFERENCE_WARNING,
549 [test "x$ac_cv_null_dereference" != "xno"])
551 # -Wimplicit-fallthrough was added by GCC7
552 AC_CACHE_CHECK([whether gcc accepts -Wimplicit-fallthrough], ac_cv_implicit_fallthrough, [dnl
554 CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror"
555 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
556 ac_cv_implicit_fallthrough=yes, ac_cv_implicit_fallthrough=no)
557 CFLAGS="$old_CFLAGS"])
558 AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING,
559 [test "x$ac_cv_implicit_fallthrough" != "xno"])
561 # Check whether the compiler additionally accepts -Wimplicit-fallthrough=5
562 # GCC accepts this and 5 means "don't parse any fallthrough comments and
563 # only accept the fallthrough attribute"
564 AC_CACHE_CHECK([whether the compiler accepts -Wimplicit-fallthrough=5], ac_cv_implicit_fallthrough_5, [dnl
566 CFLAGS="$CFLAGS -Wimplicit-fallthrough=5 -Werror"
567 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
568 ac_cv_implicit_fallthrough_5=yes, ac_cv_implicit_fallthrough_5=no)
569 CFLAGS="$old_CFLAGS"])
570 AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_5_WARNING,
571 [test "x$ac_cv_implicit_fallthrough_5" != "xno"])
573 # Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported
574 if test "$ac_cv_implicit_fallthrough" = "yes"; then
575 AC_DEFINE([HAVE_FALLTHROUGH], [1],
576 [Defined if __attribute__((fallthrough)) is supported])
579 AC_CACHE_CHECK([whether the compiler accepts -Wtrampolines], ac_cv_trampolines, [dnl
581 CFLAGS="$CFLAGS -Wtrampolines -Werror"
582 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
583 ac_cv_trampolines=yes, ac_cv_trampolines=no)
584 CFLAGS="$old_CFLAGS"])
585 AM_CONDITIONAL(HAVE_TRAMPOLINES_WARNING,
586 [test "x$ac_cv_trampolines" != "xno"])
588 AC_CACHE_CHECK([whether the compiler accepts -Wno-packed-not-aligned], ac_cv_no_packed_not_aligned, [dnl
590 CFLAGS="$CFLAGS -Wno-packed-not-aligned -Werror"
591 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
592 ac_cv_no_packed_not_aligned=yes, ac_cv_no_packed_not_aligned=no)
593 CFLAGS="$old_CFLAGS"])
594 AM_CONDITIONAL(HAVE_NO_PACKED_NOT_ALIGNED_WARNING,
595 [test "x$ac_cv_no_packed_not_aligned" != "xno"])
597 AC_CACHE_CHECK([whether the compiler accepts -fno-addrsig], ac_cv_fno_addrsig, [dnl
599 CFLAGS="$CFLAGS -fno-addrsig -Werror"
600 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
601 ac_cv_fno_addrsig=yes, ac_cv_fno_addrsig=no)
602 CFLAGS="$old_CFLAGS"])
603 AS_IF([test "x$ac_cv_fno_addrsig" = "xyes"], CFLAGS="$CFLAGS -fno-addrsig")
606 AC_SEARCH_LIBS([argp_parse], [argp])
608 case "$ac_cv_search_argp_parse" in
609 no) AC_MSG_FAILURE([failed to find argp_parse]) ;;
610 -l*) argp_LDADD="$ac_cv_search_argp_parse" ;;
613 AC_SUBST([argp_LDADD])
616 AC_SEARCH_LIBS([fts_close], [fts])
618 case "$ac_cv_search_fts_close" in
619 no) AC_MSG_FAILURE([failed to find fts_close]) ;;
620 -l*) fts_LIBS="$ac_cv_search_fts_close" ;;
626 AC_SEARCH_LIBS([_obstack_free], [obstack])
628 case "$ac_cv_search__obstack_free" in
629 no) AC_MSG_FAILURE([failed to find _obstack_free]) ;;
630 -l*) obstack_LIBS="$ac_cv_search__obstack_free" ;;
633 AC_SUBST([obstack_LIBS])
635 dnl The directories with content.
638 AC_CONFIG_FILES([doc/Makefile])
641 AC_CONFIG_FILES([lib/Makefile])
644 AC_CONFIG_FILES([libelf/Makefile])
646 dnl Higher-level ELF support library.
647 AC_CONFIG_FILES([libebl/Makefile])
649 dnl DWARF-ELF Lower-level Functions support library.
650 AC_CONFIG_FILES([libdwelf/Makefile])
653 AC_CONFIG_FILES([libdw/Makefile])
655 dnl Higher-level DWARF support library.
656 AC_CONFIG_FILES([libdwfl/Makefile])
658 dnl CPU handling library.
659 AC_CONFIG_FILES([libcpu/Makefile])
661 dnl Assembler library.
662 AC_CONFIG_FILES([libasm/Makefile])
664 dnl CPU-specific backend libraries.
665 AC_CONFIG_FILES([backends/Makefile])
668 AC_CONFIG_FILES([src/Makefile po/Makefile.in])
671 AC_CONFIG_FILES([tests/Makefile])
674 AC_CONFIG_FILES([config/libelf.pc config/libdw.pc config/libdebuginfod.pc])
676 dnl As long as "git grep 'PRI[diouxX]' po" reports matches in
677 dnl translatable strings, we must use need-formatstring-macros here.
678 AM_GNU_GETTEXT([external], [need-formatstring-macros])
680 dnl AM_GNU_GETTEXT_VERSION is still needed for old versions
681 dnl of autoreconf that do not recognize AM_GNU_GETTEXT_REQUIRE_VERSION.
682 dnl 0.19.6 is the first version of gettext that provides
683 dnl AM_GNU_GETTEXT_REQUIRE_VERSION support.
684 AM_GNU_GETTEXT_VERSION([0.19.6])
685 AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6])
687 dnl Appended to the config.h file.
688 dnl We hide all kinds of configuration magic in lib/eu-config.h.
689 AH_BOTTOM([#include <eu-config.h>])
691 dnl Version compatibility header.
692 AC_CONFIG_FILES([version.h:config/version.h.in])
693 AC_SUBST([eu_version])
695 # 1.234<whatever> -> 1234<whatever>
696 case "$PACKAGE_VERSION" in
697 [[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
698 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
700 case "$eu_version" in
702 # 1234.567 -> "1234", "567"
703 eu_extra_version="${eu_version#*.}"
704 eu_version="${eu_version%%.*}"
705 case "$eu_extra_version" in
706 [[0-9]][[0-9]][[0-9]]) ;;
707 [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
708 [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
709 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
717 case "$eu_version" in
718 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
719 [[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
720 [[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
721 [[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
722 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
725 # Round up to the next release API (x.y) version.
726 eu_version=$(( (eu_version + 999) / 1000 ))
728 AC_CHECK_SIZEOF(long)
730 # On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
731 # of the user_regs_struct from sys/user.h. They are structurally the same
732 # but we get either one or the other.
733 AC_CHECK_TYPE([struct user_regs_struct],
734 [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
735 [[#include <sys/ptrace.h>]
736 [#include <sys/time.h>]
737 [#include <sys/user.h>]])
738 if test "$sys_user_has_user_regs" = "yes"; then
739 AC_DEFINE(HAVE_SYS_USER_REGS, 1,
740 [Define to 1 if <sys/user.h> defines struct user_regs_struct])
743 # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
745 CC_BIARCH="$CC $utrace_biarch"
746 AC_SUBST([CC_BIARCH])
748 # In maintainer mode we really need flex and bison.
749 # Otherwise we really need a release dir with maintainer files generated.
750 if test "x$enable_maintainer_mode" = xyes; then
751 AC_CHECK_PROG(HAVE_FLEX, flex, yes, no)
752 if test "$HAVE_FLEX" = "no"; then
753 AC_MSG_ERROR([flex needed in maintainer mode])
755 AC_CHECK_PROG(HAVE_BISON, bison, yes, no)
756 if test "$HAVE_BISON" = "no"; then
757 AC_MSG_ERROR([bison needed in maintainer mode])
759 AC_CHECK_PROG(HAVE_GAWK, gawk, yes, no)
760 if test "$HAVE_GAWK" = "no"; then
761 AC_MSG_ERROR([gawk needed in maintainer mode])
764 if test ! -f ${srcdir}/libdw/known-dwarf.h; then
765 AC_MSG_ERROR([No libdw/known-dwarf.h. configure --enable-maintainer-mode])
769 # The testfiles are all compressed, we need bunzip2 when running make check
770 AC_CHECK_PROG(HAVE_BUNZIP2, bunzip2, yes, no)
771 if test "$HAVE_BUNZIP2" = "no"; then
772 AC_MSG_WARN([No bunzip2, needed to run make check])
775 # For tests that need to use zstd compression
776 AC_CHECK_PROG(HAVE_ZSTD, zstd, yes, no)
777 AM_CONDITIONAL([HAVE_ZSTD],[test "x$HAVE_ZSTD" = "xyes"])
779 # Look for libcurl for libdebuginfod minimum version as per rhel7.
780 AC_ARG_ENABLE([libdebuginfod],AS_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)]))
781 AS_IF([test "x$enable_libdebuginfod" != "xno"], [
782 if test "x$enable_libdebuginfod" != "xdummy"; then
783 AC_MSG_NOTICE([checking libdebuginfod dependencies, --disable-libdebuginfod or --enable-libdebuginfo=dummy to skip])
784 enable_libdebuginfod=yes # presume success
786 PKG_CHECK_MODULES([libcurl],[libcurl >= 7.29.0],[],[enable_libdebuginfod=no])
787 if test "x$enable_libdebuginfod" = "xno"; then
788 AC_MSG_ERROR([dependencies not found, use --disable-libdebuginfod to disable or --enable-libdebuginfod=dummy to build a (bootstrap) dummy library.])
791 AC_MSG_NOTICE([building (bootstrap) dummy libdebuginfo library])
795 AC_CHECK_LIB(pthread, pthread_setname_np, [
796 AC_DEFINE([HAVE_PTHREAD_SETNAME_NP],[1],[Enable pthread_setname_np])])
798 AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"],
799 [AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])])
800 AS_IF([test "x$enable_libdebuginfod" = "xdummy"],
801 [AC_DEFINE([DUMMY_LIBDEBUGINFOD], [1], [Build dummy libdebuginfod])])
802 AM_CONDITIONAL([LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"])
803 AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xdummy"])
805 # Look for libmicrohttpd, libarchive, sqlite for debuginfo server
806 # minimum versions as per rhel7.
807 AC_ARG_ENABLE([debuginfod],AS_HELP_STRING([--enable-debuginfod], [Build debuginfod server]))
808 AS_IF([test "x$enable_debuginfod" != "xno"], [
809 AC_MSG_NOTICE([checking debuginfod C++11 support, --disable-debuginfod to skip])
810 AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
811 AC_MSG_NOTICE([checking debuginfod dependencies, --disable-debuginfod to skip])
812 if test "x$enable_libdebuginfod" = "xno"; then
813 AC_MSG_ERROR([need libdebuginfod (or dummy), use --disable-debuginfod to disable.])
815 enable_debuginfod=yes # presume success
817 PKG_CHECK_MODULES([libmicrohttpd],[libmicrohttpd >= 0.9.33],[],[enable_debuginfod=no])
818 PKG_CHECK_MODULES([oldlibmicrohttpd],[libmicrohttpd < 0.9.51],[old_libmicrohttpd=yes],[old_libmicrohttpd=no])
819 PKG_CHECK_MODULES([sqlite3],[sqlite3 >= 3.7.17],[],[enable_debuginfod=no])
820 PKG_CHECK_MODULES([libarchive],[libarchive >= 3.1.2],[],[enable_debuginfod=no])
821 if test "x$enable_debuginfod" = "xno"; then
822 AC_MSG_ERROR([dependencies not found, use --disable-debuginfod to disable.])
826 AS_IF([test "x$enable_debuginfod" != "xno"],AC_DEFINE([ENABLE_DEBUGINFOD],[1],[Build debuginfod]))
827 AM_CONDITIONAL([DEBUGINFOD],[test "x$enable_debuginfod" = "xyes"])
828 AM_CONDITIONAL([OLD_LIBMICROHTTPD],[test "x$old_libmicrohttpd" = "xyes"])
830 dnl for /etc/profile.d/elfutils.{csh,sh}
831 default_debuginfod_urls=""
832 AC_ARG_ENABLE(debuginfod-urls,
833 [AS_HELP_STRING([--enable-debuginfod-urls@<:@=URLS@:>@],[add URLS to profile.d DEBUGINFOD_URLS])],
834 [if test "x${enableval}" = "xyes";
835 then default_debuginfod_urls="https://debuginfod.elfutils.org/";
836 elif test "x${enableval}" != "xno"; then
837 default_debuginfod_urls="${enableval}";
839 [default_debuginfod_urls=""])
840 AC_SUBST(DEBUGINFOD_URLS, $default_debuginfod_urls)
841 AC_CONFIG_FILES([config/profile.sh config/profile.csh])
846 =====================================================================
847 elfutils: ${PACKAGE_VERSION} (eu_version: ${eu_version})
848 =====================================================================
851 Program prefix ("eu-" recommended) : ${program_prefix}
852 Source code location : ${srcdir}
853 Maintainer mode : ${enable_maintainer_mode}
854 build arch : ${ac_cv_build}
859 RECOMMENDED FEATURES (should all be yes)
860 gzip support : ${with_zlib}
861 bzip2 support : ${with_bzlib}
862 lzma/xz support : ${with_lzma}
863 zstd support : ${with_zstd}
864 zstd compression support : ${with_zstd_compress}
865 libstdc++ demangle support : ${enable_demangler}
866 File textrel check : ${enable_textrelcheck}
867 Symbol versioning : ${enable_symbol_versioning}
869 NOT RECOMMENDED FEATURES (should all be no)
870 Experimental thread safety : ${use_locks}
871 install elf.h : ${install_elfh}
874 Deterministic archives by default : ${default_ar_deterministic}
875 Native language support : ${USE_NLS}
876 Extra Valgrind annotations : ${use_vg_annotations}
877 libdebuginfod client support : ${enable_libdebuginfod}
878 Debuginfod server support : ${enable_debuginfod}
879 Default DEBUGINFOD_URLS : ${default_debuginfod_urls}
881 EXTRA TEST FEATURES (used with make check)
882 have bunzip2 installed (required) : ${HAVE_BUNZIP2}
883 have zstd installed : ${HAVE_ZSTD}
884 debug branch prediction : ${use_debugpred}
885 gprof support : ${use_gprof}
886 gcov support : ${use_gcov}
887 run all tests under valgrind : ${use_valgrind}
888 gcc undefined behaviour sanitizer : ${use_undefined}
889 gcc address sanitizer : ${use_address}
890 use rpath in tests : ${tests_use_rpath}
891 test biarch : ${utrace_cv_cc_biarch}
894 if test "$install_elfh" = yes; then
895 if test "${prefix}" = "/usr/local" -o "${prefix}" = "/usr"; then
896 AC_MSG_WARN([installing elf.h in ${includedir} might conflict with glibc/system elf.h])