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.
6 dnl This file is part of elfutils.
8 dnl This file is free software; you can redistribute it and/or modify
9 dnl it under the terms of the GNU General Public License as published by
10 dnl the Free Software Foundation; either version 3 of the License, or
11 dnl (at your option) any later version.
13 dnl elfutils is distributed in the hope that it will be useful, but
14 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
15 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 dnl GNU General Public License for more details.
18 dnl You should have received a copy of the GNU General Public License
19 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
20 AC_INIT([elfutils],[0.185],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
22 dnl Workaround for older autoconf < 2.64
23 m4_ifndef([AC_PACKAGE_URL],
24 [AC_DEFINE([PACKAGE_URL], ["http://elfutils.org/"],
25 [Define to home page for this package])
26 AC_SUBST([PACKAGE_URL], ["http://elfutils.org/"])])
28 LIBDEBUGINFOD_SONAME=libdebuginfod.so.1
29 AC_SUBST([LIBDEBUGINFOD_SONAME])
31 # We want eu- as default program prefix if none was given by the user.
32 # But if the user explicitly provided --program-prefix="" then pretend
33 # it wasn't set at all (NONE). We want to test this really early before
34 # configure has a chance to use the value.
36 if test "x$program_prefix" = "xNONE"; then
37 AC_MSG_NOTICE([No --program-prefix given, using "eu-"])
39 elif test "x$program_prefix" = "x"; then
40 AC_MSG_NOTICE([Using no program-prefix])
44 AC_CONFIG_AUX_DIR([config])
45 AC_CONFIG_FILES([config/Makefile])
47 AC_COPYRIGHT([Copyright (C) 1996-2021 The elfutils developers.])
48 AC_PREREQ(2.63) dnl Minimum Autoconf version required.
50 dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
51 AM_INIT_AUTOMAKE([gnits 1.11 -Wno-portability dist-bzip2 no-dist-gzip parallel-tests])
54 AM_SILENT_RULES([yes])
56 AC_CONFIG_SRCDIR([libelf/libelf.h])
57 AC_CONFIG_FILES([Makefile])
58 AC_CONFIG_HEADERS([config.h])
60 dnl The RPM spec file. We substitute a few values in the file.
61 AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in])
63 dnl debuginfo-server client & server parts.
64 AC_CONFIG_FILES([debuginfod/Makefile debuginfod/debuginfod.h])
68 AC_ARG_ENABLE(deterministic-archives,
69 [AS_HELP_STRING([--enable-deterministic-archives],
70 [ar and ranlib default to -D behavior])], [
71 if test "${enableval}" = no; then
72 default_ar_deterministic=false
74 default_ar_deterministic=true
75 fi], [default_ar_deterministic=false])
76 AC_DEFINE_UNQUOTED(DEFAULT_AR_DETERMINISTIC, $default_ar_deterministic,
77 [Should ar and ranlib use -D behavior by default?])
79 AC_ARG_ENABLE([thread-safety],
80 AS_HELP_STRING([--enable-thread-safety],
81 [enable thread safety of libraries EXPERIMENTAL]),
82 use_locks=$enableval, use_locks=no)
83 AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes)
84 AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)])
85 AS_IF([test "$use_locks" = yes],
86 [AC_MSG_WARN([thread-safety is EXPERIMENTAL tests might fail.])])
88 AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
94 # Only available since automake 1.12
95 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
96 AC_CHECK_TOOL([READELF], [readelf])
97 AC_CHECK_TOOL([NM], [nm])
99 AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))],
100 ac_cv_visibility, [dnl
101 save_CFLAGS="$CFLAGS"
102 CFLAGS="$save_CFLAGS -Werror"
103 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
104 int __attribute__((visibility("hidden")))
108 }])], ac_cv_visibility=yes, ac_cv_visibility=no)
109 CFLAGS="$save_CFLAGS"])
110 if test "$ac_cv_visibility" = "yes"; then
111 AC_DEFINE([HAVE_VISIBILITY], [1],
112 [Defined if __attribute__((visibility())) is supported])
115 AC_CACHE_CHECK([whether gcc supports __attribute__((gcc_struct))],
116 ac_cv_gcc_struct, [dnl
117 save_CFLAGS="$CFLAGS"
118 CFLAGS="$save_CFLAGS -Werror"
119 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
120 struct test { int x; } __attribute__((gcc_struct));
121 ])], ac_cv_gcc_struct=yes, ac_cv_gcc_struct=no)
122 CFLAGS="$save_CFLAGS"])
123 if test "$ac_cv_gcc_struct" = "yes"; then
124 AC_DEFINE([HAVE_GCC_STRUCT], [1],
125 [Defined if __attribute__((gcc_struct)) is supported])
128 AC_CACHE_CHECK([whether gcc supports -fPIC], ac_cv_fpic, [dnl
129 save_CFLAGS="$CFLAGS"
130 CFLAGS="$save_CFLAGS -fPIC -Werror"
131 AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpic=yes, ac_cv_fpic=no)
132 CFLAGS="$save_CFLAGS"
134 if test "$ac_cv_fpic" = "yes"; then
139 AC_SUBST([fpic_CFLAGS])
141 AC_CACHE_CHECK([whether gcc supports -fPIE], ac_cv_fpie, [dnl
142 save_CFLAGS="$CFLAGS"
143 CFLAGS="$save_CFLAGS -fPIE -Werror"
144 AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpie=yes, ac_cv_fpie=no)
145 CFLAGS="$save_CFLAGS"
147 if test "$ac_cv_fpie" = "yes"; then
152 AC_SUBST([fpie_CFLAGS])
154 dso_LDFLAGS="-shared"
156 ZDEFS_LDFLAGS="-Wl,-z,defs"
157 AC_CACHE_CHECK([whether gcc supports $ZDEFS_LDFLAGS], ac_cv_zdefs, [dnl
158 save_LDFLAGS="$LDFLAGS"
159 LDFLAGS="$ZDEFS_LDFLAGS $save_LDFLAGS"
160 AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zdefs=yes, ac_cv_zdefs=no)
161 LDFLAGS="$save_LDFLAGS"
163 if test "$ac_cv_zdefs" = "yes"; then
164 dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
167 # We really want build-ids. Warn and force generating them if gcc was
168 # configure without --enable-linker-build-id
169 AC_CACHE_CHECK([whether the compiler generates build-ids], ac_cv_buildid, [dnl
170 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]))])
171 if test "$ac_cv_buildid" = "no"; then
172 AC_MSG_WARN([compiler doesn't generate build-id by default])
173 LDFLAGS="$LDFLAGS -Wl,--build-id"
176 ZRELRO_LDFLAGS="-Wl,-z,relro"
177 AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl
178 save_LDFLAGS="$LDFLAGS"
179 LDFLAGS="$ZRELRO_LDFLAGS $save_LDFLAGS"
180 AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zrelro=yes, ac_cv_zrelro=no)
181 LDFLAGS="$save_LDFLAGS"
183 if test "$ac_cv_zrelro" = "yes"; then
184 dso_LDFLAGS="$dso_LDFLAGS $ZRELRO_LDFLAGS"
187 AC_SUBST([dso_LDFLAGS])
189 AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
190 # Use the same flags that we use for our DSOs, so the test is representative.
191 # Some old compiler/linker/libc combinations fail some ways and not others.
192 save_CFLAGS="$CFLAGS"
193 save_LDFLAGS="$LDFLAGS"
194 CFLAGS="$fpic_CFLAGS $CFLAGS"
195 LDFLAGS="$dso_LDFLAGS $LDFLAGS"
197 AC_LANG_PROGRAM([[#include <stdlib.h>
199 static __thread int a; int foo (int b) { return a + b; }]],
200 [[exit (foo (0));]])],
201 ac_cv_tls=yes, ac_cv_tls=no)
202 CFLAGS="$save_CFLAGS"
203 LDFLAGS="$save_LDFLAGS"])
204 AS_IF([test "x$ac_cv_tls" != xyes],
205 AC_MSG_ERROR([__thread support required]))
207 dnl Before 4.9 gcc doesn't ship stdatomic.h, but the necessary atomics are
208 dnl available by (at least) 4.7. So if the system doesn't have a stdatomic.h we
209 dnl fall back on one copied from FreeBSD that handles the difference.
210 AC_CACHE_CHECK([whether gcc provides stdatomic.h], ac_cv_has_stdatomic,
211 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdatomic.h>]])],
212 ac_cv_has_stdatomic=yes, ac_cv_has_stdatomic=no)])
213 AM_CONDITIONAL(HAVE_STDATOMIC_H, test "x$ac_cv_has_stdatomic" = xyes)
214 AS_IF([test "x$ac_cv_has_stdatomic" = xyes], [AC_DEFINE(HAVE_STDATOMIC_H)])
216 AH_TEMPLATE([HAVE_STDATOMIC_H], [Define to 1 if `stdatomic.h` is provided by the
217 system, 0 otherwise.])
219 dnl This test must come as early as possible after the compiler configuration
220 dnl tests, because the choice of the file model can (in principle) affect
221 dnl whether functions and headers are available, whether they work, etc.
224 dnl Older glibc had a broken fts that didn't work with Large File Systems.
225 dnl We want the version that can handler LFS, but include workaround if we
226 dnl get a bad one. Add define to CFLAGS (not AC_DEFINE it) since we need to
227 dnl check it before including config.h (which might define _FILE_OFFSET_BITS).
228 AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts,
229 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <fts.h>]])],
230 ac_cv_bad_fts=no, ac_cv_bad_fts=yes)])
231 AS_IF([test "x$ac_cv_bad_fts" = "xyes"],
232 [CFLAGS="$CFLAGS -DBAD_FTS=1" CXXFLAGS="$CXXFLAGS -DBAD_FTS=1"])
234 # See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already
235 # (differently) defined or if it generates warnings/errors because we
236 # don't use the right optimisation level (string.h will warn about that).
237 AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 to CFLAGS])
239 *-D_FORTIFY_SOURCE=2*)
240 AC_MSG_RESULT([no, already there])
243 save_CFLAGS="$CFLAGS"
244 CFLAGS="-D_FORTIFY_SOURCE=2 $CFLAGS -Werror"
245 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
247 int main() { return 0; }
248 ]])], [ AC_MSG_RESULT([yes])
249 CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS" ],
250 [ AC_MSG_RESULT([no])
251 CFLAGS="$save_CFLAGS"])
255 dnl enable debugging of branch prediction.
256 AC_ARG_ENABLE([debugpred],
257 AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
258 [use_debugpred=$enableval], [use_debugpred=no])
259 case $use_debugpred in
260 yes) use_debugpred_val=1 ;;
261 *) use_debugpred_val=0 ;;
263 AC_SUBST([DEBUGPRED], $use_debugpred_val)
265 dnl Enable gprof support.
266 AC_ARG_ENABLE([gprof],
267 AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
268 if test "$use_gprof" = yes; then
270 LDFLAGS="$LDFLAGS -pg"
272 AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
274 # Enable gcov support.
275 AC_ARG_ENABLE([gcov],
276 AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
277 if test "$use_gcov" = yes; then
278 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
279 CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
280 LDFLAGS="$LDFLAGS -fprofile-arcs"
281 AC_CHECK_PROG([GCOV], [gcov], [gcov])
282 AC_CHECK_PROG([LCOV], [lcov], [lcov])
283 AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])
285 AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
287 AC_ARG_ENABLE([sanitize-undefined],
288 AS_HELP_STRING([--enable-sanitize-undefined],
289 [Use gcc undefined behaviour sanitizer]),
290 [use_undefined=$enableval], [use_undefined=no])
291 if test "$use_undefined" = yes; then
293 old_CXXFLAGS="$CXXFLAGS"
294 # We explicitly use unaligned access when possible (see ALLOW_UNALIGNED)
295 # We want to fail immediately on first error, don't try to recover.
296 CFLAGS="$CFLAGS -fsanitize=undefined -fno-sanitize-recover"
297 CXXFLAGS="$CXXFLAGS -fsanitize=undefined -fno-sanitize-recover"
298 AC_LINK_IFELSE([AC_LANG_SOURCE([int main (int argc, char **argv) { return 0; }])], use_undefined=yes, use_undefined=no)
299 AS_IF([test "x$use_undefined" != xyes],
300 AC_MSG_WARN([gcc undefined behaviour sanitizer not available])
301 CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS")
303 case $use_undefined in
304 yes) check_undefined_val=1 ;;
305 *) check_undefined_val=0 ;;
307 AC_DEFINE_UNQUOTED(CHECK_UNDEFINED, $check_undefined_val,
308 [Building with -fsanitize=undefined or not])
310 AC_ARG_ENABLE([valgrind],
311 AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
312 [use_valgrind=$enableval], [use_valgrind=no])
313 if test "$use_valgrind" = yes; then
314 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
315 if test "$HAVE_VALGRIND" = "no"; then
316 AC_MSG_ERROR([valgrind not found])
319 AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
321 AC_ARG_WITH([valgrind],
322 AS_HELP_STRING([--with-valgrind],[include directory for Valgrind headers]),
323 [with_valgrind_headers=$withval], [with_valgrind_headers=no])
324 if test "x$with_valgrind_headers" != xno; then
325 save_CFLAGS="$CFLAGS"
326 CFLAGS="$CFLAGS -I$with_valgrind_headers"
327 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
328 #include <valgrind/valgrind.h>
329 int main() { return 0; }
330 ]])], [ HAVE_VALGRIND_HEADERS="yes"
331 CFLAGS="$save_CFLAGS -I$with_valgrind_headers" ],
332 [ AC_MSG_ERROR([invalid valgrind include directory: $with_valgrind_headers]) ])
335 AC_ARG_ENABLE([valgrind-annotations],
336 AS_HELP_STRING([--enable-valgrind-annotations],[insert extra annotations for better valgrind support]),
337 [use_vg_annotations=$enableval], [use_vg_annotations=no])
338 if test "$use_vg_annotations" = yes; then
339 if test "x$HAVE_VALGRIND_HEADERS" != "xyes"; then
340 AC_MSG_CHECKING([whether Valgrind headers are available])
341 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
342 #include <valgrind/valgrind.h>
343 int main() { return 0; }
344 ]])], [ AC_MSG_RESULT([yes]) ],
345 [ AC_MSG_ERROR([valgrind annotations requested but no headers are available]) ])
348 AM_CONDITIONAL(USE_VG_ANNOTATIONS, test "$use_vg_annotations" = yes)
350 AC_ARG_ENABLE([install-elfh],
351 AS_HELP_STRING([--enable-install-elfh],[install elf.h in include dir]),
352 [install_elfh=$enableval], [install_elfh=no])
353 AM_CONDITIONAL(INSTALL_ELFH, test "$install_elfh" = yes)
355 AM_CONDITIONAL(BUILD_STATIC, [dnl
356 test "$use_gprof" = yes -o "$use_gcov" = yes])
358 AC_ARG_ENABLE([tests-rpath],
359 AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
360 [tests_use_rpath=$enableval], [tests_use_rpath=no])
361 AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
363 dnl zlib is mandatory.
366 eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
367 AS_IF([test "x$with_zlib" = xno], [AC_MSG_ERROR([zlib not found but is required])])
370 dnl Test for bzlib and xz/lzma/zstd, gives BZLIB/LZMALIB/ZSTD .am
371 dnl conditional and config.h USE_BZLIB/USE_LZMALIB/USE_ZSTD #define.
374 eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
375 # We need this since bzip2 doesn't have a pkgconfig file.
378 eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
379 AS_IF([test "x$with_lzma" = xyes], [LIBLZMA="liblzma"], [LIBLZMA=""])
381 eu_ZIPLIB(zstd,ZSTD,zstd,ZSTD_decompress,[ZSTD (zst)])
382 AS_IF([test "x$with_zstd" = xyes], [LIBZSTD="libzstd"], [LIBLZSTD=""])
388 AC_CHECK_DECLS([memrchr, rawmemchr],[],[],
390 #include <string.h>])
391 AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>])
392 AC_CHECK_DECLS([mempcpy],[],[],
394 #include <string.h>])
395 AC_CHECK_DECLS([reallocarray],[],[],
397 #include <stdlib.h>])
399 AC_CHECK_FUNCS([process_vm_readv])
401 AC_CHECK_HEADERS([error.h])
402 AC_CHECK_HEADERS([err.h])
405 CFLAGS="$CFLAGS -D_GNU_SOURCE"
409 AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
410 AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
411 AM_CONDITIONAL(DEMANGLE, test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes")
412 AS_IF([test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes"],
413 [enable_demangler=yes],[enable_demangler=no])
415 AC_ARG_ENABLE([textrelcheck],
416 AS_HELP_STRING([--disable-textrelcheck],
417 [Disable textrelcheck being a fatal error]))
418 AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"])
419 AS_IF([test "x$enable_textrelcheck" != "xno"],
420 [enable_textrelcheck=yes],[enable_textrelcheck=no])
422 AC_ARG_ENABLE([symbol-versioning],
423 AS_HELP_STRING([--disable-symbol-versioning],
424 [Disable symbol versioning in shared objects]))
426 AC_CACHE_CHECK([whether symbol versioning is supported], ac_cv_symbol_versioning, [dnl
427 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
428 #define NEW_VERSION(name, version) \
429 asm (".symver " #name "," #name "@@@" #version);
430 int foo(int x) { return x + 1; }
431 NEW_VERSION (foo, ELFUTILS_12.12)
432 ])], ac_cv_symbol_versioning=yes, ac_cv_symbol_versioning=no)])
433 if test "$ac_cv_symbol_versioning" = "no"; then
434 if test "x$enable_symbol_versioning" != "xno"; then
435 AC_MSG_ERROR([Symbol versioning is not supported.
436 Use --disable-symbol-versioning to build without.])
440 AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"])
441 AS_IF([test "x$enable_symbol_versioning" = "xno"],
442 [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.])
443 enable_symbol_versioning=no],[enable_symbol_versioning=yes])
445 AC_CACHE_CHECK([whether gcc accepts -Wstack-usage], ac_cv_stack_usage, [dnl
447 CFLAGS="$CFLAGS -Wstack-usage=262144 -Werror"
448 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
449 ac_cv_stack_usage=yes, ac_cv_stack_usage=no)
450 CFLAGS="$old_CFLAGS"])
451 AM_CONDITIONAL(ADD_STACK_USAGE_WARNING, [test "x$ac_cv_stack_usage" != "xno"])
453 # -Wlogical-op was too fragile in the past, make sure we get a sane one.
454 AC_CACHE_CHECK([whether gcc has a sane -Wlogical-op], ac_cv_logical_op, [dnl
456 CFLAGS="$CFLAGS -Wlogical-op -Werror"
457 AC_COMPILE_IFELSE([AC_LANG_SOURCE(
459 int f (int r, int f) { return (r && (FLAG || (FLAG & f))); }])],
460 ac_cv_logical_op=yes, ac_cv_logical_op=no)
461 CFLAGS="$old_CFLAGS"])
462 AM_CONDITIONAL(SANE_LOGICAL_OP_WARNING,
463 [test "x$ac_cv_logical_op" != "xno"])
465 # -Wduplicated-cond was added by GCC6
466 AC_CACHE_CHECK([whether gcc accepts -Wduplicated-cond], ac_cv_duplicated_cond, [dnl
468 CFLAGS="$CFLAGS -Wduplicated-cond -Werror"
469 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
470 ac_cv_duplicated_cond=yes, ac_cv_duplicated_cond=no)
471 CFLAGS="$old_CFLAGS"])
472 AM_CONDITIONAL(HAVE_DUPLICATED_COND_WARNING,
473 [test "x$ac_cv_duplicated_cond" != "xno"])
475 # -Wnull-dereference was added by GCC6
476 AC_CACHE_CHECK([whether gcc accepts -Wnull-dereference], ac_cv_null_dereference, [dnl
478 CFLAGS="$CFLAGS -Wnull-dereference -Werror"
479 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
480 ac_cv_null_dereference=yes, ac_cv_null_dereference=no)
481 CFLAGS="$old_CFLAGS"])
482 AM_CONDITIONAL(HAVE_NULL_DEREFERENCE_WARNING,
483 [test "x$ac_cv_null_dereference" != "xno"])
485 # -Wimplicit-fallthrough was added by GCC7
486 AC_CACHE_CHECK([whether gcc accepts -Wimplicit-fallthrough], ac_cv_implicit_fallthrough, [dnl
488 CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror"
489 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
490 ac_cv_implicit_fallthrough=yes, ac_cv_implicit_fallthrough=no)
491 CFLAGS="$old_CFLAGS"])
492 AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING,
493 [test "x$ac_cv_implicit_fallthrough" != "xno"])
495 # Check whether the compiler additionally accepts -Wimplicit-fallthrough=5
496 # GCC accepts this and 5 means "don't parse any fallthrough comments and
497 # only accept the fallthrough attribute"
498 AC_CACHE_CHECK([whether the compiler accepts -Wimplicit-fallthrough=5], ac_cv_implicit_fallthrough_5, [dnl
500 CFLAGS="$CFLAGS -Wimplicit-fallthrough=5 -Werror"
501 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
502 ac_cv_implicit_fallthrough_5=yes, ac_cv_implicit_fallthrough_5=no)
503 CFLAGS="$old_CFLAGS"])
504 AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_5_WARNING,
505 [test "x$ac_cv_implicit_fallthrough_5" != "xno"])
507 # Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported
508 if test "$ac_cv_implicit_fallthrough" = "yes"; then
509 AC_DEFINE([HAVE_FALLTHROUGH], [1],
510 [Defined if __attribute__((fallthrough)) is supported])
513 AC_CACHE_CHECK([whether the compiler accepts -Wtrampolines], ac_cv_trampolines, [dnl
515 CFLAGS="$CFLAGS -Wtrampolines -Werror"
516 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
517 ac_cv_trampolines=yes, ac_cv_trampolines=no)
518 CFLAGS="$old_CFLAGS"])
519 AM_CONDITIONAL(HAVE_TRAMPOLINES_WARNING,
520 [test "x$ac_cv_trampolines" != "xno"])
522 AC_CACHE_CHECK([whether the compiler accepts -Wno-packed-not-aligned], ac_cv_no_packed_not_aligned, [dnl
524 CFLAGS="$CFLAGS -Wno-packed-not-aligned -Werror"
525 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
526 ac_cv_no_packed_not_aligned=yes, ac_cv_no_packed_not_aligned=no)
527 CFLAGS="$old_CFLAGS"])
528 AM_CONDITIONAL(HAVE_NO_PACKED_NOT_ALIGNED_WARNING,
529 [test "x$ac_cv_no_packed_not_aligned" != "xno"])
532 AC_SEARCH_LIBS([argp_parse], [argp])
534 case "$ac_cv_search_argp_parse" in
535 no) AC_MSG_FAILURE([failed to find argp_parse]) ;;
536 -l*) argp_LDADD="$ac_cv_search_argp_parse" ;;
539 AC_SUBST([argp_LDADD])
542 AC_SEARCH_LIBS([fts_close], [fts])
544 case "$ac_cv_search_fts_close" in
545 no) AC_MSG_FAILURE([failed to find fts_close]) ;;
546 -l*) fts_LIBS="$ac_cv_search_fts_close" ;;
552 AC_SEARCH_LIBS([_obstack_free], [obstack])
554 case "$ac_cv_search__obstack_free" in
555 no) AC_MSG_FAILURE([failed to find _obstack_free]) ;;
556 -l*) obstack_LIBS="$ac_cv_search__obstack_free" ;;
559 AC_SUBST([obstack_LIBS])
561 dnl The directories with content.
564 AC_CONFIG_FILES([doc/Makefile])
567 AC_CONFIG_FILES([lib/Makefile])
570 AC_CONFIG_FILES([libelf/Makefile])
572 dnl Higher-level ELF support library.
573 AC_CONFIG_FILES([libebl/Makefile])
575 dnl DWARF-ELF Lower-level Functions support library.
576 AC_CONFIG_FILES([libdwelf/Makefile])
579 AC_CONFIG_FILES([libdw/Makefile])
581 dnl Higher-level DWARF support library.
582 AC_CONFIG_FILES([libdwfl/Makefile])
584 dnl CPU handling library.
585 AC_CONFIG_FILES([libcpu/Makefile])
587 dnl Assembler library.
588 AC_CONFIG_FILES([libasm/Makefile])
590 dnl CPU-specific backend libraries.
591 AC_CONFIG_FILES([backends/Makefile])
594 AC_CONFIG_FILES([src/Makefile po/Makefile.in])
597 AC_CONFIG_FILES([tests/Makefile])
600 AC_CONFIG_FILES([config/libelf.pc config/libdw.pc config/libdebuginfod.pc])
602 dnl As long as "git grep 'PRI[diouxX]' po" reports matches in
603 dnl translatable strings, we must use need-formatstring-macros here.
604 AM_GNU_GETTEXT([external], [need-formatstring-macros])
606 dnl AM_GNU_GETTEXT_VERSION is still needed for old versions
607 dnl of autoreconf that do not recognize AM_GNU_GETTEXT_REQUIRE_VERSION.
608 dnl 0.19.6 is the first version of gettext that provides
609 dnl AM_GNU_GETTEXT_REQUIRE_VERSION support.
610 AM_GNU_GETTEXT_VERSION([0.19.6])
611 AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6])
613 dnl Appended to the config.h file.
614 dnl We hide all kinds of configuration magic in lib/eu-config.h.
615 AH_BOTTOM([#include <eu-config.h>])
617 dnl Version compatibility header.
618 AC_CONFIG_FILES([version.h:config/version.h.in])
619 AC_SUBST([eu_version])
621 # 1.234<whatever> -> 1234<whatever>
622 case "$PACKAGE_VERSION" in
623 [[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
624 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
626 case "$eu_version" in
628 # 1234.567 -> "1234", "567"
629 eu_extra_version="${eu_version#*.}"
630 eu_version="${eu_version%%.*}"
631 case "$eu_extra_version" in
632 [[0-9]][[0-9]][[0-9]]) ;;
633 [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
634 [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
635 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
643 case "$eu_version" in
644 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
645 [[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
646 [[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
647 [[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
648 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
651 # Round up to the next release API (x.y) version.
652 eu_version=$(( (eu_version + 999) / 1000 ))
654 AC_CHECK_SIZEOF(long)
656 # On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
657 # of the user_regs_struct from sys/user.h. They are structurally the same
658 # but we get either one or the other.
659 AC_CHECK_TYPE([struct user_regs_struct],
660 [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
661 [[#include <sys/ptrace.h>]
662 [#include <sys/time.h>]
663 [#include <sys/user.h>]])
664 if test "$sys_user_has_user_regs" = "yes"; then
665 AC_DEFINE(HAVE_SYS_USER_REGS, 1,
666 [Define to 1 if <sys/user.h> defines struct user_regs_struct])
669 # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
670 # Likewise in a 32-bit build on a host where $CC -m64 works.
672 # `$utrace_biarch' will be `-m64' even on an uniarch i386 machine.
673 CC_BIARCH="$CC $utrace_biarch"
674 AC_SUBST([CC_BIARCH])
676 # In maintainer mode we really need flex and bison.
677 # Otherwise we really need a release dir with maintainer files generated.
678 if test "x$enable_maintainer_mode" = xyes; then
679 AC_CHECK_PROG(HAVE_FLEX, flex, yes, no)
680 if test "$HAVE_FLEX" = "no"; then
681 AC_MSG_ERROR([flex needed in maintainer mode])
683 AC_CHECK_PROG(HAVE_BISON, bison, yes, no)
684 if test "$HAVE_BISON" = "no"; then
685 AC_MSG_ERROR([bison needed in maintainer mode])
687 AC_CHECK_PROG(HAVE_GAWK, gawk, yes, no)
688 if test "$HAVE_GAWK" = "no"; then
689 AC_MSG_ERROR([gawk needed in maintainer mode])
692 if test ! -f ${srcdir}/libdw/known-dwarf.h; then
693 AC_MSG_ERROR([No libdw/known-dwarf.h. configure --enable-maintainer-mode])
697 # The testfiles are all compressed, we need bunzip2 when running make check
698 AC_CHECK_PROG(HAVE_BUNZIP2, bunzip2, yes, no)
699 if test "$HAVE_BUNZIP2" = "no"; then
700 AC_MSG_WARN([No bunzip2, needed to run make check])
703 # For tests that need to use zstd compression
704 AC_CHECK_PROG(HAVE_ZSTD, zstd, yes, no)
705 AM_CONDITIONAL([HAVE_ZSTD],[test "x$HAVE_ZSTD" = "xyes"])
707 # Look for libcurl for libdebuginfod minimum version as per rhel7.
708 AC_ARG_ENABLE([libdebuginfod],AC_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)]))
709 AS_IF([test "x$enable_libdebuginfod" != "xno"], [
710 if test "x$enable_libdebuginfod" != "xdummy"; then
711 AC_MSG_NOTICE([checking libdebuginfod dependencies, --disable-libdebuginfod or --enable-libdebuginfo=dummy to skip])
712 enable_libdebuginfod=yes # presume success
714 PKG_CHECK_MODULES([libcurl],[libcurl >= 7.29.0],[],[enable_libdebuginfod=no])
715 if test "x$enable_libdebuginfod" = "xno"; then
716 AC_MSG_ERROR([dependencies not found, use --disable-libdebuginfod to disable or --enable-libdebuginfod=dummy to build a (bootstrap) dummy library.])
719 AC_MSG_NOTICE([building (bootstrap) dummy libdebuginfo library])
723 AC_CHECK_LIB(pthread, pthread_setname_np, [
724 AC_DEFINE([HAVE_PTHREAD_SETNAME_NP],[1],[Enable pthread_setname_np])])
726 AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"],
727 [AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])])
728 AS_IF([test "x$enable_libdebuginfod" = "xdummy"],
729 [AC_DEFINE([DUMMY_LIBDEBUGINFOD], [1], [Build dummy libdebuginfod])])
730 AM_CONDITIONAL([LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" = "xdummy"])
731 AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xdummy"])
733 # Look for libmicrohttpd, libarchive, sqlite for debuginfo server
734 # minimum versions as per rhel7.
735 AC_ARG_ENABLE([debuginfod],AC_HELP_STRING([--enable-debuginfod], [Build debuginfod server]))
737 AS_IF([test "x$enable_debuginfod" != "xno"], [
738 AC_MSG_NOTICE([checking debuginfod C++11 support, --disable-debuginfod to skip])
739 AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
740 AC_MSG_NOTICE([checking debuginfod dependencies, --disable-debuginfod to skip])
741 if test "x$enable_libdebuginfod" = "xno"; then
742 AC_MSG_ERROR([need libdebuginfod (or dummy), use --disable-debuginfod to disable.])
744 enable_debuginfod=yes # presume success
746 PKG_CHECK_MODULES([libmicrohttpd],[libmicrohttpd >= 0.9.33],[],[enable_debuginfod=no])
747 PKG_CHECK_MODULES([sqlite3],[sqlite3 >= 3.7.17],[],[enable_debuginfod=no])
748 PKG_CHECK_MODULES([libarchive],[libarchive >= 3.1.2],[],[enable_debuginfod=no])
749 if test "x$enable_debuginfod" = "xno"; then
750 AC_MSG_ERROR([dependencies not found, use --disable-debuginfod to disable.])
754 AS_IF([test "x$enable_debuginfod" != "xno"],AC_DEFINE([ENABLE_DEBUGINFOD],[1],[Build debuginfod]))
755 AM_CONDITIONAL([DEBUGINFOD],[test "x$enable_debuginfod" = "xyes"])
757 dnl for /etc/profile.d/elfutils.{csh,sh}
758 default_debuginfod_urls=""
759 AC_ARG_ENABLE(debuginfod-urls,
760 [AS_HELP_STRING([--enable-debuginfod-urls@<:@=URLS@:>@],[add URLS to profile.d DEBUGINFOD_URLS])],
761 [if test "x${enableval}" = "xyes";
762 then default_debuginfod_urls="https://debuginfod.elfutils.org/";
763 elif test "x${enableval}" != "xno"; then
764 default_debuginfod_urls="${enableval}";
766 [default_debuginfod_urls=""])
767 AC_SUBST(DEBUGINFOD_URLS, $default_debuginfod_urls)
768 AC_CONFIG_FILES([config/profile.sh config/profile.csh])
773 =====================================================================
774 elfutils: ${PACKAGE_VERSION} (eu_version: ${eu_version})
775 =====================================================================
778 Program prefix ("eu-" recommended) : ${program_prefix}
779 Source code location : ${srcdir}
780 Maintainer mode : ${enable_maintainer_mode}
781 build arch : ${ac_cv_build}
783 RECOMMENDED FEATURES (should all be yes)
784 gzip support : ${with_zlib}
785 bzip2 support : ${with_bzlib}
786 lzma/xz support : ${with_lzma}
787 zstd support : ${with_zstd}
788 libstdc++ demangle support : ${enable_demangler}
789 File textrel check : ${enable_textrelcheck}
790 Symbol versioning : ${enable_symbol_versioning}
792 NOT RECOMMENDED FEATURES (should all be no)
793 Experimental thread safety : ${use_locks}
794 install elf.h : ${install_elfh}
797 Deterministic archives by default : ${default_ar_deterministic}
798 Native language support : ${USE_NLS}
799 Extra Valgrind annotations : ${use_vg_annotations}
800 libdebuginfod client support : ${enable_libdebuginfod}
801 Debuginfod server support : ${enable_debuginfod}
802 Default DEBUGINFOD_URLS : ${default_debuginfod_urls}
804 EXTRA TEST FEATURES (used with make check)
805 have bunzip2 installed (required) : ${HAVE_BUNZIP2}
806 have zstd installed : ${HAVE_ZSTD}
807 debug branch prediction : ${use_debugpred}
808 gprof support : ${use_gprof}
809 gcov support : ${use_gcov}
810 run all tests under valgrind : ${use_valgrind}
811 gcc undefined behaviour sanitizer : ${use_undefined}
812 use rpath in tests : ${tests_use_rpath}
813 test biarch : ${utrace_cv_cc_biarch}
816 if test "$install_elfh" = yes; then
817 if test "${prefix}" = "/usr/local" -o "${prefix}" = "/usr"; then
818 AC_MSG_WARN([installing elf.h in ${includedir} might conflict with glibc/system elf.h])