blob: 4cdb12af835f01f423647eb59acfe180f5ac4f27 [file] [log] [blame]
Brian Silverman86497922018-02-10 19:28:39 -05001dnl Process this file with autoconf to produce a configure script.
2dnl Configure input file for elfutils. -*-autoconf-*-
3dnl
4dnl Copyright (C) 1996-2017 Red Hat, Inc.
5dnl
6dnl This file is part of elfutils.
7dnl
8dnl 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.
12dnl
13dnl 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.
17dnl
18dnl 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/>.
20AC_INIT([elfutils],[0.170],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/])
21
22dnl 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
28# 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
41AC_CONFIG_AUX_DIR([config])
42AC_CONFIG_FILES([config/Makefile])
43
44AC_COPYRIGHT([Copyright (C) 1996-2017 The elfutils developers.])
45AC_PREREQ(2.63) dnl Minimum Autoconf version required.
46
47dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
48AM_INIT_AUTOMAKE([gnits 1.11 -Wno-portability dist-bzip2 no-dist-gzip parallel-tests])
49AM_MAINTAINER_MODE
50
51AM_SILENT_RULES([yes])
52
53AC_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
66AC_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
77AC_ARG_ENABLE([thread-safety],
78AS_HELP_STRING([--enable-thread-safety],
79 [enable thread safety of libraries EXPERIMENTAL]),
80 use_locks=$enableval, use_locks=no)
81AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes)
82AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)])
83AS_IF([test "$use_locks" = yes],
84 [AC_MSG_WARN([thread-safety is EXPERIMENTAL tests might fail.])])
85
86AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
87
88AC_PROG_CC
89AC_PROG_RANLIB
90AC_PROG_YACC
91AM_PROG_LEX
92# Only available since automake 1.12
93m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
94AC_CHECK_TOOL([READELF], [readelf])
95AC_CHECK_TOOL([NM], [nm])
96
97# 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
107old_CFLAGS="$CFLAGS"
108CFLAGS="$CFLAGS -std=gnu99"
109AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
110int 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}])],
125 ac_cv_c99=yes, ac_cv_c99=no)
126CFLAGS="$old_CFLAGS"])
127AS_IF([test "x$ac_cv_c99" != xyes],
128 AC_MSG_ERROR([gcc with GNU99 support required]))
129
130AC_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
146AC_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
159AC_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
211AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
212# 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"
216CFLAGS="$fpic_CFLAGS $CFLAGS"
217LDFLAGS="$dso_LDFLAGS $LDFLAGS"
218AC_LINK_IFELSE([dnl
219AC_LANG_PROGRAM([[#include <stdlib.h>
220#undef __thread
221static __thread int a; int foo (int b) { return a + b; }]],
222 [[exit (foo (0));]])],
223 ac_cv_tls=yes, ac_cv_tls=no)
224CFLAGS="$save_CFLAGS"
225LDFLAGS="$save_LDFLAGS"])
226AS_IF([test "x$ac_cv_tls" != xyes],
227 AC_MSG_ERROR([__thread support required]))
228
229dnl 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
234dnl 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
243# 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
264dnl enable debugging of branch prediction.
265AC_ARG_ENABLE([debugpred],
266AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
267[use_debugpred=$enableval], [use_debugpred=no])
268case $use_debugpred in
269 yes) use_debugpred_val=1 ;;
270 *) use_debugpred_val=0 ;;
271esac
272AC_SUBST([DEBUGPRED], $use_debugpred_val)
273
274dnl Enable gprof suport.
275AC_ARG_ENABLE([gprof],
276AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
277if test "$use_gprof" = yes; then
278 CFLAGS="$CFLAGS -pg"
279 LDFLAGS="$LDFLAGS -pg"
280fi
281AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
282
283# Enable gcov suport.
284AC_ARG_ENABLE([gcov],
285AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
286if test "$use_gcov" = yes; then
287 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
288 LDFLAGS="$LDFLAGS -fprofile-arcs"
289fi
290AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
291
292AC_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.
301 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)
304 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
308case $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])
314
315AC_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
326AM_CONDITIONAL(BUILD_STATIC, [dnl
327test "$use_gprof" = yes -o "$use_gcov" = yes])
328
329AC_ARG_ENABLE([tests-rpath],
330AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
331 [tests_use_rpath=$enableval], [tests_use_rpath=no])
332AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
333
334LIBEBL_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
343dnl zlib is mandatory.
344save_LIBS="$LIBS"
345LIBS=
346eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
347AS_IF([test "x$with_zlib" = xno], [AC_MSG_ERROR([zlib not found but is required])])
348LIBS="$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=
354eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
355# We need this since bzip2 doesn't have a pkgconfig file.
356BZ2_LIB="$LIBS"
357AC_SUBST([BZ2_LIB])
358eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
359AS_IF([test "x$with_lzma" = xyes], [LIBLZMA="liblzma"], [LIBLZMA=""])
360AC_SUBST([LIBLZMA])
361zip_LIBS="$LIBS"
362LIBS="$save_LIBS"
363AC_SUBST([zip_LIBS])
364
365AC_CHECK_DECLS([memrchr, rawmemchr],[],[],
366 [#define _GNU_SOURCE
367 #include <string.h>])
368AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>])
369AC_CHECK_DECLS([mempcpy],[],[],
370 [#define _GNU_SOURCE
371 #include <string.h>])
372
373AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
374AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
375AM_CONDITIONAL(DEMANGLE, test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes")
376AS_IF([test "x$ac_cv_lib_stdcpp___cxa_demangle" = "xyes"],
377 [enable_demangler=yes],[enable_demangler=no])
378
379AC_ARG_ENABLE([textrelcheck],
380AS_HELP_STRING([--disable-textrelcheck],
381 [Disable textrelcheck being a fatal error]))
382AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"])
383AS_IF([test "x$enable_textrelcheck" != "xno"],
384 [enable_textrelcheck=yes],[enable_textrelcheck=no])
385
386AC_ARG_ENABLE([symbol-versioning],
387AS_HELP_STRING([--disable-symbol-versioning],
388 [Disable symbol versioning in shared objects]))
389
390AC_CACHE_CHECK([whether symbol versioning is supported], ac_cv_symbol_versioning, [dnl
391AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
392#define NEW_VERSION(name, version) \
393 asm (".symver " #name "," #name "@@@" #version);
394int foo(int x) { return x + 1; }
395NEW_VERSION (foo, ELFUTILS_12.12)
396])], ac_cv_symbol_versioning=yes, ac_cv_symbol_versioning=no)])
397if test "$ac_cv_symbol_versioning" = "no"; then
398 if test "x$enable_symbol_versioning" != "xno"; then
399 AC_MSG_ERROR([Symbol versioning is not supported.
400 Use --disable-symbol-versioning to build without.])
401 fi
402fi
403
404AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"])
405AS_IF([test "x$enable_symbol_versioning" = "xno"],
406 [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.])
407 enable_symbol_versioning=no],[enable_symbol_versioning=yes])
408
409AC_CACHE_CHECK([whether gcc accepts -Wstack-usage], ac_cv_stack_usage, [dnl
410old_CFLAGS="$CFLAGS"
411CFLAGS="$CFLAGS -Wstack-usage=262144 -Werror"
412AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
413 ac_cv_stack_usage=yes, ac_cv_stack_usage=no)
414CFLAGS="$old_CFLAGS"])
415AM_CONDITIONAL(ADD_STACK_USAGE_WARNING, [test "x$ac_cv_stack_usage" != "xno"])
416
417# -Wlogical-op was too fragile in the past, make sure we get a sane one.
418AC_CACHE_CHECK([whether gcc has a sane -Wlogical-op], ac_cv_logical_op, [dnl
419old_CFLAGS="$CFLAGS"
420CFLAGS="$CFLAGS -Wlogical-op -Werror"
421AC_COMPILE_IFELSE([AC_LANG_SOURCE(
422 [#define FLAG 1
423 int f (int r, int f) { return (r && (FLAG || (FLAG & f))); }])],
424 ac_cv_logical_op=yes, ac_cv_logical_op=no)
425CFLAGS="$old_CFLAGS"])
426AM_CONDITIONAL(SANE_LOGICAL_OP_WARNING,
427 [test "x$ac_cv_logical_op" != "xno"])
428
429# -Wduplicated-cond was added by GCC6
430AC_CACHE_CHECK([whether gcc accepts -Wduplicated-cond], ac_cv_duplicated_cond, [dnl
431old_CFLAGS="$CFLAGS"
432CFLAGS="$CFLAGS -Wduplicated-cond -Werror"
433AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
434 ac_cv_duplicated_cond=yes, ac_cv_duplicated_cond=no)
435CFLAGS="$old_CFLAGS"])
436AM_CONDITIONAL(HAVE_DUPLICATED_COND_WARNING,
437 [test "x$ac_cv_duplicated_cond" != "xno"])
438
439# -Wnull-dereference was added by GCC6
440AC_CACHE_CHECK([whether gcc accepts -Wnull-dereference], ac_cv_null_dereference, [dnl
441old_CFLAGS="$CFLAGS"
442CFLAGS="$CFLAGS -Wnull-dereference -Werror"
443AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
444 ac_cv_null_dereference=yes, ac_cv_null_dereference=no)
445CFLAGS="$old_CFLAGS"])
446AM_CONDITIONAL(HAVE_NULL_DEREFERENCE_WARNING,
447 [test "x$ac_cv_null_dereference" != "xno"])
448
449# -Wimplicit-fallthrough was added by GCC7
450AC_CACHE_CHECK([whether gcc accepts -Wimplicit-fallthrough], ac_cv_implicit_fallthrough, [dnl
451old_CFLAGS="$CFLAGS"
452CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror"
453AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
454 ac_cv_implicit_fallthrough=yes, ac_cv_implicit_fallthrough=no)
455CFLAGS="$old_CFLAGS"])
456AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING,
457 [test "x$ac_cv_implicit_fallthrough" != "xno"])
458
459# Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported
460if test "$ac_cv_implicit_fallthrough" = "yes"; then
461 AC_DEFINE([HAVE_FALLTHROUGH], [1],
462 [Defined if __attribute__((fallthrough)) is supported])
463fi
464
465dnl Check if we have argp available from our libc
466AC_LINK_IFELSE(
467 [AC_LANG_PROGRAM(
468 [#include <argp.h>],
469 [int argc=1; char *argv[]={"test"}; argp_parse(0,argc,&argv,0,0,0); return 0;]
470 )],
471 [libc_has_argp="true"],
472 [libc_has_argp="false"]
473)
474
475dnl If our libc doesn't provide argp, then test for libargp
476if test "$libc_has_argp" = "false" ; then
477 AC_MSG_WARN("libc does not have argp")
478 AC_CHECK_LIB([argp], [argp_parse], [have_argp="true"], [have_argp="false"])
479
480 if test "$have_argp" = "false"; then
481 AC_MSG_ERROR("no libargp found")
482 else
483 argp_LDADD="-largp"
484 fi
485else
486 argp_LDADD=""
487fi
488AC_SUBST([argp_LDADD])
489
490dnl The directories with content.
491
492dnl Documentation.
493dnl Commented out for now.
494dnl AC_CONFIG_FILES([doc/Makefile])
495
496dnl Support library.
497AC_CONFIG_FILES([lib/Makefile])
498
499dnl ELF library.
500AC_CONFIG_FILES([libelf/Makefile])
501
502dnl Higher-level ELF support library.
503AC_CONFIG_FILES([libebl/Makefile])
504
505dnl DWARF-ELF Lower-level Functions support library.
506AC_CONFIG_FILES([libdwelf/Makefile])
507
508dnl DWARF library.
509AC_CONFIG_FILES([libdw/Makefile])
510
511dnl Higher-level DWARF support library.
512AC_CONFIG_FILES([libdwfl/Makefile])
513
514dnl CPU handling library.
515AC_CONFIG_FILES([libcpu/Makefile])
516
517dnl Assembler library.
518AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
519AC_CONFIG_FILES([libasm/Makefile])
520
521dnl CPU-specific backend libraries.
522AC_CONFIG_FILES([backends/Makefile])
523
524dnl Tools.
525AC_CONFIG_FILES([src/Makefile po/Makefile.in])
526
527dnl Test suite.
528AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
529AC_CONFIG_FILES([tests/Makefile])
530
531dnl pkgconfig files
532AC_CONFIG_FILES([config/libelf.pc config/libdw.pc])
533
534# Get the definitions necessary to create the Makefiles in the po
535# subdirectories. This is a small subset of the gettext rules.
536AC_SUBST(USE_NLS, yes)
537AM_PO_SUBDIRS
538
539dnl Appended to the config.h file.
540dnl We hide all kinds of configuration magic in lib/eu-config.h.
541AH_BOTTOM([#include <eu-config.h>])
542
543dnl Version compatibility header.
544AC_CONFIG_FILES([version.h:config/version.h.in])
545AC_SUBST([eu_version])
546
547# 1.234<whatever> -> 1234<whatever>
548case "$PACKAGE_VERSION" in
549[[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
550*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
551esac
552case "$eu_version" in
553*.*)
554 # 1234.567 -> "1234", "567"
555 eu_extra_version="${eu_version#*.}"
556 eu_version="${eu_version%%.*}"
557 case "$eu_extra_version" in
558 [[0-9]][[0-9]][[0-9]]) ;;
559 [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
560 [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
561 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
562 esac
563 ;;
564*)
565 eu_extra_version=000
566 ;;
567esac
568
569case "$eu_version" in
570 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
571[[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
572[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
573[[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
574*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
575esac
576
577# Round up to the next release API (x.y) version.
578eu_version=$(( (eu_version + 999) / 1000 ))
579
580dnl Unique ID for this build.
581MODVERSION="Build for ${LIBEBL_SUBDIR} ${eu_version} ${ac_cv_build}"
582AC_SUBST([MODVERSION])
583AC_DEFINE_UNQUOTED(MODVERSION, "$MODVERSION")
584AH_TEMPLATE([MODVERSION], [Identifier for modules in the build.])
585
586AC_CHECK_SIZEOF(long)
587
588# On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
589# of the user_regs_struct from sys/user.h. They are structurally the same
590# but we get either one or the other.
591AC_CHECK_TYPE([struct user_regs_struct],
592 [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
593 [[#include <sys/ptrace.h>]
594 [#include <sys/time.h>]
595 [#include <sys/user.h>]])
596if test "$sys_user_has_user_regs" = "yes"; then
597 AC_DEFINE(HAVE_SYS_USER_REGS, 1,
598 [Define to 1 if <sys/user.h> defines struct user_regs_struct])
599fi
600
601# On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
602# Likewise in a 32-bit build on a host where $CC -m64 works.
603utrace_BIARCH
604# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine.
605CC_BIARCH="$CC $utrace_biarch"
606AC_SUBST([CC_BIARCH])
607
608# In maintainer mode we really need flex and bison.
609# Otherwise we really need a release dir with maintainer files generated.
610if test "x$enable_maintainer_mode" = xyes; then
611 AC_CHECK_PROG(HAVE_FLEX, flex, yes, no)
612 if test "$HAVE_FLEX" = "no"; then
613 AC_MSG_ERROR([flex needed in maintainer mode])
614 fi
615 AC_CHECK_PROG(HAVE_BISON, bison, yes, no)
616 if test "$HAVE_BISON" = "no"; then
617 AC_MSG_ERROR([bison needed in maintainer mode])
618 fi
619else
620 if test ! -f ${srcdir}/libdw/known-dwarf.h; then
621 AC_MSG_ERROR([No libdw/known-dwarf.h. configure --enable-maintainer-mode])
622 fi
623fi
624
625# The testfiles are all compressed, we need bunzip2 when running make check
626AC_CHECK_PROG(HAVE_BUNZIP2, bunzip2, yes, no)
627if test "$HAVE_BUNZIP2" = "no"; then
628 AC_MSG_WARN([No bunzip2, needed to run make check])
629fi
630
631AC_OUTPUT
632
633AC_MSG_NOTICE([
634=====================================================================
635 elfutils: ${PACKAGE_VERSION} (eu_version: ${eu_version})
636=====================================================================
637
638 Prefix : ${prefix}
639 Program prefix ("eu-" recommended) : ${program_prefix}
640 Source code location : ${srcdir}
641 Maintainer mode : ${enable_maintainer_mode}
642 libebl modules subdirectory : ${LIBEBL_SUBDIR}
643 build arch : ${ac_cv_build}
644
645 RECOMMENDED FEATURES (should all be yes)
646 gzip support : ${with_zlib}
647 bzip2 support : ${with_bzlib}
648 lzma/xz support : ${with_lzma}
649 libstdc++ demangle support : ${enable_demangler}
650 File textrel check : ${enable_textrelcheck}
651 Symbol versioning : ${enable_symbol_versioning}
652
653 NOT RECOMMENDED FEATURES (should all be no)
654 Experimental thread safety : ${use_locks}
655
656 OTHER FEATURES
657 Deterministic archives by default : ${default_ar_deterministic}
658 Native language support : ${USE_NLS}
659
660 EXTRA TEST FEATURES (used with make check)
661 have bunzip2 installed (required) : ${HAVE_BUNZIP2}
662 debug branch prediction : ${use_debugpred}
663 gprof support : ${use_gprof}
664 gcov support : ${use_gcov}
665 run all tests under valgrind : ${use_valgrind}
666 gcc undefined behaviour sanitizer : ${use_undefined}
667 use rpath in tests : ${tests_use_rpath}
668 test biarch : ${utrace_cv_cc_biarch}
669])