1 dnl Process this file with autoconf to produce a configure script.
2 dnl Configure input file for elfutils. -*-autoconf-*-
4 dnl Copyright (C) 1996-2014 Red Hat, Inc.
6 dnl This file is part of elfutils.
8 dnl This file is free software; you can redistribute it and/or modify
9 dnl it under the terms of the GNU General Public License as published by
10 dnl the Free Software Foundation; either version 3 of the License, or
11 dnl (at your option) any later version.
13 dnl elfutils is distributed in the hope that it will be useful, but
14 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
15 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 dnl GNU General Public License for more details.
18 dnl You should have received a copy of the GNU General Public License
19 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
20 AC_INIT([elfutils],[0.160],[https://bugzilla.redhat.com/],[elfutils])
22 AC_CONFIG_AUX_DIR([config])
23 AC_CONFIG_FILES([config/Makefile])
25 AC_COPYRIGHT([Copyright (C) 1996-2014 Red Hat, Inc.])
26 AC_PREREQ(2.63) dnl Minimum Autoconf version required.
28 dnl We use GNU make extensions; automake 1.10 defaults to -Wportability.
29 AM_INIT_AUTOMAKE([gnits 1.11 -Wno-portability dist-bzip2 no-dist-gzip parallel-tests])
32 dnl Unique ID for this build.
33 MODVERSION="Build on $(hostname) $(date +%FT%R:%S%z)"
34 AC_SUBST([MODVERSION])
35 AC_DEFINE_UNQUOTED(MODVERSION, "$MODVERSION")
36 AH_TEMPLATE([MODVERSION], [Identifier for modules in the build.])
38 AC_CONFIG_SRCDIR([libelf/libelf.h])
39 AC_CONFIG_FILES([Makefile])
40 AC_CONFIG_HEADERS([config.h])
42 AC_CONFIG_MACRO_DIR([m4])
43 AC_CONFIG_FILES([m4/Makefile])
45 dnl The RPM spec file. We substitute a few values in the file.
46 AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in])
51 AC_ARG_ENABLE(deterministic-archives,
52 [AS_HELP_STRING([--enable-deterministic-archives],
53 [ar and ranlib default to -D behavior])], [
54 if test "${enableval}" = no; then
55 default_ar_deterministic=false
57 default_ar_deterministic=true
58 fi], [default_ar_deterministic=false])
59 AC_DEFINE_UNQUOTED(DEFAULT_AR_DETERMINISTIC, $default_ar_deterministic,
60 [Should ar and ranlib use -D behavior by default?])
62 AC_ARG_ENABLE([thread-safety],
63 AS_HELP_STRING([--enable-thread-safety],
64 [enable thread safety of libraries EXPERIMENTAL]),
65 use_locks=$enableval, use_locks=no)
66 AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes)
67 AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)])
68 AS_IF([test "$use_locks" = yes],
69 [AC_MSG_WARN([thread-safety is EXPERIMENTAL tests might fail.])])
71 AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
77 # Only available since automake 1.12
78 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
79 AC_CHECK_TOOL([READELF], [readelf])
80 AC_CHECK_TOOL([NM], [nm])
82 AC_CACHE_CHECK([for gcc with C99 support], ac_cv_c99, [dnl
84 CFLAGS="$CFLAGS -std=gnu99"
85 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
86 int foo (int a) { for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; }])],
87 ac_cv_c99=yes, ac_cv_c99=no)
88 CFLAGS="$old_CFLAGS"])
89 AS_IF([test "x$ac_cv_c99" != xyes],
90 AC_MSG_ERROR([gcc with C99 support required]))
92 AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
93 # Use the same flags that we use for our DSOs, so the test is representative.
94 # Some old compiler/linker/libc combinations fail some ways and not others.
96 save_LDFLAGS="$LDFLAGS"
97 CFLAGS="-fpic $CFLAGS"
98 LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS"
100 AC_LANG_PROGRAM([[#undef __thread
101 static __thread int a; int foo (int b) { return a + b; }]],
102 [[exit (foo (0));]])],
103 ac_cv_tls=yes, ac_cv_tls=no)
104 CFLAGS="$save_CFLAGS"
105 LDFLAGS="$save_LDFLAGS"])
106 AS_IF([test "x$ac_cv_tls" != xyes],
107 AC_MSG_ERROR([__thread support required]))
109 dnl This test must come as early as possible after the compiler configuration
110 dnl tests, because the choice of the file model can (in principle) affect
111 dnl whether functions and headers are available, whether they work, etc.
114 dnl Enable the linker to be build as a native-only linker. By default it
115 dnl can handle all architectures but this comes at a cost. A native
116 dnl will be slightly faster, small, and has fewer dependencies.
118 AC_ARG_ENABLE([generic],
119 AS_HELP_STRING([--disable-generic], [do not build generic linker]), [dnl
120 if test "$enable_generic" = no; then
123 AC_DEFINE(NATIVE_ELF, 32)
128 AC_MSG_ERROR([no machine-specific linker for this configuration available])
132 AH_TEMPLATE([NATIVE_ELF],
133 [Define to 32 or 64 if a specific implementation is wanted.])
134 AM_CONDITIONAL(NATIVE_LD, test "$native_ld" = yes)
135 dnl The automake generated Makefile cannot deal with macros in the name
136 dnl of files if at any time there is no such file, even if the filename
137 dnl would not be used.
138 AS_IF([test -z "$base_cpu"], [base_cpu=none])
140 dnl Support to work around automake's inflexible dependency generation.
141 dnl See src/Makefile.am for more information.
142 AM_CONDITIONAL(NEVER, false)
144 dnl enable debugging of branch prediction.
145 AC_ARG_ENABLE([debugpred],
146 AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
147 [use_debugpred=$enableval], [use_debugpred=no])
148 case $use_debugpred in
149 yes) use_debugpred=1 ;;
150 *) use_debugpred=0 ;;
152 AC_SUBST([DEBUGPRED], $use_debugpred)
154 dnl Enable gprof suport.
155 AC_ARG_ENABLE([gprof],
156 AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
157 if test "$use_gprof" = yes; then
159 LDFLAGS="$LDFLAGS -pg"
161 AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
163 # Enable gcov suport.
164 AC_ARG_ENABLE([gcov],
165 AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
166 if test "$use_gcov" = yes; then
167 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
168 LDFLAGS="$LDFLAGS -fprofile-arcs"
170 AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
172 AC_ARG_ENABLE([valgrind],
173 AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
174 [use_valgrind=$enableval], [use_valgrind=no])
175 if test "$use_valgrind" = yes; then
176 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
177 if test "$HAVE_VALGRIND" = "no"; then
178 AC_MSG_ERROR([valgrind not found])
181 AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
183 AM_CONDITIONAL(BUILD_STATIC, [dnl
184 test "$use_gprof" = yes -o "$use_gcov" = yes])
186 AC_ARG_ENABLE([tests-rpath],
187 AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
188 [tests_use_rpath=$enableval], [tests_use_rpath=no])
189 AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
191 LIBEBL_SUBDIR="$PACKAGE"
192 AC_ARG_ENABLE([libebl-subdir],
193 AS_HELP_STRING([--enable-libebl-subdir=DIR],
194 [install libebl_CPU modules in $(libdir)/DIR]), [dnl
195 LIBEBL_SUBDIR="$enable_libebl_subdir"])
196 AC_SUBST([LIBEBL_SUBDIR])
197 AC_DEFINE_UNQUOTED(LIBEBL_SUBDIR, "$LIBEBL_SUBDIR")
198 AH_TEMPLATE([LIBEBL_SUBDIR], [$libdir subdirectory containing libebl modules.])
200 dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am
201 dnl conditional and config.h USE_ZLIB/USE_BZLIB #define.
204 eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
205 eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
206 eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
211 AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
212 AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
213 AM_CONDITIONAL(DEMANGLE, test "$ac_cv_lib_stdcpp___cxa_demangle" = yes)
215 dnl The directories with content.
218 dnl Commented out for now.
219 dnl AC_CONFIG_FILES([doc/Makefile])
222 AC_CONFIG_FILES([lib/Makefile])
225 AC_CONFIG_FILES([libelf/Makefile])
227 dnl Higher-level ELF support library.
228 AC_CONFIG_FILES([libebl/Makefile])
230 dnl DWARF-ELF Lower-level Functions support library.
231 AC_CONFIG_FILES([libdwelf/Makefile])
234 AC_CONFIG_FILES([libdw/Makefile])
236 dnl Higher-level DWARF support library.
237 AC_CONFIG_FILES([libdwfl/Makefile])
239 dnl CPU handling library.
240 AC_CONFIG_FILES([libcpu/Makefile])
242 dnl Assembler library.
243 AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
244 AC_CONFIG_FILES([libasm/Makefile])
246 dnl CPU-specific backend libraries.
247 AC_CONFIG_FILES([backends/Makefile])
250 AC_CONFIG_FILES([src/Makefile po/Makefile.in])
253 AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
254 AC_CONFIG_FILES([tests/Makefile])
256 # Get the definitions necessary to create the Makefiles in the po
257 # subdirectories. This is a small subset of the gettext rules.
258 AC_SUBST(USE_NLS, yes)
261 dnl Appended to the config.h file.
262 dnl We hide all kinds of configuration magic in lib/eu-config.h.
263 AH_BOTTOM([#include <eu-config.h>])
265 dnl Version compatibility header.
266 AC_CONFIG_FILES([version.h:config/version.h.in])
267 AC_SUBST([eu_version])
269 # 1.234<whatever> -> 1234<whatever>
270 case "$PACKAGE_VERSION" in
271 [[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
272 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
274 case "$eu_version" in
276 # 1234.567 -> "1234", "567"
277 eu_extra_version="${eu_version#*.}"
278 eu_version="${eu_version%%.*}"
279 case "$eu_extra_version" in
280 [[0-9]][[0-9]][[0-9]]) ;;
281 [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
282 [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
283 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
291 case "$eu_version" in
292 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
293 [[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
294 [[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
295 [[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
296 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
299 # Round up to the next release API (x.y) version.
300 eu_version=$(( (eu_version + 999) / 1000 ))
302 AC_CHECK_SIZEOF(long)
304 # On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead
305 # of the user_regs_struct from sys/user.h. They are structurally the same
306 # but we get either one or the other.
307 AC_CHECK_TYPE([struct user_regs_struct],
308 [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no],
309 [[#include <sys/ptrace.h>]
310 [#include <sys/time.h>]
311 [#include <sys/user.h>]])
312 if test "$sys_user_has_user_regs" = "yes"; then
313 AC_DEFINE(HAVE_SYS_USER_REGS, 1,
314 [Define to 1 if <sys/user.h> defines struct user_regs_struct])
317 # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests.
318 # Likewise in a 32-bit build on a host where $CC -m64 works.
320 # `$utrace_biarch' will be `-m64' even on an uniarch i386 machine.
321 CC_BIARCH="$CC $utrace_biarch"
322 AC_SUBST([CC_BIARCH])