X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=configure.ac;h=09553541fbe8d2a62a54761ed7ae28aa7c07a543;hb=374cab0d95493c65bfcf8b7160a35d00258ff929;hp=341d4eeac2622bac14f48b7b17bea4a18d4d9324;hpb=87d583c6e8cd0e49f64da76636ebeec033298b4d;p=thirdparty%2Fglibc.git diff --git a/configure.ac b/configure.ac index 341d4eeac26..09553541fbe 100644 --- a/configure.ac +++ b/configure.ac @@ -51,7 +51,6 @@ 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 @@ -90,7 +89,7 @@ config_vars= # Check for a --with-gd argument and set libgd-LDFLAGS in config.make. AC_ARG_WITH([gd], - AC_HELP_STRING([--with-gd=DIR], + AS_HELP_STRING([--with-gd=DIR], [find libgd include dir and library with prefix DIR]), [dnl case "$with_gd" in @@ -100,7 +99,7 @@ yes|''|no) ;; esac ]) AC_ARG_WITH([gd-include], - AC_HELP_STRING([--with-gd-include=DIR], + AS_HELP_STRING([--with-gd-include=DIR], [find libgd include files in DIR]), [dnl case "$with_gd_include" in @@ -109,7 +108,7 @@ case "$with_gd_include" in esac ]) AC_ARG_WITH([gd-lib], - AC_HELP_STRING([--with-gd-lib=DIR], + AS_HELP_STRING([--with-gd-lib=DIR], [find libgd library files in DIR]), [dnl case "$with_gd_lib" in @@ -129,18 +128,18 @@ fi dnl Arguments to specify presence of other packages/features. AC_ARG_WITH([binutils], - AC_HELP_STRING([--with-binutils=PATH], + AS_HELP_STRING([--with-binutils=PATH], [specify location of binutils (as and ld)]), [path_binutils=$withval], [path_binutils='']) AC_ARG_WITH([selinux], - AC_HELP_STRING([--with-selinux], + AS_HELP_STRING([--with-selinux], [if building with SELinux support]), [with_selinux=$withval], [with_selinux=auto]) AC_ARG_WITH([headers], - AC_HELP_STRING([--with-headers=PATH], + AS_HELP_STRING([--with-headers=PATH], [location of system headers to use (for example /usr/src/linux/include) @<:@default=compiler default@:>@]), @@ -148,67 +147,64 @@ AC_ARG_WITH([headers], [sysheaders='']) AC_SUBST(sysheaders) -AC_SUBST(use_default_link) -AC_ARG_WITH([default-link], - AC_HELP_STRING([--with-default-link], - [do not use explicit linker scripts]), - [use_default_link=$withval], - [use_default_link=default]) - dnl Additional build flags injection. AC_ARG_WITH([nonshared-cflags], - AC_HELP_STRING([--with-nonshared-cflags=CFLAGS], + AS_HELP_STRING([--with-nonshared-cflags=CFLAGS], [build nonshared libraries with additional CFLAGS]), [extra_nonshared_cflags=$withval], [extra_nonshared_cflags=]) AC_SUBST(extra_nonshared_cflags) +AC_ARG_WITH([rtld-early-cflags], + AS_HELP_STRING([--with-rtld-early-cflags=CFLAGS], + [build early initialization with additional CFLAGS]), + [rtld_early_cflags=$withval], + [rtld_early_cflags=]) +AC_SUBST(rtld_early_cflags) + +AC_ARG_WITH([timeoutfactor], + AS_HELP_STRING([--with-timeoutfactor=NUM], + [specify an integer to scale the timeout]), + [timeoutfactor=$withval], + [timeoutfactor=1]) +AC_DEFINE_UNQUOTED(TIMEOUTFACTOR, $timeoutfactor) AC_ARG_ENABLE([sanity-checks], - AC_HELP_STRING([--disable-sanity-checks], + AS_HELP_STRING([--disable-sanity-checks], [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]), [enable_sanity=$enableval], [enable_sanity=yes]) AC_ARG_ENABLE([shared], - AC_HELP_STRING([--enable-shared], + AS_HELP_STRING([--enable-shared], [build shared library @<:@default=yes if GNU ld@:>@]), [shared=$enableval], [shared=yes]) AC_ARG_ENABLE([profile], - AC_HELP_STRING([--enable-profile], + AS_HELP_STRING([--enable-profile], [build profiled library @<:@default=no@:>@]), [profile=$enableval], [profile=no]) -AC_ARG_ENABLE([static-pie], - AC_HELP_STRING([--enable-static-pie], - [enable static PIE support and use it in the testsuite @<:@default=no@:>@]), - [static_pie=$enableval], - [static_pie=no]) +AC_ARG_ENABLE([default-pie], + AS_HELP_STRING([--disable-default-pie], + [Do not build glibc programs and the testsuite as PIE @<:@default=no@:>@]), + [default_pie=$enableval], + [default_pie=yes]) AC_ARG_ENABLE([timezone-tools], - AC_HELP_STRING([--disable-timezone-tools], + AS_HELP_STRING([--disable-timezone-tools], [do not install timezone tools @<:@default=install@:>@]), [enable_timezone_tools=$enableval], [enable_timezone_tools=yes]) AC_SUBST(enable_timezone_tools) AC_ARG_ENABLE([hardcoded-path-in-tests], - AC_HELP_STRING([--enable-hardcoded-path-in-tests], + AS_HELP_STRING([--enable-hardcoded-path-in-tests], [hardcode newly built glibc path in tests @<:@default=no@:>@]), [hardcoded_path_in_tests=$enableval], [hardcoded_path_in_tests=no]) AC_SUBST(hardcoded_path_in_tests) -AC_ARG_ENABLE([stackguard-randomization], - AC_HELP_STRING([--enable-stackguard-randomization], - [initialize __stack_chk_guard canary with a random number at program start]), - [enable_stackguard_randomize=$enableval], - [enable_stackguard_randomize=no]) -if test "$enable_stackguard_randomize" = yes; then - AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE) -fi - AC_ARG_ENABLE([hidden-plt], - AC_HELP_STRING([--disable-hidden-plt], + AS_HELP_STRING([--disable-hidden-plt], [do not hide internal function calls to avoid PLT]), [hidden=$enableval], [hidden=yes]) @@ -217,7 +213,7 @@ if test "x$hidden" = xno; then fi AC_ARG_ENABLE([bind-now], - AC_HELP_STRING([--enable-bind-now], + AS_HELP_STRING([--enable-bind-now], [disable lazy relocations in DSOs]), [bindnow=$enableval], [bindnow=no]) @@ -229,19 +225,19 @@ fi dnl Build glibc with -fstack-protector, -fstack-protector-all, or dnl -fstack-protector-strong. AC_ARG_ENABLE([stack-protector], - AC_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@], + AS_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@], [Use -fstack-protector[-all|-strong] to detect glibc buffer overflows]), [enable_stack_protector=$enableval], [enable_stack_protector=no]) case "$enable_stack_protector" in all|yes|no|strong) ;; -*) AC_MSG_ERROR([Not a valid argument for --enable-stack-protector: \"$enable_stack_protector\"]);; +*) AC_MSG_ERROR([Not a valid argument for --enable-stack-protector: "$enable_stack_protector"]);; esac dnl On some platforms we cannot use dynamic loading. We must provide dnl static NSS modules. AC_ARG_ENABLE([static-nss], - AC_HELP_STRING([--enable-static-nss], + AS_HELP_STRING([--enable-static-nss], [build static NSS modules @<:@default=no@:>@]), [static_nss=$enableval], [static_nss=no]) @@ -252,14 +248,14 @@ if test x"$static_nss" = xyes || test x"$shared" = xno; then fi AC_ARG_ENABLE([force-install], - AC_HELP_STRING([--disable-force-install], + AS_HELP_STRING([--disable-force-install], [don't force installation of files from this package, even if they are older than the installed files]), [force_install=$enableval], [force_install=yes]) AC_SUBST(force_install) AC_ARG_ENABLE([maintainer-mode], - AC_HELP_STRING([--enable-maintainer-mode], + AS_HELP_STRING([--enable-maintainer-mode], [enable make rules and dependencies not useful (and sometimes confusing) to the casual installer]), [maintainer=$enableval], [maintainer=no]) @@ -267,7 +263,7 @@ AC_ARG_ENABLE([maintainer-mode], dnl On some platforms we allow dropping compatibility with all kernel dnl versions. AC_ARG_ENABLE([kernel], - AC_HELP_STRING([--enable-kernel=VERSION], + AS_HELP_STRING([--enable-kernel=VERSION], [compile for compatibility with kernel not older than VERSION]), [minimum_kernel=$enableval], []) @@ -285,34 +281,27 @@ dnl For the development we sometimes want gcc to issue even more warnings. dnl This is not the default since many of the extra warnings are not dnl appropriate. AC_ARG_ENABLE([all-warnings], - AC_HELP_STRING([--enable-all-warnings], + AS_HELP_STRING([--enable-all-warnings], [enable all useful warnings gcc can issue]), [all_warnings=$enableval], []) AC_SUBST(all_warnings) AC_ARG_ENABLE([werror], - AC_HELP_STRING([--disable-werror], + AS_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], + AS_HELP_STRING([--enable-multi-arch], [enable single DSO with optimizations for multiple architectures]), [multi_arch=$enableval], [multi_arch=default]) -AC_ARG_ENABLE([experimental-malloc], - AC_HELP_STRING([--disable-experimental-malloc], - [disable experimental malloc features]), - [experimental_malloc=$enableval], - [experimental_malloc=yes]) -AC_SUBST(experimental_malloc) - AC_ARG_ENABLE([memory-tagging], - AC_HELP_STRING([--enable-memory-tagging], + AS_HELP_STRING([--enable-memory-tagging], [enable memory tagging if supported by the architecture @<:@default=no@:>@]), [memory_tagging=$enableval], [memory_tagging=no]) @@ -327,14 +316,14 @@ fi AC_SUBST(memory_tagging) AC_ARG_ENABLE([crypt], - AC_HELP_STRING([--disable-crypt], + AS_HELP_STRING([--disable-crypt], [do not build nor install the passphrase hashing library, libcrypt]), [build_crypt=$enableval], [build_crypt=yes]) AC_SUBST(build_crypt) AC_ARG_ENABLE([nss-crypt], - AC_HELP_STRING([--enable-nss-crypt], + AS_HELP_STRING([--enable-nss-crypt], [enable libcrypt to use nss]), [nss_crypt=$enableval], [nss_crypt=no]) @@ -438,16 +427,6 @@ if test "$build_pt_chown" = yes; then AC_DEFINE(HAVE_PT_CHOWN) fi -AC_ARG_ENABLE([tunables], - [AS_HELP_STRING([--enable-tunables], - [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])], - [have_tunables=$enableval], - [have_tunables=yes]) -AC_SUBST(have_tunables) -if test "$have_tunables" = yes; then - AC_DEFINE(HAVE_TUNABLES) -fi - # 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. @@ -466,19 +445,38 @@ AC_ARG_ENABLE([mathvec], [build_mathvec=$enableval], [build_mathvec=notset]) -AC_TRY_COMPILE([], [ +AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[ #ifndef __CET__ # error no CET compiler support -#endif], +#endif]])], [libc_cv_compiler_default_cet=yes], [libc_cv_compiler_default_cet=no]) AC_ARG_ENABLE([cet], - AC_HELP_STRING([--enable-cet], + AS_HELP_STRING([--enable-cet], [enable Intel Control-flow Enforcement Technology (CET), x86 only]), [enable_cet=$enableval], [enable_cet=$libc_cv_compiler_default_cet]) +AC_ARG_ENABLE([scv], + AS_HELP_STRING([--disable-scv], + [syscalls will not use scv instruction, even if the kernel supports it, powerpc only]), + [use_scv=$enableval], + [use_scv=yes]) + +AS_IF([[test "$use_scv" != "no"]],[AC_DEFINE(USE_PPC_SCV)]) + +dnl Build glibc with _FORTIFY_SOURCE +AC_ARG_ENABLE(fortify-source, + AS_HELP_STRING([--enable-fortify-source@<:@=1|2|3@:>@], + [Use -D_FORTIFY_SOURCE=[1|2|3] to control code hardening, defaults to highest possible value supported by the build compiler.]), + [enable_fortify_source=$enableval], + [enable_fortify_source=no]) +case "$enable_fortify_source" in +1|2|3|no|yes) ;; +*) AC_MSG_ERROR([Not a valid argument for --enable-fortify-source: "$enable_fortify_source"]);; +esac + # 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. @@ -547,6 +545,118 @@ fi test -n "$base_machine" || base_machine=$machine AC_SUBST(base_machine) +### Locate tools. + +AC_PROG_INSTALL +if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then + # The makefiles need to use a different form to find it in $srcdir. + INSTALL='\$(..)./scripts/install-sh -c' +fi +AC_PROG_LN_S + +LIBC_PROG_BINUTILS + +# Accept binutils 2.25 or newer. +libc_cv_with_lld=no +case $($LD --version) in + "GNU gold"*) + # Accept gold 1.14 or higher + AC_CHECK_PROG_VER(LD, $LD, --version, + [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)], + [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*], + LD=: critic_missing="$critic_missing GNU gold") + ;; + "LLD"*) + # Accept LLD 13.0.0 or higher + AC_CHECK_PROG_VER(LD, $LD, --version, + [LLD.* \([0-9][0-9]*\.[0-9.]*\)], + [1[3-9].*|[2-9][0-9].*], + LD=: critic_missing="$critic_missing LLD") + libc_cv_with_lld=yes + ;; + *) + AC_CHECK_PROG_VER(LD, $LD, --version, + [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)], + [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*], + LD=: critic_missing="$critic_missing GNU ld") + ;; +esac +LIBC_CONFIG_VAR([with-lld], [$libc_cv_with_lld]) + +# These programs are version sensitive. +AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version, + [GNU Make[^0-9]*\([0-9][0-9.]*\)], + [[4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make") + +AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version, + [GNU gettext.* \([0-9]*\.[0-9.]*\)], + [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*], + MSGFMT=: aux_missing="$aux_missing msgfmt") +AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version, + [GNU texinfo.* \([0-9][0-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.]*\)], + [3.0[2-9]*|3.[1-9]*|[4-9]*], + SED=: aux_missing="$aux_missing sed") +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_CHECK_PROG_VER(BISON, bison, --version, + [bison (GNU Bison) \([0-9]*\.[0-9.]*\)], + [2.7*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing bison") + +AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [ +AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[ +#if !defined __GNUC__ || __GNUC__ < 6 || (__GNUC__ == 6 && __GNUC_MINOR__ < 2) +#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"]) + +if test "x$maintainer" = "xyes"; then + AC_CHECK_PROGS(AUTOCONF, autoconf, no) + case "x$AUTOCONF" in + xno|x|x:) AUTOCONF=no ;; + *) + AC_CACHE_CHECK(dnl + whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl + if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then + libc_cv_autoconf_works=yes + else + libc_cv_autoconf_works=no + fi]) + test $libc_cv_autoconf_works = yes || AUTOCONF=no + ;; + esac + if test "x$AUTOCONF" = xno; then + aux_missing="$aux_missing autoconf" + fi +else + AUTOCONF=no +fi + +# Check for python3 if available, or else python. +AC_CHECK_PROG_VER(PYTHON_PROG, python3 python, --version, + [Python \([0-9][0-9.]*\)], + [3.[4-9]*|3.[1-9][0-9]*|[4-9].*|[1-9][0-9]*], + critic_missing="$critic_missing python") +PYTHON="$PYTHON_PROG -B" +AC_SUBST(PYTHON) + +test -n "$critic_missing" && AC_MSG_ERROR([ +*** These critical programs are missing or too old:$critic_missing +*** Check the INSTALL file for required versions.]) + +test -n "$aux_missing" && AC_MSG_WARN([ +*** These auxiliary programs are missing or incompatible versions:$aux_missing +*** some features or tests will be disabled. +*** Check the INSTALL file for required versions.]) + + # Determine whether to use fpu or nofpu sysdeps directories. AC_CACHE_CHECK([for use of fpu sysdeps directories], libc_cv_with_fp, [dnl @@ -707,6 +817,23 @@ fi rm -f conftest*]) AC_SUBST(libc_cv_textrel_ifunc) +# Check if CC supports attribute retain as it is used in attribute_used_retain macro. +AC_CACHE_CHECK([for GNU attribute retain support], + libc_cv_gnu_retain, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD \ + 2>&AS_MESSAGE_LOG_FD ; then + libc_cv_gnu_retain=yes +fi +rm -f conftest*]) +if test $libc_cv_gnu_retain = yes; then + AC_DEFINE(HAVE_GNU_RETAIN) +fi +LIBC_CONFIG_VAR([have-gnu-retain], [$libc_cv_gnu_retain]) + # Check if gcc warns about alias for function with incompatible types. AC_CACHE_CHECK([if compiler warns about alias for function with incompatible types], libc_cv_gcc_incompatible_alias, [dnl @@ -738,7 +865,7 @@ if test x"$libc_cv_gcc_indirect_function" != xyes; then # GCC 8+ emits a warning for alias with incompatible types and it might # fail to build ifunc resolvers aliases to either weak or internal # symbols. Disables multiarch build in this case. - if test x"$libc_cv_gcc_incompatible_alias" == xyes; then + if test x"$libc_cv_gcc_incompatible_alias" = xyes; then AC_MSG_WARN([gcc emits a warning for alias between functions of incompatible types]) if test x"$multi_arch" = xyes; then AC_MSG_ERROR([--enable-multi-arch support requires a gcc with gnu-indirect-function support]) @@ -961,113 +1088,6 @@ AC_SUBST(sysnames) # The other names were emitted during the scan. AC_MSG_RESULT($default_sysnames) - -### Locate tools. - -AC_PROG_INSTALL -if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then - # The makefiles need to use a different form to find it in $srcdir. - INSTALL='\$(..)./scripts/install-sh -c' -fi -AC_PROG_LN_S - -LIBC_PROG_BINUTILS - -# Accept binutils 2.25 or newer. -AC_CHECK_PROG_VER(AS, $AS, --version, - [GNU assembler.* \([0-9]*\.[0-9.]*\)], - [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*], - AS=: critic_missing="$critic_missing as") - -if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then - # Accept gold 1.14 or higher - AC_CHECK_PROG_VER(LD, $LD, --version, - [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)], - [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*], - LD=: critic_missing="$critic_missing GNU gold") -else - AC_CHECK_PROG_VER(LD, $LD, --version, - [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)], - [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*], - LD=: critic_missing="$critic_missing GNU ld") -fi - -# These programs are version sensitive. -AC_CHECK_TOOL_PREFIX -AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version, - [GNU Make[^0-9]*\([0-9][0-9.]*\)], - [[4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make") - -AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version, - [GNU gettext.* \([0-9]*\.[0-9.]*\)], - [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*], - MSGFMT=: aux_missing="$aux_missing msgfmt") -AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version, - [GNU texinfo.* \([0-9][0-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.]*\)], - [3.0[2-9]*|3.[1-9]*|[4-9]*], - SED=: aux_missing="$aux_missing sed") -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_CHECK_PROG_VER(BISON, bison, --version, - [bison (GNU Bison) \([0-9]*\.[0-9.]*\)], - [2.7*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing bison") - -AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [ -AC_TRY_COMPILE([], [ -#if !defined __GNUC__ || __GNUC__ < 6 || (__GNUC__ == 6 && __GNUC_MINOR__ < 2) -#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 - AC_CHECK_PROGS(AUTOCONF, autoconf, no) - case "x$AUTOCONF" in - xno|x|x:) AUTOCONF=no ;; - *) - AC_CACHE_CHECK(dnl - whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl - if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then - libc_cv_autoconf_works=yes - else - libc_cv_autoconf_works=no - fi]) - test $libc_cv_autoconf_works = yes || AUTOCONF=no - ;; - esac - if test "x$AUTOCONF" = xno; then - aux_missing="$aux_missing autoconf" - fi -else - AUTOCONF=no -fi - -# Check for python3 if available, or else python. -AC_CHECK_PROG_VER(PYTHON_PROG, python3 python, --version, - [Python \([0-9][0-9.]*\)], - [3.[4-9]*|3.[1-9][0-9]*|[4-9].*|[1-9][0-9]*], - critic_missing="$critic_missing python") -PYTHON="$PYTHON_PROG -B" -AC_SUBST(PYTHON) - -test -n "$critic_missing" && AC_MSG_ERROR([ -*** These critical programs are missing or too old:$critic_missing -*** Check the INSTALL file for required versions.]) - -test -n "$aux_missing" && AC_MSG_WARN([ -*** These auxiliary programs are missing or incompatible versions:$aux_missing -*** some features or tests will be disabled. -*** Check the INSTALL file for required versions.]) - # if using special system headers, find out the compiler's sekrit # header directory and add that to the list. NOTE: Only does the right # thing on a system that doesn't need fixincludes. (Not presently a problem.) @@ -1095,8 +1115,8 @@ AC_SUBST(CXX_SYSINCLUDES) # copy of those headers in Makerules. if test -n "$CXX"; then find_cxx_header () { - echo "#include <$1>" | $CXX -M -MP -x c++ - 2>/dev/null \ - | sed -n "\,$1:,{s/:\$//;p}" + echo "#include <$1>" | $CXX -H -fsyntax-only -x c++ - 2>&1 \ + | $AWK '$1 == "."{print $2}' } CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)" CXX_CMATH_HEADER="$(find_cxx_header cmath)" @@ -1189,7 +1209,7 @@ AC_SUBST(libc_cv_protected_data) AC_CACHE_CHECK(linker support for INSERT in linker script, libc_cv_insert, [cat > conftest.c < conftest.t < conftest.c <&AS_MESSAGE_LOG_FD]) -then -dnl The following test is a bit weak. We must use a tool which can test -dnl cross-platform since the gcc used can be a cross compiler. Without -dnl introducing new options this is not easily doable. Instead use a tool -dnl which always is cross-platform: readelf. To detect whether -z combreloc -dnl look for a section named .rel.dyn or .rela.dyn. - if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then - libc_cv_z_combreloc=yes - else - libc_cv_z_combreloc=no - fi -else - libc_cv_z_combreloc=no -fi -rm -f conftest*]) -if test "$libc_cv_z_combreloc" = yes; then - AC_DEFINE(HAVE_Z_COMBRELOC) -fi -AC_SUBST(libc_cv_z_combreloc) - LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack], [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no]) AC_SUBST(libc_cv_z_execstack) +LIBC_LINKER_FEATURE([-z start-stop-gc], [-Wl,-z,start-stop-gc], + [libc_cv_z_start_stop_gc=yes], [libc_cv_z_start_stop_gc=no]) +LIBC_CONFIG_VAR([have-z-start-stop-gc], [$libc_cv_z_start_stop_gc]) + +LIBC_LINKER_FEATURE([--depaudit], [-Wl,--depaudit,x], + [libc_cv_depaudit=yes], [libc_cv_depaudit=no]) +LIBC_CONFIG_VAR([have-depaudit], [$libc_cv_depaudit]) + +LIBC_LINKER_FEATURE([-z pack-relative-relocs], + [-Wl,-z,pack-relative-relocs], + [libc_cv_dt_relr=yes], [libc_cv_dt_relr=no]) +LIBC_CONFIG_VAR([have-dt-relr], [$libc_cv_dt_relr]) + LIBC_LINKER_FEATURE([--no-dynamic-linker], [-Wl,--no-dynamic-linker], [libc_cv_no_dynamic_linker=yes], @@ -1337,75 +1339,6 @@ LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no]) AC_SUBST(libc_cv_fpie) -AC_CACHE_CHECK(for --hash-style option, - libc_cv_hashstyle, [dnl -cat > conftest.c <&AS_MESSAGE_LOG_FD]) -then - libc_cv_hashstyle=yes -else - libc_cv_hashstyle=no -fi -rm -f conftest*]) -AC_SUBST(libc_cv_hashstyle) - -# The linker's default -shared behavior is good enough if it -# does these things that our custom linker scripts ensure that -# all allocated NOTE sections come first. -if test "$use_default_link" = default; then - AC_CACHE_CHECK([for sufficient default -shared layout], - libc_cv_use_default_link, [dnl - libc_cv_use_default_link=no - cat > conftest.s <<\EOF - .section .note.a,"a",%note - .balign 4 - .long 4,4,9 - .string "GNU" - .string "foo" - .section .note.b,"a",%note - .balign 4 - .long 4,4,9 - .string "GNU" - .string "bar" -EOF - if AC_TRY_COMMAND([dnl - ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) && - ac_try=`$READELF -S conftest.so | sed -n \ - ['${x;p;} - s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/ - t a - b - : a - H']` - then - libc_seen_a=no libc_seen_b=no - set -- $ac_try - while test $# -ge 2 -a "$1" = NOTE; do - case "$2" in - .note.a) libc_seen_a=yes ;; - .note.b) libc_seen_b=yes ;; - esac - shift 2 - done - case "$libc_seen_a$libc_seen_b" in - yesyes) - libc_cv_use_default_link=yes - ;; - *) - echo >&AS_MESSAGE_LOG_FD "\ -$libc_seen_a$libc_seen_b from: -$ac_try" - ;; - esac - fi - rm -f conftest*]) - use_default_link=$libc_cv_use_default_link -fi - AC_CACHE_CHECK(for GLOB_DAT reloc, libc_cv_has_glob_dat, [dnl cat > conftest.c < conftest.c <&AS_MESSAGE_LOG_FD]) -then - libc_cv_fno_toplevel_reorder=yes -else - libc_cv_fno_toplevel_reorder=no -fi -rm -f conftest*]) -if test $libc_cv_fno_toplevel_reorder = yes; then - fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors" -else - fno_unit_at_a_time=-fno-unit-at-a-time -fi -AC_SUBST(fno_unit_at_a_time) - AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2, [dnl cat > conftest.c <&AS_MESSAGE_LOG_FD]) +if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -fPIC -mtls-dialect=gnu2 -nostdlib -nostartfiles + conftest.c -o conftest 1>&AS_MESSAGE_LOG_FD]) then libc_cv_mtls_dialect_gnu2=yes else @@ -1468,6 +1382,28 @@ rm -f conftest*]) AC_SUBST(libc_cv_mtls_dialect_gnu2) LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2]) +dnl clang emits an warning for a double alias redirection, to warn the +dnl original symbol is sed even when weak definition overrides it. +dnl It is a usual pattern for weak_alias, where multiple alias point to +dnl same symbol. +AC_CACHE_CHECK([if -Wno-ignored-attributes is required for aliases], + libc_cv_wno_ignored_attributes, [dnl +cat > conftest.c < conftest.c < conftest.c <], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[gdImagePng (0, 0)]])], + [LIBGD=yes], [LIBGD=no]) CFLAGS="$old_CFLAGS" LDFLAGS="$old_LDFLAGS" LIBS="$old_LIBS" @@ -1623,60 +1570,65 @@ if test "x$have_selinux" = xyes; then fi AC_SUBST(have_selinux) -CPPUNDEFS= -dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE. -dnl Since we are building the implementations of the fortified functions here, -dnl having the macro defined interacts very badly. -AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source, -[AC_TRY_COMPILE([], [ -#ifdef _FORTIFY_SOURCE -# error bogon -#endif], - [libc_cv_predef_fortify_source=no], - [libc_cv_predef_fortify_source=yes])]) -if test $libc_cv_predef_fortify_source = yes; then - CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE" -fi -AC_SUBST(CPPUNDEFS) - -# 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" -old_LIBS="$LIBS" -CFLAGS="$CFLAGS -fPIC" -LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp" -LIBS= -AC_LINK_IFELSE([AC_LANG_SOURCE([ -typedef struct { - char foo; - long val; -} Ehdr; -extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden"))); -long ehdr (void) { return __ehdr_start.val; } -])], - [if $READELF -r conftest | grep -F __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" +dnl Check if we support the requested _FORTIFY_SOURCE level +dnl If not, then don't use it. +dnl Note that _FORTIFY_SOURCE may have been set through FLAGS too. +dnl _FORTIFY_SOURCE value will be selectively disabled for function that can't +dnl support it +no_fortify_source="-Wp,-U_FORTIFY_SOURCE" +fortify_source="${no_fortify_source}" + +AC_CACHE_CHECK([for __builtin_dynamic_object_size], [libc_cv___builtin_dynamic_object_size], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [__builtin_dynamic_object_size("", 0)])], + [libc_cv___builtin_dynamic_object_size=yes + AS_IF([test "$enable_fortify_source" = yes], [enable_fortify_source=3])], + [libc_cv___builtin_dynamic_object_size=no + AS_IF([test "$enable_fortify_source" = yes], [enable_fortify_source=2])]) ]) -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]) + +AS_CASE([$enable_fortify_source], + [1|2], [libc_cv_fortify_source=yes], + [3], [AS_IF([test "$libc_cv___builtin_dynamic_object_size" = yes], + [libc_cv_fortify_source=yes], + [AC_MSG_ERROR([Compiler doesn't provide necessary support for _FORTIFY_SOURCE=3])])], + [libc_cv_fortify_source=no]) + +AS_IF([test "$libc_cv_fortify_source" = yes], + [fortify_source="${fortify_source},-D_FORTIFY_SOURCE=${enable_fortify_source}"] + ) + +AC_SUBST(enable_fortify_source) +AC_SUBST(libc_cv_fortify_source) +AC_SUBST(no_fortify_source) +AC_SUBST(fortify_source) + +dnl Starting with binutils 2.35, GAS can attach multiple symbol versions +dnl to one symbol (PR 23840). +AC_CACHE_CHECK(whether the assembler requires one version per symbol, + libc_cv_symver_needs_alias, [dnl + cat > conftest.s <&AS_MESSAGE_LOG_FD; then + libc_cv_symver_needs_alias=no + else + libc_cv_symver_needs_alias=yes + fi + rm conftest.* +]) +if test "$libc_cv_symver_needs_alias" = yes; then + AC_DEFINE(SYMVER_NEEDS_ALIAS) 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 ()], [ +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[__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` || { @@ -1685,7 +1637,7 @@ libc_undefs=`$NM -u conftest.o | echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'" if test -z "$libc_undefs"; then libc_cv_builtin_trap=yes -fi])]) +fi],[])]) if test $libc_cv_builtin_trap = yes; then AC_DEFINE([HAVE_BUILTIN_TRAP]) fi @@ -1733,6 +1685,7 @@ libc_cv_sysconfdir=$sysconfdir libc_cv_localstatedir=$localstatedir libc_cv_gcc_unwind_find_fde=no libc_cv_idn=no +pthread_in_libc=yes # Iterate over all the sysdep directories we will use, running their # configure fragments. @@ -1770,6 +1723,7 @@ LIBC_CONFIG_VAR([have-ifunc], [$libc_cv_ld_gnu_indirect_function]) if test x"$libc_cv_gcc_indirect_function" = xyes; then AC_DEFINE(HAVE_GCC_IFUNC) fi +LIBC_CONFIG_VAR([have-gcc-ifunc], [$libc_cv_gcc_indirect_function]) # This is far from the AC_ARG_ENABLE that sets it so that a sysdeps # configure fragment can override the value to prevent this AC_DEFINE. @@ -1808,7 +1762,7 @@ if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then libc_cv_pic_default=no fi rm -f conftest.*]) -AC_SUBST(libc_cv_pic_default) +LIBC_CONFIG_VAR([build-pic-default], [$libc_cv_pic_default]) AC_CACHE_CHECK([whether -fPIE is default], libc_cv_cc_pie_default, [libc_cv_cc_pie_default=yes @@ -1821,26 +1775,50 @@ if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then libc_cv_cc_pie_default=no fi rm -f conftest.*]) -libc_cv_pie_default=$libc_cv_cc_pie_default -AC_SUBST(libc_cv_cc_pie_default) -AC_SUBST(libc_cv_pie_default) +LIBC_CONFIG_VAR([cc-pie-default], [$libc_cv_cc_pie_default]) + +AC_MSG_CHECKING(if we can build programs as PIE) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED +# error PIE is not supported +#endif]])], [libc_cv_pie_supported=yes], [libc_cv_pie_supported=no]) +AC_MSG_RESULT($libc_cv_pie_supported) +# Disable build-pie-default if target does not support it or glibc is +# configured with --disable-default-pie. +if test "x$default_pie" = xno; then + build_pie_default=no +else + build_pie_default=$libc_cv_pie_supported +fi +LIBC_CONFIG_VAR([build-pie-default], [$build_pie_default]) + +AC_MSG_CHECKING(if we can build static PIE programs) +libc_cv_static_pie_supported=$libc_cv_pie_supported +if test "x$libc_cv_pie_supported" != xno \ + -a "$libc_cv_no_dynamic_linker" = yes; then + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef SUPPORT_STATIC_PIE +# error static PIE is not supported +#endif]])], [libc_cv_static_pie_supported=yes], + [libc_cv_static_pie_supported=no]) +fi +AC_MSG_RESULT($libc_cv_static_pie_supported) + +# Enable static-pie only if it is available and glibc isn't configured +# with --disable-default-pie. +if test "x$default_pie" = xno; then + libc_cv_static_pie=no +else + libc_cv_static_pie=$libc_cv_static_pie_supported +fi +if test "$libc_cv_static_pie" = "yes"; then + AC_DEFINE(ENABLE_STATIC_PIE) +fi +LIBC_CONFIG_VAR([enable-static-pie], [$libc_cv_static_pie]) # Set the `multidir' variable by grabbing the variable from the compiler. # We do it once and save the result in a generated makefile. libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory` AC_SUBST(libc_cv_multidir) -if test "$static_pie" = yes; then - # The linker must support --no-dynamic-linker. - if test "$libc_cv_no_dynamic_linker" != yes; then - AC_MSG_ERROR([linker support for --no-dynamic-linker needed]) - fi - # Default to PIE. - libc_cv_pie_default=yes - AC_DEFINE(ENABLE_STATIC_PIE) -fi -LIBC_CONFIG_VAR([enable-static-pie], [$static_pie]) - AC_SUBST(profile) AC_SUBST(static_nss) @@ -1854,6 +1832,11 @@ RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h` AC_SUBST(VERSION) AC_SUBST(RELEASE) +if test "$pthread_in_libc" = yes; then + AC_DEFINE(PTHREAD_IN_LIBC) +fi +AC_SUBST(pthread_in_libc) + AC_CONFIG_FILES([config.make Makefile]) AC_CONFIG_COMMANDS([default],[[ case $CONFIG_FILES in *config.make*)