diff options
Diffstat (limited to 'configure.ac')
| -rw-r--r-- | configure.ac | 313 |
1 files changed, 285 insertions, 28 deletions
diff --git a/configure.ac b/configure.ac index c2c1d90b..1bcfd2bb 100644 --- a/configure.ac +++ b/configure.ac @@ -63,6 +63,40 @@ AC_CONFIG_FILES([elfutils.spec:config/elfutils.spec.in]) AC_CANONICAL_HOST +case "$host_os" in + cygwin*|mingw*|msys*) + LIBEXT=".dll" + LIBPREFIX="" + eu_postfix_lib_version="no" + ;; + darwin) + LIBEXT=".dylib" + LIBPREFIX="lib" + eu_postfix_lib_version="no" + ;; + *) + LIBEXT=".so" + LIBPREFIX="lib" + eu_postfix_lib_version="yes" + ;; +esac + +AC_SUBST([LIBEXT]) +AC_DEFINE_UNQUOTED(LIBEXT, "$LIBEXT") +AH_TEMPLATE([LIBEXT], [Host system file name extension for dynamic libraries.]) +AC_SUBST([LIBPREFIX]) +AC_DEFINE_UNQUOTED(LIBPREFIX, "$LIBPREFIX") +AH_TEMPLATE([LIBPREFIX], [Host system file name prefix for dynamic libraries.]) +AM_CONDITIONAL(POSTFIX_LIB_VERSION, test "$eu_postfix_lib_version" = "yes") +AM_CONDITIONAL(NATIVE_ELF, test "$LIBEXT" = ".so") +AM_CONDITIONAL(NATIVE_PE, test "$LIBEXT" = ".dll") +AM_CONDITIONAL(NATIVE_MACHO, test "$LIBEXT" = ".dylib") + +eu_LIBNAME(elf,1) +eu_LIBNAME(dw,1) +eu_LIBNAME(asm,1) +eu_LIBNAME(eu_compat,1) + AC_ARG_ENABLE(deterministic-archives, [AS_HELP_STRING([--enable-deterministic-archives], [ar and ranlib default to -D behavior])], [ @@ -85,7 +119,22 @@ AS_IF([test "$use_locks" = yes], AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.]) +AC_ARG_ENABLE([gnulib], +AS_HELP_STRING([--enable-gnulib], + [use gnulib modules to replace functionality missing from libc. This affects the license choices for the resulting binaries.]), + use_gnulib=$enableval, use_gnulib=no) +AM_CONDITIONAL(USE_GNULIB, test "$use_gnulib" = yes) + +AC_ARG_ENABLE([selfcontained], +AS_HELP_STRING([--enable-selfcontained], + [install extra headers to enable including and linking the libraries on non-GNU systems]), + selfcontained=$enableval, selfcontained=no) +AM_CONDITIONAL(SELFCONTAINED, test "$selfcontained" = yes) + AC_PROG_CC + +gl_EARLY + AC_PROG_RANLIB AC_PROG_YACC AM_PROG_LEX @@ -127,13 +176,117 @@ CFLAGS="$old_CFLAGS"]) AS_IF([test "x$ac_cv_c99" != xyes], AC_MSG_ERROR([gcc with GNU99 support required])) +AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))], + ac_cv_visibility, [dnl +save_CFLAGS="$CFLAGS" +CFLAGS="$save_CFLAGS -Werror" +AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl +int __attribute__((visibility("hidden"))) +foo (int a) +{ + return a; +}])], ac_cv_visibility=yes, ac_cv_visibility=no) +CFLAGS="$save_CFLAGS"]) +if test "$ac_cv_visibility" = "yes"; then + AC_DEFINE([HAVE_VISIBILITY], [1], + [Defined if __attribute__((visibility())) is supported]) +fi + +AC_CACHE_CHECK([whether gcc supports __attribute__((gcc_struct))], + ac_cv_gcc_struct, [dnl +save_CFLAGS="$CFLAGS" +CFLAGS="$save_CFLAGS -Werror" +AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl +struct test { int x; } __attribute__((gcc_struct)); +])], ac_cv_gcc_struct=yes, ac_cv_gcc_struct=no) +CFLAGS="$save_CFLAGS"]) +if test "$ac_cv_gcc_struct" = "yes"; then + AC_DEFINE([HAVE_GCC_STRUCT], [1], + [Defined if __attribute__((gcc_struct)) is supported]) +fi + +AC_CACHE_CHECK([whether gcc supports -fPIC], ac_cv_fpic, [dnl +save_CFLAGS="$CFLAGS" +CFLAGS="$save_CFLAGS -fPIC -Werror" +AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpic=yes, ac_cv_fpic=no) +CFLAGS="$save_CFLAGS" +]) +if test "$ac_cv_fpic" = "yes"; then + fpic_CFLAGS="-fPIC" +else + fpic_CFLAGS="" +fi +AC_SUBST([fpic_CFLAGS]) + +AC_CACHE_CHECK([whether gcc supports -fPIE], ac_cv_fpie, [dnl +save_CFLAGS="$CFLAGS" +CFLAGS="$save_CFLAGS -fPIE -Werror" +AC_COMPILE_IFELSE([AC_LANG_SOURCE()], ac_cv_fpie=yes, ac_cv_fpie=no) +CFLAGS="$save_CFLAGS" +]) +if test "$ac_cv_fpie" = "yes"; then + fpie_CFLAGS="-fPIE" +else + fpie_CFLAGS="" +fi +AC_SUBST([fpie_CFLAGS]) + +dso_LDFLAGS="-shared" + +ZDEFS_LDFLAGS="-Wl,-z,defs" +AC_CACHE_CHECK([whether gcc supports $ZDEFS_LDFLAGS], ac_cv_zdefs, [dnl +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$ZDEFS_LDFLAGS $save_LDFLAGS" +AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zdefs=yes, ac_cv_zdefs=no) +LDFLAGS="$save_LDFLAGS" +]) +if test "$ac_cv_zdefs" = "yes"; then + dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS" +fi + +ZRELRO_LDFLAGS="-Wl,-z,relro" +AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$ZRELRO_LDFLAGS $save_LDFLAGS" +AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_zrelro=yes, ac_cv_zrelro=no) +LDFLAGS="$save_LDFLAGS" +]) +if test "$ac_cv_zrelro" = "yes"; then + dso_LDFLAGS="$dso_LDFLAGS $ZRELRO_LDFLAGS" +fi + +AC_SUBST([dso_LDFLAGS]) + +rdynamic_LDFLAGS="-rdynamic" +AC_CACHE_CHECK([whether gcc supports $rdynamic_LDFLAGS], ac_cv_rdynamic, [dnl +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$rdynamic_LDFLAGS $save_LDFLAGS" +AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_rdynamic=yes, ac_cv_rdynamic=no) +LDFLAGS="$save_LDFLAGS" +]) +if test "$ac_cv_rdynamic" = "no"; then + rdynamic_LDFLAGS="" +fi + +AC_CACHE_CHECK([for rpath support], ac_cv_rpath, [dnl +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$save_LDFLAGS -Wl,--enable-new-dtags,-rpath,/foo/bar" +AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_rpath=yes, ac_cv_rpath=no) +LDFLAGS="$save_LDFLAGS" +]) +if test "$ac_cv_rpath" = "no"; then + AC_MSG_WARN([rpath is not supported. libdw will not automatically + find the ebl backends.]) +fi +AM_CONDITIONAL(RPATH, test "$ac_cv_rpath" = "yes") + AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl # Use the same flags that we use for our DSOs, so the test is representative. # Some old compiler/linker/libc combinations fail some ways and not others. save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" -CFLAGS="-fPIC $CFLAGS" -LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS" +CFLAGS="$fpic_CFLAGS $CFLAGS" +LDFLAGS="$dso_LDFLAGS $LDFLAGS" AC_LINK_IFELSE([dnl AC_LANG_PROGRAM([[#include <stdlib.h> #undef __thread @@ -150,13 +303,17 @@ dnl tests, because the choice of the file model can (in principle) affect dnl whether functions and headers are available, whether they work, etc. AC_SYS_LARGEFILE -dnl Older glibc had a broken fts that didn't work with Large File Systems. -dnl We want the version that can handler LFS, but include workaround if we -dnl get a bad one. Add define to CFLAGS (not AC_DEFINE it) since we need to -dnl check it before including config.h (which might define _FILE_OFFSET_BITS). -AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts, - [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <fts.h>]])], - ac_cv_bad_fts=no, ac_cv_bad_fts=yes)]) +AC_CHECK_HEADER(fts.h) +AM_CONDITIONAL(HAVE_FTS_H, [test "x$ac_cv_header_fts_h" = "xyes"]) +if test "x$ac_cv_header_fts_h" = "xyes"; then + dnl Older glibc had a broken fts that didn't work with Large File Systems. + dnl We want the version that can handler LFS, but include workaround if we + dnl get a bad one. Add define to CFLAGS (not AC_DEFINE it) since we need to + dnl check it before including config.h (which might define _FILE_OFFSET_BITS). + AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <fts.h>]])], + ac_cv_bad_fts=no, ac_cv_bad_fts=yes)]) +fi AS_IF([test "x$ac_cv_bad_fts" = "xyes"], [CFLAGS="$CFLAGS -DBAD_FTS=1"]) # See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already @@ -237,7 +394,8 @@ AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]), if test "$use_valgrind" = yes; then AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no) if test "$HAVE_VALGRIND" = "no"; then - AC_MSG_ERROR([valgrind not found]) + AC_MSG_WARN([valgrind not found]) + use_valgrind=no fi fi AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes) @@ -281,13 +439,25 @@ zip_LIBS="$LIBS" LIBS="$save_LIBS" AC_SUBST([zip_LIBS]) -AC_CHECK_DECLS([memrchr, rawmemchr],[],[], - [#define _GNU_SOURCE - #include <string.h>]) AC_CHECK_DECLS([powerof2],[],[],[#include <sys/param.h>]) -AC_CHECK_DECLS([mempcpy],[],[], + +AC_CHECK_DECLS([basename],[],[], [#define _GNU_SOURCE #include <string.h>]) +AM_CONDITIONAL(HAVE_BASENAME, [test "x$ac_cv_have_decl_basename" = "xyes"]) + +if test "x$ac_cv_have_decl_basename" != "xyes"; then + AC_DEFINE([USE_REPLACEMENT_BASENAME], [1], [Use hand-rolled basename() replacement.]) +fi +AH_VERBATIM([USE_REPLACEMENT_BASENAME], + [/* Define basename() here if it is not available from a system header. */ +#undef USE_REPLACEMENT_BASENAME +#ifdef USE_REPLACEMENT_BASENAME +char *basename(const char *path); +#endif +]) + +AC_FUNC_STRERROR_R AC_CHECK_LIB([stdc++], [__cxa_demangle], [dnl AC_DEFINE([USE_DEMANGLE], [1], [Defined if demangling is enabled])]) @@ -305,6 +475,18 @@ AS_IF([test "x$enable_textrelcheck" != "xno"], AC_ARG_ENABLE([symbol-versioning], AS_HELP_STRING([--disable-symbol-versioning], [Disable symbol versioning in shared objects])) + +AC_CACHE_CHECK([whether symbol versioning is supported], ac_cv_symbol_versioning, [dnl +AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl +#define NEW_VERSION(name, version) \ + asm (".symver " #name "," #name "@@@" #version); +int foo(int x) { return x + 1; } +NEW_VERSION (foo, ELFUTILS_12.12) +])], ac_cv_symbol_versioning=yes, ac_cv_symbol_versioning=no)]) +if test "$ac_cv_symbol_versioning" = "no"; then + enable_symbol_versioning=no +fi + AM_CONDITIONAL(SYMBOL_VERSIONING, [test "x$enable_symbol_versioning" != "xno"]) AS_IF([test "x$enable_symbol_versioning" = "xno"], [AC_MSG_WARN([Disabling symbol versioning breaks ABI compatibility.]) @@ -360,37 +542,112 @@ CFLAGS="$old_CFLAGS"]) AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING, [test "x$ac_cv_implicit_fallthrough" != "xno"]) -dnl Check if we have argp available from our libc +dnl Check if gettext is available form libc AC_LINK_IFELSE( [AC_LANG_PROGRAM( - [#include <argp.h>], - [int argc=1; char *argv[]={"test"}; argp_parse(0,argc,&argv,0,0,0); return 0;] + [#include <libintl.h>], + [dgettext("foo", "bar"); return 0;] )], - [libc_has_argp="true"], - [libc_has_argp="false"] + [libc_has_gettext="true"], + [libc_has_gettext="false"] ) -dnl If our libc doesn't provide argp, then test for libargp -if test "$libc_has_argp" = "false" ; then - AC_MSG_WARN("libc does not have argp") - AC_CHECK_LIB([argp], [argp_parse], [have_argp="true"], [have_argp="false"]) +dnl If our libc doesn't provide gettext, then test for libintl +if test "$libc_has_gettext" = "false" ; then + AC_MSG_WARN("libc does not have gettext") + AC_CHECK_LIB([intl], [dgettext], [have_intl="true"], [have_intl="false"], [-liconv]) - if test "$have_argp" = "false"; then - AC_MSG_ERROR("no libargp found") + if test "$have_intl" = "false"; then + AC_MSG_ERROR("no libintl found") else - argp_LDADD="-largp" + intl_LDADD="-lintl -liconv" fi else - argp_LDADD="" + intl_LDADD="" +fi +AC_SUBST([intl_LDADD]) + +AC_CHECK_DECLS([BYTE_ORDER], [], [], [[#include <endian.h>]]) +AM_CONDITIONAL(HAVE_ENDIAN_H, [test "x$ac_cv_have_decl_BYTE_ORDER" = "xyes"]) + +AC_CHECK_DECLS([bswap_32], [], [], [[#include <byteswap.h>]]) +AM_CONDITIONAL(HAVE_BYTESWAP_H, [test "x$ac_cv_have_decl_bswap_32" = "xyes"]) + +AC_CHECK_HEADERS(sys/mman.h) +AM_CONDITIONAL(HAVE_SYS_MMAN_H, [test "x$ac_cv_header_sys_mman_h" = "xyes"]) +if test "x$ac_cv_header_sys_mman_h" != "xyes"; then + AC_CHECK_DECLS([MapViewOfFile], [], [], [[#include <windows.h>]]) +fi +AM_CONDITIONAL(USE_WIN32_MMAN, [test "x$ac_cv_have_decl_MapViewOfFile" = "xyes"]) + +AC_CHECK_DECLS([sysconf], [], [], [[#include <unistd.h>]]) +AM_CONDITIONAL(HAVE_SYSCONF, [test "x$ac_cv_have_decl_sysconf" = "xyes"]) +if test "x$ac_cv_have_decl_sysconf" != "xyes"; then + AC_CHECK_DECLS([GetSystemInfo], [], [], [[#include <sysinfoapi.h>]]) +fi +AM_CONDITIONAL(USE_WIN32_SYSCONF, [test "x$ac_cv_have_decl_GetSystemInfo" = "xyes"]) + +if test "x$ac_cv_have_decl_GetSystemInfo" = "xyes"; then + AC_DEFINE([USE_WIN32_SYSCONF], [1], [Use sysconf replacement for win32]) fi -AC_SUBST([argp_LDADD]) + +AH_VERBATIM([USE_WIN32_SYSCONF], + [/* Define sysconf(3) here if it is not available from a system header. */ +#undef USE_WIN32_SYSCONF +#ifdef USE_WIN32_SYSCONF +#define _SC_PAGESIZE 1 +long sysconf(int name); +#endif +]) + +AC_CHECK_HEADERS(ar.h) +AM_CONDITIONAL(HAVE_AR_H, [test "x$ac_cv_header_ar_h" = "xyes"]) + +AC_CHECK_HEADERS(features.h) +AM_CONDITIONAL(HAVE_FEATURES_H, [test "x$ac_cv_header_features_h" = "xyes"]) + +AC_CHECK_HEADERS(stdio_ext.h) +AM_CONDITIONAL(HAVE_STDIO_EXT_H, [test "x$ac_cv_header_stdio_ext_h" = "xyes"]) + +AC_CHECK_DECLS([fork], [], [], [[#include <unistd.h>]]) +AC_CHECK_DECLS([feof_unlocked, ferror_unlocked, fputc_unlocked, fputs_unlocked, + fwrite_unlocked, putc_unlocked, putchar_unlocked], + [], [], [[#include <stdio.h>]]) + +AC_CHECK_DECLS([tdestroy], [], [], + [#include <search.h>]) +if test "x$ac_cv_have_decl_tdestroy" != "xyes"; then + AC_CHECK_MEMBERS([node_t.key, node_t.rlink, node_t.llink], + [have_node_t="yes"], [have_node_t="no"], + [#define _SEARCH_PRIVATE + #include <search.h>]) + if test "x$have_node_t" = "xyes"; then + AC_DEFINE([USE_PRIVATE_TDESTROY], [1], [Implement tdestroy using private node_t from search.h]) + fi +fi +AM_CONDITIONAL(USE_PRIVATE_TDESTROY, [test "x$have_node_t" = "xyes"]) + +AH_VERBATIM([USE_PRIVATE_TDESTROY], [ +/* Declare tdestroy here if it is not available from a system header. */ +#undef USE_PRIVATE_TDESTROY +#ifdef USE_PRIVATE_TDESTROY +void tdestroy(void *root, void (*free_node)(void *nodep)); +#endif +]) + +AC_CHECK_DECLS([posix_fallocate, posix_fadvise], [], [], [[#include <fcntl.h>]]) +AC_CHECK_DECLS([fchown, fchmod], [], [], [[#include <sys/stat.h>]]) dnl Check if we have <linux/bpf.h> for EM_BPF disassembly. AC_CHECK_HEADERS(linux/bpf.h) AM_CONDITIONAL(HAVE_LINUX_BPF_H, [test "x$ac_cv_header_linux_bpf_h" = "xyes"]) +gl_INIT + dnl The directories with content. +AC_CONFIG_FILES([libgnu/Makefile]) + dnl Documentation. dnl Commented out for now. dnl AC_CONFIG_FILES([doc/Makefile]) |
