]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - configure.ac
Fix trailing space.
[thirdparty/glibc.git] / configure.ac
index babfe5713ce41b5da3f3c3061234ff309ee0d045..7e9383a7f0b036ff7f558b1d436906245aa1941d 100644 (file)
@@ -50,9 +50,18 @@ if test $host != $build; then
 fi
 AC_SUBST(cross_compiling)
 AC_PROG_CPP
+AC_CHECK_TOOL(READELF, readelf, false)
+
 # We need the C++ compiler only for testing.
 AC_PROG_CXX
-AC_CHECK_TOOL(READELF, readelf, false)
+# It's useless to us if it can't link programs (e.g. missing -lstdc++).
+AC_CACHE_CHECK([whether $CXX can link programs], libc_cv_cxx_link_ok, [dnl
+AC_LANG_PUSH([C++])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+              [libc_cv_cxx_link_ok=yes],
+              [libc_cv_cxx_link_ok=no])
+AC_LANG_POP([C++])])
+AS_IF([test $libc_cv_cxx_link_ok != yes], [CXX=])
 
 if test "`cd $srcdir; /bin/pwd`" = "`/bin/pwd`"; then
   AC_MSG_ERROR([you must configure in a separate build directory])
@@ -151,18 +160,6 @@ AC_ARG_ENABLE([profile],
              [profile=$enableval],
              [profile=no])
 
-AC_ARG_ENABLE([oldest-abi],
-             AC_HELP_STRING([--enable-oldest-abi=ABI],
-                            [configure the oldest ABI supported @<:@e.g. 2.2@:>@ @<:@default=glibc default@:>@]),
-             [oldest_abi=$enableval],
-             [oldest_abi=no])
-if test "$oldest_abi" = yes || test "$oldest_abi" = no; then
-  oldest_abi=default
-else
-  AC_DEFINE_UNQUOTED(GLIBC_OLDEST_ABI, "$oldest_abi")
-fi
-AC_SUBST(oldest_abi)
-
 AC_ARG_ENABLE([hardcoded-path-in-tests],
              AC_HELP_STRING([--enable-hardcoded-path-in-tests],
                             [hardcode newly built glibc path in tests @<:@default=no@:>@]),
@@ -265,6 +262,13 @@ AC_ARG_ENABLE([all-warnings],
              [])
 AC_SUBST(all_warnings)
 
+AC_ARG_ENABLE([werror],
+             AC_HELP_STRING([--disable-werror],
+                            [do not build with -Werror]),
+             [enable_werror=$enableval],
+             [enable_werror=yes])
+AC_SUBST(enable_werror)
+
 AC_ARG_ENABLE([multi-arch],
              AC_HELP_STRING([--enable-multi-arch],
                             [enable single DSO with optimizations for multiple architectures]),
@@ -365,11 +369,10 @@ if test "$build_pt_chown" = yes; then
   AC_DEFINE(HAVE_PT_CHOWN)
 fi
 
-# The way shlib-versions is used to generate soversions.mk uses a
-# fairly simplistic model for name recognition that can't distinguish
-# i486-pc-linux-gnu fully from i486-pc-gnu.  So we mutate a $host_os
-# of `gnu*' here to be `gnu-gnu*' just so that shlib-versions can
-# tell.  This doesn't get used much beyond that, so it's fairly safe.
+# The abi-tags file uses a fairly simplistic model for name recognition that
+# can't distinguish i486-pc-linux-gnu fully from i486-pc-gnu.  So we mutate a
+# $host_os of `gnu*' here to be `gnu-gnu*' just so that it can tell.
+# This doesn't get used much beyond that, so it's fairly safe.
 case "$host_os" in
 linux*)
   ;;
@@ -378,6 +381,12 @@ gnu*)
   ;;
 esac
 
+AC_ARG_ENABLE([mathvec],
+             [AS_HELP_STRING([--enable-mathvec],
+             [Enable building and installing mathvec @<:@default depends on architecture@:>@])],
+             [build_mathvec=$enableval],
+             [build_mathvec=notset])
+
 # We keep the original values in `$config_*' and never modify them, so we
 # can write them unchanged into config.make.  Everything else uses
 # $machine, $vendor, and $os, and changes them whenever convenient.
