blob: b89b867962ba55aeb7aba88909a657bb6659b33b [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 Wielaard422b5492018-11-14 13:12:24 +010020AC_INIT([elfutils],[0.175],[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
Ulrich Drepper47be7952005-08-07 04:41:39 +0000326AM_CONDITIONAL(BUILD_STATIC, [dnl
Mark Wielaard32324792014-04-13 17:39:57 +0200327test "$use_gprof" = yes -o "$use_gcov" = yes])
Ulrich Drepper47be7952005-08-07 04:41:39 +0000328
Roland McGrath1b8b4462005-11-16 01:33:38 +0000329AC_ARG_ENABLE([tests-rpath],
Ulrich Drepperdb12f162009-09-21 08:04:38 -0700330AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
Mike Frysinger8f3002e2011-10-08 15:09:15 -0700331 [tests_use_rpath=$enableval], [tests_use_rpath=no])
Roland McGrath1b8b4462005-11-16 01:33:38 +0000332AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
333
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000334LIBEBL_SUBDIR="$PACKAGE"
335AC_ARG_ENABLE([libebl-subdir],
336AS_HELP_STRING([--enable-libebl-subdir=DIR],
337[install libebl_CPU modules in $(libdir)/DIR]), [dnl
338LIBEBL_SUBDIR="$enable_libebl_subdir"])
339AC_SUBST([LIBEBL_SUBDIR])
340AC_DEFINE_UNQUOTED(LIBEBL_SUBDIR, "$LIBEBL_SUBDIR")
341AH_TEMPLATE([LIBEBL_SUBDIR], [$libdir subdirectory containing libebl modules.])
342
Mark Wielaard528cb452015-10-16 23:07:12 +0200343dnl zlib is mandatory.
Roland McGrathbca43152009-01-05 23:59:32 -0800344save_LIBS="$LIBS"
345LIBS=
Roland McGrath24169642009-08-26 02:26:34 -0700346eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
Mike Frysinger2d703bf2016-01-14 13:46:18 -0500347AS_IF([test "x$with_zlib" = xno], [AC_MSG_ERROR([zlib not found but is required])])
Mark Wielaard528cb452015-10-16 23:07:12 +0200348LIBS="$save_LIBS"
349
350dnl Test for bzlib and xz/lzma, gives BZLIB/LZMALIB .am
351dnl conditional and config.h USE_BZLIB/USE_LZMALIB #define.
352save_LIBS="$LIBS"
353LIBS=
Roland McGrath24169642009-08-26 02:26:34 -0700354eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100355# We need this since bzip2 doesn't have a pkgconfig file.
356BZ2_LIB="$LIBS"
357AC_SUBST([BZ2_LIB])
Roland McGrath24169642009-08-26 02:26:34 -0700358eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100359AS_IF([test "x$with_lzma" = xyes], [LIBLZMA="liblzma"], [LIBLZMA=""])
360AC_SUBST([LIBLZMA])
Roland McGrathbca43152009-01-05 23:59:32 -0800361zip_LIBS="$LIBS"
362LIBS="$save_LIBS"
363AC_SUBST([zip_LIBS])
364
Akihiko Odakia24d52a2016-10-13 09:16:48 +0900365AC_CHECK_DECLS([memrchr, rawmemchr],[],[],
366 [#define _GNU_SOURCE
367 #include <string.h>])
368AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>])
Ulf Hermannb3248e62017-02-16 10:10:30 +0100369AC_CHECK_DECLS([mempcpy],[],[],
370 [#define _GNU_SOURCE
371 #include <string.h>])
Akihiko Odakia24d52a2016-10-13 09:16:48 +0900372
Mark Wielaardafffdff2018-03-18 00:24:08 +0100373AC_CHECK_FUNCS([process_vm_readv])
374
Ulrich Drepperb4a16cf2011-10-02 08:33:19 -0400375AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
376AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
Max Filippov1ce4a452015-05-03 21:14:09 +0300377AM_CONDITIONAL(DEMANGLE, test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes")
378AS_IF([test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes"],
Mark Wielaarde6e80da2015-05-01 10:31:36 +0200379 [enable_demangler=yes],[enable_demangler=no])
Ulrich Drepperb4a16cf2011-10-02 08:33:19 -0400380
Mark Wielaard805ec832014-11-27 23:53:30 +0100381AC_ARG_ENABLE([textrelcheck],
382AS_HELP_STRING([--disable-textrelcheck],
383 [Disable textrelcheck being a fatal error]))
384AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"])
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200385AS_IF([test "x$enable_textrelcheck" != "xno"],
386 [enable_textrelcheck=yes],[enable_textrelcheck=no])
Mark Wielaard805ec832014-11-27 23:53:30 +0100387
Max Filippovbafacac2015-04-23 20:46:59 +0200388AC_ARG_ENABLE([symbol-versioning],
389AS_HELP_STRING([--disable-symbol-versioning],
390 [Disable symbol versioning in shared objects]))
Ulf Hermann4a3330a2017-08-18 15:50:42 +0200391
392AC_CACHE_CHECK([whether symbol versioning is supported], ac_cv_symbol_versioning, [dnl
393AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
394#define NEW_VERSION(name, version) \
395 asm (".symver " #name "," #name "@@@" #version);
396int foo(int x) { return x + 1; }
397NEW_VERSION (foo, ELFUTILS_12.12)
398])], ac_cv_symbol_versioning=yes, ac_cv_symbol_versioning=no)])
399if test "$ac_cv_symbol_versioning" = "no"; then
400 if test "x$enable_symbol_versioning" != "xno"; then
401 AC_MSG_ERROR([Symbol versioning is not supported.
402 Use --disable-symbol-versioning to build without.])
403 fi
404fi
405
Max Filippovbafacac2015-04-23 20:46:59 +0200406AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"])
407AS_IF([test "x$enable_symbol_versioning" = "xno"],
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200408 [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.])
409 enable_symbol_versioning=no],[enable_symbol_versioning=yes])
Max Filippovbafacac2015-04-23 20:46:59 +0200410
Mark Wielaard4b7953d2015-06-09 00:28:13 +0200411AC_CACHE_CHECK([whether gcc accepts -Wstack-usage], ac_cv_stack_usage, [dnl
412old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700413CFLAGS="$CFLAGS -Wstack-usage=262144 -Werror"
Mark Wielaard4b7953d2015-06-09 00:28:13 +0200414AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
415 ac_cv_stack_usage=yes, ac_cv_stack_usage=no)
416CFLAGS="$old_CFLAGS"])
417AM_CONDITIONAL(ADD_STACK_USAGE_WARNING, [test "x$ac_cv_stack_usage" != "xno"])
418
Mark Wielaard8bc14232016-02-09 16:10:22 +0100419# -Wlogical-op was too fragile in the past, make sure we get a sane one.
420AC_CACHE_CHECK([whether gcc has a sane -Wlogical-op], ac_cv_logical_op, [dnl
421old_CFLAGS="$CFLAGS"
422CFLAGS="$CFLAGS -Wlogical-op -Werror"
423AC_COMPILE_IFELSE([AC_LANG_SOURCE(
424 [#define FLAG 1
425 int f (int r, int f) { return (r && (FLAG || (FLAG & f))); }])],
426 ac_cv_logical_op=yes, ac_cv_logical_op=no)
427CFLAGS="$old_CFLAGS"])
428AM_CONDITIONAL(SANE_LOGICAL_OP_WARNING,
429 [test "x$ac_cv_logical_op" != "xno"])
430
431# -Wduplicated-cond was added by GCC6
432AC_CACHE_CHECK([whether gcc accepts -Wduplicated-cond], ac_cv_duplicated_cond, [dnl
433old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700434CFLAGS="$CFLAGS -Wduplicated-cond -Werror"
Mark Wielaard8bc14232016-02-09 16:10:22 +0100435AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
436 ac_cv_duplicated_cond=yes, ac_cv_duplicated_cond=no)
437CFLAGS="$old_CFLAGS"])
438AM_CONDITIONAL(HAVE_DUPLICATED_COND_WARNING,
439 [test "x$ac_cv_duplicated_cond" != "xno"])
440
Mark Wielaard6993d402016-02-13 19:10:00 +0100441# -Wnull-dereference was added by GCC6
442AC_CACHE_CHECK([whether gcc accepts -Wnull-dereference], ac_cv_null_dereference, [dnl
443old_CFLAGS="$CFLAGS"
Filipe Brandenburger239cd482016-05-02 13:26:13 -0700444CFLAGS="$CFLAGS -Wnull-dereference -Werror"
Mark Wielaard6993d402016-02-13 19:10:00 +0100445AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
446 ac_cv_null_dereference=yes, ac_cv_null_dereference=no)
447CFLAGS="$old_CFLAGS"])
448AM_CONDITIONAL(HAVE_NULL_DEREFERENCE_WARNING,
449 [test "x$ac_cv_null_dereference" != "xno"])
450
Mark Wielaarda3cc8182016-11-02 13:29:26 +0100451# -Wimplicit-fallthrough was added by GCC7
452AC_CACHE_CHECK([whether gcc accepts -Wimplicit-fallthrough], ac_cv_implicit_fallthrough, [dnl
453old_CFLAGS="$CFLAGS"
454CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror"
455AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
456 ac_cv_implicit_fallthrough=yes, ac_cv_implicit_fallthrough=no)
457CFLAGS="$old_CFLAGS"])
458AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING,
459 [test "x$ac_cv_implicit_fallthrough" != "xno"])
460
Joshua Watt555e15e2018-02-09 10:27:18 -0600461# Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported
462if test "$ac_cv_implicit_fallthrough" = "yes"; then
463 AC_DEFINE([HAVE_FALLTHROUGH], [1],
464 [Defined if __attribute__((fallthrough)) is supported])
465fi
466
Anthony G. Basile1ab3c2b2015-05-04 02:25:39 +0300467dnl Check if we have argp available from our libc
468AC_LINK_IFELSE(
469 [AC_LANG_PROGRAM(
470 [#include <argp.h>],
Filipe Brandenburgerafeccd42016-05-02 12:18:47 -0700471 [int argc=1; char *argv[]={"test"}; argp_parse(0,argc,&argv,0,0,0); return 0;]
Anthony G. Basile1ab3c2b2015-05-04 02:25:39 +0300472 )],
473 [libc_has_argp="true"],
474 [libc_has_argp="false"]
475)
476
477dnl If our libc doesn't provide argp, then test for libargp
478if test "$libc_has_argp" = "false" ; then
479 AC_MSG_WARN("libc does not have argp")
480 AC_CHECK_LIB([argp], [argp_parse], [have_argp="true"], [have_argp="false"])
481
482 if test "$have_argp" = "false"; then
483 AC_MSG_ERROR("no libargp found")
484 else
485 argp_LDADD="-largp"
486 fi
487else
488 argp_LDADD=""
489fi
490AC_SUBST([argp_LDADD])
491
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000492dnl The directories with content.
493
494dnl Documentation.
495dnl Commented out for now.
496dnl AC_CONFIG_FILES([doc/Makefile])
497
498dnl Support library.
499AC_CONFIG_FILES([lib/Makefile])
500
501dnl ELF library.
Ulrich Drepper2c9ee4f2007-06-06 02:49:30 +0000502AC_CONFIG_FILES([libelf/Makefile])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000503
504dnl Higher-level ELF support library.
505AC_CONFIG_FILES([libebl/Makefile])
506
Mark Wielaard93802972014-04-11 23:52:47 +0200507dnl DWARF-ELF Lower-level Functions support library.
508AC_CONFIG_FILES([libdwelf/Makefile])
509
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000510dnl DWARF library.
511AC_CONFIG_FILES([libdw/Makefile])
512
513dnl Higher-level DWARF support library.
514AC_CONFIG_FILES([libdwfl/Makefile])
515
516dnl CPU handling library.
517AC_CONFIG_FILES([libcpu/Makefile])
518
519dnl Assembler library.
Roland McGrathd7f8d0c2005-11-17 02:32:03 +0000520AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000521AC_CONFIG_FILES([libasm/Makefile])
522
Roland McGrathe47ab762005-11-17 03:16:00 +0000523dnl CPU-specific backend libraries.
524AC_CONFIG_FILES([backends/Makefile])
525
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000526dnl Tools.
527AC_CONFIG_FILES([src/Makefile po/Makefile.in])
528
529dnl Test suite.
Roland McGrathd7f8d0c2005-11-17 02:32:03 +0000530AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000531AC_CONFIG_FILES([tests/Makefile])
532
Mark Wielaard0aa60ac2016-01-04 21:41:52 +0100533dnl pkgconfig files
534AC_CONFIG_FILES([config/libelf.pc config/libdw.pc])
535
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000536# Get the definitions necessary to create the Makefiles in the po
537# subdirectories. This is a small subset of the gettext rules.
538AC_SUBST(USE_NLS, yes)
539AM_PO_SUBDIRS
540
Roland McGrathb4d6f0f2008-08-25 22:55:17 +0000541dnl Appended to the config.h file.
542dnl We hide all kinds of configuration magic in lib/eu-config.h.
543AH_BOTTOM([#include <eu-config.h>])
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000544
Roland McGrathfbc72452008-12-16 17:03:03 -0800545dnl Version compatibility header.
546AC_CONFIG_FILES([version.h:config/version.h.in])
547AC_SUBST([eu_version])
Roland McGrathee9d60d2009-04-17 13:18:35 -0700548
549# 1.234<whatever> -> 1234<whatever>
550case "$PACKAGE_VERSION" in
Roland McGrathe9bf1d32011-10-08 15:14:30 -0700551[[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
Roland McGrathee9d60d2009-04-17 13:18:35 -0700552*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
553esac
554case "$eu_version" in
555*.*)
556 # 1234.567 -> "1234", "567"
557 eu_extra_version="${eu_version#*.}"
558 eu_version="${eu_version%%.*}"
559 case "$eu_extra_version" in
560 [[0-9]][[0-9]][[0-9]]) ;;
561 [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
562 [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
563 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
564 esac
565 ;;
566*)
567 eu_extra_version=000
568 ;;
569esac
570
571case "$eu_version" in
572 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
573[[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
574[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
Ulrich Drepper2c712522010-06-28 12:10:53 -0700575[[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
Roland McGrathee9d60d2009-04-17 13:18:35 -0700576*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
Roland McGrathfbc72452008-12-16 17:03:03 -0800577esac
578
Roland McGrath105e3982009-04-19 16:07:45 -0700579# Round up to the next release API (x.y) version.
Roland McGrathe9bf1d32011-10-08 15:14:30 -0700580eu_version=$(( (eu_version + 999) / 1000 ))
Roland McGrath105e3982009-04-19 16:07:45 -0700581
Mark Wielaardf17a9bb2015-05-31 23:03:30 +0200582dnl Unique ID for this build.
583MODVERSION="Build for ${LIBEBL_SUBDIR} ${eu_version} ${ac_cv_build}"
584AC_SUBST([MODVERSION])
585AC_DEFINE_UNQUOTED(MODVERSION, "$MODVERSION")
586AH_TEMPLATE([MODVERSION], [Identifier for modules in the build.])
587
Jan Kratochvil0b867462013-05-30 14:37:38 +0200588AC_CHECK_SIZEOF(long)
589
Kyle McMartinc1e0fcb2014-06-09 21:06:26 +0200590# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
591# of the user_regs_struct from sys/user.h. They are structurally the same
592# but we get either one or the other.
593AC_CHECK_TYPE([struct user_regs_struct],
594 [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
595 [[#include <sys/ptrace.h>]
596 [#include <sys/time.h>]
597 [#include <sys/user.h>]])
598if test "$sys_user_has_user_regs" = "yes"; then
599 AC_DEFINE(HAVE_SYS_USER_REGS, 1,
600 [Define to 1 if <sys/user.h> defines struct user_regs_struct])
601fi
602
Jan Kratochvil0b867462013-05-30 14:37:38 +0200603# On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
604# Likewise in a 32-bit build on a host where $CC -m64 works.
605utrace_BIARCH
606# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine.
Jan Kratochvil8ae9bc92013-12-02 20:54:28 +0100607CC_BIARCH="$CC $utrace_biarch"
Jan Kratochvil0b867462013-05-30 14:37:38 +0200608AC_SUBST([CC_BIARCH])
609
Mark Wielaard4664fd52015-05-30 22:50:37 +0200610# In maintainer mode we really need flex and bison.
611# Otherwise we really need a release dir with maintainer files generated.
612if test "x$enable_maintainer_mode" = xyes; then
613 AC_CHECK_PROG(HAVE_FLEX, flex, yes, no)
614 if test "$HAVE_FLEX" = "no"; then
615 AC_MSG_ERROR([flex needed in maintainer mode])
616 fi
617 AC_CHECK_PROG(HAVE_BISON, bison, yes, no)
618 if test "$HAVE_BISON" = "no"; then
619 AC_MSG_ERROR([bison needed in maintainer mode])
620 fi
Ross Burtond6126842018-07-04 12:11:07 +0100621 AC_CHECK_PROG(HAVE_GAWK, gawk, yes, no)
622 if test "$HAVE_GAWK" = "no"; then
623 AC_MSG_ERROR([gawk needed in maintainer mode])
624 fi
Mark Wielaard4664fd52015-05-30 22:50:37 +0200625else
626 if test ! -f ${srcdir}/libdw/known-dwarf.h; then
627 AC_MSG_ERROR([No libdw/known-dwarf.h. configure --enable-maintainer-mode])
628 fi
629fi
630
631# The testfiles are all compressed, we need bunzip2 when running make check
632AC_CHECK_PROG(HAVE_BUNZIP2, bunzip2, yes, no)
633if test "$HAVE_BUNZIP2" = "no"; then
634 AC_MSG_WARN([No bunzip2, needed to run make check])
635fi
636
Ulrich Drepperb08d5a82005-07-26 05:00:05 +0000637AC_OUTPUT
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200638
639AC_MSG_NOTICE([
640=====================================================================
641 elfutils: ${PACKAGE_VERSION} (eu_version: ${eu_version})
642=====================================================================
643
644 Prefix : ${prefix}
645 Program prefix ("eu-" recommended) : ${program_prefix}
646 Source code location : ${srcdir}
647 Maintainer mode : ${enable_maintainer_mode}
648 libebl modules subdirectory : ${LIBEBL_SUBDIR}
649 build arch : ${ac_cv_build}
650
651 RECOMMENDED FEATURES (should all be yes)
652 gzip support : ${with_zlib}
653 bzip2 support : ${with_bzlib}
654 lzma/xz support : ${with_lzma}
Mark Wielaarde6e80da2015-05-01 10:31:36 +0200655 libstdc++ demangle support : ${enable_demangler}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200656 File textrel check : ${enable_textrelcheck}
657 Symbol versioning : ${enable_symbol_versioning}
658
659 NOT RECOMMENDED FEATURES (should all be no)
660 Experimental thread safety : ${use_locks}
661
662 OTHER FEATURES
663 Deterministic archives by default : ${default_ar_deterministic}
664 Native language support : ${USE_NLS}
665
666 EXTRA TEST FEATURES (used with make check)
Mark Wielaard4664fd52015-05-30 22:50:37 +0200667 have bunzip2 installed (required) : ${HAVE_BUNZIP2}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200668 debug branch prediction : ${use_debugpred}
669 gprof support : ${use_gprof}
670 gcov support : ${use_gcov}
671 run all tests under valgrind : ${use_valgrind}
Mark Wielaard2b250b72015-05-21 23:36:51 +0200672 gcc undefined behaviour sanitizer : ${use_undefined}
Mark Wielaard7702a3c2015-05-01 09:23:57 +0200673 use rpath in tests : ${tests_use_rpath}
674 test biarch : ${utrace_cv_cc_biarch}
675])