[Powerpc] Tune/optimize powerpc{32,64}/power7/memchr.S.
[glibc.git] / configure.in
blobf5dbff68ccd822a58e85a896614a931774cb31c5
1 dnl Process this file with autoconf to produce a configure script.
2 AC_PREREQ(2.53)dnl              dnl Minimum Autoconf version required.
3 AC_INIT([GNU C Library], [(see version.h)], [http://sourceware.org/bugzilla/], [glibc])
4 AC_CONFIG_SRCDIR([include/features.h])
5 AC_CONFIG_HEADERS([config.h])
6 AC_CONFIG_AUX_DIR([scripts])
8 # Glibc should not depend on any header files
9 AC_DEFUN([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
10   [m4_divert_text([DEFAULTS],
11     [ac_includes_default='/* none */'])])
13 dnl This is here so we can set $subdirs directly based on configure fragments.
14 AC_CONFIG_SUBDIRS()
16 AC_CANONICAL_HOST
18 AC_PROG_CC
19 if test $host != $build; then
20   AC_CHECK_PROGS(BUILD_CC, gcc cc)
22 AC_SUBST(cross_compiling)
23 AC_PROG_CPP
24 # We need the C++ compiler only for testing.
25 AC_PROG_CXX
27 if test "`cd $srcdir; /bin/pwd`" = "`/bin/pwd`"; then
28   AC_MSG_ERROR([you must configure in a separate build directory])
31 # This will get text that should go into config.make.
32 config_vars=
34 # Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
35 AC_ARG_WITH([gd],
36             AC_HELP_STRING([--with-gd=DIR],
37                            [find libgd include dir and library with prefix DIR]),
38             [dnl
39 case "$with_gd" in
40 yes|''|no) ;;
41 *) libgd_include="-I$withval/include"
42    libgd_ldflags="-L$withval/lib" ;;
43 esac
45 AC_ARG_WITH([gd-include],
46             AC_HELP_STRING([--with-gd-include=DIR],
47                            [find libgd include files in DIR]),
48             [dnl
49 case "$with_gd_include" in
50 ''|no) ;;
51 *) libgd_include="-I$withval" ;;
52 esac
54 AC_ARG_WITH([gd-lib],
55             AC_HELP_STRING([--with-gd-lib=DIR],
56                            [find libgd library files in DIR]),
57             [dnl
58 case "$with_gd_lib" in
59 ''|no) ;;
60 *) libgd_ldflags="-L$withval" ;;
61 esac
64 if test -n "$libgd_include"; then
65   config_vars="$config_vars
66 CFLAGS-memusagestat.c = $libgd_include"
68 if test -n "$libgd_ldflags"; then
69   config_vars="$config_vars
70 libgd-LDFLAGS = $libgd_ldflags"
73 dnl Arguments to specify presence of other packages/features.
74 AC_ARG_WITH([fp],
75             AC_HELP_STRING([--with-fp],
76                            [if using floating-point hardware @<:@default=yes@:>@]),
77             [with_fp=$withval],
78             [with_fp=yes])
79 AC_SUBST(with_fp)
80 AC_ARG_WITH([binutils],
81             AC_HELP_STRING([--with-binutils=PATH],
82                            [specify location of binutils (as and ld)]),
83             [path_binutils=$withval],
84             [path_binutils=''])
85 AC_ARG_WITH([selinux],
86             AC_HELP_STRING([--with-selinux],
87                            [if building with SELinux support]),
88             [with_selinux=$withval],
89             [with_selinux=auto])
91 AC_ARG_WITH([headers],
92             AC_HELP_STRING([--with-headers=PATH],
93                            [location of system headers to use
94                             (for example /usr/src/linux/include)
95                             @<:@default=compiler default@:>@]),
96             [sysheaders=$withval],
97             [sysheaders=''])
98 AC_SUBST(sysheaders)
100 AC_SUBST(use_default_link)
101 AC_ARG_WITH([default-link],
102             AC_HELP_STRING([--with-default-link],
103                            [do not use explicit linker scripts]),
104             [use_default_link=$withval],
105             [use_default_link=default])
107 AC_ARG_ENABLE([sanity-checks],
108               AC_HELP_STRING([--disable-sanity-checks],
109                              [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
110               [enable_sanity=$enableval],
111               [enable_sanity=yes])
113 AC_ARG_ENABLE([shared],
114               AC_HELP_STRING([--enable-shared],
115                              [build shared library @<:@default=yes if GNU ld@:>@]),
116               [shared=$enableval],
117               [shared=yes])
118 AC_ARG_ENABLE([profile],
119               AC_HELP_STRING([--enable-profile],
120                              [build profiled library @<:@default=no@:>@]),
121               [profile=$enableval],
122               [profile=no])
123 AC_ARG_ENABLE([versioning],
124               AC_HELP_STRING([--disable-versioning],
125                              [do not include versioning information in the library objects @<:@default=yes if supported@:>@]),
126               [enable_versioning=$enableval],
127               [enable_versioning=yes])
129 AC_ARG_ENABLE([oldest-abi],
130               AC_HELP_STRING([--enable-oldest-abi=ABI],
131                              [configure the oldest ABI supported @<:@e.g. 2.2@:>@ @<:@default=glibc default@:>@]),
132               [oldest_abi=$enableval],
133               [oldest_abi=no])
134 if test "$oldest_abi" = yes || test "$oldest_abi" = no; then
135   oldest_abi=default
136 else
137   AC_DEFINE_UNQUOTED(GLIBC_OLDEST_ABI, "$oldest_abi")
139 AC_SUBST(oldest_abi)
141 AC_ARG_ENABLE([stackguard-randomization],
142               AC_HELP_STRING([--enable-stackguard-randomization],
143                              [initialize __stack_chk_guard canary with a random number at program start]),
144               [enable_stackguard_randomize=$enableval],
145               [enable_stackguard_randomize=no])
146 if test "$enable_stackguard_randomize" = yes; then
147   AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
150 dnl Generic infrastructure for drop-in additions to libc.
151 AC_ARG_ENABLE([add-ons],
152               AC_HELP_STRING([--enable-add-ons@<:@=DIRS...@:>@],
153                              [configure and build add-ons in DIR1,DIR2,...
154                               search for add-ons if no parameter given]),
155                              , [enable_add_ons=yes])
157 AC_ARG_ENABLE([hidden-plt],
158               AC_HELP_STRING([--disable-hidden-plt],
159                              [do not hide internal function calls to avoid PLT]),
160               [hidden=$enableval],
161               [hidden=yes])
162 if test "x$hidden" = xno; then
163   AC_DEFINE(NO_HIDDEN)
166 AC_ARG_ENABLE([bind-now],
167               AC_HELP_STRING([--enable-bind-now],
168                              [disable lazy relocations in DSOs]),
169               [bindnow=$enableval],
170               [bindnow=no])
171 AC_SUBST(bindnow)
173 dnl On some platforms we cannot use dynamic loading.  We must provide
174 dnl static NSS modules.
175 AC_ARG_ENABLE([static-nss],
176               AC_HELP_STRING([--enable-static-nss],
177                              [build static NSS modules @<:@default=no@:>@]),
178               [static_nss=$enableval],
179               [static_nss=no])
180 dnl Enable static NSS also if we build no shared objects.
181 if test x"$static_nss" = xyes || test x"$shared" = xno; then
182   static_nss=yes
183   AC_DEFINE(DO_STATIC_NSS)
186 AC_ARG_ENABLE([force-install],
187               AC_HELP_STRING([--disable-force-install],
188                              [don't force installation of files from this package, even if they are older than the installed files]),
189               [force_install=$enableval],
190               [force_install=yes])
191 AC_SUBST(force_install)
193 dnl On some platforms we allow dropping compatibility with all kernel
194 dnl versions.
195 AC_ARG_ENABLE([kernel],
196               AC_HELP_STRING([--enable-kernel=VERSION],
197                              [compile for compatibility with kernel not older than VERSION]),
198               [minimum_kernel=$enableval],
199               [])
200 dnl Prevent unreasonable values.
201 if test "$minimum_kernel" = yes || test "$minimum_kernel" = no; then
202   # Better nothing than this.
203   minimum_kernel=""
204 else
205   if test "$minimum_kernel" = current; then
206     minimum_kernel=`uname -r 2>/dev/null` || minimum_kernel=
207   fi
210 dnl For the development we sometimes want gcc to issue even more warnings.
211 dnl This is not the default since many of the extra warnings are not
212 dnl appropriate.
213 AC_ARG_ENABLE([all-warnings],
214               AC_HELP_STRING([--enable-all-warnings],
215                              [enable all useful warnings gcc can issue]),
216               [all_warnings=$enableval],
217               [])
218 AC_SUBST(all_warnings)
220 AC_ARG_ENABLE([multi-arch],
221               AC_HELP_STRING([--enable-multi-arch],
222                              [enable single DSO with optimizations for multiple architectures]),
223               [multi_arch=$enableval],
224               [multi_arch=default])
226 AC_ARG_ENABLE([nss-crypt],
227               AC_HELP_STRING([--enable-nss-crypt],
228                              [enable libcrypt to use nss]),
229               [nss_crypt=$enableval],
230               [nss_crypt=no])
231 if test x$nss_crypt = xyes; then
232   nss_includes=-I$(nss-config --includedir 2>/dev/null)
233   if test $? -ne 0; then
234     AC_MSG_ERROR([cannot find include directory with nss-config])
235   fi
236   old_CFLAGS="$CFLAGS"
237   CFLAGS="$CFLAGS $nss_includes"
238   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
239 #include <hasht.h>
240 #include <nsslowhash.h>
241 void f (void) { NSSLOW_Init (); }])],
242              libc_cv_nss_crypt=yes,
243              AC_MSG_ERROR([
244 cannot find NSS headers with lowlevel hash function interfaces]))
245   old_LIBS="$LIBS"
246   LIBS="$LIBS -lfreebl3"
247   AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
248 #include <hasht.h>
249 #include <nsslowhash.h>],
250                                   [NSSLOW_Init();])],
251                  libc_cv_nss_crypt=yes,
252                  AC_MSG_ERROR([
253 cannot link program using lowlevel NSS hash functions]))
254   CFLAGS="$old_CFLAGS"
255   LIBS="$old_LIBS"
256 else
257   libc_cv_nss_crypt=no
259 AC_SUBST(libc_cv_nss_crypt)
262 AC_ARG_ENABLE([obsolete-rpc],
263               AC_HELP_STRING([--enable-obsolete-rpc],
264                              [build and install the obsolete RPC code for link-time usage]),
265               [link_obsolete_rpc=$enableval],
266               [link_obsolete_rpc=no])
267 AC_SUBST(link_obsolete_rpc)
269 if test "$link_obsolete_rpc" = yes; then
270   AC_DEFINE(LINK_OBSOLETE_RPC)
273 AC_ARG_ENABLE([systemtap],
274               [AS_HELP_STRING([--enable-systemtap],
275                [enable systemtap static probe points @<:@default=no@:>@])],
276               [systemtap=$enableval],
277               [systemtap=no])
278 if test "x$systemtap" != xno; then
279   AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
280   old_CFLAGS="$CFLAGS"
281   CFLAGS="-std=gnu99 $CFLAGS"
282   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
283 void foo (int i, void *p)
285   asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
286        :: STAP_PROBE_ASM_OPERANDS (2, i, p));
287 }]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])
288   CFLAGS="$old_CFLAGS"])
289   if test $libc_cv_sdt = yes; then
290     AC_DEFINE([USE_STAP_PROBE])
291   elif test "x$systemtap" != xauto; then
292     AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
293   fi
296 # The way shlib-versions is used to generate soversions.mk uses a
297 # fairly simplistic model for name recognition that can't distinguish
298 # i486-pc-linux-gnu fully from i486-pc-gnu.  So we mutate a $host_os
299 # of `gnu*' here to be `gnu-gnu*' just so that shlib-versions can
300 # tell.  This doesn't get used much beyond that, so it's fairly safe.
301 case "$host_os" in
302 linux*)
303   ;;
304 gnu*)
305   host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
306   ;;
307 esac
309 # We keep the original values in `$config_*' and never modify them, so we
310 # can write them unchanged into config.make.  Everything else uses
311 # $machine, $vendor, and $os, and changes them whenever convenient.
312 config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
314 # Don't allow vendor == "unknown"
315 test "$config_vendor" = unknown && config_vendor=
316 config_os="`echo $config_os | sed 's/^unknown-//'`"
318 # Some configurations imply other options.
319 elf=yes
321 # The configure fragment of an add-on port can modify these to supplement
322 # or override the table in the case statement below.  No fragment should
323 # ever change the config_* variables, however.
324 machine=$config_machine
325 vendor=$config_vendor
326 os=$config_os
327 base_os=''
329 # config.guess on some IBM machines says `rs6000' instead of `powerpc'.
330 # Unify this here.
331 if test "$machine" = rs6000; then
332   machine="powerpc"
335 # Braindead PowerPC box with absolutely no FPU.
336 case "$machine-$host_os" in
337   powerpc*-*soft)
338     with_fp=no
339     ;;
340 esac
342 submachine=
343 AC_ARG_WITH([cpu],
344             AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
345             [dnl
346   case "$withval" in
347   yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
348   no) ;;
349   *) submachine="$withval" ;;
350   esac
353 dnl Let sysdeps/*/preconfigure act here, like they can in add-ons.
354 LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
356 # An add-on can set this when it wants to disable the sanity check below.
357 libc_config_ok=no
359 dnl Having this here, though empty, makes sure that if add-ons' fragments
360 dnl do AC_CONFIG_SUBDIRS([some-dir]), which just sets $subdirs, then
361 dnl our AC_OUTPUT will actually use it.
362 AC_CONFIG_SUBDIRS()
364 case "$enable_add_ons" in
365 ''|no) add_ons= ;;
366 yes|'*')
367  add_ons=`cd $srcdir && ls -d 2> /dev/null */configure */sysdeps |
368           sed 's@/[[^/]]*$@@' | sort | uniq`
369          add_ons_automatic=yes
370          ;;
371 *) add_ons=`echo "$enable_add_ons" | sed 's/,/ /g'`
372        add_ons_automatic=no ;;
373 esac
375 configured_add_ons=
376 add_ons_sfx=
377 add_ons_pfx=
378 if test x"$add_ons" != x; then
379   for f in $add_ons; do
380     # Some sanity checks
381     case "$f" in
382     crypt)
383       AC_MSG_ERROR([
384 *** It seems that you're using an old \`crypt' add-on.  crypt is now
385 *** part of glibc and using the old add-on will not work with this
386 *** release.  Start again with fresh sources and without the old
387 *** \`crypt' add-on.])
388     ;;
389     localedata)
390       AC_MSG_ERROR([
391 *** It seems that you're using an old \`localedata' add-on.  localedata
392 *** is now part of glibc and using the old add-on will not work with
393 *** this release.  Start again with fresh sources and without the old
394 *** \`localedata' add-on.])
395     ;;
396     esac
397   done
399   # Now source each add-on's configure fragment.
400   # The fragments can use $srcdir/$libc_add_on to find themselves,
401   # and test $add_ons_automatic to see if they were explicitly requested.
402   # A fragment can clear (or even change) $libc_add_on to affect
403   # whether it goes into the list to be actually used in the build.
404   use_add_ons=
405   for libc_add_on in $add_ons; do
406     # Test whether such a directory really exists.
407     # It can be absolute, or relative to $srcdir, or relative to the build dir.
408     case "$libc_add_on" in
409     /*)
410       libc_add_on_srcdir=$libc_add_on
411       ;;
412     *)
413       test -d "$srcdir/$libc_add_on" || {
414         if test -d "$libc_add_on"; then
415           libc_add_on="`pwd`/$libc_add_on"
416         else
417           AC_MSG_ERROR(add-on directory \"$libc_add_on\" does not exist)
418         fi
419       }
420       libc_add_on_srcdir=$srcdir/$libc_add_on
421       ;;
422     esac
424     libc_add_on_frag=$libc_add_on_srcdir/configure
425     libc_add_on_canonical=
426     libc_add_on_config_subdirs=
427     if test -r "$libc_add_on_frag"; then
428       AC_MSG_NOTICE(running configure fragment for add-on $libc_add_on)
429       libc_add_on_canonical=unknown
430       libc_add_on_subdirs=
431       . "$libc_add_on_frag"
432       test -z "$libc_add_on" || {
433         configured_add_ons="$configured_add_ons $libc_add_on"
434         if test "x$libc_add_on_canonical" = xunknown; then
435           AC_MSG_ERROR(fragment must set \$libc_add_on_canonical)
436         fi
437         for d in $libc_add_on_subdirs; do
438           case "$libc_add_on" in
439           /*) subdir_srcdir="$libc_add_on" ;;
440           *) subdir_srcdir="\$(..)$libc_add_on" ;;
441           esac
442           case "$d" in
443           .)
444             d="${libc_add_on_canonical:-$libc_add_on}"
445             ;;
446           /*)
447             subdir_srcdir="$d"
448             ;;
449           *)
450             subdir_srcdir="$subdir_srcdir/$d"
451             ;;
452           esac
453           d=`echo "$d" | sed 's@/*$@@;s@^.*/@@'`
454           add_on_subdirs="$add_on_subdirs $d"
455           test "$subdir_srcdir" = "\$(..)$d" || config_vars="$config_vars
456 $d-srcdir = $subdir_srcdir"
457         done
458         for d in $libc_add_on_config_subdirs; do
459           case "$d" in
460           /*) AC_MSG_ERROR(dnl
461 fragment uses absolute path in \$libc_add_on_config_subdirs) ;;
462           esac
463           if test ! -d "$libc_add_on_srcdir/$d"; then
464             AC_MSG_ERROR(fragment wants to configure missing directory $d)
465           fi
466           case "$libc_add_on" in
467           /*) AC_MSG_ERROR(dnl
468 relative path required for add-on using \$libc_add_on_config_subdirs) ;;
469           esac
470           subdirs="$subdirs $libc_add_on/$d"
471         done
472       }
473     fi
474     if test -n "$libc_add_on"; then
475       LIBC_PRECONFIGURE([$libc_add_on_srcdir], [add-on $libc_add_on for])
476       use_add_ons="$use_add_ons $libc_add_on"
477       add_ons_pfx="$add_ons_pfx $libc_add_on/"
478       test -z "$libc_add_on_canonical" ||
479       add_ons_sfx="$add_ons_sfx /$libc_add_on_canonical"
480     fi
481   done
482   # Use echo to strip excess whitespace.
483   add_ons="`echo $use_add_ons`"
485 AC_SUBST(add_ons)
486 AC_SUBST(add_on_subdirs)
490 ### I put this here to prevent those annoying emails from people who cannot
491 ### read and try to compile glibc on unsupported platforms.  --drepper
493 ### By using the undocumented --enable-hacker-mode option for configure
494 ### one can skip this test to make the configuration not fail for unsupported
495 ### platforms.
497 if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
498   case "$machine-$host_os" in
499   *-linux* | *-gnu*)
500     ;;
501   *)
502     echo "*** The GNU C library is currently not available for this platform."
503     echo "*** So far nobody cared to port it and if there is no volunteer it"
504     echo "*** might never happen.  So, if you have interest to see glibc on"
505     echo "*** this platform visit"
506     echo "***   http://www.gnu.org/software/libc/porting.html"
507     echo "*** and join the group of porters"
508     exit 1
509     ;;
510   esac
513 dnl We need to use [ and ] for other purposes for a while now.
514 changequote(,)dnl
515 # Expand the configuration machine name into a subdirectory by architecture
516 # type and particular chip.  If an add-on configure fragment already set
517 # base_machine, we don't change it.
518 test -n "$base_machine" || case "$machine" in
519 i[34567]86)     base_machine=i386 machine=i386/$machine ;;
520 powerpc)        base_machine=powerpc machine=powerpc/powerpc32 ;;
521 powerpc64)      base_machine=powerpc machine=powerpc/powerpc64 ;;
522 s390)           base_machine=s390 machine=s390/s390-32 ;;
523 s390x)          base_machine=s390 machine=s390/s390-64 ;;
524 sh3*)           base_machine=sh machine=sh/sh3 ;;
525 sh4*)           base_machine=sh machine=sh/sh4 ;;
526 sparc | sparcv[67])
527                 base_machine=sparc machine=sparc/sparc32 ;;
528 sparcv8 | supersparc | hypersparc)
529                 base_machine=sparc machine=sparc/sparc32/sparcv8 ;;
530 sparcv8plus | sparcv8plusa | sparcv9)
531                 base_machine=sparc machine=sparc/sparc32/sparcv9 ;;
532 sparcv8plusb | sparcv9b)
533                 base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9b ;;
534 sparcv9v)
535                 base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9v ;;
536 sparcv9v2)
537                 base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9v2 ;;
538 sparc64)
539                 base_machine=sparc machine=sparc/sparc64 ;;
540 sparc64b)
541                 base_machine=sparc machine=sparc/sparc64/sparcv9b ;;
542 sparc64v)
543                 base_machine=sparc machine=sparc/sparc64/sparcv9v ;;
544 sparc64v2)
545                 base_machine=sparc machine=sparc/sparc64/sparcv9v2 ;;
546 *)              base_machine=$machine ;;
547 esac
548 changequote([,])dnl
549 AC_SUBST(base_machine)
551 if test "$base_machine" = "i386"; then
552   AC_DEFINE(USE_REGPARMS)
555 # For the multi-arch option we need support in the assembler.
556 AC_CACHE_CHECK([for assembler gnu_indirect_function symbol type support],
557                libc_cv_asm_gnu_indirect_function, [dnl
558 cat > conftest.s <<EOF
559 .type foo,%gnu_indirect_function
561 if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;
562 then
563   libc_cv_asm_gnu_indirect_function=yes
564 else
565   libc_cv_asm_gnu_indirect_function=no
567 rm -f conftest*])
569 AC_MSG_CHECKING(whether .text pseudo-op must be used)
570 AC_CACHE_VAL(libc_cv_dot_text, [dnl
571 cat > conftest.s <<EOF
572 .text
574 libc_cv_dot_text=
575 if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
576   libc_cv_dot_text=.text
578 rm -f conftest*])
579 if test -z "$libc_cv_dot_text"; then
580   AC_MSG_RESULT(no)
581 else
582   AC_MSG_RESULT(yes)
585 if test x"$libc_cv_asm_gnu_indirect_function" != xyes; then
586   if test x"$multi_arch" = xyes; then
587     AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
588   else
589     multi_arch=no
590   fi
592 if test x"$multi_arch" != xno; then
593   multi_arch_d=/multiarch
596 # Compute the list of sysdep directories for this configuration.
597 # This can take a while to compute.
598 sysdep_dir=$srcdir/sysdeps
599 AC_MSG_CHECKING(sysdep dirs)
600 dnl We need to use [ and ] for other purposes for a while now.
601 changequote(,)dnl
602 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
603 os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
605 test "x$base_os" != x || case "$os" in
606 gnu*)
607   base_os=mach/hurd ;;
608 linux*)
609   base_os=unix/sysv ;;
610 esac
612 # For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
613 tail=$os
614 ostry=$os
615 while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
616   ostry="$ostry /$o"
617   tail=$o
618 done
619 o=`echo $tail | sed 's/[0-9]*$//'`
620 if test $o != $tail; then
621   ostry="$ostry /$o"
623 # For linux-gnu, try linux-gnu, then linux.
624 o=`echo $tail | sed 's/-.*$//'`
625 if test $o != $tail; then
626   ostry="$ostry /$o"
629 # For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
630 base=
631 tail=$base_os
632 while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
633   set $b
634   base="$base /$1"
635   tail="$2"
636 done
638 # For sparc/sparc32, try sparc/sparc32 and then sparc.
639 mach=
640 tail=$machine${submachine:+/$submachine}
641 while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
642   set $m
643   # Prepend the machine's FPU directory unless --without-fp.
644   if test "$with_fp" = yes; then
645     mach="$mach /$1/fpu"
646   else
647     mach="$mach /$1/nofpu"
648   fi
649   mach="$mach /$1"
650   tail="$2"
651 done
653 dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
654 changequote([,])dnl
656 # Find what sysdep directories exist.
657 sysnames_add_ons=
658 sysnames=
659 for b in $base ''; do
660   for m0 in $mach ''; do
661     for v in /$vendor ''; do
662       test "$v" = / && continue
663       for o in /$ostry ''; do
664         test "$o" = / && continue
665         for m in $multi_arch_d $mach ''; do
666           for d in $add_ons_pfx ''; do
667             for a in $add_ons_sfx ''; do
668               if test -n "$m0$m0sub$b$v$o$m$msub"; then
669                 try_srcdir="${srcdir}/"
670                 case "$d" in
671                 /*) try_srcdir= ;;
672                 esac
673                 try="${d}sysdeps$m0$m0sub$b$v$o$m$msub$a"
674                 test -n "$enable_debug_configure" &&
675                 echo "$0 [DEBUG]: try $try" >&2
676                 if test -d "$try_srcdir$try"; then
677                   sysnames="$sysnames $try"
678                   { test -n "$o" || test -n "$b"; } && os_used=t
679                   { test -n "$m" || test -n "$m0"; } && machine_used=t
680                   case x${m0:-$m} in
681                   x*/$submachine) submachine_used=t ;;
682                   esac
683                   if test -n "$d"; then
684                     case "$sysnames_add_ons" in
685                     *" $d "*) ;;
686                     *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
687                     esac
688                   fi
689                 fi
690               fi
691             done
692           done
693         done
694       done
695     done
696   done
697 done
699 # If the assembler supports gnu_indirect_function symbol type and the
700 # architecture supports multi-arch, we enable multi-arch by default.
701 case $sysnames_add_ons$sysnames in
702 *"$multi_arch_d"*)
703   ;;
705   test x"$multi_arch" = xdefault && multi_arch=no
706   ;;
707 esac
708 if test x"$multi_arch" != xno; then
709   AC_DEFINE(USE_MULTIARCH)
711 AC_SUBST(multi_arch)
713 if test -z "$os_used" && test "$os" != none; then
714   AC_MSG_ERROR(Operating system $os is not supported.)
716 if test -z "$machine_used" && test "$machine" != none; then
717   AC_MSG_ERROR(The $machine is not supported.)
719 if test -z "$submachine_used" && test -n "$submachine"; then
720   AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
722 AC_SUBST(submachine)
724 # We have now validated the configuration.
726 # Expand the list of system names into a full list of directories
727 # from each element's parent name and Implies file (if present).
728 set $sysnames
729 names=
730 while test $# -gt 0; do
731   name=$1
732   shift
734   case " $names " in *" $name "*)
735     # Already in the list.
736     continue
737   esac
739   # Report each name as we discover it, so there is no long pause in output.
740   echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
742   name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
744   case $name in
745     /*) xsrcdir= ;;
746     *)  xsrcdir=$srcdir/ ;;
747   esac
748   test -n "$enable_debug_configure" &&
749   echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
751   for implies_file in Implies Implies-before Implies-after; do
752     implies_type=`echo $implies_file | sed s/-/_/`
753     eval ${implies_type}=
754     if test -f $xsrcdir$name/$implies_file; then
755       # Collect more names from the `Implies' file (removing comments).
756       implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
757       for x in $implied_candidate; do
758         found=no
759         if test -d $xsrcdir$name_base/$x; then
760           eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
761           found=yes
762         fi
763         for d in $add_ons_pfx ''; do
764           try="${d}sysdeps/$x"
765           case $d in
766            /*) try_srcdir= ;;
767            *) try_srcdir=$srcdir/ ;;
768           esac
769           test -n "$enable_debug_configure" &&
770            echo "[DEBUG]: $name $implies_file $x try($d) {$try_srcdir}$try" >&2
771           if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
772           then
773             eval "${implies_type}=\"\$${implies_type} \$try\""
774             found=yes
775             case "$sysnames_add_ons" in
776             *" $d "*) ;;
777             *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
778             esac
779           fi
780         done
781         if test $found = no; then
782           AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
783         fi
784       done
785     fi
786   done
788   # Add NAME to the list of names.
789   names="$names $name"
791   # Find the parent of NAME, using the empty string if it has none.
792 changequote(,)dnl
793   parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
794 changequote([,])dnl
796   test -n "$enable_debug_configure" &&
797     echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
798 Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
800   # Add the names implied by NAME, and NAME's parent (if it has one), to
801   # the list of names to be processed (the argument list).  We prepend the
802   # implied names to the list and append the parent.  We want implied
803   # directories to come before further directories inferred from the
804   # configuration components; this ensures that for sysv4, unix/common
805   # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
806   # after sysv4).
807   sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
808   test -n "$sysnames" && set $sysnames
809 done
811 # Add the default directories.
812 default_sysnames="sysdeps/generic"
813 sysnames="$names $default_sysnames"
814 AC_SUBST(sysnames)
815 # The other names were emitted during the scan.
816 AC_MSG_RESULT($default_sysnames)
818 # Collect the list of add-ons that supply partial sysdeps trees.
819 sysdeps_add_ons=
820 for add_on in $add_ons; do
821   case "$add_on" in
822   /*) xsrcdir= ;;
823   *) xsrcdir="$srcdir/" ;;
824   esac
826   test -d "$xsrcdir$add_on/sysdeps" || {
827     case "$configured_add_ons " in
828     *" $add_on "*) ;;
829     *|'')
830       AC_MSG_ERROR(add-on $add_on has no configure fragment or sysdeps tree)
831       ;;
832     esac
833     continue
834   }
836   sysdeps_add_ons="$sysdeps_add_ons $add_on"
837   case "$sysnames_add_ons" in
838   *" $add_on/ "*) ;;
839   *|'')
840     AC_MSG_WARN(add-on $add_on contributed no sysdeps directories)
841     continue ;;
842   esac
844   found=no
845   for d in $sysnames; do
846     case "$d" in
847     $add_on/sysdeps/*) ;;
848     *) continue ;;
849     esac
850     (cd "$xsrcdir$d" && for f in *[[!~]]; do
851        case "$f" in
852        sys|bits)
853          for ff in $f/*.h; do
854            test -d "$ff" || { test -e "$ff" && exit 88; }
855          done
856          ;;
857        *)
858          test -d "$f" || { test -e "$f" && exit 88; }
859          ;;
860        esac
861      done)
862     if test $? -eq 88; then
863       found=yes
864       break
865     fi
866   done
867   if test $found = no; then
868     AC_MSG_WARN(add-on $add_on contributed no useful sysdeps directories)
869   fi
870 done
871 AC_SUBST(sysdeps_add_ons)
874 ### Locate tools.
876 AC_PROG_INSTALL
877 if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
878   # The makefiles need to use a different form to find it in $srcdir.
879   INSTALL='\$(..)./scripts/install-sh -c'
881 AC_PROG_LN_S
883 LIBC_PROG_BINUTILS
884 AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in
886 # Accept binutils 2.20 or newer.
887 AC_CHECK_PROG_VER(AS, $AS, --version,
888                   [GNU assembler.* \([0-9]*\.[0-9.]*\)],
889                   [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
890 AC_CHECK_PROG_VER(LD, $LD, --version,
891                   [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
892                   [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], LD=: critic_missing="$critic_missing ld")
894 # These programs are version sensitive.
895 AC_CHECK_TOOL_PREFIX
896 AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
897   [version \([egcygnustpi-]*[0-9.]*\)], [4.[3-9].* | 4.[1-9][0-9].* | [5-9].* ],
898   critic_missing="$critic_missing gcc")
899 AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
900   [GNU Make[^0-9]*\([0-9][0-9.]*\)],
901   [3.79* | 3.[89]*], critic_missing="$critic_missing make")
903 AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
904   [GNU gettext.* \([0-9]*\.[0-9.]*\)],
905   [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
906   MSGFMT=: aux_missing="$aux_missing msgfmt")
907 AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
908   [GNU texinfo.* \([0-9][0-9.]*\)],
909   [4.[5-9]*|4.[1-9][0-9]*|[5-9].*],
910   MAKEINFO=: aux_missing="$aux_missing makeinfo")
911 AC_CHECK_PROG_VER(SED, sed, --version,
912   [GNU sed version \([0-9]*\.[0-9.]*\)],
913   [3.0[2-9]*|3.[1-9]*|[4-9]*],
914   SED=: aux_missing="$aux_missing sed")
916 AC_CHECK_TOOL(READELF, readelf, false)
917 AC_CHECK_TOOL(NM, nm, false)
919 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
920 case "x$AUTOCONF" in
921 xno|x|x:) AUTOCONF=no ;;
923   AC_CACHE_CHECK(dnl
924 whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
925   if (cd $srcdir; $AUTOCONF $ACFLAGS configure.in > /dev/null 2>&1); then
926     libc_cv_autoconf_works=yes
927   else
928     libc_cv_autoconf_works=no
929   fi])
930   test $libc_cv_autoconf_works = yes || AUTOCONF=no
931   ;;
932 esac
933 if test "x$AUTOCONF" = xno; then
934   aux_missing="$aux_missing autoconf"
937 test -n "$critic_missing" && AC_MSG_ERROR([
938 *** These critical programs are missing or too old:$critic_missing
939 *** Check the INSTALL file for required versions.])
941 test -n "$aux_missing" && AC_MSG_WARN([
942 *** These auxiliary programs are missing or incompatible versions:$aux_missing
943 *** some features will be disabled.
944 *** Check the INSTALL file for required versions.])
946 # if using special system headers, find out the compiler's sekrit
947 # header directory and add that to the list.  NOTE: Only does the right
948 # thing on a system that doesn't need fixincludes.  (Not presently a problem.)
949 if test -n "$sysheaders"; then
950   SYSINCLUDES=-nostdinc
951   for d in include include-fixed; do
952     i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
953     SYSINCLUDES="$SYSINCLUDES -isystem $i"
954   done
955   SYSINCLUDES="$SYSINCLUDES \
956 -isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
957   if test -n "$CXX"; then
958     CXX_SYSINCLUDES=
959     cxxversion=`$CXX -dumpversion 2>&AS_MESSAGE_LOG_FD` &&
960     cxxmachine=`$CXX -dumpmachine 2>&AS_MESSAGE_LOG_FD` &&
961     for d in include "$cxxmachine/include"; do
962       i=../../../../$d/c++/$cxxversion
963       cxxheaders=`$CXX -print-file-name="$i"` &&
964       test "x$cxxheaders" != x && test "x$i" != "x$cxxheaders" &&
965       CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders \
966 -isystem $cxxheaders/$cxxmachine -isystem $cxxheaders/backward"
967     done
968   fi
970 AC_SUBST(SYSINCLUDES)
971 AC_SUBST(CXX_SYSINCLUDES)
973 # Test if LD_LIBRARY_PATH contains the notation for the current directory
974 # since this would lead to problems installing/building glibc.
975 # LD_LIBRARY_PATH contains the current directory if one of the following
976 # is true:
977 # - one of the terminals (":" and ";") is the first or last sign
978 # - two terminals occur directly after each other
979 # - the path contains an element with a dot in it
980 AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
981 changequote(,)dnl
982 case ${LD_LIBRARY_PATH} in
983   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
984     ld_library_path_setting="contains current directory"
985     ;;
986   *)
987     ld_library_path_setting="ok"
988     ;;
989 esac
990 changequote([,])dnl
991 AC_MSG_RESULT($ld_library_path_setting)
992 if test "$ld_library_path_setting" != "ok"; then
993 AC_MSG_ERROR([
994 *** LD_LIBRARY_PATH shouldn't contain the current directory when
995 *** building glibc. Please change the environment variable
996 *** and run configure again.])
999 AC_CACHE_CHECK(whether GCC supports -static-libgcc, libc_cv_gcc_static_libgcc, [dnl
1000 if $CC -v -static-libgcc 2>&1 | grep -q 'unrecognized option.*static-libgcc'; then
1001   libc_cv_gcc_static_libgcc=
1002 else
1003   libc_cv_gcc_static_libgcc=-static-libgcc
1004 fi])
1005 AC_SUBST(libc_cv_gcc_static_libgcc)
1007 AC_PATH_PROG(BASH_SHELL, bash, no)
1008 if test "$BASH_SHELL" != no &&
1009    $BASH_SHELL -c 'test "$BASH_VERSINFO" \
1010              && test "$BASH_VERSINFO" -ge 2 >&/dev/null'; then
1011   libc_cv_have_bash2=yes
1012 else
1013   libc_cv_have_bash2=no
1015 AC_SUBST(libc_cv_have_bash2)
1017 dnl We need a ksh compatible shell for tzselect.
1018 if test "$BASH_SHELL" = no; then
1019   AC_PATH_PROG(KSH, ksh, no)
1020   if test "$KSH" = no; then
1021     libc_cv_have_ksh=no
1022   else
1023     libc_cv_have_ksh=yes
1024   fi
1025 else
1026   KSH="$BASH_SHELL"
1027   AC_SUBST(KSH)
1028   libc_cv_have_ksh=yes
1030 AC_SUBST(libc_cv_have_ksh)
1032 AC_PROG_AWK
1033 AC_PATH_PROG(PERL, perl, no)
1034 if test "$PERL" != no &&
1035    (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1036   PERL=no
1038 AC_PATH_PROG(INSTALL_INFO, install-info, no,
1039              $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
1040 AC_PATH_PROG(BISON, bison, no, $PATH:/usr/local/bin:/usr/bin:/bin)
1042 AC_CACHE_CHECK(for libc-friendly stddef.h, libc_cv_friendly_stddef, [dnl
1043 AC_TRY_COMPILE(dnl
1044 [#define __need_size_t
1045 #define __need_wchar_t
1046 #include <stddef.h>
1047 #define __need_NULL
1048 #include <stddef.h>], [size_t size; wchar_t wchar;
1049 #ifdef offsetof
1050 #error stddef.h ignored __need_*
1051 #endif
1052 if (&size == NULL || &wchar == NULL) abort ();],
1053                libc_cv_friendly_stddef=yes,
1054                libc_cv_friendly_stddef=no)])
1055 if test $libc_cv_friendly_stddef = yes; then
1056   config_vars="$config_vars
1057 override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
1060 AC_CACHE_CHECK(whether we need to use -P to assemble .S files,
1061                libc_cv_need_minus_P, [dnl
1062 cat > conftest.S <<EOF
1063 #include "confdefs.h"
1064 /* Nothing whatsoever.  */
1066 if AC_TRY_COMMAND(${CC-cc} $CPPFLAGS $ASFLAGS -c conftest.S 1>&AS_MESSAGE_LOG_FD); then
1067   libc_cv_need_minus_P=no
1068 else
1069   libc_cv_need_minus_P=yes
1071 rm -f conftest*])
1072 if test $libc_cv_need_minus_P = yes; then
1073   config_vars="$config_vars
1074 asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
1077 AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
1078 cat > conftest.s <<EOF
1079 ${libc_cv_dot_text}
1080 foo:
1081 .set glibc_conftest_frobozz,foo
1082 .globl glibc_conftest_frobozz
1084 # The alpha-dec-osf1 assembler gives only a warning for `.set'
1085 # (but it doesn't work), so we must do a linking check to be sure.
1086 cat > conftest1.c <<\EOF
1087 extern int glibc_conftest_frobozz;
1088 void _start() { glibc_conftest_frobozz = 1; }
1090 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
1091             -nostartfiles -nostdlib \
1092             -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1093   libc_cv_asm_set_directive=yes
1094 else
1095   libc_cv_asm_set_directive=no
1097 rm -f conftest*])
1098 if test $libc_cv_asm_set_directive = yes; then
1099   AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1102 AC_CACHE_CHECK(for assembler gnu_unique_object symbol type,
1103                libc_cv_asm_unique_object, [dnl
1104 cat > conftest.s <<EOF
1105 ${libc_cv_dot_text}
1106 _sym:
1107 .type _sym, %gnu_unique_object
1109 if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1110   libc_cv_asm_unique_object=yes
1111 else
1112   libc_cv_asm_unique_object=no
1114 rm -f conftest*])
1115 if test $libc_cv_asm_unique_object = yes; then
1116   AC_DEFINE(HAVE_ASM_UNIQUE_OBJECT)
1119 AC_CACHE_CHECK(for .symver assembler directive, libc_cv_asm_symver_directive,
1120 [cat > conftest.s <<EOF
1121 ${libc_cv_dot_text}
1122 _sym:
1123 .symver _sym,sym@VERS
1125 if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1126   libc_cv_asm_symver_directive=yes
1127 else
1128   libc_cv_asm_symver_directive=no
1130 rm -f conftest*])
1131 AC_CACHE_CHECK(for ld --version-script, libc_cv_ld_version_script_option, [dnl
1132 if test $libc_cv_asm_symver_directive = yes; then
1133   cat > conftest.s <<EOF
1134 ${libc_cv_dot_text}
1135 _sym:
1136 .symver _sym,sym@VERS
1138   cat > conftest.map <<EOF
1139 VERS_1 {
1140         global: sym;
1143 VERS_2 {
1144         global: sym;
1145 } VERS_1;
1147   if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1148     if AC_TRY_COMMAND([${CC-cc} $CFLAGS $LDFLAGS -shared
1149                                 -o conftest.so conftest.o
1150                                 -nostartfiles -nostdlib
1151                                 -Wl,--version-script,conftest.map
1152                        1>&AS_MESSAGE_LOG_FD]);
1153     then
1154       libc_cv_ld_version_script_option=yes
1155     else
1156       libc_cv_ld_version_script_option=no
1157     fi
1158   else
1159     libc_cv_ld_version_script_option=no
1160   fi
1161 else
1162   libc_cv_ld_version_script_option=no
1164 rm -f conftest*])
1165 if test $shared != no &&
1166    test $libc_cv_asm_symver_directive = yes &&
1167    test $libc_cv_ld_version_script_option = yes &&
1168    test $enable_versioning = yes; then
1169   VERSIONING=yes
1170   AC_DEFINE(DO_VERSIONING)
1171 else
1172   VERSIONING=no
1174 AC_SUBST(VERSIONING)
1176 if test $shared != no && test $VERSIONING = no; then
1177   echo "\
1178 *** WARNING: You should not compile GNU libc without versioning. Not using
1179 *** versioning will introduce incompatibilities so that old binaries
1180 *** will not run anymore.
1181 *** For versioning you need recent binutils (binutils-2.8.1.0.23 or newer)."
1183 AC_CACHE_CHECK(for .previous assembler directive,
1184                libc_cv_asm_previous_directive, [dnl
1185 cat > conftest.s <<EOF
1186 .section foo_section
1187 .previous
1189 if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
1190   libc_cv_asm_previous_directive=yes
1191 else
1192   libc_cv_asm_previous_directive=no
1194 rm -f conftest*])
1195 if test $libc_cv_asm_previous_directive = yes; then
1196   AC_DEFINE(HAVE_ASM_PREVIOUS_DIRECTIVE)
1197 else
1198   AC_CACHE_CHECK(for .popsection assembler directive,
1199                  libc_cv_asm_popsection_directive, [dnl
1200   cat > conftest.s <<EOF
1201 .pushsection foo_section
1202 .popsection
1204   if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
1205     libc_cv_asm_popsection_directive=yes
1206   else
1207     libc_cv_asm_popsection_directive=no
1208   fi
1209   rm -f conftest*])
1210   if test $libc_cv_asm_popsection_directive = yes; then
1211     AC_DEFINE(HAVE_ASM_POPSECTION_DIRECTIVE)
1212   fi
1214 AC_CACHE_CHECK(for .protected and .hidden assembler directive,
1215                libc_cv_asm_protected_directive, [dnl
1216 cat > conftest.s <<EOF
1217 .protected foo
1218 foo:
1219 .hidden bar
1220 bar:
1222 if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
1223   libc_cv_asm_protected_directive=yes
1224 else
1225   AC_MSG_ERROR(assembler support for symbol visibility is required)
1227 rm -f conftest*])
1229 if test $libc_cv_asm_protected_directive = yes; then
1230   AC_CACHE_CHECK(whether __attribute__((visibility())) is supported,
1231                  libc_cv_visibility_attribute,
1232                  [cat > conftest.c <<EOF
1233                   int foo __attribute__ ((visibility ("hidden"))) = 1;
1234                   int bar __attribute__ ((visibility ("protected"))) = 1;
1236                   libc_cv_visibility_attribute=no
1237                   if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1238                     if grep '\.hidden.*foo' conftest.s >/dev/null; then
1239                       if grep '\.protected.*bar' conftest.s >/dev/null; then
1240                         libc_cv_visibility_attribute=yes
1241                       fi
1242                     fi
1243                   fi
1244                   rm -f conftest.{c,s}
1245                  ])
1246   if test $libc_cv_visibility_attribute != yes; then
1247     AC_MSG_ERROR(compiler support for visibility attribute is required)
1248   fi
1251 if test $libc_cv_visibility_attribute = yes; then
1252   AC_CACHE_CHECK(for broken __attribute__((visibility())),
1253                  libc_cv_broken_visibility_attribute,
1254                  [cat > conftest.c <<EOF
1255                   int foo (int x);
1256                   int bar (int x) __asm__ ("foo") __attribute__ ((visibility ("hidden")));
1257                   int bar (int x) { return x; }
1259                   libc_cv_broken_visibility_attribute=yes
1260                   if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1261 changequote(,)dnl
1262                     if grep '\.hidden[  _]foo' conftest.s >/dev/null; then
1263 changequote([,])dnl
1264                       libc_cv_broken_visibility_attribute=no
1265                     fi
1266                   fi
1267                   rm -f conftest.c conftest.s
1268                  ])
1269   if test $libc_cv_broken_visibility_attribute = yes; then
1270     AC_MSG_ERROR(working compiler support for visibility attribute is required)
1271   fi
1274 AC_CACHE_CHECK(for broken __attribute__((alias())),
1275                libc_cv_broken_alias_attribute,
1276                [cat > conftest.c <<EOF
1277                extern int foo (int x) __asm ("xyzzy");
1278                int bar (int x) { return x; }
1279                extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1280                extern int dfoo;
1281                extern __typeof (dfoo) dfoo __asm ("abccb");
1282                int dfoo = 1;
1284                libc_cv_broken_alias_attribute=yes
1285                if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1286                  if grep 'xyzzy' conftest.s >/dev/null &&
1287                     grep 'abccb' conftest.s >/dev/null; then
1288                    libc_cv_broken_alias_attribute=no
1289                  fi
1290                fi
1291                rm -f conftest.c conftest.s
1292                ])
1293 if test $libc_cv_broken_alias_attribute = yes; then
1294   AC_MSG_ERROR(working alias attribute support required)
1297 if test $libc_cv_visibility_attribute = yes; then
1298   AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1299                  libc_cv_have_sdata_section,
1300                  [echo "int i;" > conftest.c
1301                   libc_cv_have_sdata_section=no
1302                   if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1303                      | grep '\.sdata' >/dev/null; then
1304                     libc_cv_have_sdata_section=yes
1305                   fi
1306                   rm -f conftest.c conftest.so
1307                  ])
1308   if test $libc_cv_have_sdata_section = yes; then
1309     AC_DEFINE(HAVE_SDATA_SECTION)
1310   fi
1313 AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
1314                libc_cv_initfini_array, [dnl
1315 LIBC_TRY_LINK_STATIC([
1316 int foo (void) { return 1; }
1317 int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
1319   [if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
1320     libc_cv_initfini_array=yes
1321   else
1322     libc_cv_initfini_array=no
1323   fi],
1324   [libc_cv_initfini_array=no])
1326 if test $libc_cv_initfini_array != yes; then
1327   AC_MSG_ERROR([Need linker with .init_array/.fini_array support.])
1330 AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
1331                libc_cv_ctors_header, [dnl
1332   libc_cv_ctors_header=yes
1333   LIBC_TRY_LINK_STATIC([
1334 __attribute__ ((constructor)) void ctor (void) { asm (""); }
1335 __attribute__ ((destructor))  void dtor (void) { asm (""); }
1337               [dnl
1338       AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
1339         { gsub(/\@<:@ */, "@<:@") }
1340         $2 == ".ctors" || $2 == ".dtors" {
1341           size = strtonum("0x" $6)
1342           align = strtonum("0x" $NF)
1343           seen@<:@$2@:>@ = 1
1344           stub@<:@$2@:>@ = size == align * 2
1345         }
1346         END {
1347           ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1348           dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1349           exit ((ctors_ok && dtors_ok) ? 0 : 1)
1350         }
1351       '], [libc_cv_ctors_header=no])
1352     ], [dnl
1353       AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1354     ])
1356 if test $libc_cv_ctors_header = no; then
1357   AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1360 AC_CACHE_CHECK(for libunwind-support in compiler,
1361                libc_cv_cc_with_libunwind, [
1362   cat > conftest.c <<EOF
1363 int main (void) { return 0; }
1365   if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
1366      conftest.c -v 2>&1 >/dev/null | grep -q " -lunwind "; then
1367     libc_cv_cc_with_libunwind=yes
1368   else
1369     libc_cv_cc_with_libunwind=no
1370   fi
1371   rm -f conftest*])
1372 AC_SUBST(libc_cv_cc_with_libunwind)
1373 if test $libc_cv_cc_with_libunwind = yes; then
1374   AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1377 AC_CACHE_CHECK(for -z nodelete option,
1378                libc_cv_z_nodelete, [dnl
1379 cat > conftest.c <<EOF
1380 int _start (void) { return 42; }
1382 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1383                    -fPIC -shared -o conftest.so conftest.c
1384                    -nostartfiles -nostdlib
1385                    -Wl,--enable-new-dtags,-z,nodelete 1>&AS_MESSAGE_LOG_FD])
1386 then
1387   libc_cv_z_nodelete=yes
1388 else
1389   AC_MSG_ERROR(linker with -z nodelete support required)
1391 rm -f conftest*])
1393 AC_CACHE_CHECK(for -z nodlopen option,
1394                libc_cv_z_nodlopen, [dnl
1395 cat > conftest.c <<EOF
1396 int _start (void) { return 42; }
1398 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1399                         -fPIC -shared -o conftest.so conftest.c
1400                         -nostartfiles -nostdlib
1401                         -Wl,--enable-new-dtags,-z,nodlopen 1>&AS_MESSAGE_LOG_FD])
1402 then
1403   libc_cv_z_nodlopen=yes
1404 else
1405   AC_MSG_ERROR(linker with -z nodlopen support required)
1407 rm -f conftest*])
1409 AC_CACHE_CHECK(for -z initfirst option,
1410                libc_cv_z_initfirst, [dnl
1411 cat > conftest.c <<EOF
1412 int _start (void) { return 42; }
1414 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1415                         -fPIC -shared -o conftest.so conftest.c
1416                         -nostartfiles -nostdlib
1417                         -Wl,--enable-new-dtags,-z,initfirst 1>&AS_MESSAGE_LOG_FD])
1418 then
1419   libc_cv_z_initfirst=yes
1420 else
1421   AC_MSG_ERROR(linker with -z initfirst support required)
1423 rm -f conftest*])
1425 # Add-on fragments can set these for other machines.
1426 libc_commonpagesize=${libc_commonpagesize:-no}
1427 libc_relro_required=${libc_relro_required:-no}
1428 case "$base_machine" in
1429   i[[34567]]86 | x86_64 | powerpc* | s390*)
1430     libc_commonpagesize=0x1000
1431     libc_relro_required=yes
1432     ;;
1433   sparc*)
1434     libc_commonpagesize=0x2000
1435     libc_relro_required=yes
1436     ;;
1437 esac
1439 if test $libc_commonpagesize != no; then
1440   AC_CACHE_CHECK(for -z relro option,
1441                  libc_cv_z_relro, [dnl
1442   libc_cv_z_relro=no
1443   AC_LANG_CONFTEST([AC_LANG_SOURCE([[
1444 int _start (void) { return 42; }
1445 extern void _exit (int);
1446 /* Since these pointers are const, they should go in rodata.
1447    Since they refer to functions that have to be resolved by
1448    dynamic linking, they should instead go in RELRO data.  */
1449 const void *const relro[] = { &_start, &_exit, 0 };
1450 /* GNU ld fails to produce RELRO data when it's very small and there is no
1451    normal writable data following it, or if only uninitialized (.bss) data
1452    follows it, or only very small writable data.  */
1453 int data[0x10000] = { 1, };
1454 ]])])
1455   cat > conftest.awk <<\EOF
1456 BEGIN {
1457   result = "no"
1458   commonpagesize = strtonum(commonpagesize)
1460 { print "LINE:", $0 > "/dev/stderr" }
1461 $1 == "GNU_RELRO" {
1462   vaddr = strtonum($3)
1463   memsz = strtonum($6)
1464   end = vaddr + memsz
1465   printf "vaddr %#x memsz %#x end %#x commonpagesize %#x\n", \
1466     vaddr, memsz, end, commonpagesize > "/dev/stderr"
1467   result = (end % commonpagesize == 0) ? "yes" : "broken"
1469 END { print result }
1471   AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1472                     -fPIC -shared -o conftest.so conftest.c
1473                     -nostartfiles -nostdlib
1474                     -Wl,-z,relro 1>&AS_MESSAGE_LOG_FD]) &&
1475   AC_TRY_COMMAND([$READELF -Wl conftest.so > conftest.ph]) &&
1476   AC_TRY_COMMAND([
1477       $AWK -v commonpagesize=$libc_commonpagesize -f conftest.awk
1478            conftest.ph > conftest.cps
1479     ]) &&
1480   libc_cv_z_relro=`cat conftest.cps 2>&AS_MESSAGE_LOG_FD`
1481   rm -f conftest*])
1482   if { test "x$libc_relro_required" = xyes &&
1483        test "x$libc_cv_z_relro" != xyes
1484      }
1485   then
1486     AC_MSG_ERROR(linker with -z relro support required)
1487   fi
1488 else
1489   AC_MSG_WARN([missing architecture parameter to check for working -z relro])
1492 AC_CACHE_CHECK(for -Bgroup option,
1493                libc_cv_Bgroup, [dnl
1494 cat > conftest.c <<EOF
1495 int _start (void) { return 42; }
1497 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1498                             -fPIC -shared -o conftest.so conftest.c
1499                             -Wl,-Bgroup -nostdlib 1>&AS_MESSAGE_LOG_FD])
1500 then
1501   libc_cv_Bgroup=yes
1502 else
1503   libc_cv_Bgroup=no
1505 rm -f conftest*])
1506 AC_SUBST(libc_cv_Bgroup)
1508 ASFLAGS_config=
1509 AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1510                libc_cv_as_noexecstack, [dnl
1511 cat > conftest.c <<EOF
1512 void foo (void) { }
1514 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1515                    -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
1516    && grep -q .note.GNU-stack conftest.s \
1517    && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1518                       -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1519 then
1520   libc_cv_as_noexecstack=yes
1521 else
1522   libc_cv_as_noexecstack=no
1524 rm -f conftest*])
1525 if test $libc_cv_as_noexecstack = yes; then
1526   ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1528 AC_SUBST(ASFLAGS_config)
1530 AC_CACHE_CHECK(for -z combreloc,
1531                libc_cv_z_combreloc, [dnl
1532 cat > conftest.c <<EOF
1533 extern int bar (int);
1534 extern int mumble;
1535 int foo (void) { return bar (mumble); }
1537 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1538                         -fPIC -shared -o conftest.so conftest.c
1539                         -nostdlib -nostartfiles
1540                         -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
1541 then
1542 dnl The following test is a bit weak.  We must use a tool which can test
1543 dnl cross-platform since the gcc used can be a cross compiler.  Without
1544 dnl introducing new options this is not easily doable.  Instead use a tool
1545 dnl which always is cross-platform: readelf.  To detect whether -z combreloc
1546 dnl look for a section named .rel.dyn.
1547   if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
1548     libc_cv_z_combreloc=yes
1549   else
1550     libc_cv_z_combreloc=no
1551   fi
1552 else
1553   libc_cv_z_combreloc=no
1555 rm -f conftest*])
1556 if test "$libc_cv_z_combreloc" = yes; then
1557   AC_DEFINE(HAVE_Z_COMBRELOC)
1559 AC_SUBST(libc_cv_z_combreloc)
1561 AC_CACHE_CHECK(for -z execstack,
1562                libc_cv_z_execstack, [dnl
1563 cat > conftest.c <<EOF
1564 int _start (void) { return 42; }
1566 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1567                             -fPIC -shared -o conftest.so conftest.c
1568                             -Wl,-z,execstack -nostdlib
1569                             1>&AS_MESSAGE_LOG_FD])
1570 then
1571   libc_cv_z_execstack=yes
1572 else
1573   libc_cv_z_execstack=no
1575 rm -f conftest*])
1576 AC_SUBST(libc_cv_z_execstack)
1578 AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
1579 LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1582 AC_SUBST(libc_cv_fpie)
1584 AC_CACHE_CHECK(for --hash-style option,
1585                libc_cv_hashstyle, [dnl
1586 cat > conftest.c <<EOF
1587 int _start (void) { return 42; }
1589 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1590                             -fPIC -shared -o conftest.so conftest.c
1591                             -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1592 then
1593   libc_cv_hashstyle=yes
1594 else
1595   libc_cv_hashstyle=no
1597 rm -f conftest*])
1598 AC_SUBST(libc_cv_hashstyle)
1600 # The linker's default -shared behavior is good enough if it
1601 # does these things that our custom linker scripts ensure that
1602 # all allocated NOTE sections come first.
1603 if test "$use_default_link" = default; then
1604   AC_CACHE_CHECK([for sufficient default -shared layout],
1605                   libc_cv_use_default_link, [dnl
1606   libc_cv_use_default_link=no
1607   cat > conftest.s <<\EOF
1608           .section .note.a,"a",%note
1609           .balign 4
1610           .long 4,4,9
1611           .string "GNU"
1612           .string "foo"
1613           .section .note.b,"a",%note
1614           .balign 4
1615           .long 4,4,9
1616           .string "GNU"
1617           .string "bar"
1619   if AC_TRY_COMMAND([dnl
1620   ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1621        ac_try=`$READELF -S conftest.so | sed -n \
1622          ['${x;p;}
1623           s/^ *\[ *[1-9][0-9]*\]  *\([^ ][^ ]*\)  *\([^ ][^ ]*\) .*$/\2 \1/
1624           t a
1625           b
1626           : a
1627           H']`
1628   then
1629     libc_seen_a=no libc_seen_b=no
1630     set -- $ac_try
1631     while test $# -ge 2 -a "$1" = NOTE; do
1632       case "$2" in
1633       .note.a) libc_seen_a=yes ;;
1634       .note.b) libc_seen_b=yes ;;
1635       esac
1636       shift 2
1637     done
1638     case "$libc_seen_a$libc_seen_b" in
1639     yesyes)
1640       libc_cv_use_default_link=yes
1641       ;;
1642     *)
1643       echo >&AS_MESSAGE_LOG_FD "\
1644 $libc_seen_a$libc_seen_b from:
1645 $ac_try"
1646       ;;
1647     esac
1648   fi
1649   rm -f conftest*])
1650   use_default_link=$libc_cv_use_default_link
1653 AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
1654 if libc_cv_output_format=`
1655 ${CC-cc} -nostartfiles -nostdlib -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
1656 then
1657   :
1658 else
1659   libc_cv_output_format=
1661 test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1662 AC_SUBST(libc_cv_output_format)
1664 AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
1665 cat > conftest.c <<EOF
1666 int foo;
1668 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
1669                             conftest.c 1>&AS_MESSAGE_LOG_FD])
1670 then
1671   libc_cv_fno_toplevel_reorder=yes
1672 else
1673   libc_cv_fno_toplevel_reorder=no
1675 rm -f conftest*])
1676 if test $libc_cv_fno_toplevel_reorder = yes; then
1677   fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
1678 else
1679   fno_unit_at_a_time=-fno-unit-at-a-time
1681 AC_SUBST(fno_unit_at_a_time)
1683 AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
1684 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
1685                    [libc_cv_ssp=yes],
1686                    [libc_cv_ssp=no])
1688 AC_SUBST(libc_cv_ssp)
1690 AC_CACHE_CHECK(for -fgnu89-inline, libc_cv_gnu89_inline, [dnl
1691 cat > conftest.c <<EOF
1692 int foo;
1693 #ifdef __GNUC_GNU_INLINE__
1694 main () { return 0;}
1695 #else
1696 #error
1697 #endif
1699 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -std=gnu99 -fgnu89-inline
1700                             -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD])
1701 then
1702   libc_cv_gnu89_inline=yes
1703 else
1704   libc_cv_gnu89_inline=no
1706 rm -f conftest*])
1707 if test $libc_cv_gnu89_inline = yes; then
1708   gnu89_inline=-fgnu89-inline
1709 else
1710   gnu89_inline=
1712 AC_SUBST(gnu89_inline)
1714 AC_CACHE_CHECK(whether cc puts quotes around section names,
1715                libc_cv_have_section_quotes,
1716                [cat > conftest.c <<EOF
1717                 static const int foo
1718                 __attribute__ ((section ("bar"))) = 1;
1720                 if ${CC-cc} -S conftest.c -o conftest.s; then
1721                   if grep '\.section.*"bar"' conftest.s >/dev/null; then
1722                     libc_cv_have_section_quotes=yes
1723                   else
1724                     libc_cv_have_section_quotes=no
1725                   fi
1726                 else
1727                   libc_cv_have_section_quotes=unknown
1728                 fi
1729                 rm -f conftest.{c,s}
1730                 ])
1731 if test $libc_cv_have_section_quotes = yes; then
1732   AC_DEFINE(HAVE_SECTION_QUOTES)
1735 AC_CACHE_CHECK(for assembler .weak directive, libc_cv_asm_weak_directive,
1736                [dnl
1737 cat > conftest.s <<EOF
1738 ${libc_cv_dot_text}
1739 .globl foo
1740 foo:
1741 .weak foo
1742 .weak bar; bar = foo
1744 if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
1745   libc_cv_asm_weak_directive=yes
1746 else
1747   libc_cv_asm_weak_directive=no
1749 rm -f conftest*])
1751 if test $libc_cv_asm_weak_directive = no; then
1752   AC_CACHE_CHECK(for assembler .weakext directive,
1753                  libc_cv_asm_weakext_directive,
1754                  [dnl
1755 cat > conftest.s <<EOF
1756 ${libc_cv_dot_text}
1757 .globl foo
1758 foo:
1759 .weakext bar foo
1760 .weakext baz
1761 .globl baz
1762 baz:
1764   if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
1765     libc_cv_asm_weakext_directive=yes
1766   else
1767     libc_cv_asm_weakext_directive=no
1768   fi
1769   rm -f conftest*])
1771 fi # no .weak
1773 if test $libc_cv_asm_weak_directive = yes; then
1774   AC_DEFINE(HAVE_ASM_WEAK_DIRECTIVE)
1775 elif test $libc_cv_asm_weakext_directive = yes; then
1776   AC_DEFINE(HAVE_ASM_WEAKEXT_DIRECTIVE)
1779 AC_CACHE_CHECK(whether CFI directives are supported, libc_cv_asm_cfi_directives, [dnl
1780 case $machine in
1781   sparc/sparc64*) cfi_offset=2047;;
1782   *) cfi_offset=0;;
1783 esac
1784 cat > conftest.s <<EOF
1785         .text
1786         .type   func,%function
1787 func:
1788         .cfi_startproc
1789         .cfi_remember_state
1790         .cfi_rel_offset 1, $cfi_offset
1791         .cfi_endproc
1793 if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
1794   libc_cv_asm_cfi_directives=yes
1795 else
1796   libc_cv_asm_cfi_directives=no
1798 rm -f conftest*])
1799 if test $libc_cv_asm_cfi_directives = yes; then
1800   AC_DEFINE(HAVE_ASM_CFI_DIRECTIVES)
1803 AC_CACHE_CHECK(for ld --no-whole-archive, libc_cv_ld_no_whole_archive, [dnl
1804 cat > conftest.c <<\EOF
1805 _start () {}
1806 int __eh_pc;
1807 __throw () {}
1809 dnl No \ in command here because it ends up inside ''.
1810 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1811                             -nostdlib -nostartfiles -Wl,--no-whole-archive
1812                             -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD]); then
1813   libc_cv_ld_no_whole_archive=yes
1814 else
1815   libc_cv_ld_no_whole_archive=no
1817 rm -f conftest*])
1818 if test $libc_cv_ld_no_whole_archive = no; then
1819   AC_MSG_ERROR([support for --no-whole-archive is needed])
1822 AC_CACHE_CHECK(for gcc -fexceptions, libc_cv_gcc_exceptions, [dnl
1823 cat > conftest.c <<\EOF
1824 _start () {}
1825 int __eh_pc;
1826 __throw () {}
1828 dnl No \ in command here because it ends up inside ''.
1829 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1830                             -nostdlib -nostartfiles -fexceptions
1831                             -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD]); then
1832   libc_cv_gcc_exceptions=yes
1833 else
1834   libc_cv_gcc_exceptions=no
1836 rm -f conftest*])
1837 if test $libc_cv_gcc_exceptions = yes; then
1838   exceptions=-fexceptions
1840 AC_SUBST(exceptions)dnl
1842 if test "$host_cpu" = powerpc ; then
1843 # Check for a bug present in at least versions 2.8.x of GCC
1844 # and versions 1.0.x of EGCS.
1845 AC_CACHE_CHECK(whether clobbering cr0 causes problems,libc_cv_c_asmcr0_bug,[dnl
1846 AC_TRY_COMPILE([int tester(int x) { asm ("" : : : "cc"); return x & 123; }],,
1847                libc_cv_c_asmcr0_bug='no',
1848                libc_cv_c_asmcr0_bug='yes')])
1849 if test "$libc_cv_c_asmcr0_bug" != 'no'; then
1850   AC_DEFINE(BROKEN_PPC_ASM_CR0)
1854 AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1855 cat > conftest.c <<\EOF
1856 void zero (void *x)
1858   __builtin_memset (x, 0, 1000);
1862 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | fgrep "memset" > /dev/null]);
1863 then
1864   libc_cv_gcc_builtin_memset=no
1865 else
1866   libc_cv_gcc_builtin_memset=yes
1868 rm -f conftest* ])
1869 if test "$libc_cv_gcc_builtin_memset" = yes ; then
1870   AC_DEFINE(HAVE_BUILTIN_MEMSET)
1873 AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1874 cat > conftest.c <<\EOF
1875 extern char *strstr (const char *, const char *) __asm ("my_strstr");
1876 char *foo (const char *a, const char *b)
1878   return __builtin_strstr (a, b);
1882 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | fgrep "my_strstr" > /dev/null]);
1883 then
1884   libc_cv_gcc_builtin_redirection=yes
1885 else
1886   libc_cv_gcc_builtin_redirection=no
1888 rm -f conftest* ])
1889 if test "$libc_cv_gcc_builtin_redirection" = no; then
1890   AC_MSG_ERROR([support for the symbol redirection needed])
1893 dnl Check whether the compiler supports the __thread keyword.
1894 AC_CACHE_CHECK([for __thread], libc_cv_gcc___thread,
1895 [cat > conftest.c <<\EOF
1896 __thread int a = 42;
1898 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c >&AS_MESSAGE_LOG_FD]); then
1899   libc_cv_gcc___thread=yes
1900 else
1901   libc_cv_gcc___thread=no
1903 rm -f conftest*])
1904 if test "$libc_cv_gcc___thread" = no; then
1905   AC_MSG_ERROR([support for the __thread keyword is required])
1908 dnl Check whether the compiler supports the tls_model attribute.
1909 AC_CACHE_CHECK([for tls_model attribute], libc_cv_gcc_tls_model_attr, [dnl
1910 cat > conftest.c <<\EOF
1911 extern __thread int a __attribute__((tls_model ("initial-exec")));
1913 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -Werror conftest.c >&AS_MESSAGE_LOG_FD]); then
1914   libc_cv_gcc_tls_model_attr=yes
1915 else
1916   libc_cv_gcc_tls_model_attr=no
1918 rm -f conftest*])
1919 if test "$libc_cv_gcc_tls_model_attr" = no; then
1920   AC_MSG_ERROR([support for the tls_model attribute is required])
1923 dnl Determine how to disable generation of FMA instructions.
1924 AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1925                libc_cv_cc_nofma, [dnl
1926 libc_cv_cc_nofma=
1927 for opt in -ffp-contract=off -mno-fused-madd; do
1928   LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1929 done])
1931 if test -n "$submachine"; then
1932   AC_CACHE_CHECK([for compiler option for CPU variant],
1933                  libc_cv_cc_submachine, [dnl
1934   libc_cv_cc_submachine=no
1935   for opt in "-march=$submachine" "-mcpu=$submachine"; do
1936     LIBC_TRY_CC_OPTION([$opt], [
1937       libc_cv_cc_submachine="$opt"
1938       break], [])
1939   done])
1940   if test "x$libc_cv_cc_submachine" = xno; then
1941     AC_MSG_ERROR([${CC-cc} does not support $submachine])
1942   fi
1944 AC_SUBST(libc_cv_cc_submachine)
1946 dnl Check whether we have the gd library available.
1947 AC_MSG_CHECKING(for libgd)
1948 if test "$with_gd" != "no"; then
1949   old_CFLAGS="$CFLAGS"
1950   CFLAGS="$CFLAGS $libgd_include"
1951   old_LDFLAGS="$LDFLAGS"
1952   LDFLAGS="$LDFLAGS $libgd_ldflags"
1953   old_LIBS="$LIBS"
1954   LIBS="$LIBS -lgd -lpng -lz -lm"
1955   AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
1956   CFLAGS="$old_CFLAGS"
1957   LDFLAGS="$old_LDFLAGS"
1958   LIBS="$old_LIBS"
1959 else
1960   LIBGD=no
1962 AC_MSG_RESULT($LIBGD)
1963 AC_SUBST(LIBGD)
1965 # SELinux detection
1966 if test x$with_selinux = xno ; then
1967   have_selinux=no;
1968 else
1969   # See if we have the SELinux library
1970   AC_CHECK_LIB(selinux, is_selinux_enabled,
1971                have_selinux=yes, have_selinux=no)
1972   # See if we have the SELinux header with the NSCD permissions in it.
1973   if test x$have_selinux = xyes ; then
1974     AC_MSG_CHECKING([for NSCD Flask permissions in selinux/av_permissions.h])
1975     AC_TRY_COMPILE([#include <selinux/av_permissions.h>],
1976                     [#ifdef NSCD__SHMEMHOST
1977                      return 0;
1978                      #else
1979                      #error NSCD__SHMEMHOST not defined
1980                      #endif],
1981                     have_selinux=yes, have_selinux=no)
1982     AC_MSG_RESULT($have_selinux)
1983   fi
1985   if test x$with_selinux = xyes ; then
1986     if test x$have_selinux = xno ; then
1987       AC_MSG_ERROR([SELinux explicitly required, but sufficiently recent SELinux library not found])
1988     fi
1989   fi
1991 # Check if we're building with SELinux support.
1992 if test "x$have_selinux" = xyes; then
1993   AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
1995   # See if we have the libaudit library
1996   AC_CHECK_LIB(audit, audit_log_user_avc_message,
1997                have_libaudit=yes, have_libaudit=no)
1998   if test "x$have_libaudit" = xyes; then
1999     AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
2000   fi
2001   AC_SUBST(have_libaudit)
2003   # See if we have the libcap library
2004   AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
2005   if test "x$have_libcap" = xyes; then
2006     AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
2007   fi
2008   AC_SUBST(have_libcap)
2010 AC_SUBST(have_selinux)
2012 dnl check for the size of 'long double'.
2013 AC_CHECK_SIZEOF(long double, 0)
2014 sizeof_long_double=$ac_cv_sizeof_long_double
2015 AC_SUBST(sizeof_long_double)
2017 CPPUNDEFS=
2018 dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
2019 dnl Since we are building the implementations of the fortified functions here,
2020 dnl having the macro defined interacts very badly.
2021 AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
2022 [AC_TRY_COMPILE([], [
2023 #ifdef _FORTIFY_SOURCE
2024 # error bogon
2025 #endif],
2026                 [libc_cv_predef_fortify_source=no],
2027                 [libc_cv_predef_fortify_source=yes])])
2028 if test $libc_cv_predef_fortify_source = yes; then
2029   CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
2031 AC_SUBST(CPPUNDEFS)
2033 dnl Check for silly hacked compilers inserting -fstack-protector.
2034 dnl This breaks badly for the early startup code we compile, since
2035 dnl the compiled code can refer to a magic machine-dependent location
2036 dnl for the canary value before we have sufficient setup for that to
2037 dnl work.  It's also questionable to build all of libc with this flag
2038 dnl even when you're doing that for most applications you build, since
2039 dnl libc's code is so heavily-used and performance-sensitive.  If we
2040 dnl ever really want to make that work, it should be enabled explicitly
2041 dnl in the libc build, not inherited from implicit compiler settings.
2042 AC_CACHE_CHECK([whether $CC implicitly enables -fstack-protector],
2043                libc_cv_predef_stack_protector, [
2044 AC_TRY_COMPILE([extern void foobar (char *);],
2045                [char large_array[2048]; foobar (large_array);], [
2046 libc_undefs=`$NM -u conftest.o |
2047   LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
2048     2>&AS_MESSAGE_LOG_FD` || {
2049   AC_MSG_ERROR([confusing output from $NM -u])
2051 echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
2052 # On some architectures, there are architecture-specific undefined
2053 # symbols (resolved by the linker), so filter out unknown symbols.
2054 # This will fail to produce the correct result if the compiler
2055 # defaults to -fstack-protector but this produces an undefined symbol
2056 # other than __stack_chk_fail.  However, compilers like that have not
2057 # been encountered in practice.
2058 libc_undefs=`echo "$libc_undefs" | egrep '^(foobar|__stack_chk_fail)$'`
2059 case "$libc_undefs" in
2060 foobar) libc_cv_predef_stack_protector=no ;;
2061 '__stack_chk_fail
2062 foobar') libc_cv_predef_stack_protector=yes ;;
2063 *) AC_MSG_ERROR([unexpected symbols in test: $libc_undefs]) ;;
2064 esac],
2065                [AC_MSG_ERROR([test compilation failed])])
2067 libc_extra_cflags=
2068 if test $libc_cv_predef_stack_protector = yes; then
2069   libc_extra_cflags=-fno-stack-protector
2071 AC_SUBST(libc_extra_cflags)
2073 ### End of automated tests.
2074 ### Now run sysdeps configure fragments.
2076 # They also can set these variables.
2077 use_ldconfig=no
2078 ldd_rewrite_script=no
2079 libc_cv_sysconfdir=$sysconfdir
2080 libc_cv_localstatedir=$localstatedir
2081 libc_cv_gcc_unwind_find_fde=no
2082 libc_cv_idn=no
2084 # Iterate over all the sysdep directories we will use, running their
2085 # configure fragments.
2086 for dir in $sysnames; do
2087   case $dir in
2088     /*) dest=$dir ;;
2089     *)  dest=$srcdir/$dir ;;
2090   esac
2091   if test -r $dest/configure; then
2092     AC_MSG_RESULT(running configure fragment for $dir)
2093     . $dest/configure
2094   fi
2095 done
2097 if test x$libc_cv_gcc_unwind_find_fde = xyes; then
2098   AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
2100 AC_SUBST(libc_cv_gcc_unwind_find_fde)
2102 # Test for old glibc 2.0.x headers so that they can be removed properly
2103 # Search only in includedir.
2104 AC_MSG_CHECKING(for old glibc 2.0.x headers)
2105 if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h"
2106 then
2107   old_glibc_headers=yes
2108 else
2109   old_glibc_headers=no
2111 AC_MSG_RESULT($old_glibc_headers)
2112 if test ${old_glibc_headers} = yes; then
2113   AC_MSG_WARN(*** During \"make install\" old headers from glibc 2.0.x will)
2114   AC_MSG_WARN(*** be removed.)
2116 AC_SUBST(old_glibc_headers)
2118 AC_SUBST(libc_cv_slibdir)
2119 AC_SUBST(libc_cv_localedir)
2120 AC_SUBST(libc_cv_sysconfdir)
2121 AC_SUBST(libc_cv_localstatedir)
2122 AC_SUBST(libc_cv_rootsbindir)
2123 AC_SUBST(libc_cv_forced_unwind)
2125 dnl sysdeps/CPU/configure.in checks set this via arch-specific asm tests
2126 AC_SUBST(libc_cv_cpp_asm_debuginfo)
2127 AC_SUBST(libc_cv_cc_sse4)
2128 AC_SUBST(libc_cv_cc_avx)
2129 AC_SUBST(libc_cv_cc_sse2avx)
2130 AC_SUBST(libc_cv_cc_novzeroupper)
2131 AC_SUBST(libc_cv_cc_fma4)
2132 AC_SUBST(libc_cv_cc_nofma)
2133 AC_SUBST(libc_cv_as_i686)
2134 AC_SUBST(libc_cv_sparc_as_vis3)
2136 AC_SUBST(use_ldconfig)
2137 AC_SUBST(ldd_rewrite_script)
2139 AC_SUBST(static)
2140 AC_SUBST(shared)
2142 AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
2143 [libc_cv_pic_default=yes
2144 cat > conftest.c <<EOF
2145 #if defined __PIC__ || defined __pic__ || defined PIC || defined pic
2146 # error PIC is default.
2147 #endif
2149 if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
2150   libc_cv_pic_default=no
2152 rm -f conftest.*])
2153 AC_SUBST(libc_cv_pic_default)
2155 AC_SUBST(profile)
2156 AC_SUBST(static_nss)
2158 AC_SUBST(DEFINES)
2160 dnl See sysdeps/mach/configure.in for this variable.
2161 AC_SUBST(mach_interface_list)
2163 if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
2164   config_makefile=
2165 else
2166   config_makefile=Makefile
2169 VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
2170 RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
2171 AC_SUBST(VERSION)
2172 AC_SUBST(RELEASE)
2174 AC_CONFIG_FILES([config.make ${config_makefile}])
2175 AC_CONFIG_COMMANDS([default],[[
2176 case $CONFIG_FILES in *config.make*)
2177 echo "$config_vars" >> config.make;;
2178 esac
2179 test -d bits || mkdir bits]],[[config_vars='$config_vars']])
2180 AC_OUTPUT