summaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac313
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])