blob: b4e012dee2c94d62356205603f551ef3c7f838b8 [file] [log] [blame]
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00001dnl Process this file with autoconf to produce a configure script.
2dnl Configure input file for elfutils. -*-autoconf-*-
3dnl
Mark Wielaardafffdff2018-03-18 00:24:08 +01004dnl Copyright (C) 1996-2018 Red Hat, Inc.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00005dnl
Mark Wielaardde2ed972012-06-05 17:15:16 +02006dnl This file is part of elfutils.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00007dnl
Mark Wielaardde2ed972012-06-05 17:15:16 +02008dnl This file is free software; you can redistribute it and/or modify
9dnl it under the terms of the GNU General Public License as published by
10dnl the Free Software Foundation; either version 3 of the License, or
11dnl (at your option) any later version.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000012dnl
Mark Wielaardde2ed972012-06-05 17:15:16 +020013dnl elfutils is distributed in the hope that it will be useful, but
14dnl WITHOUT ANY WARRANTY; without even the implied warranty of
15dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16dnl GNU General Public License for more details.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000017dnl
Mark Wielaardde2ed972012-06-05 17:15:16 +020018dnl You should have received a copy of the GNU General Public License
19dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
Mark Wielaard89f5c7b2019-02-14 13:29:39 +010020AC_INIT([elfutils],[0.176],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000021
Mark Wielaard34b037b2017-01-12 11:43:30 +010022dnl Workaround for older autoconf < 2.64
23m4_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/"])])
27
Mark Wielaard9ba24582016-03-02 15:04:43 +010028# We want eu- as default program prefix if none was given by the user.
29# But if the user explicitly provided --program-prefix="" then pretend
30# it wasn't set at all (NONE). We want to test this really early before
31# configure has a chance to use the value.
32
33if test "x$program_prefix" = "xNONE"; then
34 AC_MSG_NOTICE([No --program-prefix given, using "eu-"])
35 program_prefix="eu-"
36elif test "x$program_prefix" = "x"; then
37 AC_MSG_NOTICE([Using no program-prefix])
38 program_prefix=NONE
39fi
40
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000041AC_CONFIG_AUX_DIR([config])
42AC_CONFIG_FILES([config/Makefile])
43
Mark Wielaardafffdff2018-03-18 00:24:08 +010044AC_COPYRIGHT([Copyright (C) 1996-2018 The elfutils developers.])
Ulrich Drepperdb12f162009-09-21 08:04:38 -070045AC_PREREQ(2.63) dnl Minimum Autoconf version required.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000046
Roland McGrath9aa8ef72007-05-18 08:59:43 +000047dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
Mark Wielaard86be7922013-04-26 23:44:25 +020048AM_INIT_AUTOMAKE([gnits 1.11 -Wno-portability dist-bzip2 no-dist-gzip parallel-tests])
Roland McGrathc373d852006-10-10 00:25:21 +000049AM_MAINTAINER_MODE
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000050
Mark Wielaardc04f4912015-10-07 13:37:56 +020051AM_SILENT_RULES([yes])
52
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000053AC_CONFIG_SRCDIR([libelf/libelf.h])
54AC_CONFIG_FILES([Makefile])
55AC_CONFIG_HEADERS([config.h])
56
57AC_CONFIG_MACRO_DIR([m4])
58AC_CONFIG_FILES([m4/Makefile])
59
60dnl The RPM spec file. We substitute a few values in the file.
61AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in])
62
63
64AC_CANONICAL_HOST
65
Roland McGrath3284b792012-01-20 12:51:46 -080066AC_ARG_ENABLE(deterministic-archives,
67[AS_HELP_STRING([--enable-deterministic-archives],
68 [ar and ranlib default to -D behavior])], [
69if test "${enableval}" = no; then
70 default_ar_deterministic=false
71else
72 default_ar_deterministic=true
73fi], [default_ar_deterministic=false])
74AC_DEFINE_UNQUOTED(DEFAULT_AR_DETERMINISTIC, $default_ar_deterministic,
75 [Should ar and ranlib use -D behavior by default?])
76
Ulrich Drepper7e678fa2009-01-10 18:02:05 -080077AC_ARG_ENABLE([thread-safety],
Mark Wielaard09c9bb92013-11-06 12:21:32 +010078AS_HELP_STRING([--enable-thread-safety],
79 [enable thread safety of libraries EXPERIMENTAL]),
80 use_locks=$enableval, use_locks=no)
Ulrich Drepper7e678fa2009-01-10 18:02:05 -080081AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes)
82AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)])
Mark Wielaard09c9bb92013-11-06 12:21:32 +010083AS_IF([test "$use_locks" = yes],
84 [AC_MSG_WARN([thread-safety is EXPERIMENTAL tests might fail.])])
Ulrich Drepperd56e2322008-08-16 03:09:13 +000085
Ulrich Drepper7e678fa2009-01-10 18:02:05 -080086AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000087
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000088AC_PROG_CC
89AC_PROG_RANLIB
90AC_PROG_YACC
91AM_PROG_LEX
Michael Forneya45c8042013-11-01 00:51:04 -070092# Only available since automake 1.12
93m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
94AC_CHECK_TOOL([READELF], [readelf])
95AC_CHECK_TOOL([NM], [nm])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +000096
Mark Wielaardaba6d762015-04-14 10:18:37 +020097# We use -std=gnu99 but have explicit checks for some language constructs
98# and GNU extensions since some compilers claim GNU99 support, but don't
99# really support all language extensions. In particular we need
100# Mixed Declarations and Code
101# https://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html
102# Nested Functions
103# https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
104# Arrays of Variable Length
105# https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
106AC_CACHE_CHECK([for gcc with GNU99 support], ac_cv_c99, [dnl
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000107old_CFLAGS="$CFLAGS"
108CFLAGS="$CFLAGS -std=gnu99"
Roland McGrathf64e25f2011-02-08 19:36:50 -0800109AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
Mark Wielaardaba6d762015-04-14 10:18:37 +0200110int foo (int a)
111{
112 for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; return s;
113}
114
115double bar (double a, double b)
116{
117 double square (double z) { return z * z; }
118 return square (a) + square (b);
119}
120
121void baz (int n)
122{
123 struct S { int x[[n]]; };
124}])],
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000125 ac_cv_c99=yes, ac_cv_c99=no)
126CFLAGS="$old_CFLAGS"])
127AS_IF([test "x$ac_cv_c99" != xyes],
Mark Wielaardaba6d762015-04-14 10:18:37 +0200128 AC_MSG_ERROR([gcc with GNU99 support required]))
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000129
Ulf Hermann11274702017-08-18 13:06:36 +0200130AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))],
131 ac_cv_visibility, [dnl
132save_CFLAGS="$CFLAGS"
133CFLAGS="$save_CFLAGS -Werror"
134AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
135int __attribute__((visibility("hidden")))
136foo (int a)
137{
138 return a;
139}])], ac_cv_visibility=yes, ac_cv_visibility=no)
140CFLAGS="$save_CFLAGS"])
141if test "$ac_cv_visibility" = "yes"; then
142 AC_DEFINE([HAVE_VISIBILITY], [1],
143 [Defined if __attribute__((visibility())) is supported])
144fi
145
Ulf Hermann17d71942017-08-18 14:05:10 +0200146AC_CACHE_CHECK([whether gcc supports __attribute__((gcc_struct))],
147 ac_cv_gcc_struct, [dnl
148save_CFLAGS="$CFLAGS"
149CFLAGS="$save_CFLAGS -Werror"
150AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
151struct test { int x; } __attribute__((gcc_struct));
152])], ac_cv_gcc_struct=yes, ac_cv_gcc_struct=no)
153CFLAGS="$save_CFLAGS"])
154if test "$ac_cv_gcc_struct" = "yes"; then
155 AC_DEFINE([HAVE_GCC_STRUCT], [1],
156 [Defined if __attribute__((gcc_struct)) is supported])
157fi
158
Ulf Hermann07737582017-08-18 12:41:11 +0200159AC_CACHE_CHECK([whether gcc supports -fPIC], ac_cv_fpic, [dnl
160save_CFLAGS="$CFLAGS"
161CFLAGS="$save_CFLAGS -fPIC -Werror"
162AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpic=yes, ac_cv_fpic=no)
163CFLAGS="$save_CFLAGS"
164])
165if test "$ac_cv_fpic" = "yes"; then
166 fpic_CFLAGS="-fPIC"
167else
168 fpic_CFLAGS=""
169fi
170AC_SUBST([fpic_CFLAGS])
171
172AC_CACHE_CHECK([whether gcc supports -fPIE], ac_cv_fpie, [dnl
173save_CFLAGS="$CFLAGS"
174CFLAGS="$save_CFLAGS -fPIE -Werror"
175AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpie=yes, ac_cv_fpie=no)
176CFLAGS="$save_CFLAGS"
177])
178if test "$ac_cv_fpie" = "yes"; then
179 fpie_CFLAGS="-fPIE"
180else
181 fpie_CFLAGS=""
182fi
183AC_SUBST([fpie_CFLAGS])
184
185dso_LDFLAGS="-shared"
186
187ZDEFS_LDFLAGS="-Wl,-z,defs"
188AC_CACHE_CHECK([whether gcc supports $ZDEFS_LDFLAGS], ac_cv_zdefs, [dnl
189save_LDFLAGS="$LDFLAGS"
190LDFLAGS="$ZDEFS_LDFLAGS $save_LDFLAGS"
191AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zdefs=yes, ac_cv_zdefs=no)
192LDFLAGS="$save_LDFLAGS"
193])
194if test "$ac_cv_zdefs" = "yes"; then
195 dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
196fi
197
198ZRELRO_LDFLAGS="-Wl,-z,relro"
199AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl
200save_LDFLAGS="$LDFLAGS"
201LDFLAGS="$ZRELRO_LDFLAGS $save_LDFLAGS"
202AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zrelro=yes, ac_cv_zrelro=no)
203LDFLAGS="$save_LDFLAGS"
204])
205if test "$ac_cv_zrelro" = "yes"; then
206 dso_LDFLAGS="$dso_LDFLAGS $ZRELRO_LDFLAGS"
207fi
208
209AC_SUBST([dso_LDFLAGS])
210
Roland McGrath81817392009-01-23 03:23:02 -0800211AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
Roland McGrathe72bf152009-01-23 14:27:39 -0800212# Use the same flags that we use for our DSOs, so the test is representative.
213# Some old compiler/linker/libc combinations fail some ways and not others.
214save_CFLAGS="$CFLAGS"
215save_LDFLAGS="$LDFLAGS"
Ulf Hermann07737582017-08-18 12:41:11 +0200216CFLAGS="$fpic_CFLAGS $CFLAGS"
217LDFLAGS="$dso_LDFLAGS $LDFLAGS"
Roland McGrath81817392009-01-23 03:23:02 -0800218AC_LINK_IFELSE([dnl
Mark Wielaard0a35e3a2015-03-13 23:51:40 +0100219AC_LANG_PROGRAM([[#include <stdlib.h>
220#undef __thread
Roland McGrathe72bf152009-01-23 14:27:39 -0800221static __thread int a; int foo (int b) { return a + b; }]],
Roland McGrath81817392009-01-23 03:23:02 -0800222 [[exit (foo (0));]])],
Roland McGrathe72bf152009-01-23 14:27:39 -0800223 ac_cv_tls=yes, ac_cv_tls=no)
224CFLAGS="$save_CFLAGS"
225LDFLAGS="$save_LDFLAGS"])
Ulrich Drepper7e678fa2009-01-10 18:02:05 -0800226AS_IF([test "x$ac_cv_tls" != xyes],
Roland McGrath81817392009-01-23 03:23:02 -0800227 AC_MSG_ERROR([__thread support required]))
Ulrich Drepper7e678fa2009-01-10 18:02:05 -0800228
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000229dnl This test must come as early as possible after the compiler configuration
230dnl tests, because the choice of the file model can (in principle) affect
231dnl whether functions and headers are available, whether they work, etc.
232AC_SYS_LARGEFILE
233
Mark Wielaardee225022016-11-23 20:51:35 +0100234dnl Older glibc had a broken fts that didn't work with Large File Systems.
235dnl We want the version that can handler LFS, but include workaround if we
236dnl get a bad one. Add define to CFLAGS (not AC_DEFINE it) since we need to
237dnl check it before including config.h (which might define _FILE_OFFSET_BITS).
238AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts,
239 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <fts.h>]])],
240 ac_cv_bad_fts=no, ac_cv_bad_fts=yes)])
241AS_IF([test "x$ac_cv_bad_fts" = "xyes"], [CFLAGS="$CFLAGS -DBAD_FTS=1"])
242
Mark Wielaard01b994e2017-02-09 21:09:54 +0100243# See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already
244# (differently) defined or if it generates warnings/errors because we
245# don't use the right optimisation level (string.h will warn about that).
246AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 to CFLAGS])
247case "$CFLAGS" in
248 *-D_FORTIFY_SOURCE=2*)
249 AC_MSG_RESULT([no, already there])
250 ;;
251 *)
252 save_CFLAGS="$CFLAGS"
253 CFLAGS="-D_FORTIFY_SOURCE=2 -Werror $CFLAGS"
254 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
255 #include <string.h>
256 int main() { return 0; }
257 ]])], [ AC_MSG_RESULT([yes])
258 CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS" ],
259 [ AC_MSG_RESULT([no])
260 CFLAGS="$save_CFLAGS"])
261 ;;
262esac
263
Ulrich Drepper3cbdd382008-01-02 17:44:39 +0000264dnl enable debugging of branch prediction.
Ulrich Drepper28a0c612008-01-21 18:57:48 +0000265AC_ARG_ENABLE([debugpred],
Ulrich Drepperdb12f162009-09-21 08:04:38 -0700266AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700267[use_debugpred=$enableval], [use_debugpred=no])
268case $use_debugpred in
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200269 yes) use_debugpred_val=1 ;;
270 *) use_debugpred_val=0 ;;
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700271esac
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200272AC_SUBST([DEBUGPRED], $use_debugpred_val)
Ulrich Drepper3cbdd382008-01-02 17:44:39 +0000273
274dnl Enable gprof suport.
Ulrich Drepper47be7952005-08-07 04:41:39 +0000275AC_ARG_ENABLE([gprof],
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700276AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
Ulrich Drepper47be7952005-08-07 04:41:39 +0000277if test "$use_gprof" = yes; then
278 CFLAGS="$CFLAGS -pg"
279 LDFLAGS="$LDFLAGS -pg"
280fi
281AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
Ulrich Drepperfbe998a2005-08-29 16:27:10 +0000282
283# Enable gcov suport.
284AC_ARG_ENABLE([gcov],
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700285AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
Ulrich Drepperfbe998a2005-08-29 16:27:10 +0000286if test "$use_gcov" = yes; then
287 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
288 LDFLAGS="$LDFLAGS -fprofile-arcs"
289fi
Ulrich Drepper39cec7a2005-08-30 01:22:01 +0000290AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
Ulrich Drepperfbe998a2005-08-29 16:27:10 +0000291
Mark Wielaard2b250b72015-05-21 23:36:51 +0200292AC_ARG_ENABLE([sanitize-undefined],
293 AS_HELP_STRING([--enable-sanitize-undefined],
294 [Use gcc undefined behaviour sanitizer]),
295 [use_undefined=$enableval], [use_undefined=no])
296if test "$use_undefined" = yes; then
297 old_CFLAGS="$CFLAGS"
298 old_CXXFLAGS="$CXXFLAGS"
299 # We explicitly use unaligned access when possible (see ALLOW_UNALIGNED)
300 # We want to fail immediately on first error, don't try to recover.
Mark Wielaard170f1bb2015-05-31 22:37:19 +0200301 CFLAGS="$CFLAGS -fsanitize=undefined -fno-sanitize-recover"
302 CXXFLAGS="$CXXFLAGS -fsanitize=undefined -fno-sanitize-recover"
303 AC_LINK_IFELSE([AC_LANG_SOURCE([int main (int argc, char **argv) { return 0; }])], use_undefined=yes, use_undefined=no)
Mark Wielaard2b250b72015-05-21 23:36:51 +0200304 AS_IF([test "x$use_undefined" != xyes],
305 AC_MSG_WARN([gcc undefined behaviour sanitizer not available])
306 CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS")
307fi
Mark Wielaard170f1bb2015-05-31 22:37:19 +0200308case $use_undefined in
309 yes) check_undefined_val=1 ;;
310 *) check_undefined_val=0 ;;
311esac
312AC_DEFINE_UNQUOTED(CHECK_UNDEFINED, $check_undefined_val,
313 [Building with -fsanitize=undefined or not])
Mark Wielaard2b250b72015-05-21 23:36:51 +0200314
Mark Wielaarde3e3ee22012-10-01 16:14:12 +0200315AC_ARG_ENABLE([valgrind],
316AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
317[use_valgrind=$enableval], [use_valgrind=no])
318if test "$use_valgrind" = yes; then
319 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
320 if test "$HAVE_VALGRIND" = "no"; then
321 AC_MSG_ERROR([valgrind not found])
322 fi
323fi
324AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
325
Mark Wielaardb63007e2019-01-18 14:18:22 +0100326AC_ARG_ENABLE([install-elfh],
327AS_HELP_STRING([--enable-install-elfh],[install elf.h in include dir]),
328 [install_elfh=$enableval], [install_elfh=no])
329AM_CONDITIONAL(INSTALL_ELFH, test "$install_elfh" = yes)
330
Ulrich Drepper47be7952005-08-07 04:41:39 +0000331AM_CONDITIONAL(BUILD_STATIC, [dnl
Mark Wielaard32324792014-04-13 17:39:57 +0200332test "$use_gprof" = yes -o "$use_gcov" = yes])
Ulrich Drepper47be7952005-08-07 04:41:39 +0000333
Roland McGrath1b8b4462005-11-16 01:33:38 +0000334AC_ARG_ENABLE([tests-rpath],
Ulrich Drepperdb12f162009-09-21 08:04:38 -0700335AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700336 [tests_use_rpath=$enableval], [tests_use_rpath=no])
Roland McGrath1b8b4462005-11-16 01:33:38 +0000337AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
338
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000339LIBEBL_SUBDIR="$PACKAGE"
340AC_ARG_ENABLE([libebl-subdir],
341AS_HELP_STRING([--enable-libebl-subdir=DIR],
342[install libebl_CPU modules in $(libdir)/DIR]), [dnl
343LIBEBL_SUBDIR="$enable_libebl_subdir"])
344AC_SUBST([LIBEBL_SUBDIR])
345AC_DEFINE_UNQUOTED(LIBEBL_SUBDIR, "$LIBEBL_SUBDIR")
346AH_TEMPLATE([LIBEBL_SUBDIR], [$libdir subdirectory containing libebl modules.])
347
Mark Wielaard528cb452015-10-16 23:07:12 +0200348dnl zlib is mandatory.
Roland McGrathbca43152009-01-05 23:59:32 -0800349save_LIBS="$LIBS"
350LIBS=
Roland McGrath24169642009-08-26 02:26:34 -0700351eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
Mike Frysinger2d703bf2016-01-14 13:46:18 -0500352AS_IF([test "x$with_zlib" = xno], [AC_MSG_ERROR([zlib not found but is required])])
Mark Wielaard528cb452015-10-16 23:07:12 +0200353LIBS="$save_LIBS"
354
355dnl Test for bzlib and xz/lzma, gives BZLIB/LZMALIB .am
356dnl conditional and config.h USE_BZLIB/USE_LZMALIB #define.
357save_LIBS="$LIBS"
358LIBS=
Roland McGrath24169642009-08-26 02:26:34 -0700359eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100360# We need this since bzip2 doesn't have a pkgconfig file.
361BZ2_LIB="$LIBS"
362AC_SUBST([BZ2_LIB])
Roland McGrath24169642009-08-26 02:26:34 -0700363eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100364AS_IF([test "x$with_lzma" = xyes], [LIBLZMA="liblzma"], [LIBLZMA=""])
365AC_SUBST([LIBLZMA])
Roland McGrathbca43152009-01-05 23:59:32 -0800366zip_LIBS="$LIBS"
367LIBS="$save_LIBS"
368AC_SUBST([zip_LIBS])
369
Akihiko Odakia24d52a2016-10-13 09:16:48 +0900370AC_CHECK_DECLS([memrchr, rawmemchr],[],[],
371 [#define _GNU_SOURCE
372 #include <string.h>])
373AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>])
Ulf Hermannb3248e62017-02-16 10:10:30 +0100374AC_CHECK_DECLS([mempcpy],[],[],
375 [#define _GNU_SOURCE
376 #include <string.h>])
Akihiko Odakia24d52a2016-10-13 09:16:48 +0900377
Mark Wielaardafffdff2018-03-18 00:24:08 +0100378AC_CHECK_FUNCS([process_vm_readv])
379
Ulrich Drepperb4a16cf2011-10-02 08:33:19 -0400380AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
381AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
Max Filippov1ce4a452015-05-03 21:14:09 +0300382AM_CONDITIONAL(DEMANGLE, test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes")
383AS_IF([test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes"],
Mark Wielaarde6e80da2015-05-01 10:31:36 +0200384 [enable_demangler=yes],[enable_demangler=no])
Ulrich Drepperb4a16cf2011-10-02 08:33:19 -0400385
Mark Wielaard805ec832014-11-27 23:53:30 +0100386AC_ARG_ENABLE([textrelcheck],
387AS_HELP_STRING([--disable-textrelcheck],
388 [Disable textrelcheck being a fatal error]))
389AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"])
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200390AS_IF([test "x$enable_textrelcheck" != "xno"],
391 [enable_textrelcheck=yes],[enable_textrelcheck=no])
Mark Wielaard805ec832014-11-27 23:53:30 +0100392
Max Filippovbafacac2015-04-23 20:46:59 +0200393AC_ARG_ENABLE([symbol-versioning],
394AS_HELP_STRING([--disable-symbol-versioning],
395 [Disable symbol versioning in shared objects]))
Ulf Hermann4a3330a2017-08-18 15:50:42 +0200396
397AC_CACHE_CHECK([whether symbol versioning is supported], ac_cv_symbol_versioning, [dnl
398AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
399#define NEW_VERSION(name, version) \
400 asm (".symver " #name "," #name "@@@" #version);
401int foo(int x) { return x + 1; }
402NEW_VERSION (foo, ELFUTILS_12.12)
403])], ac_cv_symbol_versioning=yes, ac_cv_symbol_versioning=no)])
404if test "$ac_cv_symbol_versioning" = "no"; then
405 if test "x$enable_symbol_versioning" != "xno"; then
406 AC_MSG_ERROR([Symbol versioning is not supported.
407 Use --disable-symbol-versioning to build without.])
408 fi
409fi
410
Max Filippovbafacac2015-04-23 20:46:59 +0200411AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"])
412AS_IF([test "x$enable_symbol_versioning" = "xno"],
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200413 [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.])
414 enable_symbol_versioning=no],[enable_symbol_versioning=yes])
Max Filippovbafacac2015-04-23 20:46:59 +0200415
Mark Wielaard4b7953d2015-06-09 00:28:13 +0200416AC_CACHE_CHECK([whether gcc accepts -Wstack-usage], ac_cv_stack_usage, [dnl
417old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700418CFLAGS="$CFLAGS -Wstack-usage=262144 -Werror"
Mark Wielaard4b7953d2015-06-09 00:28:13 +0200419AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
420 ac_cv_stack_usage=yes, ac_cv_stack_usage=no)
421CFLAGS="$old_CFLAGS"])
422AM_CONDITIONAL(ADD_STACK_USAGE_WARNING, [test "x$ac_cv_stack_usage" != "xno"])
423
Mark Wielaard8bc14232016-02-09 16:10:22 +0100424# -Wlogical-op was too fragile in the past, make sure we get a sane one.
425AC_CACHE_CHECK([whether gcc has a sane -Wlogical-op], ac_cv_logical_op, [dnl
426old_CFLAGS="$CFLAGS"
427CFLAGS="$CFLAGS -Wlogical-op -Werror"
428AC_COMPILE_IFELSE([AC_LANG_SOURCE(
429 [#define FLAG 1
430 int f (int r, int f) { return (r && (FLAG || (FLAG & f))); }])],
431 ac_cv_logical_op=yes, ac_cv_logical_op=no)
432CFLAGS="$old_CFLAGS"])
433AM_CONDITIONAL(SANE_LOGICAL_OP_WARNING,
434 [test "x$ac_cv_logical_op" != "xno"])
435
436# -Wduplicated-cond was added by GCC6
437AC_CACHE_CHECK([whether gcc accepts -Wduplicated-cond], ac_cv_duplicated_cond, [dnl
438old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700439CFLAGS="$CFLAGS -Wduplicated-cond -Werror"
Mark Wielaard8bc14232016-02-09 16:10:22 +0100440AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
441 ac_cv_duplicated_cond=yes, ac_cv_duplicated_cond=no)
442CFLAGS="$old_CFLAGS"])
443AM_CONDITIONAL(HAVE_DUPLICATED_COND_WARNING,
444 [test "x$ac_cv_duplicated_cond" != "xno"])
445
Mark Wielaard6993d402016-02-13 19:10:00 +0100446# -Wnull-dereference was added by GCC6
447AC_CACHE_CHECK([whether gcc accepts -Wnull-dereference], ac_cv_null_dereference, [dnl
448old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700449CFLAGS="$CFLAGS -Wnull-dereference -Werror"
Mark Wielaard6993d402016-02-13 19:10:00 +0100450AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
451 ac_cv_null_dereference=yes, ac_cv_null_dereference=no)
452CFLAGS="$old_CFLAGS"])
453AM_CONDITIONAL(HAVE_NULL_DEREFERENCE_WARNING,
454 [test "x$ac_cv_null_dereference" != "xno"])
455
Mark Wielaarda3cc8182016-11-02 13:29:26 +0100456# -Wimplicit-fallthrough was added by GCC7
457AC_CACHE_CHECK([whether gcc accepts -Wimplicit-fallthrough], ac_cv_implicit_fallthrough, [dnl
458old_CFLAGS="$CFLAGS"
459CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror"
460AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
461 ac_cv_implicit_fallthrough=yes, ac_cv_implicit_fallthrough=no)
462CFLAGS="$old_CFLAGS"])
463AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING,
464 [test "x$ac_cv_implicit_fallthrough" != "xno"])
465
Joshua Watt555e15e2018-02-09 10:27:18 -0600466# Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported
467if test "$ac_cv_implicit_fallthrough" = "yes"; then
468 AC_DEFINE([HAVE_FALLTHROUGH], [1],
469 [Defined if __attribute__((fallthrough)) is supported])
470fi
471
Anthony G. Basile1ab3c2b2015-05-04 02:25:39 +0300472dnl Check if we have argp available from our libc
473AC_LINK_IFELSE(
474 [AC_LANG_PROGRAM(
475 [#include <argp.h>],
Filipe Brandenburgerafeccd42016-05-02 12:18:47 -0700476 [int argc=1; char *argv[]={"test"}; argp_parse(0,argc,&argv,0,0,0); return 0;]
Anthony G. Basile1ab3c2b2015-05-04 02:25:39 +0300477 )],
478 [libc_has_argp="true"],
479 [libc_has_argp="false"]
480)
481
482dnl If our libc doesn't provide argp, then test for libargp
483if test "$libc_has_argp" = "false" ; then
484 AC_MSG_WARN("libc does not have argp")
485 AC_CHECK_LIB([argp], [argp_parse], [have_argp="true"], [have_argp="false"])
486
487 if test "$have_argp" = "false"; then
488 AC_MSG_ERROR("no libargp found")
489 else
490 argp_LDADD="-largp"
491 fi
492else
493 argp_LDADD=""
494fi
495AC_SUBST([argp_LDADD])
496
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000497dnl The directories with content.
498
499dnl Documentation.
500dnl Commented out for now.
501dnl AC_CONFIG_FILES([doc/Makefile])
502
503dnl Support library.
504AC_CONFIG_FILES([lib/Makefile])
505
506dnl ELF library.
Ulrich Drepper2c9ee4f2007-06-06 02:49:30 +0000507AC_CONFIG_FILES([libelf/Makefile])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000508
509dnl Higher-level ELF support library.
510AC_CONFIG_FILES([libebl/Makefile])
511
Mark Wielaard93802972014-04-11 23:52:47 +0200512dnl DWARF-ELF Lower-level Functions support library.
513AC_CONFIG_FILES([libdwelf/Makefile])
514
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000515dnl DWARF library.
516AC_CONFIG_FILES([libdw/Makefile])
517
518dnl Higher-level DWARF support library.
519AC_CONFIG_FILES([libdwfl/Makefile])
520
521dnl CPU handling library.
522AC_CONFIG_FILES([libcpu/Makefile])
523
524dnl Assembler library.
Roland McGrathd7f8d0c2005-11-17 02:32:03 +0000525AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000526AC_CONFIG_FILES([libasm/Makefile])
527
Roland McGrathe47ab762005-11-17 03:16:00 +0000528dnl CPU-specific backend libraries.
529AC_CONFIG_FILES([backends/Makefile])
530
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000531dnl Tools.
532AC_CONFIG_FILES([src/Makefile po/Makefile.in])
533
534dnl Test suite.
Roland McGrathd7f8d0c2005-11-17 02:32:03 +0000535AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000536AC_CONFIG_FILES([tests/Makefile])
537
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100538dnl pkgconfig files
539AC_CONFIG_FILES([config/libelf.pc config/libdw.pc])
540
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000541# Get the definitions necessary to create the Makefiles in the po
542# subdirectories. This is a small subset of the gettext rules.
543AC_SUBST(USE_NLS, yes)
544AM_PO_SUBDIRS
545
Roland McGrathb4d6f0f2008-08-25 22:55:17 +0000546dnl Appended to the config.h file.
547dnl We hide all kinds of configuration magic in lib/eu-config.h.
548AH_BOTTOM([#include <eu-config.h>])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000549
Roland McGrathfbc72452008-12-16 17:03:03 -0800550dnl Version compatibility header.
551AC_CONFIG_FILES([version.h:config/version.h.in])
552AC_SUBST([eu_version])
Roland McGrathee9d60d2009-04-17 13:18:35 -0700553
554# 1.234<whatever> -> 1234<whatever>
555case "$PACKAGE_VERSION" in
Roland McGrathe9bf1d32011-10-08 15:14:30 -0700556[[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
Roland McGrathee9d60d2009-04-17 13:18:35 -0700557*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
558esac
559case "$eu_version" in
560*.*)
561 # 1234.567 -> "1234", "567"
562 eu_extra_version="${eu_version#*.}"
563 eu_version="${eu_version%%.*}"
564 case "$eu_extra_version" in
565 [[0-9]][[0-9]][[0-9]]) ;;
566 [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
567 [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
568 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
569 esac
570 ;;
571*)
572 eu_extra_version=000
573 ;;
574esac
575
576case "$eu_version" in
577 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
578[[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
579[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
Ulrich Drepper2c712522010-06-28 12:10:53 -0700580[[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
Roland McGrathee9d60d2009-04-17 13:18:35 -0700581*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
Roland McGrathfbc72452008-12-16 17:03:03 -0800582esac
583
Roland McGrath105e3982009-04-19 16:07:45 -0700584# Round up to the next release API (x.y) version.
Roland McGrathe9bf1d32011-10-08 15:14:30 -0700585eu_version=$(( (eu_version + 999) / 1000 ))
Roland McGrath105e3982009-04-19 16:07:45 -0700586
Mark Wielaardf17a9bb2015-05-31 23:03:30 +0200587dnl Unique ID for this build.
588MODVERSION="Build for ${LIBEBL_SUBDIR} ${eu_version} ${ac_cv_build}"
589AC_SUBST([MODVERSION])
590AC_DEFINE_UNQUOTED(MODVERSION, "$MODVERSION")
591AH_TEMPLATE([MODVERSION], [Identifier for modules in the build.])
592
Jan Kratochvil0b867462013-05-30 14:37:38 +0200593AC_CHECK_SIZEOF(long)
594
Kyle McMartinc1e0fcb2014-06-09 21:06:26 +0200595# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
596# of the user_regs_struct from sys/user.h. They are structurally the same
597# but we get either one or the other.
598AC_CHECK_TYPE([struct user_regs_struct],
599 [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
600 [[#include <sys/ptrace.h>]
601 [#include <sys/time.h>]
602 [#include <sys/user.h>]])
603if test "$sys_user_has_user_regs" = "yes"; then
604 AC_DEFINE(HAVE_SYS_USER_REGS, 1,
605 [Define to 1 if <sys/user.h> defines struct user_regs_struct])
606fi
607
Jan Kratochvil0b867462013-05-30 14:37:38 +0200608# On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
609# Likewise in a 32-bit build on a host where $CC -m64 works.
610utrace_BIARCH
611# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine.
Jan Kratochvil8ae9bc92013-12-02 20:54:28 +0100612CC_BIARCH="$CC $utrace_biarch"
Jan Kratochvil0b867462013-05-30 14:37:38 +0200613AC_SUBST([CC_BIARCH])
614
Mark Wielaard4664fd52015-05-30 22:50:37 +0200615# In maintainer mode we really need flex and bison.
616# Otherwise we really need a release dir with maintainer files generated.
617if test "x$enable_maintainer_mode" = xyes; then
618 AC_CHECK_PROG(HAVE_FLEX, flex, yes, no)
619 if test "$HAVE_FLEX" = "no"; then
620 AC_MSG_ERROR([flex needed in maintainer mode])
621 fi
622 AC_CHECK_PROG(HAVE_BISON, bison, yes, no)
623 if test "$HAVE_BISON" = "no"; then
624 AC_MSG_ERROR([bison needed in maintainer mode])
625 fi
Ross Burtond6126842018-07-04 12:11:07 +0100626 AC_CHECK_PROG(HAVE_GAWK, gawk, yes, no)
627 if test "$HAVE_GAWK" = "no"; then
628 AC_MSG_ERROR([gawk needed in maintainer mode])
629 fi
Mark Wielaard4664fd52015-05-30 22:50:37 +0200630else
631 if test ! -f ${srcdir}/libdw/known-dwarf.h; then
632 AC_MSG_ERROR([No libdw/known-dwarf.h. configure --enable-maintainer-mode])
633 fi
634fi
635
636# The testfiles are all compressed, we need bunzip2 when running make check
637AC_CHECK_PROG(HAVE_BUNZIP2, bunzip2, yes, no)
638if test "$HAVE_BUNZIP2" = "no"; then
639 AC_MSG_WARN([No bunzip2, needed to run make check])
640fi
641
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000642AC_OUTPUT
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200643
644AC_MSG_NOTICE([
645=====================================================================
646 elfutils: ${PACKAGE_VERSION} (eu_version: ${eu_version})
647=====================================================================
648
649 Prefix : ${prefix}
650 Program prefix ("eu-" recommended) : ${program_prefix}
651 Source code location : ${srcdir}
652 Maintainer mode : ${enable_maintainer_mode}
653 libebl modules subdirectory : ${LIBEBL_SUBDIR}
654 build arch : ${ac_cv_build}
655
656 RECOMMENDED FEATURES (should all be yes)
657 gzip support : ${with_zlib}
658 bzip2 support : ${with_bzlib}
659 lzma/xz support : ${with_lzma}
Mark Wielaarde6e80da2015-05-01 10:31:36 +0200660 libstdc++ demangle support : ${enable_demangler}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200661 File textrel check : ${enable_textrelcheck}
662 Symbol versioning : ${enable_symbol_versioning}
663
664 NOT RECOMMENDED FEATURES (should all be no)
665 Experimental thread safety : ${use_locks}
Mark Wielaardb63007e2019-01-18 14:18:22 +0100666 install elf.h : ${install_elfh}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200667
668 OTHER FEATURES
669 Deterministic archives by default : ${default_ar_deterministic}
670 Native language support : ${USE_NLS}
671
672 EXTRA TEST FEATURES (used with make check)
Mark Wielaard4664fd52015-05-30 22:50:37 +0200673 have bunzip2 installed (required) : ${HAVE_BUNZIP2}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200674 debug branch prediction : ${use_debugpred}
675 gprof support : ${use_gprof}
676 gcov support : ${use_gcov}
677 run all tests under valgrind : ${use_valgrind}
Mark Wielaard2b250b72015-05-21 23:36:51 +0200678 gcc undefined behaviour sanitizer : ${use_undefined}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200679 use rpath in tests : ${tests_use_rpath}
680 test biarch : ${utrace_cv_cc_biarch}
681])
Mark Wielaardb63007e2019-01-18 14:18:22 +0100682
683if test "$install_elfh" = yes; then
684 if test "${prefix}" = "/usr/local" -o "${prefix}" = "/usr"; then
685 AC_MSG_WARN([installing elf.h in ${includedir} might conflict with glibc/system elf.h])
686 fi
687fi