@@ -398,19 +407,6 @@ vendor=$config_vendor
 os=$config_os
 base_os=''
 
-# config.guess on some IBM machines says `rs6000' instead of `powerpc'.
-# Unify this here.
-if test "$machine" = rs6000; then
-  machine="powerpc"
-fi
-
-# Braindead PowerPC box with absolutely no FPU.
-case "$machine-$host_os" in
-  powerpc*-*soft)
-    with_fp=no
-    ;;
-esac
-
 submachine=
 AC_ARG_WITH([cpu],
            AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
@@ -422,12 +418,13 @@ AC_ARG_WITH([cpu],
   esac
 ])
 
+# An preconfigure script can set this when it wants to disable the sanity
+# check below.
+libc_config_ok=no
+
 dnl Let sysdeps/*/preconfigure act here, like they can in add-ons.
 LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
 
-# An add-on can set this when it wants to disable the sanity check below.
-libc_config_ok=no
-
 dnl Having this here, though empty, makes sure that if add-ons' fragments
 dnl do AC_CONFIG_SUBDIRS([some-dir]), which just sets $subdirs, then
 dnl our AC_OUTPUT will actually use it.
@@ -582,48 +579,10 @@ if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
   esac
 fi
 
-dnl We need to use [ and ] for other purposes for a while now.
-changequote(,)dnl
-# Expand the configuration machine name into a subdirectory by architecture
-# type and particular chip.  If an add-on configure fragment already set
-# base_machine, we don't change it.
-test -n "$base_machine" || case "$machine" in
-i[4567]86)     base_machine=i386 machine=i386/$machine ;;
-powerpc64*)    base_machine=powerpc machine=powerpc/powerpc64 ;;
-powerpc*)      base_machine=powerpc machine=powerpc/powerpc32 ;;
-s390)           base_machine=s390 machine=s390/s390-32 ;;
-s390x)          base_machine=s390 machine=s390/s390-64 ;;
-sh3*)          base_machine=sh machine=sh/sh3 ;;
-sh4*)          base_machine=sh machine=sh/sh4 ;;
-sparc | sparcv[67])
-               base_machine=sparc machine=sparc/sparc32 ;;
-sparcv8 | supersparc | hypersparc)
-               base_machine=sparc machine=sparc/sparc32/sparcv8 ;;
-sparcv8plus | sparcv8plusa | sparcv9)
-               base_machine=sparc machine=sparc/sparc32/sparcv9 ;;
-sparcv8plusb | sparcv9b)
-               base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9b ;;
-sparcv9v)
-               base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9v ;;
-sparcv9v2)
-               base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9v2 ;;
-sparc64)
-               base_machine=sparc machine=sparc/sparc64 ;;
-sparc64b)
-               base_machine=sparc machine=sparc/sparc64/sparcv9b ;;
-sparc64v)
-               base_machine=sparc machine=sparc/sparc64/sparcv9v ;;
-sparc64v2)
-               base_machine=sparc machine=sparc/sparc64/sparcv9v2 ;;
-*)             base_machine=$machine ;;
-esac
-changequote([,])dnl
+# Set base_machine if not set by a preconfigure fragment.
+test -n "$base_machine" || base_machine=$machine
 AC_SUBST(base_machine)
 
-if test "$base_machine" = "i386"; then
-  AC_DEFINE(USE_REGPARMS)
-fi
-
 # For the multi-arch option we need support in the assembler & linker.
 AC_CACHE_CHECK([for assembler and linker STT_GNU_IFUNC support],
               libc_cv_ld_gnu_indirect_function, [dnl
@@ -976,19 +935,18 @@ AC_PROG_LN_S
 
 LIBC_PROG_BINUTILS
 
-# Accept binutils 2.20 or newer.
+# Accept binutils 2.22 or newer.
 AC_CHECK_PROG_VER(AS, $AS, --version,
                  [GNU assembler.* \([0-9]*\.[0-9.]*\)],
-                 [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
+                 [2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
+                 AS=: critic_missing="$critic_missing as")
 AC_CHECK_PROG_VER(LD, $LD, --version,
                  [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
-                 [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], LD=: critic_missing="$critic_missing ld")
+                 [2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
+                 LD=: critic_missing="$critic_missing ld")
 
 # These programs are version sensitive.
 AC_CHECK_TOOL_PREFIX
-AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
-  [version \([egcygnustpi-]*[0-9.]*\)], [4.[4-9].* | 4.[1-9][0-9].* | [5-9].* ],
-  critic_missing="$critic_missing gcc")
 AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
   [GNU Make[^0-9]*\([0-9][0-9.]*\)],
   [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
@@ -999,7 +957,7 @@ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
   MSGFMT=: aux_missing="$aux_missing msgfmt")
 AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
   [GNU texinfo.* \([0-9][0-9.]*\)],
-  [4.[5-9]*|4.[1-9][0-9]*|[5-9].*],
+  [4.[7-9]*|4.[1-9][0-9]*|[5-9].*],
   MAKEINFO=: aux_missing="$aux_missing makeinfo")
 AC_CHECK_PROG_VER(SED, sed, --version,
   [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
@@ -1009,6 +967,16 @@ AC_CHECK_PROG_VER(AWK, gawk, --version,
   [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
   [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
 
+AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
+AC_TRY_COMPILE([], [
+#if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)
+#error insufficient compiler
+#endif],
+              [libc_cv_compiler_ok=yes],
+              [libc_cv_compiler_ok=no])])
+AS_IF([test $libc_cv_compiler_ok != yes],
+      [critic_missing="$critic_missing compiler"])
+
 AC_CHECK_TOOL(NM, nm, false)
 
 if test "x$maintainer" = "xyes"; then
@@ -1108,7 +1076,10 @@ if test "$PERL" != no &&
 fi
 AC_PATH_PROG(INSTALL_INFO, install-info, no,
             $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
-AC_PATH_PROG(BISON, bison, no, $PATH:/usr/local/bin:/usr/bin:/bin)
+AC_CHECK_PROG_VER(BISON, bison, --version,
+                 [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
+                 [2.7*|[3-9].*|[1-9][0-9]*],
+                 BISON=no)
 
 AC_CACHE_CHECK(for libc-friendly stddef.h, libc_cv_friendly_stddef, [dnl
 AC_TRY_COMPILE(dnl
@@ -1255,6 +1226,29 @@ EOF
   fi
 fi
 
+if test $libc_cv_visibility_attribute = yes; then
+  AC_CACHE_CHECK(linker support for protected data symbol,
+                libc_cv_protected_data,
+                [cat > conftest.c <<EOF
+                 int bar __attribute__ ((visibility ("protected"))) = 1;
+EOF
+                 libc_cv_protected_data=no
+                 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles -fPIC -shared conftest.c -o conftest.so); then
+                   cat > conftest.c <<EOF
+                   extern int bar;
+                   int main (void) { return bar; }
+EOF
+                   if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles conftest.c -o conftest conftest.so); then
+                     libc_cv_protected_data=yes
+                   fi
+                 fi
+                 rm -f conftest.*
+                ])
+else
+  libc_cv_protected_data=no
+fi
+AC_SUBST(libc_cv_protected_data)
+
 if test $libc_cv_visibility_attribute = yes; then
   AC_CACHE_CHECK(for broken __attribute__((visibility())),
                 libc_cv_broken_visibility_attribute,
@@ -1393,73 +1387,6 @@ LIBC_LINKER_FEATURE([-z initfirst], [-Wl,--enable-new-dtags,-z,initfirst],
                    [libc_cv_z_initfirst=yes],
                    [AC_MSG_ERROR(linker with -z initfirst support required)])
 
-# Add-on fragments can set these for other machines.
-libc_commonpagesize=${libc_commonpagesize:-no}
-libc_relro_required=${libc_relro_required:-no}
-case "$base_machine" in
-  i[[34567]]86 | x86_64 | powerpc* | s390*)
-    libc_commonpagesize=0x1000
-    libc_relro_required=yes
-    ;;
-  sparc*)
-    libc_commonpagesize=0x2000
-    libc_relro_required=yes
-    ;;
-esac
-
-if test $libc_commonpagesize != no; then
-  AC_CACHE_CHECK(for -z relro option,
-                libc_cv_z_relro, [dnl
-  libc_cv_z_relro=no
-  AC_LANG_CONFTEST([AC_LANG_SOURCE([[
-int _start (void) { return 42; }
-extern void _exit (int);
-/* Since these pointers are const, they should go in rodata.
-   Since they refer to functions that have to be resolved by
-   dynamic linking, they should instead go in RELRO data.  */
-const void *const relro[] = { &_start, &_exit, 0 };
-/* GNU ld fails to produce RELRO data when it's very small and there is no
-   normal writable data following it, or if only uninitialized (.bss) data
-   follows it, or only very small writable data.  */
-int data[0x10000] = { 1, };
-]])])
-  cat > conftest.awk <<\EOF
-BEGIN {
-  result = "no"
-  commonpagesize = strtonum(commonpagesize)
-}
-{ print "LINE:", $0 > "/dev/stderr" }
-$1 == "GNU_RELRO" {
-  vaddr = strtonum($3)
-  memsz = strtonum($6)
-  end = vaddr + memsz
-  printf "vaddr %#x memsz %#x end %#x commonpagesize %#x\n", \
-    vaddr, memsz, end, commonpagesize > "/dev/stderr"
-  result = (end % commonpagesize == 0) ? "yes" : "broken"
-}
-END { print result }
-EOF
-  AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
-                   -fPIC -shared -o conftest.so conftest.c
-                   -nostartfiles -nostdlib
-                   -Wl,-z,relro 1>&AS_MESSAGE_LOG_FD]) &&
-  AC_TRY_COMMAND([$READELF -Wl conftest.so > conftest.ph]) &&
-  AC_TRY_COMMAND([
-      $AWK -v commonpagesize=$libc_commonpagesize -f conftest.awk
-          conftest.ph > conftest.cps
-    ]) &&
-  libc_cv_z_relro=`cat conftest.cps 2>&AS_MESSAGE_LOG_FD`
-  rm -f conftest*])
-  if { test "x$libc_relro_required" = xyes &&
-       test "x$libc_cv_z_relro" != xyes
-     }
-  then
-    AC_MSG_ERROR(linker with -z relro support required)
-  fi
-else
-  AC_MSG_WARN([missing architecture parameter to check for working -z relro])
-fi
-
 AC_CACHE_CHECK(for -Bgroup option,
               libc_cv_Bgroup, [dnl
 cat > conftest.c <<EOF
@@ -1734,30 +1661,6 @@ elif test $libc_cv_asm_weakext_directive = yes; then
   AC_DEFINE(HAVE_ASM_WEAKEXT_DIRECTIVE)
 fi
 
-AC_CACHE_CHECK(whether CFI directives are supported, libc_cv_asm_cfi_directives, [dnl
-case $machine in
-  sparc/sparc64*) cfi_offset=2047;;
-  *) cfi_offset=0;;
-esac
-cat > conftest.s <<EOF
-       .text
-       .type   func,%function
-func:
-       .cfi_startproc
-       .cfi_remember_state
-       .cfi_rel_offset 1, $cfi_offset
-       .cfi_endproc
-EOF
-if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
-  libc_cv_asm_cfi_directives=yes
-else
-  libc_cv_asm_cfi_directives=no
-fi
-rm -f conftest*])
-if test $libc_cv_asm_cfi_directives = yes; then
-  AC_DEFINE(HAVE_ASM_CFI_DIRECTIVES)
-fi
-
 AC_CACHE_CHECK(for ld --no-whole-archive, libc_cv_ld_no_whole_archive, [dnl
 cat > conftest.c <<\EOF
 _start () {}
@@ -1797,18 +1700,6 @@ if test $libc_cv_gcc_exceptions = yes; then
 fi
 AC_SUBST(exceptions)dnl
 
-if test "$host_cpu" = powerpc ; then
-# Check for a bug present in at least versions 2.8.x of GCC
-# and versions 1.0.x of EGCS.
-AC_CACHE_CHECK(whether clobbering cr0 causes problems,libc_cv_c_asmcr0_bug,[dnl
-AC_TRY_COMPILE([int tester(int x) { asm ("" : : : "cc"); return x & 123; }],,
-              libc_cv_c_asmcr0_bug='no',
-              libc_cv_c_asmcr0_bug='yes')])
-if test "$libc_cv_c_asmcr0_bug" != 'no'; then
-  AC_DEFINE(BROKEN_PPC_ASM_CR0)
-fi
-fi
-
 AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
 cat > conftest.c <<\EOF
 void zero (void *x)
@@ -2034,7 +1925,10 @@ if test $libc_cv_predef_stack_protector = yes; then
 fi
 libc_extra_cppflags=
 
-AC_CACHE_CHECK([whether the linker provides __ehdr_start],
+# Some linkers on some architectures support __ehdr_start but with
+# bugs.  Make sure usage of it does not create relocations in the
+# output (as the linker should resolve them all for us).
+AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
               libc_cv_ehdr_start, [
 old_CFLAGS="$CFLAGS"
 old_LDFLAGS="$LDFLAGS"
@@ -2043,16 +1937,43 @@ CFLAGS="$CFLAGS -fPIC"
 LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared"
 LIBS=
 AC_LINK_IFELSE([AC_LANG_SOURCE([
-extern const char __ehdr_start __attribute__ ((visibility ("hidden")));
-const char *ehdr (void) { return &__ehdr_start; }
+typedef struct {
+  char foo;
+  long val;
+} Ehdr;
+extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
+long ehdr (void) { return __ehdr_start.val; }
 ])],
-              [libc_cv_ehdr_start=yes], [libc_cv_ehdr_start=no])
+              [if $READELF -r conftest | fgrep __ehdr_start >/dev/null; then
+                 libc_cv_ehdr_start=broken
+               else
+                 libc_cv_ehdr_start=yes
+               fi], [libc_cv_ehdr_start=no])
 CFLAGS="$old_CFLAGS"
 LDFLAGS="$old_LDFLAGS"
 LIBS="$old_LIBS"
 ])
-if test $libc_cv_ehdr_start = yes; then
+if test "$libc_cv_ehdr_start" = yes; then
   AC_DEFINE([HAVE_EHDR_START])
+elif test "$libc_cv_ehdr_start" = broken; then
+  AC_MSG_WARN([linker is broken -- you should upgrade])
+fi
+
+AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
+              libc_cv_builtin_trap, [dnl
+libc_cv_builtin_trap=no
+AC_TRY_COMPILE([], [__builtin_trap ()], [
+libc_undefs=`$NM -u conftest.o |
+  LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
+    2>&AS_MESSAGE_LOG_FD` || {
+  AC_MSG_ERROR([confusing output from $NM -u])
+}
+echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
+if test -z "$libc_undefs"; then
+  libc_cv_builtin_trap=yes
+fi])])
+if test $libc_cv_builtin_trap = yes; then
+  AC_DEFINE([HAVE_BUILTIN_TRAP])
 fi
 
 ### End of automated tests.
@@ -2079,6 +2000,11 @@ for dir in $sysnames; do
   fi
 done
 
+if test x"$build_mathvec" = xnotset; then
+  build_mathvec=no
+fi
+LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
+
 AC_SUBST(libc_extra_cflags)
 AC_SUBST(libc_extra_cppflags)
 
@@ -2149,6 +2075,19 @@ fi
 rm -f conftest.*])
 AC_SUBST(libc_cv_pic_default)
 
+AC_CACHE_CHECK([whether -fPIE is default], libc_cv_pie_default,
+[libc_cv_pie_default=yes
+cat > conftest.c <<EOF
+#if defined __PIE__ || defined __pie__ || defined PIE || defined pie
+# error PIE is default.
+#endif
+EOF
+if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
+  libc_cv_pie_default=no
+fi
+rm -f conftest.*])
+AC_SUBST(libc_cv_pie_default)
+
 AC_SUBST(profile)
 AC_SUBST(static_nss)