Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 1 | dnl Process this file with autoconf to produce a configure script. |
| 2 | dnl Configure input file for elfutils. -*-autoconf-*- |
| 3 | dnl |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 4 | dnl Copyright (C) 1996-2014 Red Hat, Inc. |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 5 | dnl |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 6 | dnl This file is part of elfutils. |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 7 | dnl |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 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. |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 12 | dnl |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 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. |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 17 | dnl |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 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.161],[https://bugzilla.redhat.com/],[elfutils]) |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 21 | |
| 22 | AC_CONFIG_AUX_DIR([config]) |
| 23 | AC_CONFIG_FILES([config/Makefile]) |
| 24 | |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 25 | AC_COPYRIGHT([Copyright (C) 1996-2014 Red Hat, Inc.]) |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 26 | AC_PREREQ(2.63) dnl Minimum Autoconf version required. |
| 27 | |
| 28 | dnl We use GNU make extensions; automake 1.10 defaults to -Wportability. |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 29 | AM_INIT_AUTOMAKE([gnits 1.11 -Wno-portability dist-bzip2 no-dist-gzip parallel-tests]) |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 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], |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 63 | AS_HELP_STRING([--enable-thread-safety], |
| 64 | [enable thread safety of libraries EXPERIMENTAL]), |
| 65 | use_locks=$enableval, use_locks=no) |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 66 | AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes) |
| 67 | AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)]) |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 68 | AS_IF([test "$use_locks" = yes], |
| 69 | [AC_MSG_WARN([thread-safety is EXPERIMENTAL tests might fail.])]) |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 70 | |
| 71 | AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.]) |
| 72 | |
| 73 | AC_PROG_CC |
| 74 | AC_PROG_RANLIB |
| 75 | AC_PROG_YACC |
| 76 | AM_PROG_LEX |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 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]) |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 81 | |
| 82 | AC_CACHE_CHECK([for gcc with C99 support], ac_cv_c99, [dnl |
| 83 | old_CFLAGS="$CFLAGS" |
| 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])) |
| 91 | |
| 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. |
| 95 | save_CFLAGS="$CFLAGS" |
| 96 | save_LDFLAGS="$LDFLAGS" |
| 97 | CFLAGS="-fpic $CFLAGS" |
| 98 | LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS" |
| 99 | AC_LINK_IFELSE([dnl |
| 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])) |
| 108 | |
| 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. |
| 112 | AC_SYS_LARGEFILE |
| 113 | |
| 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. |
| 117 | native_ld=no |
| 118 | AC_ARG_ENABLE([generic], |
| 119 | AS_HELP_STRING([--disable-generic], [do not build generic linker]), [dnl |
| 120 | if test "$enable_generic" = no; then |
| 121 | case "$host_cpu" in |
| 122 | i?86) |
| 123 | AC_DEFINE(NATIVE_ELF, 32) |
| 124 | native_ld=yes |
| 125 | base_cpu=i386 |
| 126 | ;; |
| 127 | *) |
| 128 | AC_MSG_ERROR([no machine-specific linker for this configuration available]) |
| 129 | ;; |
| 130 | esac |
| 131 | fi]) |
| 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]) |
| 139 | AC_SUBST(base_cpu) |
| 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) |
| 143 | |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 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 ;; |
| 151 | esac |
| 152 | AC_SUBST([DEBUGPRED], $use_debugpred) |
| 153 | |
| 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 |
| 158 | CFLAGS="$CFLAGS -pg" |
| 159 | LDFLAGS="$LDFLAGS -pg" |
| 160 | fi |
| 161 | AM_CONDITIONAL(GPROF, test "$use_gprof" = yes) |
| 162 | |
| 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" |
| 169 | fi |
| 170 | AM_CONDITIONAL(GCOV, test "$use_gcov" = yes) |
| 171 | |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 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]) |
| 179 | fi |
| 180 | fi |
| 181 | AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes) |
| 182 | |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 183 | AM_CONDITIONAL(BUILD_STATIC, [dnl |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 184 | test "$use_gprof" = yes -o "$use_gcov" = yes]) |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 185 | |
| 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) |
| 190 | |
| 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.]) |
| 199 | |
| 200 | dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am |
| 201 | dnl conditional and config.h USE_ZLIB/USE_BZLIB #define. |
| 202 | save_LIBS="$LIBS" |
| 203 | LIBS= |
| 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)]) |
| 207 | zip_LIBS="$LIBS" |
| 208 | LIBS="$save_LIBS" |
| 209 | AC_SUBST([zip_LIBS]) |
| 210 | |
| 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) |
| 214 | |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 215 | AC_ARG_ENABLE([textrelcheck], |
| 216 | AS_HELP_STRING([--disable-textrelcheck], |
| 217 | [Disable textrelcheck being a fatal error])) |
| 218 | AM_CONDITIONAL(FATAL_TEXTREL, [test "x$enable_textrelcheck" != "xno"]) |
| 219 | |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 220 | dnl The directories with content. |
| 221 | |
| 222 | dnl Documentation. |
| 223 | dnl Commented out for now. |
| 224 | dnl AC_CONFIG_FILES([doc/Makefile]) |
| 225 | |
| 226 | dnl Support library. |
| 227 | AC_CONFIG_FILES([lib/Makefile]) |
| 228 | |
| 229 | dnl ELF library. |
| 230 | AC_CONFIG_FILES([libelf/Makefile]) |
| 231 | |
| 232 | dnl Higher-level ELF support library. |
| 233 | AC_CONFIG_FILES([libebl/Makefile]) |
| 234 | |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 235 | dnl DWARF-ELF Lower-level Functions support library. |
| 236 | AC_CONFIG_FILES([libdwelf/Makefile]) |
| 237 | |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 238 | dnl DWARF library. |
| 239 | AC_CONFIG_FILES([libdw/Makefile]) |
| 240 | |
| 241 | dnl Higher-level DWARF support library. |
| 242 | AC_CONFIG_FILES([libdwfl/Makefile]) |
| 243 | |
| 244 | dnl CPU handling library. |
| 245 | AC_CONFIG_FILES([libcpu/Makefile]) |
| 246 | |
| 247 | dnl Assembler library. |
| 248 | AM_CONDITIONAL(HAVE_LIBASM, true)dnl Used in tests/Makefile.am, which see. |
| 249 | AC_CONFIG_FILES([libasm/Makefile]) |
| 250 | |
| 251 | dnl CPU-specific backend libraries. |
| 252 | AC_CONFIG_FILES([backends/Makefile]) |
| 253 | |
| 254 | dnl Tools. |
| 255 | AC_CONFIG_FILES([src/Makefile po/Makefile.in]) |
| 256 | |
| 257 | dnl Test suite. |
| 258 | AM_CONDITIONAL(STANDALONE, false)dnl Used in tests/Makefile.am, which see. |
| 259 | AC_CONFIG_FILES([tests/Makefile]) |
| 260 | |
| 261 | # Get the definitions necessary to create the Makefiles in the po |
| 262 | # subdirectories. This is a small subset of the gettext rules. |
| 263 | AC_SUBST(USE_NLS, yes) |
| 264 | AM_PO_SUBDIRS |
| 265 | |
| 266 | dnl Appended to the config.h file. |
| 267 | dnl We hide all kinds of configuration magic in lib/eu-config.h. |
| 268 | AH_BOTTOM([#include <eu-config.h>]) |
| 269 | |
| 270 | dnl Version compatibility header. |
| 271 | AC_CONFIG_FILES([version.h:config/version.h.in]) |
| 272 | AC_SUBST([eu_version]) |
| 273 | |
| 274 | # 1.234<whatever> -> 1234<whatever> |
| 275 | case "$PACKAGE_VERSION" in |
| 276 | [[0-9]].*) eu_version=`echo "$PACKAGE_VERSION" | sed 's@\.@@'` ;; |
| 277 | *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;; |
| 278 | esac |
| 279 | case "$eu_version" in |
| 280 | *.*) |
| 281 | # 1234.567 -> "1234", "567" |
| 282 | eu_extra_version="${eu_version#*.}" |
| 283 | eu_version="${eu_version%%.*}" |
| 284 | case "$eu_extra_version" in |
| 285 | [[0-9]][[0-9]][[0-9]]) ;; |
| 286 | [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;; |
| 287 | [[0-9]]) eu_extra_version="${eu_extra_version}00" ;; |
| 288 | *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;; |
| 289 | esac |
| 290 | ;; |
| 291 | *) |
| 292 | eu_extra_version=000 |
| 293 | ;; |
| 294 | esac |
| 295 | |
| 296 | case "$eu_version" in |
| 297 | 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;; |
| 298 | [[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;; |
| 299 | [[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;; |
| 300 | [[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";; |
| 301 | *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;; |
| 302 | esac |
| 303 | |
| 304 | # Round up to the next release API (x.y) version. |
| 305 | eu_version=$(( (eu_version + 999) / 1000 )) |
| 306 | |
Elliott Hughes | 0333382 | 2015-02-18 22:19:45 -0800 | [diff] [blame] | 307 | AC_CHECK_SIZEOF(long) |
| 308 | |
| 309 | # On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead |
| 310 | # of the user_regs_struct from sys/user.h. They are structurally the same |
| 311 | # but we get either one or the other. |
| 312 | AC_CHECK_TYPE([struct user_regs_struct], |
| 313 | [sys_user_has_user_regs=yes], [sys_user_has_user_regs=no], |
| 314 | [[#include <sys/ptrace.h>] |
| 315 | [#include <sys/time.h>] |
| 316 | [#include <sys/user.h>]]) |
| 317 | if test "$sys_user_has_user_regs" = "yes"; then |
| 318 | AC_DEFINE(HAVE_SYS_USER_REGS, 1, |
| 319 | [Define to 1 if <sys/user.h> defines struct user_regs_struct]) |
| 320 | fi |
| 321 | |
| 322 | # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests. |
| 323 | # Likewise in a 32-bit build on a host where $CC -m64 works. |
| 324 | utrace_BIARCH |
| 325 | # `$utrace_biarch' will be `-m64' even on an uniarch i386 machine. |
| 326 | CC_BIARCH="$CC $utrace_biarch" |
| 327 | AC_SUBST([CC_BIARCH]) |
| 328 | |
Ben Cheng | 25b3c04 | 2013-11-20 14:45:36 -0800 | [diff] [blame] | 329 | AC_OUTPUT |