Check for prefixed ar, readelf, and nm
[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], [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)])
67
68 AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
69
70 AC_ARG_ENABLE([dwz],
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)])
75
76 AH_TEMPLATE([ENABLE_DWZ], [Defined if libdw should support GNU ref_alt FORM, dwz multi files.])
77
78 AC_PROG_CC
79 AC_PROG_RANLIB
80 AC_PROG_YACC
81 AM_PROG_LEX
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])
86
87 AC_CACHE_CHECK([for gcc with C99 support], ac_cv_c99, [dnl
88 old_CFLAGS="$CFLAGS"
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]))
96
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"
104 AC_LINK_IFELSE([dnl
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]))
113
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.
117 AC_SYS_LARGEFILE
118
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.
122 native_ld=no
123 AC_ARG_ENABLE([generic],
124 AS_HELP_STRING([--disable-generic], [do not build generic linker]), [dnl
125 if test "$enable_generic" = no; then
126   case "$host_cpu" in
127    i?86)
128     AC_DEFINE(NATIVE_ELF, 32)
129     native_ld=yes
130     base_cpu=i386
131     ;;
132    *)
133     AC_MSG_ERROR([no machine-specific linker for this configuration available])
134     ;;
135   esac
136 fi])
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])
144 AC_SUBST(base_cpu)
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)
148
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.
153 use_mudflap=no
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.
159   old_CFLAGS="$CFLAGS"
160   CFLAGS="$CFLAGS -fmudflap"
161   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[use_mudflap=yes],[use_mudflap=fail])
162   CFLAGS="$old_CFLAGS"
163 fi])
164 if test "$use_mudflap" = fail; then
165   AC_MSG_FAILURE([--enable-mudflap requires a compiler which understands this option])
166 fi
167 AM_CONDITIONAL(MUDFLAP, test "$use_mudflap" = yes)
168
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 ;;
176 esac
177 AC_SUBST([DEBUGPRED], $use_debugpred)
178
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
183   CFLAGS="$CFLAGS -pg"
184   LDFLAGS="$LDFLAGS -pg"
185 fi
186 AM_CONDITIONAL(GPROF, test "$use_gprof" = yes)
187
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"
194 fi
195 AM_CONDITIONAL(GCOV, test "$use_gcov" = yes)
196
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])
204   fi
205 fi
206 AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
207
208 AM_CONDITIONAL(BUILD_STATIC, [dnl
209 test "$use_mudflap" = yes -o "$use_gprof" = yes -o "$use_gcov" = yes])
210
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)
215
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.])
224
225 dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am
226 dnl conditional and config.h USE_ZLIB/USE_BZLIB #define.
227 save_LIBS="$LIBS"
228 LIBS=
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)])
232 zip_LIBS="$LIBS"
233 LIBS="$save_LIBS"
234 AC_SUBST([zip_LIBS])
235
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)
239
240 dnl The directories with content.
241
242 dnl Documentation.
243 dnl Commented out for now.
244 dnl AC_CONFIG_FILES([doc/Makefile])
245
246 dnl Support library.
247 AC_CONFIG_FILES([lib/Makefile])
248
249 dnl ELF library.
250 AC_CONFIG_FILES([libelf/Makefile])
251
252 dnl Higher-level ELF support library.
253 AC_CONFIG_FILES([libebl/Makefile])
254
255 dnl DWARF library.
256 AC_CONFIG_FILES([libdw/Makefile])
257
258 dnl Higher-level DWARF support library.
259 AC_CONFIG_FILES([libdwfl/Makefile])
260
261 dnl CPU handling library.
262 AC_CONFIG_FILES([libcpu/Makefile])
263
264 dnl Assembler library.
265 AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see.
266 AC_CONFIG_FILES([libasm/Makefile])
267
268 dnl CPU-specific backend libraries.
269 AC_CONFIG_FILES([backends/Makefile])
270
271 dnl Tools.
272 AC_CONFIG_FILES([src/Makefile po/Makefile.in])
273
274 dnl Test suite.
275 AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see.
276 AC_CONFIG_FILES([tests/Makefile])
277
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)
281 AM_PO_SUBDIRS
282
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>])
286
287 dnl Version compatibility header.
288 AC_CONFIG_FILES([version.h:config/version.h.in])
289 AC_SUBST([eu_version])
290
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']) ;;
295 esac
296 case "$eu_version" in
297 *.*)
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']) ;;
306   esac
307   ;;
308 *)
309   eu_extra_version=000
310   ;;
311 esac
312
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']) ;;
319 esac
320
321 # Round up to the next release API (x.y) version.
322 eu_version=$(( (eu_version + 999) / 1000 ))
323
324 AC_OUTPUT