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-2013 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.157],[https://bugzilla.redhat.com/],[elfutils])
22 AC_CONFIG_AUX_DIR([config])
23 AC_CONFIG_FILES([config/Makefile])
25 AC_COPYRIGHT([Copyright (C) 1996-2013 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], [enable thread safety of libraries]),
64 use_locks=$enableval, use_locks=no)
65 AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes)
66 AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)])
68 AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
71 AS_HELP_STRING([--enable-dwz], [enable experimental GNU ref_alt FORM, dwz multi file support in libdw]),
72 enable_dwz=$enableval, enable_dwz=no)
73 AM_CONDITIONAL(ENABLE_DWZ, test "$enable_dwz" = yes)
74 AS_IF([test "$enable_dwz" = yes], [AC_DEFINE(ENABLE_DWZ)])
76 AH_TEMPLATE([ENABLE_DWZ], [Defined if libdw should support GNU ref_alt FORM, dwz multi files.])
82 # Only available since automake 1.12
83 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
84 AC_CHECK_TOOL([READELF], [readelf])
85 AC_CHECK_TOOL([NM], [nm])
87 AC_CACHE_CHECK([for gcc with C99 support], ac_cv_c99, [dnl
89 CFLAGS="$CFLAGS -std=gnu99"
90 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
91 int foo (int a) { for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; }])],
92 ac_cv_c99=yes, ac_cv_c99=no)
93 CFLAGS="$old_CFLAGS"])
94 AS_IF([test "x$ac_cv_c99" != xyes],
95 AC_MSG_ERROR([gcc with C99 support required]))
97 AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
98 # Use the same flags that we use for our DSOs, so the test is representative.
99 # Some old compiler/linker/libc combinations fail some ways and not others.
100 save_CFLAGS="$CFLAGS"
101 save_LDFLAGS="$LDFLAGS"
102 CFLAGS="-fpic $CFLAGS"
103 LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS"
105 AC_LANG_PROGRAM([[#undef __thread
106 static __thread int a; int foo (int b) { return a + b; }]],
107 [[exit (foo (0));]])],
108 ac_cv_tls=yes, ac_cv_tls=no)
109 CFLAGS="$save_CFLAGS"
110 LDFLAGS="$save_LDFLAGS"])
111 AS_IF([test "x$ac_cv_tls" != xyes],
112 AC_MSG_ERROR([__thread support required]))
114 dnl This test must come as early as possible after the compiler configuration
115 dnl tests, because the choice of the file model can (in principle) affect
116 dnl whether functions and headers are available, whether they work, etc.
119 dnl Enable the linker to be build as a native-only linker. By default it
120 dnl can handle all architectures but this comes at a cost. A native
121 dnl will be slightly faster, small, and has fewer dependencies.
123 AC_ARG_ENABLE([generic],
124 AS_HELP_STRING([--disable-generic], [do not build generic linker]), [dnl
125 if test "$enable_generic" = no; then
128 AC_DEFINE(NATIVE_ELF, 32)
133 AC_MSG_ERROR([no machine-specific linker for this configuration available])
137 AH_TEMPLATE([NATIVE_ELF],
138 [Define to 32 or 64 if a specific implementation is wanted.])
139 AM_CONDITIONAL(NATIVE_LD, test "$native_ld" = yes)
140 dnl The automake generated Makefile cannot deal with macros in the name
141 dnl of files if at any time there is no such file, even if the filename
142 dnl would not be used.
143 AS_IF([test -z "$base_cpu"], [base_cpu=none])
145 dnl Support to work around automake's inflexible dependency generation.
146 dnl See src/Makefile.am for more information.
147 AM_CONDITIONAL(NEVER, false)
149 dnl Enable debugging via mudflap. This option will cause most libraries
150 dnl to be built as archives which are statically linked into the applications.
151 dnl All code, as far as possible, is compiled instrumented to catch all
152 dnl the bugs valgrind is able to catch.
154 AC_ARG_ENABLE([mudflap],
155 AS_HELP_STRING([--enable-mudflap],
156 [build binaries with mudflap instrumentation]), [dnl
157 if test "x$enable_mudflap" = xyes; then
158 # Check whether the compiler support -fmudflap.
160 CFLAGS="$CFLAGS -fmudflap"
161 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[use_mudflap=yes],[use_mudflap=fail])
164 if test "$use_mudflap" = fail; then
165 AC_MSG_FAILURE([--enable-mudflap requires a compiler which understands this option])
167 AM_CONDITIONAL(MUDFLAP, test "$use_mudflap" = yes)
169 dnl enable debugging of branch prediction.
170 AC_ARG_ENABLE([debugpred],
171 AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
172 [use_debugpred=$enableval], [use_debugpred=no])
173 case $use_debugpred in
174 yes) use_debugpred=1 ;;
175 *) use_debugpred=0 ;;
177 AC_SUBST([DEBUGPRED], $use_debugpred)
179 dnl Enable gprof suport.
180 AC_ARG_ENABLE([gprof],
181 AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
182 if test "$use_gprof" = yes; then
184 LDFLAGS="$LDFLAGS -pg"
186 AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
188 # Enable gcov suport.
189 AC_ARG_ENABLE([gcov],
190 AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
191 if test "$use_gcov" = yes; then
192 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
193 LDFLAGS="$LDFLAGS -fprofile-arcs"
195 AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
197 AC_ARG_ENABLE([valgrind],
198 AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
199 [use_valgrind=$enableval], [use_valgrind=no])
200 if test "$use_valgrind" = yes; then
201 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
202 if test "$HAVE_VALGRIND" = "no"; then
203 AC_MSG_ERROR([valgrind not found])
206 AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
208 AM_CONDITIONAL(BUILD_STATIC, [dnl
209 test "$use_mudflap" = yes -o "$use_gprof" = yes -o "$use_gcov" = yes])
211 AC_ARG_ENABLE([tests-rpath],
212 AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
213 [tests_use_rpath=$enableval], [tests_use_rpath=no])
214 AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
216 LIBEBL_SUBDIR="$PACKAGE"
217 AC_ARG_ENABLE([libebl-subdir],
218 AS_HELP_STRING([--enable-libebl-subdir=DIR],
219 [install libebl_CPU modules in $(libdir)/DIR]), [dnl
220 LIBEBL_SUBDIR="$enable_libebl_subdir"])
221 AC_SUBST([LIBEBL_SUBDIR])
222 AC_DEFINE_UNQUOTED(LIBEBL_SUBDIR, "$LIBEBL_SUBDIR")
223 AH_TEMPLATE([LIBEBL_SUBDIR], [$libdir subdirectory containing libebl modules.])
225 dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am
226 dnl conditional and config.h USE_ZLIB/USE_BZLIB #define.
229 eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
230 eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
231 eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
236 AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
237 AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
238 AM_CONDITIONAL(DEMANGLE, test "$ac_cv_lib_stdcpp___cxa_demangle" = yes)
240 dnl The directories with content.
243 dnl Commented out for now.
244 dnl AC_CONFIG_FILES([doc/Makefile])
247 AC_CONFIG_FILES([lib/Makefile])
250 AC_CONFIG_FILES([libelf/Makefile])
252 dnl Higher-level ELF support library.
253 AC_CONFIG_FILES([libebl/Makefile])
256 AC_CONFIG_FILES([libdw/Makefile])
258 dnl Higher-level DWARF support library.
259 AC_CONFIG_FILES([libdwfl/Makefile])
261 dnl CPU handling library.
262 AC_CONFIG_FILES([libcpu/Makefile])
264 dnl Assembler library.
265 AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
266 AC_CONFIG_FILES([libasm/Makefile])
268 dnl CPU-specific backend libraries.
269 AC_CONFIG_FILES([backends/Makefile])
272 AC_CONFIG_FILES([src/Makefile po/Makefile.in])
275 AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
276 AC_CONFIG_FILES([tests/Makefile])
278 # Get the definitions necessary to create the Makefiles in the po
279 # subdirectories. This is a small subset of the gettext rules.
280 AC_SUBST(USE_NLS, yes)
283 dnl Appended to the config.h file.
284 dnl We hide all kinds of configuration magic in lib/eu-config.h.
285 AH_BOTTOM([#include <eu-config.h>])
287 dnl Version compatibility header.
288 AC_CONFIG_FILES([version.h:config/version.h.in])
289 AC_SUBST([eu_version])
291 # 1.234<whatever> -> 1234<whatever>
292 case "$PACKAGE_VERSION" in
293 [[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
294 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
296 case "$eu_version" in
298 # 1234.567 -> "1234", "567"
299 eu_extra_version="${eu_version#*.}"
300 eu_version="${eu_version%%.*}"
301 case "$eu_extra_version" in
302 [[0-9]][[0-9]][[0-9]]) ;;
303 [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;;
304 [[0-9]]) eu_extra_version="${eu_extra_version}00" ;;
305 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
313 case "$eu_version" in
314 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
315 [[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
316 [[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;;
317 [[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";;
318 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
321 # Round up to the next release API (x.y) version.
322 eu_version=$(( (eu_version + 999) / 1000 ))