blob: 9be34d12438701785e52917b849d487a3fd21640 [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 Wielaard5643e032019-08-13 23:53:56 +020020AC_INIT([elfutils],[0.177],[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
Jonathon Anderson77b66a72019-08-25 10:01:51 -0500229dnl Before 4.9 gcc doesn't ship stdatomic.h, but the nessesary atomics are
230dnl available by (at least) 4.7. So if the system doesn't have a stdatomic.h we
231dnl fall back on one copied from FreeBSD that handles the difference.
232AC_CACHE_CHECK([whether gcc provides stdatomic.h], ac_cv_has_stdatomic,
233 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdatomic.h>]])],
234 ac_cv_has_stdatomic=yes, ac_cv_has_stdatomic=no)])
235AM_CONDITIONAL(HAVE_STDATOMIC_H, test "x$ac_cv_has_stdatomic" = xyes)
236AS_IF([test "x$ac_cv_has_stdatomic" = xyes], [AC_DEFINE(HAVE_STDATOMIC_H)])
237
238AH_TEMPLATE([HAVE_STDATOMIC_H], [Define to 1 if `stdatomic.h` is provided by the
239 system, 0 otherwise.])
240
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000241dnl This test must come as early as possible after the compiler configuration
242dnl tests, because the choice of the file model can (in principle) affect
243dnl whether functions and headers are available, whether they work, etc.
244AC_SYS_LARGEFILE
245
Mark Wielaardee225022016-11-23 20:51:35 +0100246dnl Older glibc had a broken fts that didn't work with Large File Systems.
247dnl We want the version that can handler LFS, but include workaround if we
248dnl get a bad one. Add define to CFLAGS (not AC_DEFINE it) since we need to
249dnl check it before including config.h (which might define _FILE_OFFSET_BITS).
250AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts,
251 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <fts.h>]])],
252 ac_cv_bad_fts=no, ac_cv_bad_fts=yes)])
253AS_IF([test "x$ac_cv_bad_fts" = "xyes"], [CFLAGS="$CFLAGS -DBAD_FTS=1"])
254
Mark Wielaard01b994e2017-02-09 21:09:54 +0100255# See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already
256# (differently) defined or if it generates warnings/errors because we
257# don't use the right optimisation level (string.h will warn about that).
258AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 to CFLAGS])
259case "$CFLAGS" in
260 *-D_FORTIFY_SOURCE=2*)
261 AC_MSG_RESULT([no, already there])
262 ;;
263 *)
264 save_CFLAGS="$CFLAGS"
265 CFLAGS="-D_FORTIFY_SOURCE=2 -Werror $CFLAGS"
266 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
267 #include <string.h>
268 int main() { return 0; }
269 ]])], [ AC_MSG_RESULT([yes])
270 CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS" ],
271 [ AC_MSG_RESULT([no])
272 CFLAGS="$save_CFLAGS"])
273 ;;
274esac
275
Ulrich Drepper3cbdd382008-01-02 17:44:39 +0000276dnl enable debugging of branch prediction.
Ulrich Drepper28a0c612008-01-21 18:57:48 +0000277AC_ARG_ENABLE([debugpred],
Ulrich Drepperdb12f162009-09-21 08:04:38 -0700278AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700279[use_debugpred=$enableval], [use_debugpred=no])
280case $use_debugpred in
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200281 yes) use_debugpred_val=1 ;;
282 *) use_debugpred_val=0 ;;
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700283esac
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200284AC_SUBST([DEBUGPRED], $use_debugpred_val)
Ulrich Drepper3cbdd382008-01-02 17:44:39 +0000285
286dnl Enable gprof suport.
Ulrich Drepper47be7952005-08-07 04:41:39 +0000287AC_ARG_ENABLE([gprof],
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700288AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
Ulrich Drepper47be7952005-08-07 04:41:39 +0000289if test "$use_gprof" = yes; then
290 CFLAGS="$CFLAGS -pg"
291 LDFLAGS="$LDFLAGS -pg"
292fi
293AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
Ulrich Drepperfbe998a2005-08-29 16:27:10 +0000294
295# Enable gcov suport.
296AC_ARG_ENABLE([gcov],
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700297AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
Ulrich Drepperfbe998a2005-08-29 16:27:10 +0000298if test "$use_gcov" = yes; then
299 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
300 LDFLAGS="$LDFLAGS -fprofile-arcs"
301fi
Ulrich Drepper39cec7a2005-08-30 01:22:01 +0000302AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
Ulrich Drepperfbe998a2005-08-29 16:27:10 +0000303
Mark Wielaard2b250b72015-05-21 23:36:51 +0200304AC_ARG_ENABLE([sanitize-undefined],
305 AS_HELP_STRING([--enable-sanitize-undefined],
306 [Use gcc undefined behaviour sanitizer]),
307 [use_undefined=$enableval], [use_undefined=no])
308if test "$use_undefined" = yes; then
309 old_CFLAGS="$CFLAGS"
310 old_CXXFLAGS="$CXXFLAGS"
311 # We explicitly use unaligned access when possible (see ALLOW_UNALIGNED)
312 # We want to fail immediately on first error, don't try to recover.
Mark Wielaard170f1bb2015-05-31 22:37:19 +0200313 CFLAGS="$CFLAGS -fsanitize=undefined -fno-sanitize-recover"
314 CXXFLAGS="$CXXFLAGS -fsanitize=undefined -fno-sanitize-recover"
315 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 +0200316 AS_IF([test "x$use_undefined" != xyes],
317 AC_MSG_WARN([gcc undefined behaviour sanitizer not available])
318 CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS")
319fi
Mark Wielaard170f1bb2015-05-31 22:37:19 +0200320case $use_undefined in
321 yes) check_undefined_val=1 ;;
322 *) check_undefined_val=0 ;;
323esac
324AC_DEFINE_UNQUOTED(CHECK_UNDEFINED, $check_undefined_val,
325 [Building with -fsanitize=undefined or not])
Mark Wielaard2b250b72015-05-21 23:36:51 +0200326
Mark Wielaarde3e3ee22012-10-01 16:14:12 +0200327AC_ARG_ENABLE([valgrind],
328AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
329[use_valgrind=$enableval], [use_valgrind=no])
330if test "$use_valgrind" = yes; then
331 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
332 if test "$HAVE_VALGRIND" = "no"; then
333 AC_MSG_ERROR([valgrind not found])
334 fi
335fi
336AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
337
Mark Wielaardb63007e2019-01-18 14:18:22 +0100338AC_ARG_ENABLE([install-elfh],
339AS_HELP_STRING([--enable-install-elfh],[install elf.h in include dir]),
340 [install_elfh=$enableval], [install_elfh=no])
341AM_CONDITIONAL(INSTALL_ELFH, test "$install_elfh" = yes)
342
Ulrich Drepper47be7952005-08-07 04:41:39 +0000343AM_CONDITIONAL(BUILD_STATIC, [dnl
Mark Wielaard32324792014-04-13 17:39:57 +0200344test "$use_gprof" = yes -o "$use_gcov" = yes])
Ulrich Drepper47be7952005-08-07 04:41:39 +0000345
Roland McGrath1b8b4462005-11-16 01:33:38 +0000346AC_ARG_ENABLE([tests-rpath],
Ulrich Drepperdb12f162009-09-21 08:04:38 -0700347AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700348 [tests_use_rpath=$enableval], [tests_use_rpath=no])
Roland McGrath1b8b4462005-11-16 01:33:38 +0000349AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
350
Mark Wielaard528cb452015-10-16 23:07:12 +0200351dnl zlib is mandatory.
Roland McGrathbca43152009-01-05 23:59:32 -0800352save_LIBS="$LIBS"
353LIBS=
Roland McGrath24169642009-08-26 02:26:34 -0700354eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
Mike Frysinger2d703bf2016-01-14 13:46:18 -0500355AS_IF([test "x$with_zlib" = xno], [AC_MSG_ERROR([zlib not found but is required])])
Mark Wielaard528cb452015-10-16 23:07:12 +0200356LIBS="$save_LIBS"
357
358dnl Test for bzlib and xz/lzma, gives BZLIB/LZMALIB .am
359dnl conditional and config.h USE_BZLIB/USE_LZMALIB #define.
360save_LIBS="$LIBS"
361LIBS=
Roland McGrath24169642009-08-26 02:26:34 -0700362eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100363# We need this since bzip2 doesn't have a pkgconfig file.
364BZ2_LIB="$LIBS"
365AC_SUBST([BZ2_LIB])
Roland McGrath24169642009-08-26 02:26:34 -0700366eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100367AS_IF([test "x$with_lzma" = xyes], [LIBLZMA="liblzma"], [LIBLZMA=""])
368AC_SUBST([LIBLZMA])
Roland McGrathbca43152009-01-05 23:59:32 -0800369zip_LIBS="$LIBS"
370LIBS="$save_LIBS"
371AC_SUBST([zip_LIBS])
372
Akihiko Odakia24d52a2016-10-13 09:16:48 +0900373AC_CHECK_DECLS([memrchr, rawmemchr],[],[],
374 [#define _GNU_SOURCE
375 #include <string.h>])
376AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>])
Ulf Hermannb3248e62017-02-16 10:10:30 +0100377AC_CHECK_DECLS([mempcpy],[],[],
378 [#define _GNU_SOURCE
379 #include <string.h>])
Akihiko Odakia24d52a2016-10-13 09:16:48 +0900380
Mark Wielaardafffdff2018-03-18 00:24:08 +0100381AC_CHECK_FUNCS([process_vm_readv])
382
Ulrich Drepperb4a16cf2011-10-02 08:33:19 -0400383AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
384AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
Max Filippov1ce4a452015-05-03 21:14:09 +0300385AM_CONDITIONAL(DEMANGLE, test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes")
386AS_IF([test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes"],
Mark Wielaarde6e80da2015-05-01 10:31:36 +0200387 [enable_demangler=yes],[enable_demangler=no])
Ulrich Drepperb4a16cf2011-10-02 08:33:19 -0400388
Mark Wielaard805ec832014-11-27 23:53:30 +0100389AC_ARG_ENABLE([textrelcheck],
390AS_HELP_STRING([--disable-textrelcheck],
391 [Disable textrelcheck being a fatal error]))
392AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"])
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200393AS_IF([test "x$enable_textrelcheck" != "xno"],
394 [enable_textrelcheck=yes],[enable_textrelcheck=no])
Mark Wielaard805ec832014-11-27 23:53:30 +0100395
Max Filippovbafacac2015-04-23 20:46:59 +0200396AC_ARG_ENABLE([symbol-versioning],
397AS_HELP_STRING([--disable-symbol-versioning],
398 [Disable symbol versioning in shared objects]))
Ulf Hermann4a3330a2017-08-18 15:50:42 +0200399
400AC_CACHE_CHECK([whether symbol versioning is supported], ac_cv_symbol_versioning, [dnl
401AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
402#define NEW_VERSION(name, version) \
403 asm (".symver " #name "," #name "@@@" #version);
404int foo(int x) { return x + 1; }
405NEW_VERSION (foo, ELFUTILS_12.12)
406])], ac_cv_symbol_versioning=yes, ac_cv_symbol_versioning=no)])
407if test "$ac_cv_symbol_versioning" = "no"; then
408 if test "x$enable_symbol_versioning" != "xno"; then
409 AC_MSG_ERROR([Symbol versioning is not supported.
410 Use --disable-symbol-versioning to build without.])
411 fi
412fi
413
Max Filippovbafacac2015-04-23 20:46:59 +0200414AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"])
415AS_IF([test "x$enable_symbol_versioning" = "xno"],
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200416 [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.])
417 enable_symbol_versioning=no],[enable_symbol_versioning=yes])
Max Filippovbafacac2015-04-23 20:46:59 +0200418
Mark Wielaard4b7953d2015-06-09 00:28:13 +0200419AC_CACHE_CHECK([whether gcc accepts -Wstack-usage], ac_cv_stack_usage, [dnl
420old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700421CFLAGS="$CFLAGS -Wstack-usage=262144 -Werror"
Mark Wielaard4b7953d2015-06-09 00:28:13 +0200422AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
423 ac_cv_stack_usage=yes, ac_cv_stack_usage=no)
424CFLAGS="$old_CFLAGS"])
425AM_CONDITIONAL(ADD_STACK_USAGE_WARNING, [test "x$ac_cv_stack_usage" != "xno"])
426
Mark Wielaard8bc14232016-02-09 16:10:22 +0100427# -Wlogical-op was too fragile in the past, make sure we get a sane one.
428AC_CACHE_CHECK([whether gcc has a sane -Wlogical-op], ac_cv_logical_op, [dnl
429old_CFLAGS="$CFLAGS"
430CFLAGS="$CFLAGS -Wlogical-op -Werror"
431AC_COMPILE_IFELSE([AC_LANG_SOURCE(
432 [#define FLAG 1
433 int f (int r, int f) { return (r && (FLAG || (FLAG & f))); }])],
434 ac_cv_logical_op=yes, ac_cv_logical_op=no)
435CFLAGS="$old_CFLAGS"])
436AM_CONDITIONAL(SANE_LOGICAL_OP_WARNING,
437 [test "x$ac_cv_logical_op" != "xno"])
438
439# -Wduplicated-cond was added by GCC6
440AC_CACHE_CHECK([whether gcc accepts -Wduplicated-cond], ac_cv_duplicated_cond, [dnl
441old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700442CFLAGS="$CFLAGS -Wduplicated-cond -Werror"
Mark Wielaard8bc14232016-02-09 16:10:22 +0100443AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
444 ac_cv_duplicated_cond=yes, ac_cv_duplicated_cond=no)
445CFLAGS="$old_CFLAGS"])
446AM_CONDITIONAL(HAVE_DUPLICATED_COND_WARNING,
447 [test "x$ac_cv_duplicated_cond" != "xno"])
448
Mark Wielaard6993d402016-02-13 19:10:00 +0100449# -Wnull-dereference was added by GCC6
450AC_CACHE_CHECK([whether gcc accepts -Wnull-dereference], ac_cv_null_dereference, [dnl
451old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700452CFLAGS="$CFLAGS -Wnull-dereference -Werror"
Mark Wielaard6993d402016-02-13 19:10:00 +0100453AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
454 ac_cv_null_dereference=yes, ac_cv_null_dereference=no)
455CFLAGS="$old_CFLAGS"])
456AM_CONDITIONAL(HAVE_NULL_DEREFERENCE_WARNING,
457 [test "x$ac_cv_null_dereference" != "xno"])
458
Mark Wielaarda3cc8182016-11-02 13:29:26 +0100459# -Wimplicit-fallthrough was added by GCC7
460AC_CACHE_CHECK([whether gcc accepts -Wimplicit-fallthrough], ac_cv_implicit_fallthrough, [dnl
461old_CFLAGS="$CFLAGS"
462CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror"
463AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
464 ac_cv_implicit_fallthrough=yes, ac_cv_implicit_fallthrough=no)
465CFLAGS="$old_CFLAGS"])
466AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING,
467 [test "x$ac_cv_implicit_fallthrough" != "xno"])
468
Joshua Watt555e15e2018-02-09 10:27:18 -0600469# Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported
470if test "$ac_cv_implicit_fallthrough" = "yes"; then
471 AC_DEFINE([HAVE_FALLTHROUGH], [1],
472 [Defined if __attribute__((fallthrough)) is supported])
473fi
474
Anthony G. Basile1ab3c2b2015-05-04 02:25:39 +0300475dnl Check if we have argp available from our libc
476AC_LINK_IFELSE(
477 [AC_LANG_PROGRAM(
478 [#include <argp.h>],
Filipe Brandenburgerafeccd42016-05-02 12:18:47 -0700479 [int argc=1; char *argv[]={"test"}; argp_parse(0,argc,&argv,0,0,0); return 0;]
Anthony G. Basile1ab3c2b2015-05-04 02:25:39 +0300480 )],
481 [libc_has_argp="true"],
482 [libc_has_argp="false"]
483)
484
485dnl If our libc doesn't provide argp, then test for libargp
486if test "$libc_has_argp" = "false" ; then
487 AC_MSG_WARN("libc does not have argp")
488 AC_CHECK_LIB([argp], [argp_parse], [have_argp="true"], [have_argp="false"])
489
490 if test "$have_argp" = "false"; then
491 AC_MSG_ERROR("no libargp found")
492 else
493 argp_LDADD="-largp"
494 fi
495else
496 argp_LDADD=""
497fi
498AC_SUBST([argp_LDADD])
499
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000500dnl The directories with content.
501
502dnl Documentation.
Ben Woodardf0a51762019-08-23 13:42:06 -0700503AC_CONFIG_FILES([doc/Makefile])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000504
505dnl Support library.
506AC_CONFIG_FILES([lib/Makefile])
507
508dnl ELF library.
Ulrich Drepper2c9ee4f2007-06-06 02:49:30 +0000509AC_CONFIG_FILES([libelf/Makefile])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000510
511dnl Higher-level ELF support library.
512AC_CONFIG_FILES([libebl/Makefile])
513
Mark Wielaard93802972014-04-11 23:52:47 +0200514dnl DWARF-ELF Lower-level Functions support library.
515AC_CONFIG_FILES([libdwelf/Makefile])
516
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000517dnl DWARF library.
518AC_CONFIG_FILES([libdw/Makefile])
519
520dnl Higher-level DWARF support library.
521AC_CONFIG_FILES([libdwfl/Makefile])
522
523dnl CPU handling library.
524AC_CONFIG_FILES([libcpu/Makefile])
525
526dnl Assembler library.
Roland McGrathd7f8d0c2005-11-17 02:32:03 +0000527AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000528AC_CONFIG_FILES([libasm/Makefile])
529
Roland McGrathe47ab762005-11-17 03:16:00 +0000530dnl CPU-specific backend libraries.
531AC_CONFIG_FILES([backends/Makefile])
532
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000533dnl Tools.
534AC_CONFIG_FILES([src/Makefile po/Makefile.in])
535
536dnl Test suite.
Roland McGrathd7f8d0c2005-11-17 02:32:03 +0000537AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000538AC_CONFIG_FILES([tests/Makefile])
539
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100540dnl pkgconfig files
541AC_CONFIG_FILES([config/libelf.pc config/libdw.pc])
542
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000543# Get the definitions necessary to create the Makefiles in the po
544# subdirectories. This is a small subset of the gettext rules.
545AC_SUBST(USE_NLS, yes)
546AM_PO_SUBDIRS
547
Roland McGrathb4d6f0f2008-08-25 22:55:17 +0000548dnl Appended to the config.h file.
549dnl We hide all kinds of configuration magic in lib/eu-config.h.
550AH_BOTTOM([#include <eu-config.h>])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000551
Roland McGrathfbc72452008-12-16 17:03:03 -0800552dnl Version compatibility header.
553AC_CONFIG_FILES([version.h:config/version.h.in])
554AC_SUBST([eu_version])
Roland McGrathee9d60d2009-04-17 13:18:35 -0700555
556# 1.234<whatever> -> 1234<whatever>
557case "$PACKAGE_VERSION" in
Roland McGrathe9bf1d32011-10-08 15:14:30 -0700558[[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
Roland McGrathee9d60d2009-04-17 13:18:35 -0700559*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
560esac
561case "$eu_version" in
562*.*)
563 # 1234.567 -> "1234", "567"
564 eu_extra_version="${eu_version#*.}"
565 eu_version="${eu_version%%.*}"
566 case "$eu_extra_version" in
567 [[0-9]][[0-9]][[0-9]]) ;;
568 [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
569 [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
570 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
571 esac
572 ;;
573*)
574 eu_extra_version=000
575 ;;
576esac
577
578case "$eu_version" in
579 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
580[[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
581[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
Ulrich Drepper2c712522010-06-28 12:10:53 -0700582[[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
Roland McGrathee9d60d2009-04-17 13:18:35 -0700583*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
Roland McGrathfbc72452008-12-16 17:03:03 -0800584esac
585
Roland McGrath105e3982009-04-19 16:07:45 -0700586# Round up to the next release API (x.y) version.
Roland McGrathe9bf1d32011-10-08 15:14:30 -0700587eu_version=$(( (eu_version + 999) / 1000 ))
Roland McGrath105e3982009-04-19 16:07:45 -0700588
Mark Wielaardf17a9bb2015-05-31 23:03:30 +0200589dnl Unique ID for this build.
Omar Sandoval4f937e22019-08-26 10:51:46 -0700590MODVERSION="Build for ${eu_version} ${ac_cv_build}"
Mark Wielaardf17a9bb2015-05-31 23:03:30 +0200591AC_SUBST([MODVERSION])
592AC_DEFINE_UNQUOTED(MODVERSION, "$MODVERSION")
593AH_TEMPLATE([MODVERSION], [Identifier for modules in the build.])
594
Jan Kratochvil0b867462013-05-30 14:37:38 +0200595AC_CHECK_SIZEOF(long)
596
Kyle McMartinc1e0fcb2014-06-09 21:06:26 +0200597# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
598# of the user_regs_struct from sys/user.h. They are structurally the same
599# but we get either one or the other.
600AC_CHECK_TYPE([struct user_regs_struct],
601 [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
602 [[#include <sys/ptrace.h>]
603 [#include <sys/time.h>]
604 [#include <sys/user.h>]])
605if test "$sys_user_has_user_regs" = "yes"; then
606 AC_DEFINE(HAVE_SYS_USER_REGS, 1,
607 [Define to 1 if <sys/user.h> defines struct user_regs_struct])
608fi
609
Jan Kratochvil0b867462013-05-30 14:37:38 +0200610# On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
611# Likewise in a 32-bit build on a host where $CC -m64 works.
612utrace_BIARCH
613# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine.
Jan Kratochvil8ae9bc92013-12-02 20:54:28 +0100614CC_BIARCH="$CC $utrace_biarch"
Jan Kratochvil0b867462013-05-30 14:37:38 +0200615AC_SUBST([CC_BIARCH])
616
Mark Wielaard4664fd52015-05-30 22:50:37 +0200617# In maintainer mode we really need flex and bison.
618# Otherwise we really need a release dir with maintainer files generated.
619if test "x$enable_maintainer_mode" = xyes; then
620 AC_CHECK_PROG(HAVE_FLEX, flex, yes, no)
621 if test "$HAVE_FLEX" = "no"; then
622 AC_MSG_ERROR([flex needed in maintainer mode])
623 fi
624 AC_CHECK_PROG(HAVE_BISON, bison, yes, no)
625 if test "$HAVE_BISON" = "no"; then
626 AC_MSG_ERROR([bison needed in maintainer mode])
627 fi
Ross Burtond6126842018-07-04 12:11:07 +0100628 AC_CHECK_PROG(HAVE_GAWK, gawk, yes, no)
629 if test "$HAVE_GAWK" = "no"; then
630 AC_MSG_ERROR([gawk needed in maintainer mode])
631 fi
Mark Wielaard4664fd52015-05-30 22:50:37 +0200632else
633 if test ! -f ${srcdir}/libdw/known-dwarf.h; then
634 AC_MSG_ERROR([No libdw/known-dwarf.h. configure --enable-maintainer-mode])
635 fi
636fi
637
638# The testfiles are all compressed, we need bunzip2 when running make check
639AC_CHECK_PROG(HAVE_BUNZIP2, bunzip2, yes, no)
640if test "$HAVE_BUNZIP2" = "no"; then
641 AC_MSG_WARN([No bunzip2, needed to run make check])
642fi
643
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000644AC_OUTPUT
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200645
646AC_MSG_NOTICE([
647=====================================================================
648 elfutils: ${PACKAGE_VERSION} (eu_version: ${eu_version})
649=====================================================================
650
651 Prefix : ${prefix}
652 Program prefix ("eu-" recommended) : ${program_prefix}
653 Source code location : ${srcdir}
654 Maintainer mode : ${enable_maintainer_mode}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200655 build arch : ${ac_cv_build}
656
657 RECOMMENDED FEATURES (should all be yes)
658 gzip support : ${with_zlib}
659 bzip2 support : ${with_bzlib}
660 lzma/xz support : ${with_lzma}
Mark Wielaarde6e80da2015-05-01 10:31:36 +0200661 libstdc++ demangle support : ${enable_demangler}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200662 File textrel check : ${enable_textrelcheck}
663 Symbol versioning : ${enable_symbol_versioning}
664
665 NOT RECOMMENDED FEATURES (should all be no)
666 Experimental thread safety : ${use_locks}
Mark Wielaardb63007e2019-01-18 14:18:22 +0100667 install elf.h : ${install_elfh}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200668
669 OTHER FEATURES
670 Deterministic archives by default : ${default_ar_deterministic}
671 Native language support : ${USE_NLS}
672
673 EXTRA TEST FEATURES (used with make check)
Mark Wielaard4664fd52015-05-30 22:50:37 +0200674 have bunzip2 installed (required) : ${HAVE_BUNZIP2}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200675 debug branch prediction : ${use_debugpred}
676 gprof support : ${use_gprof}
677 gcov support : ${use_gcov}
678 run all tests under valgrind : ${use_valgrind}
Mark Wielaard2b250b72015-05-21 23:36:51 +0200679 gcc undefined behaviour sanitizer : ${use_undefined}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200680 use rpath in tests : ${tests_use_rpath}
681 test biarch : ${utrace_cv_cc_biarch}
682])
Mark Wielaardb63007e2019-01-18 14:18:22 +0100683
684if test "$install_elfh" = yes; then
685 if test "${prefix}" = "/usr/local" -o "${prefix}" = "/usr"; then
686 AC_MSG_WARN([installing elf.h in ${includedir} might conflict with glibc/system elf.h])
687 fi
688fi