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