configure.ac: Warn when --enable-dwz=no, but /usr/lib/debug/.dwz exists.
[platform/upstream/elfutils.git] / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2 dnl Configure input file for elfutils.                     -*-autoconf-*-
3 dnl
4 dnl Copyright (C) 1996-2013 Red Hat, Inc.
5 dnl
6 dnl This file is part of elfutils.
7 dnl
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.
12 dnl
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.
17 dnl
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])
21
22 AC_CONFIG_AUX_DIR([config])
23 AC_CONFIG_FILES([config/Makefile])
24
25 AC_COPYRIGHT([Copyright (C) 1996-2013 Red Hat, Inc.])
26 AC_PREREQ(2.63)                 dnl Minimum Autoconf version required.
27
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])
30 AM_MAINTAINER_MODE
31
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.])
37
38 AC_CONFIG_SRCDIR([libelf/libelf.h])
39 AC_CONFIG_FILES([Makefile])
40 AC_CONFIG_HEADERS([config.h])
41
42 AC_CONFIG_MACRO_DIR([m4])
43 AC_CONFIG_FILES([m4/Makefile])
44
45 dnl The RPM spec file.  We substitute a few values in the file.
46 AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in])
47
48
49 AC_CANONICAL_HOST
50
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
56 else
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?])
61
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.])])
70
71 AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
72
73 AC_ARG_ENABLE([dwz],
74 AS_HELP_STRING([--enable-dwz], [enable experimental GNU ref_alt FORM, dwz multi file support in libdw]),
75 enable_dwz=$enableval, enable_dwz=no)
76 AM_CONDITIONAL(ENABLE_DWZ, test "$enable_dwz" = yes)
77 AS_IF([test "$enable_dwz" = yes], [AC_DEFINE(ENABLE_DWZ)])
78 AS_IF([test "$enable_dwz" = no -a -d /usr/lib/debug/.dwz],
79       [AC_MSG_WARN([--enable-dwz disabled and /usr/lib/debug/.dwz exists, native tests might fail])])
80
81 AH_TEMPLATE([ENABLE_DWZ], [Defined if libdw should support GNU ref_alt FORM, dwz multi files.])
82
83 AC_PROG_CC
84 AC_PROG_RANLIB
85 AC_PROG_YACC
86 AM_PROG_LEX
87 # Only available since automake 1.12
88 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
89 AC_CHECK_TOOL([READELF], [readelf])
90 AC_CHECK_TOOL([NM], [nm])
91
92 AC_CACHE_CHECK([for gcc with C99 support], ac_cv_c99, [dnl
93 old_CFLAGS="$CFLAGS"
94 CFLAGS="$CFLAGS -std=gnu99"
95 AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
96 int foo (int a) { for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; }])],
97                   ac_cv_c99=yes, ac_cv_c99=no)
98 CFLAGS="$old_CFLAGS"])
99 AS_IF([test "x$ac_cv_c99" != xyes],
100       AC_MSG_ERROR([gcc with C99 support required]))
101
102 AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
103 # Use the same flags that we use for our DSOs, so the test is representative.
104 # Some old compiler/linker/libc combinations fail some ways and not others.
105 save_CFLAGS="$CFLAGS"
106 save_LDFLAGS="$LDFLAGS"
107 CFLAGS="-fpic $CFLAGS"
108 LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS"
109 AC_LINK_IFELSE([dnl
110 AC_LANG_PROGRAM([[#undef __thread
111 static __thread int a; int foo (int b) { return a + b; }]],
112                 [[exit (foo (0));]])],
113                ac_cv_tls=yes, ac_cv_tls=no)
114 CFLAGS="$save_CFLAGS"
115 LDFLAGS="$save_LDFLAGS"])
116 AS_IF([test "x$ac_cv_tls" != xyes],
117       AC_MSG_ERROR([__thread support required]))
118
119 dnl This test must come as early as possible after the compiler configuration
120 dnl tests, because the choice of the file model can (in principle) affect
121 dnl whether functions and headers are available, whether they work, etc.
122 AC_SYS_LARGEFILE
123
124 dnl Enable the linker to be build as a native-only linker.  By default it
125 dnl can handle all architectures but this comes at a cost.  A native
126 dnl will be slightly faster, small, and has fewer dependencies.
127 native_ld=no
128 AC_ARG_ENABLE([generic],
129 AS_HELP_STRING([--disable-generic], [do not build generic linker]), [dnl
130 if test "$enable_generic" = no; then
131   case "$host_cpu" in
132    i?86)
133     AC_DEFINE(NATIVE_ELF, 32)
134     native_ld=yes
135     base_cpu=i386
136     ;;
137    *)
138     AC_MSG_ERROR([no machine-specific linker for this configuration available])
139     ;;
140   esac
141 fi])
142 AH_TEMPLATE([NATIVE_ELF],
143 [Define to 32 or 64 if a specific implementation is wanted.])
144 AM_CONDITIONAL(NATIVE_LD, test "$native_ld" = yes)
145 dnl The automake generated Makefile cannot deal with macros in the name
146 dnl of files if at any time there is no such file, even if the filename
147 dnl would not be used.
148 AS_IF([test -z "$base_cpu"], [base_cpu=none])
149 AC_SUBST(base_cpu)
150 dnl Support to work around automake's inflexible dependency generation.
151 dnl See src/Makefile.am for more information.
152 AM_CONDITIONAL(NEVER, false)
153
154 dnl Enable debugging via mudflap.  This option will cause most libraries
155 dnl to be built as archives which are statically linked into the applications.
156 dnl All code, as far as possible, is compiled instrumented to catch all
157 dnl the bugs valgrind is able to catch.
158 use_mudflap=no
159 AC_ARG_ENABLE([mudflap],
160 AS_HELP_STRING([--enable-mudflap],
161 [build binaries with mudflap instrumentation]), [dnl
162 if test "x$enable_mudflap" = xyes; then
163   # Check whether the compiler support -fmudflap.
164   old_CFLAGS="$CFLAGS"
165   CFLAGS="$CFLAGS -fmudflap"
166   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[use_mudflap=yes],[use_mudflap=fail])
167   CFLAGS="$old_CFLAGS"
168 fi])
169 if test "$use_mudflap" = fail; then
170   AC_MSG_FAILURE([--enable-mudflap requires a compiler which understands this option])
171 fi
172 AM_CONDITIONAL(MUDFLAP, test "$use_mudflap" = yes)
173
174 dnl enable debugging of branch prediction.
175 AC_ARG_ENABLE([debugpred],
176 AS_HELP_STRING([--enable-debugpred],[build binaries with support to debug branch prediction]),
177 [use_debugpred=$enableval], [use_debugpred=no])
178 case $use_debugpred in
179  yes) use_debugpred=1 ;;
180  *)   use_debugpred=0 ;;
181 esac
182 AC_SUBST([DEBUGPRED], $use_debugpred)
183
184 dnl Enable gprof suport.
185 AC_ARG_ENABLE([gprof],
186 AS_HELP_STRING([--enable-gprof],[build binaries with gprof support]), [use_gprof=$enableval], [use_gprof=no])
187 if test "$use_gprof" = yes; then
188   CFLAGS="$CFLAGS -pg"
189   LDFLAGS="$LDFLAGS -pg"
190 fi
191 AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
192
193 # Enable gcov suport.
194 AC_ARG_ENABLE([gcov],
195 AS_HELP_STRING([--enable-gcov],[build binaries with gcov support]), [use_gcov=$enableval], [use_gcov=no])
196 if test "$use_gcov" = yes; then
197   CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
198   LDFLAGS="$LDFLAGS -fprofile-arcs"
199 fi
200 AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
201
202 AC_ARG_ENABLE([valgrind],
203 AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
204 [use_valgrind=$enableval], [use_valgrind=no])
205 if test "$use_valgrind" = yes; then
206   AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
207   if test "$HAVE_VALGRIND" = "no"; then
208     AC_MSG_ERROR([valgrind not found])
209   fi
210 fi
211 AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
212
213 AM_CONDITIONAL(BUILD_STATIC, [dnl
214 test "$use_mudflap" = yes -o "$use_gprof" = yes -o "$use_gcov" = yes])
215
216 AC_ARG_ENABLE([tests-rpath],
217 AS_HELP_STRING([--enable-tests-rpath],[build $ORIGIN-using rpath into tests]),
218                [tests_use_rpath=$enableval], [tests_use_rpath=no])
219 AM_CONDITIONAL(TESTS_RPATH, test "$tests_use_rpath" = yes)
220
221 LIBEBL_SUBDIR="$PACKAGE"
222 AC_ARG_ENABLE([libebl-subdir],
223 AS_HELP_STRING([--enable-libebl-subdir=DIR],
224 [install libebl_CPU modules in $(libdir)/DIR]), [dnl
225 LIBEBL_SUBDIR="$enable_libebl_subdir"])
226 AC_SUBST([LIBEBL_SUBDIR])
227 AC_DEFINE_UNQUOTED(LIBEBL_SUBDIR, "$LIBEBL_SUBDIR")
228 AH_TEMPLATE([LIBEBL_SUBDIR], [$libdir subdirectory containing libebl modules.])
229
230 dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am
231 dnl conditional and config.h USE_ZLIB/USE_BZLIB #define.
232 save_LIBS="$LIBS"
233 LIBS=
234 eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip)
235 eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2)
236 eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)])
237 zip_LIBS="$LIBS"
238 LIBS="$save_LIBS"
239 AC_SUBST([zip_LIBS])
240
241 AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl
242 AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])])
243 AM_CONDITIONAL(DEMANGLE, test "$ac_cv_lib_stdcpp___cxa_demangle" = yes)
244
245 dnl The directories with content.
246
247 dnl Documentation.
248 dnl Commented out for now.
249 dnl AC_CONFIG_FILES([doc/Makefile])
250
251 dnl Support library.
252 AC_CONFIG_FILES([lib/Makefile])
253
254 dnl ELF library.
255 AC_CONFIG_FILES([libelf/Makefile])
256
257 dnl Higher-level ELF support library.
258 AC_CONFIG_FILES([libebl/Makefile])
259
260 dnl DWARF library.
261 AC_CONFIG_FILES([libdw/Makefile])
262
263 dnl Higher-level DWARF support library.
264 AC_CONFIG_FILES([libdwfl/Makefile])
265
266 dnl CPU handling library.
267 AC_CONFIG_FILES([libcpu/Makefile])
268
269 dnl Assembler library.
270 AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
271 AC_CONFIG_FILES([libasm/Makefile])
272
273 dnl CPU-specific backend libraries.
274 AC_CONFIG_FILES([backends/Makefile])
275
276 dnl Tools.
277 AC_CONFIG_FILES([src/Makefile po/Makefile.in])
278
279 dnl Test suite.
280 AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
281 AC_CONFIG_FILES([tests/Makefile])
282
283 # Get the definitions necessary to create the Makefiles in the po
284 # subdirectories.  This is a small subset of the gettext rules.
285 AC_SUBST(USE_NLS, yes)
286 AM_PO_SUBDIRS
287
288 dnl Appended to the config.h file.
289 dnl We hide all kinds of configuration magic in lib/eu-config.h.
290 AH_BOTTOM([#include <eu-config.h>])
291
292 dnl Version compatibility header.
293 AC_CONFIG_FILES([version.h:config/version.h.in])
294 AC_SUBST([eu_version])
295
296 # 1.234<whatever> -> 1234<whatever>
297 case "$PACKAGE_VERSION" in
298 [[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;;
299 *)         AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
300 esac
301 case "$eu_version" in
302 *.*)
303   # 1234.567 -> "1234", "567"
304   eu_extra_version="${eu_version#*.}"
305   eu_version="${eu_version%%.*}"
306   case "$eu_extra_version" in
307   [[0-9]][[0-9]][[0-9]]) ;;
308   [[0-9]][[0-9]])       eu_extra_version="${eu_extra_version}0" ;;
309   [[0-9]])              eu_extra_version="${eu_extra_version}00" ;;
310   *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
311   esac
312   ;;
313 *)
314   eu_extra_version=000
315   ;;
316 esac
317
318 case "$eu_version" in
319       0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;;
320 [[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;;
321 [[0-9]][[0-9]][[0-9]])        eu_version="${eu_version}0$eu_extra_version" ;;
322 [[0-9]][[0-9]])               eu_version="${eu_version}00$eu_extra_version";;
323 *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;;
324 esac
325
326 # Round up to the next release API (x.y) version.
327 eu_version=$(( (eu_version + 999) / 1000 ))
328
329 AC_OUTPUT