]> git.ipfire.org Git - thirdparty/glibc.git/blob - configure.ac
[AArch64] Optimized memcmp.
[thirdparty/glibc.git] / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2 dnl Note we do not use AC_PREREQ here! See aclocal.m4 for what we use instead.
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])
7
8 ACX_PKGVERSION([GNU libc])
9 ACX_BUGURL([http://www.gnu.org/software/libc/bugs.html])
10 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"],
11 [Package description])
12 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"],
13 [Bug reporting address])
14
15 # Glibc should not depend on any header files
16 AC_DEFUN([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
17 [m4_divert_text([DEFAULTS],
18 [ac_includes_default='/* none */'])])
19
20 # We require GCC, and by default use its preprocessor. Override AC_PROG_CPP
21 # here to work around the Autoconf issue discussed in
22 # <http://sourceware.org/ml/libc-alpha/2013-01/msg00721.html>.
23 AC_DEFUN([AC_PROG_CPP],
24 [AC_REQUIRE([AC_PROG_CC])dnl
25 AC_ARG_VAR([CPP], [C preprocessor])dnl
26 _AC_ARG_VAR_CPPFLAGS()dnl
27 # On Suns, sometimes $CPP names a directory.
28 if test -n "$CPP" && test -d "$CPP"; then
29 CPP=
30 fi
31 if test -z "$CPP"; then
32 CPP="$CC -E"
33 fi
34 AC_SUBST(CPP)dnl
35 ])# AC_PROG_CPP
36
37 # We require GCC. Override _AC_PROG_CC_C89 here to work around the Autoconf
38 # issue discussed in
39 # <http://sourceware.org/ml/libc-alpha/2013-01/msg00757.html>.
40 AC_DEFUN([_AC_PROG_CC_C89], [[$1]])
41
42 dnl This is here so we can set $subdirs directly based on configure fragments.
43 AC_CONFIG_SUBDIRS()
44
45 AC_CANONICAL_HOST
46
47 AC_PROG_CC
48 if test $host != $build; then
49 AC_CHECK_PROGS(BUILD_CC, gcc cc)
50 fi
51 AC_SUBST(cross_compiling)
52 AC_PROG_CPP
53 AC_CHECK_TOOL(READELF, readelf, false)
54
55 # We need the C++ compiler only for testing.
56 AC_PROG_CXX
57 # It's useless to us if it can't link programs (e.g. missing -lstdc++).
58 AC_CACHE_CHECK([whether $CXX can link programs], libc_cv_cxx_link_ok, [dnl
59 AC_LANG_PUSH([C++])
60 # Default, dynamic case.
61 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
62 [libc_cv_cxx_link_ok=yes],
63 [libc_cv_cxx_link_ok=no])
64 # Static case.
65 old_LDFLAGS="$LDFLAGS"
66 LDFLAGS="$LDFLAGS -static"
67 AC_LINK_IFELSE([AC_LANG_SOURCE([
68 #include <iostream>
69
70 int
71 main()
72 {
73 std::cout << "Hello, world!";
74 return 0;
75 }
76 ])],
77 [],
78 [libc_cv_cxx_link_ok=no])
79 LDFLAGS="$old_LDFLAGS"
80 AC_LANG_POP([C++])])
81 AS_IF([test $libc_cv_cxx_link_ok != yes], [CXX=])
82
83 if test "`cd $srcdir; pwd -P`" = "`pwd -P`"; then
84 AC_MSG_ERROR([you must configure in a separate build directory])
85 fi
86
87 # This will get text that should go into config.make.
88 config_vars=
89
90 # Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
91 AC_ARG_WITH([gd],
92 AC_HELP_STRING([--with-gd=DIR],
93 [find libgd include dir and library with prefix DIR]),
94 [dnl
95 case "$with_gd" in
96 yes|''|no) ;;
97 *) libgd_include="-I$withval/include"
98 libgd_ldflags="-L$withval/lib" ;;
99 esac
100 ])
101 AC_ARG_WITH([gd-include],
102 AC_HELP_STRING([--with-gd-include=DIR],
103 [find libgd include files in DIR]),
104 [dnl
105 case "$with_gd_include" in
106 ''|no) ;;
107 *) libgd_include="-I$withval" ;;
108 esac
109 ])
110 AC_ARG_WITH([gd-lib],
111 AC_HELP_STRING([--with-gd-lib=DIR],
112 [find libgd library files in DIR]),
113 [dnl
114 case "$with_gd_lib" in
115 ''|no) ;;
116 *) libgd_ldflags="-L$withval" ;;
117 esac
118 ])
119
120 if test -n "$libgd_include"; then
121 config_vars="$config_vars
122 CFLAGS-memusagestat.c = $libgd_include"
123 fi
124 if test -n "$libgd_ldflags"; then
125 config_vars="$config_vars
126 libgd-LDFLAGS = $libgd_ldflags"
127 fi
128
129 dnl Arguments to specify presence of other packages/features.
130 AC_ARG_WITH([fp],
131 AC_HELP_STRING([--with-fp],
132 [if using floating-point hardware @<:@default=yes@:>@]),
133 [with_fp=$withval],
134 [with_fp=yes])
135 AC_SUBST(with_fp)
136 AC_ARG_WITH([binutils],
137 AC_HELP_STRING([--with-binutils=PATH],
138 [specify location of binutils (as and ld)]),
139 [path_binutils=$withval],
140 [path_binutils=''])
141 AC_ARG_WITH([selinux],
142 AC_HELP_STRING([--with-selinux],
143 [if building with SELinux support]),
144 [with_selinux=$withval],
145 [with_selinux=auto])
146
147 AC_ARG_WITH([headers],
148 AC_HELP_STRING([--with-headers=PATH],
149 [location of system headers to use
150 (for example /usr/src/linux/include)
151 @<:@default=compiler default@:>@]),
152 [sysheaders=$withval],
153 [sysheaders=''])
154 AC_SUBST(sysheaders)
155
156 AC_SUBST(use_default_link)
157 AC_ARG_WITH([default-link],
158 AC_HELP_STRING([--with-default-link],
159 [do not use explicit linker scripts]),
160 [use_default_link=$withval],
161 [use_default_link=default])
162
163 AC_ARG_ENABLE([sanity-checks],
164 AC_HELP_STRING([--disable-sanity-checks],
165 [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
166 [enable_sanity=$enableval],
167 [enable_sanity=yes])
168
169 AC_ARG_ENABLE([shared],
170 AC_HELP_STRING([--enable-shared],
171 [build shared library @<:@default=yes if GNU ld@:>@]),
172 [shared=$enableval],
173 [shared=yes])
174 AC_ARG_ENABLE([profile],
175 AC_HELP_STRING([--enable-profile],
176 [build profiled library @<:@default=no@:>@]),
177 [profile=$enableval],
178 [profile=no])
179 AC_ARG_ENABLE([timezone-tools],
180 AC_HELP_STRING([--disable-timezone-tools],
181 [do not install timezone tools @<:@default=install@:>@]),
182 [enable_timezone_tools=$enableval],
183 [enable_timezone_tools=yes])
184 AC_SUBST(enable_timezone_tools)
185
186 AC_ARG_ENABLE([hardcoded-path-in-tests],
187 AC_HELP_STRING([--enable-hardcoded-path-in-tests],
188 [hardcode newly built glibc path in tests @<:@default=no@:>@]),
189 [hardcoded_path_in_tests=$enableval],
190 [hardcoded_path_in_tests=no])
191 AC_SUBST(hardcoded_path_in_tests)
192
193 AC_ARG_ENABLE([stackguard-randomization],
194 AC_HELP_STRING([--enable-stackguard-randomization],
195 [initialize __stack_chk_guard canary with a random number at program start]),
196 [enable_stackguard_randomize=$enableval],
197 [enable_stackguard_randomize=no])
198 if test "$enable_stackguard_randomize" = yes; then
199 AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
200 fi
201
202 AC_ARG_ENABLE([lock-elision],
203 AC_HELP_STRING([--enable-lock-elision[=yes/no]],
204 [Enable lock elision for pthread mutexes by default]),
205 [enable_lock_elision=$enableval],
206 [enable_lock_elision=no])
207 AC_SUBST(enable_lock_elision)
208 if test "$enable_lock_elision" = yes ; then
209 AC_DEFINE(ENABLE_LOCK_ELISION)
210 fi
211
212 dnl Generic infrastructure for drop-in additions to libc.
213 AC_ARG_ENABLE([add-ons],
214 AC_HELP_STRING([--enable-add-ons@<:@=DIRS...@:>@],
215 [configure and build add-ons in DIR1,DIR2,...
216 search for add-ons if no parameter given]),
217 , [enable_add_ons=yes])
218
219 AC_ARG_ENABLE([hidden-plt],
220 AC_HELP_STRING([--disable-hidden-plt],
221 [do not hide internal function calls to avoid PLT]),
222 [hidden=$enableval],
223 [hidden=yes])
224 if test "x$hidden" = xno; then
225 AC_DEFINE(NO_HIDDEN)
226 fi
227
228 AC_ARG_ENABLE([bind-now],
229 AC_HELP_STRING([--enable-bind-now],
230 [disable lazy relocations in DSOs]),
231 [bindnow=$enableval],
232 [bindnow=no])
233 AC_SUBST(bindnow)
234 if test "x$bindnow" = xyes; then
235 AC_DEFINE(BIND_NOW)
236 fi
237
238 dnl Build glibc with -fstack-protector, -fstack-protector-all, or
239 dnl -fstack-protector-strong.
240 AC_ARG_ENABLE([stack-protector],
241 AC_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@],
242 [Use -fstack-protector[-all|-strong] to detect glibc buffer overflows]),
243 [enable_stack_protector=$enableval],
244 [enable_stack_protector=no])
245 case "$enable_stack_protector" in
246 all|yes|no|strong) ;;
247 *) AC_MSG_ERROR([Not a valid argument for --enable-stack-protector: \"$enable_stack_protector\"]);;
248 esac
249
250 dnl On some platforms we cannot use dynamic loading. We must provide
251 dnl static NSS modules.
252 AC_ARG_ENABLE([static-nss],
253 AC_HELP_STRING([--enable-static-nss],
254 [build static NSS modules @<:@default=no@:>@]),
255 [static_nss=$enableval],
256 [static_nss=no])
257 dnl Enable static NSS also if we build no shared objects.
258 if test x"$static_nss" = xyes || test x"$shared" = xno; then
259 static_nss=yes
260 AC_DEFINE(DO_STATIC_NSS)
261 fi
262
263 AC_ARG_ENABLE([force-install],
264 AC_HELP_STRING([--disable-force-install],
265 [don't force installation of files from this package, even if they are older than the installed files]),
266 [force_install=$enableval],
267 [force_install=yes])
268 AC_SUBST(force_install)
269
270 AC_ARG_ENABLE([maintainer-mode],
271 AC_HELP_STRING([--enable-maintainer-mode],
272 [enable make rules and dependencies not useful (and sometimes confusing) to the casual installer]),
273 [maintainer=$enableval],
274 [maintainer=no])
275
276 dnl On some platforms we allow dropping compatibility with all kernel
277 dnl versions.
278 AC_ARG_ENABLE([kernel],
279 AC_HELP_STRING([--enable-kernel=VERSION],
280 [compile for compatibility with kernel not older than VERSION]),
281 [minimum_kernel=$enableval],
282 [])
283 dnl Prevent unreasonable values.
284 if test "$minimum_kernel" = yes || test "$minimum_kernel" = no; then
285 # Better nothing than this.
286 minimum_kernel=""
287 else
288 if test "$minimum_kernel" = current; then
289 minimum_kernel=`uname -r 2>/dev/null` || minimum_kernel=
290 fi
291 fi
292
293 dnl For the development we sometimes want gcc to issue even more warnings.
294 dnl This is not the default since many of the extra warnings are not
295 dnl appropriate.
296 AC_ARG_ENABLE([all-warnings],
297 AC_HELP_STRING([--enable-all-warnings],
298 [enable all useful warnings gcc can issue]),
299 [all_warnings=$enableval],
300 [])
301 AC_SUBST(all_warnings)
302
303 AC_ARG_ENABLE([werror],
304 AC_HELP_STRING([--disable-werror],
305 [do not build with -Werror]),
306 [enable_werror=$enableval],
307 [enable_werror=yes])
308 AC_SUBST(enable_werror)
309
310 AC_ARG_ENABLE([multi-arch],
311 AC_HELP_STRING([--enable-multi-arch],
312 [enable single DSO with optimizations for multiple architectures]),
313 [multi_arch=$enableval],
314 [multi_arch=default])
315
316 AC_ARG_ENABLE([experimental-malloc],
317 AC_HELP_STRING([--disable-experimental-malloc],
318 [disable experimental malloc features]),
319 [experimental_malloc=$enableval],
320 [experimental_malloc=yes])
321 AC_SUBST(experimental_malloc)
322
323 AC_ARG_ENABLE([nss-crypt],
324 AC_HELP_STRING([--enable-nss-crypt],
325 [enable libcrypt to use nss]),
326 [nss_crypt=$enableval],
327 [nss_crypt=no])
328 if test x$nss_crypt = xyes; then
329 nss_includes=-I$(nss-config --includedir 2>/dev/null)
330 if test $? -ne 0; then
331 AC_MSG_ERROR([cannot find include directory with nss-config])
332 fi
333 nspr_includes=-I$(nspr-config --includedir 2>/dev/null)
334 if test $? -ne 0; then
335 AC_MSG_ERROR([cannot find include directory with nspr-config])
336 fi
337 old_CFLAGS="$CFLAGS"
338 CFLAGS="$CFLAGS $nss_includes $nspr_includes"
339 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
340 #include <hasht.h>
341 #include <nsslowhash.h>
342 void f (void) { NSSLOW_Init (); }])],
343 libc_cv_nss_crypt=yes,
344 AC_MSG_ERROR([
345 cannot find NSS headers with lowlevel hash function interfaces]))
346 old_LIBS="$LIBS"
347 old_LDFLAGS="$LDFLAGS"
348 LIBS="$LIBS -lfreebl3"
349 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
350 #include <hasht.h>
351 #include <nsslowhash.h>],
352 [NSSLOW_Init();])],
353 libc_cv_nss_crypt=yes,
354 AC_MSG_ERROR([
355 cannot link program using lowlevel NSS hash functions]))
356 # Check to see if there is a static NSS cryptographic library.
357 # If there isn't then we can't link anything with libcrypt.a,
358 # and that might mean disabling some static tests.
359 LDFLAGS="$LDFLAGS -static"
360 AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
361 #include <hasht.h>
362 #include <nsslowhash.h>],
363 [NSSLOW_Init();])],
364 libc_cv_static_nss_crypt=yes,
365 libc_cv_static_nss_crypt=no)
366 LDFLAGS="$old_LDFLAGS"
367 CFLAGS="$old_CFLAGS"
368 LIBS="$old_LIBS"
369 else
370 libc_cv_nss_crypt=no
371 libc_cv_static_nss_crypt=no
372 fi
373 AC_SUBST(libc_cv_nss_crypt)
374 AC_SUBST(libc_cv_static_nss_crypt)
375
376
377 AC_ARG_ENABLE([obsolete-rpc],
378 AC_HELP_STRING([--enable-obsolete-rpc],
379 [build and install the obsolete RPC code for link-time usage]),
380 [link_obsolete_rpc=$enableval],
381 [link_obsolete_rpc=no])
382 AC_SUBST(link_obsolete_rpc)
383
384 if test "$link_obsolete_rpc" = yes; then
385 AC_DEFINE(LINK_OBSOLETE_RPC)
386 fi
387
388 AC_ARG_ENABLE([obsolete-nsl],
389 AC_HELP_STRING([--enable-obsolete-nsl],
390 [build and install the obsolete libnsl library and depending NSS modules]),
391 [build_obsolete_nsl=$enableval],
392 [build_obsolete_nsl=no])
393 AC_SUBST(build_obsolete_nsl)
394
395 if test "$build_obsolete_nsl" = yes; then
396 AC_DEFINE(LINK_OBSOLETE_NSL)
397 fi
398
399 AC_ARG_ENABLE([systemtap],
400 [AS_HELP_STRING([--enable-systemtap],
401 [enable systemtap static probe points @<:@default=no@:>@])],
402 [systemtap=$enableval],
403 [systemtap=no])
404 if test "x$systemtap" != xno; then
405 AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
406 old_CFLAGS="$CFLAGS"
407 CFLAGS="-std=gnu11 $CFLAGS"
408 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/sdt.h>
409 void foo (int i, void *p)
410 {
411 asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
412 :: STAP_PROBE_ASM_OPERANDS (2, i, p));
413 }]])], [libc_cv_sdt=yes], [libc_cv_sdt=no])
414 CFLAGS="$old_CFLAGS"])
415 if test $libc_cv_sdt = yes; then
416 AC_DEFINE([USE_STAP_PROBE])
417 elif test "x$systemtap" != xauto; then
418 AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
419 fi
420 fi
421
422 AC_ARG_ENABLE([build-nscd],
423 [AS_HELP_STRING([--disable-build-nscd],
424 [disable building and installing the nscd daemon])],
425 [build_nscd=$enableval],
426 [build_nscd=default])
427 AC_SUBST(build_nscd)
428
429 # Note the use of $use_nscd is near the bottom of the file.
430 AC_ARG_ENABLE([nscd],
431 [AS_HELP_STRING([--disable-nscd],
432 [library functions will not contact the nscd daemon])],
433 [use_nscd=$enableval],
434 [use_nscd=yes])
435
436 AC_ARG_ENABLE([pt_chown],
437 [AS_HELP_STRING([--enable-pt_chown],
438 [Enable building and installing pt_chown])],
439 [build_pt_chown=$enableval],
440 [build_pt_chown=no])
441 AC_SUBST(build_pt_chown)
442 if test "$build_pt_chown" = yes; then
443 AC_DEFINE(HAVE_PT_CHOWN)
444 fi
445
446 AC_ARG_ENABLE([tunables],
447 [AS_HELP_STRING([--enable-tunables],
448 [Enable tunables support. Known values are 'yes', 'no' and 'valstring'])],
449 [have_tunables=$enableval],
450 [have_tunables=yes])
451 AC_SUBST(have_tunables)
452 if test "$have_tunables" = yes; then
453 AC_DEFINE(HAVE_TUNABLES)
454 fi
455
456 # The abi-tags file uses a fairly simplistic model for name recognition that
457 # can't distinguish i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a
458 # $host_os of `gnu*' here to be `gnu-gnu*' just so that it can tell.
459 # This doesn't get used much beyond that, so it's fairly safe.
460 case "$host_os" in
461 linux*)
462 ;;
463 gnu*)
464 host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
465 ;;
466 esac
467
468 AC_ARG_ENABLE([mathvec],
469 [AS_HELP_STRING([--enable-mathvec],
470 [Enable building and installing mathvec @<:@default depends on architecture@:>@])],
471 [build_mathvec=$enableval],
472 [build_mathvec=notset])
473
474 # We keep the original values in `$config_*' and never modify them, so we
475 # can write them unchanged into config.make. Everything else uses
476 # $machine, $vendor, and $os, and changes them whenever convenient.
477 config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
478
479 # Don't allow vendor == "unknown"
480 test "$config_vendor" = unknown && config_vendor=
481 config_os="`echo $config_os | sed 's/^unknown-//'`"
482
483 # Some configurations imply other options.
484 elf=yes
485
486 # The configure fragment of an add-on port can modify these to supplement
487 # or override the table in the case statement below. No fragment should
488 # ever change the config_* variables, however.
489 machine=$config_machine
490 vendor=$config_vendor
491 os=$config_os
492 base_os=''
493
494 submachine=
495 AC_ARG_WITH([cpu],
496 AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]),
497 [dnl
498 case "$withval" in
499 yes|'') AC_MSG_ERROR([--with-cpu requires an argument]) ;;
500 no) ;;
501 *) submachine="$withval" ;;
502 esac
503 ])
504
505 # An preconfigure script can set this when it wants to disable the sanity
506 # check below.
507 libc_config_ok=no
508
509 dnl Let sysdeps/*/preconfigure act here, like they can in add-ons.
510 LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
511
512 dnl Having this here, though empty, makes sure that if add-ons' fragments
513 dnl do AC_CONFIG_SUBDIRS([some-dir]), which just sets $subdirs, then
514 dnl our AC_OUTPUT will actually use it.
515 AC_CONFIG_SUBDIRS()
516
517 case "$enable_add_ons" in
518 ''|no) add_ons= ;;
519 yes|'*')
520 add_ons=`cd $srcdir && ls -d 2> /dev/null */configure */sysdeps |
521 sed 's@/[[^/]]*$@@' | sort | uniq`
522 add_ons_automatic=yes
523 ;;
524 *) add_ons=`echo "$enable_add_ons" | sed 's/,/ /g'`
525 add_ons_automatic=no ;;
526 esac
527
528 configured_add_ons=
529 add_ons_sfx=
530 add_ons_pfx=
531 if test x"$add_ons" != x; then
532 for f in $add_ons; do
533 # Some sanity checks
534 case "$f" in
535 crypt)
536 AC_MSG_ERROR([
537 *** It seems that you're using an old \`crypt' add-on. crypt is now
538 *** part of glibc and using the old add-on will not work with this
539 *** release. Start again with fresh sources and without the old
540 *** \`crypt' add-on.])
541 ;;
542 localedata)
543 AC_MSG_ERROR([
544 *** It seems that you're using an old \`localedata' add-on. localedata
545 *** is now part of glibc and using the old add-on will not work with
546 *** this release. Start again with fresh sources and without the old
547 *** \`localedata' add-on.])
548 ;;
549 esac
550 done
551
552 # Now source each add-on's configure fragment.
553 # The fragments can use $srcdir/$libc_add_on to find themselves,
554 # and test $add_ons_automatic to see if they were explicitly requested.
555 # A fragment can clear (or even change) $libc_add_on to affect
556 # whether it goes into the list to be actually used in the build.
557 use_add_ons=
558 for libc_add_on in $add_ons; do
559 # Test whether such a directory really exists.
560 # It can be absolute, or relative to $srcdir, or relative to the build dir.
561 case "$libc_add_on" in
562 /*)
563 libc_add_on_srcdir=$libc_add_on
564 ;;
565 *)
566 test -d "$srcdir/$libc_add_on" || {
567 if test -d "$libc_add_on"; then
568 libc_add_on="`pwd`/$libc_add_on"
569 else
570 AC_MSG_ERROR(add-on directory \"$libc_add_on\" does not exist)
571 fi
572 }
573 libc_add_on_srcdir=$srcdir/$libc_add_on
574 ;;
575 esac
576
577 libc_add_on_frag=$libc_add_on_srcdir/configure
578 libc_add_on_canonical=
579 libc_add_on_config_subdirs=
580 if test -r "$libc_add_on_frag"; then
581 AC_MSG_NOTICE(running configure fragment for add-on $libc_add_on)
582 libc_add_on_canonical=unknown
583 libc_add_on_subdirs=
584 . "$libc_add_on_frag"
585 test -z "$libc_add_on" || {
586 configured_add_ons="$configured_add_ons $libc_add_on"
587 if test "x$libc_add_on_canonical" = xunknown; then
588 AC_MSG_ERROR(fragment must set \$libc_add_on_canonical)
589 fi
590 for d in $libc_add_on_subdirs; do
591 case "$libc_add_on" in
592 /*) subdir_srcdir="$libc_add_on" ;;
593 *) subdir_srcdir="\$(..)$libc_add_on" ;;
594 esac
595 case "$d" in
596 .)
597 d="${libc_add_on_canonical:-$libc_add_on}"
598 ;;
599 /*)
600 subdir_srcdir="$d"
601 ;;
602 *)
603 subdir_srcdir="$subdir_srcdir/$d"
604 ;;
605 esac
606 d=`echo "$d" | sed 's@/*$@@;s@^.*/@@'`
607 add_on_subdirs="$add_on_subdirs $d"
608 test "$subdir_srcdir" = "\$(..)$d" || config_vars="$config_vars
609 $d-srcdir = $subdir_srcdir"
610 done
611 for d in $libc_add_on_config_subdirs; do
612 case "$d" in
613 /*) AC_MSG_ERROR(dnl
614 fragment uses absolute path in \$libc_add_on_config_subdirs) ;;
615 esac
616 if test ! -d "$libc_add_on_srcdir/$d"; then
617 AC_MSG_ERROR(fragment wants to configure missing directory $d)
618 fi
619 case "$libc_add_on" in
620 /*) AC_MSG_ERROR(dnl
621 relative path required for add-on using \$libc_add_on_config_subdirs) ;;
622 esac
623 subdirs="$subdirs $libc_add_on/$d"
624 done
625 }
626 fi
627 if test -n "$libc_add_on"; then
628 LIBC_PRECONFIGURE([$libc_add_on_srcdir], [add-on $libc_add_on for])
629 use_add_ons="$use_add_ons $libc_add_on"
630 add_ons_pfx="$add_ons_pfx $libc_add_on/"
631 test -z "$libc_add_on_canonical" ||
632 add_ons_sfx="$add_ons_sfx /$libc_add_on_canonical"
633 fi
634 done
635 # Use echo to strip excess whitespace.
636 add_ons="`echo $use_add_ons`"
637 fi
638 AC_SUBST(add_ons)
639 AC_SUBST(add_on_subdirs)
640
641
642 ###
643 ### By using the undocumented --enable-hacker-mode option for configure
644 ### one can skip this test to make the configuration not fail for unsupported
645 ### platforms.
646 ###
647 if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
648 case "$machine-$host_os" in
649 *-linux* | *-gnu*)
650 ;;
651 *)
652 AC_MSG_ERROR([
653 *** The GNU C library is currently unavailable for this platform.
654 *** If you are interested in seeing glibc on this platform visit
655 *** the "How to submit a new port" in the wiki:
656 *** https://sourceware.org/glibc/wiki/#Development
657 *** and join the community!])
658 ;;
659 esac
660 fi
661
662 # Set base_machine if not set by a preconfigure fragment.
663 test -n "$base_machine" || base_machine=$machine
664 AC_SUBST(base_machine)
665
666 AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
667 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
668 [libc_cv_ssp=yes],
669 [libc_cv_ssp=no])
670 ])
671
672 AC_CACHE_CHECK(for -fstack-protector-strong, libc_cv_ssp_strong, [dnl
673 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-strong],
674 [libc_cv_ssp_strong=yes],
675 [libc_cv_ssp_strong=no])
676 ])
677
678 AC_CACHE_CHECK(for -fstack-protector-all, libc_cv_ssp_all, [dnl
679 LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-all],
680 [libc_cv_ssp_all=yes],
681 [libc_cv_ssp_all=no])
682 ])
683
684 stack_protector=
685 no_stack_protector=
686 if test "$libc_cv_ssp" = yes; then
687 no_stack_protector="-fno-stack-protector -DSTACK_PROTECTOR_LEVEL=0"
688 AC_DEFINE(HAVE_CC_NO_STACK_PROTECTOR)
689 fi
690
691 if test "$enable_stack_protector" = yes && test "$libc_cv_ssp" = yes; then
692 stack_protector="-fstack-protector"
693 AC_DEFINE(STACK_PROTECTOR_LEVEL, 1)
694 elif test "$enable_stack_protector" = all && test "$libc_cv_ssp_all" = yes; then
695 stack_protector="-fstack-protector-all"
696 AC_DEFINE(STACK_PROTECTOR_LEVEL, 2)
697 elif test "$enable_stack_protector" = strong && test "$libc_cv_ssp_strong" = yes; then
698 stack_protector="-fstack-protector-strong"
699 AC_DEFINE(STACK_PROTECTOR_LEVEL, 3)
700 else
701 stack_protector="-fno-stack-protector"
702 AC_DEFINE(STACK_PROTECTOR_LEVEL, 0)
703 fi
704 AC_SUBST(libc_cv_ssp)
705 AC_SUBST(stack_protector)
706 AC_SUBST(no_stack_protector)
707
708 if test -n "$stack_protector"; then
709 dnl Don't run configure tests with stack-protection on, to avoid problems with
710 dnl bootstrapping.
711 no_ssp=-fno-stack-protector
712 else
713 no_ssp=
714
715 if test "$enable_stack_protector" != no; then
716 AC_MSG_ERROR([--enable-stack-protector=$enable_stack_protector specified, but specified level of stack protection is not supported by the compiler.])
717 fi
718 fi
719
720 # For the multi-arch option we need support in the assembler & linker.
721 AC_CACHE_CHECK([for assembler and linker STT_GNU_IFUNC support],
722 libc_cv_ld_gnu_indirect_function, [dnl
723 cat > conftest.S <<EOF
724 .type foo,%gnu_indirect_function
725 foo:
726 .globl _start
727 _start:
728 .globl __start
729 __start:
730 .data
731 #ifdef _LP64
732 .quad foo
733 #else
734 .long foo
735 #endif
736 EOF
737 libc_cv_ld_gnu_indirect_function=no
738 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
739 -nostartfiles -nostdlib $no_ssp \
740 -o conftest conftest.S 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
741 # Do a link to see if the backend supports IFUNC relocs.
742 $READELF -r conftest 1>&AS_MESSAGE_LOG_FD
743 LC_ALL=C $READELF -r conftest | grep 'no relocations' >/dev/null || {
744 libc_cv_ld_gnu_indirect_function=yes
745 }
746 fi
747 rm -f conftest*])
748
749 # Check if gcc supports attribute ifunc as it is used in libc_ifunc macro.
750 AC_CACHE_CHECK([for gcc attribute ifunc support],
751 libc_cv_gcc_indirect_function, [dnl
752 cat > conftest.c <<EOF
753 extern int func (int);
754 int used_func (int a)
755 {
756 return a;
757 }
758 static void *resolver ()
759 {
760 return &used_func;
761 }
762 extern __typeof (func) func __attribute__ ((ifunc ("resolver")));
763 EOF
764 libc_cv_gcc_indirect_function=no
765 if ${CC-cc} -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD \
766 2>&AS_MESSAGE_LOG_FD ; then
767 if $READELF -s conftest.o | grep IFUNC >/dev/null 2>&AS_MESSAGE_LOG_FD; then
768 libc_cv_gcc_indirect_function=yes
769 fi
770 fi
771 rm -f conftest*])
772
773 if test x"$libc_cv_ld_gnu_indirect_function" != xyes; then
774 if test x"$multi_arch" = xyes; then
775 AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
776 else
777 multi_arch=no
778 fi
779 fi
780 if test x"$libc_cv_gcc_indirect_function" != xyes &&
781 test x"$multi_arch" = xyes; then
782 AC_MSG_WARN([--enable-multi-arch support recommends a gcc with gnu-indirect-function support.
783 Please use a gcc which supports it by default or configure gcc with --enable-gnu-indirect-function])
784 fi
785 multi_arch_d=
786 if test x"$multi_arch" != xno; then
787 multi_arch_d=/multiarch
788 fi
789
790 # Compute the list of sysdep directories for this configuration.
791 # This can take a while to compute.
792 sysdep_dir=$srcdir/sysdeps
793 AC_MSG_CHECKING(sysdep dirs)
794 dnl We need to use [ and ] for other purposes for a while now.
795 changequote(,)dnl
796 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
797 os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
798
799 test "x$base_os" != x || case "$os" in
800 gnu*)
801 base_os=mach/hurd ;;
802 linux*)
803 base_os=unix/sysv ;;
804 esac
805
806 # For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
807 tail=$os
808 ostry=$os
809 while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
810 ostry="$ostry /$o"
811 tail=$o
812 done
813 o=`echo $tail | sed 's/[0-9]*$//'`
814 if test $o != $tail; then
815 ostry="$ostry /$o"
816 fi
817 # For linux-gnu, try linux-gnu, then linux.
818 o=`echo $tail | sed 's/-.*$//'`
819 if test $o != $tail; then
820 ostry="$ostry /$o"
821 fi
822
823 # For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
824 base=
825 tail=$base_os
826 while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
827 set $b
828 base="$base /$1"
829 tail="$2"
830 done
831
832 # For sparc/sparc32, try sparc/sparc32 and then sparc.
833 mach=
834 tail=$machine${submachine:+/$submachine}
835 while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
836 set $m
837 # Prepend the machine's FPU directory unless --without-fp.
838 if test "$with_fp" = yes; then
839 maybe_fpu=/fpu
840 else
841 maybe_fpu=/nofpu
842 fi
843 # For each machine term, try it with and then without /multiarch.
844 for try_fpu in $maybe_fpu ''; do
845 for try_multi in $multi_arch_d ''; do
846 mach="$mach /$1$try_fpu$try_multi"
847 done
848 done
849 tail="$2"
850 done
851
852 dnl We are done with glob and regexp uses of [ and ]; return to autoconf.
853 changequote([,])dnl
854
855 # Find what sysdep directories exist.
856 sysnames_add_ons=
857 sysnames=
858 for b in $base ''; do
859 for m0 in $mach ''; do
860 for v in /$vendor ''; do
861 test "$v" = / && continue
862 for o in /$ostry ''; do
863 test "$o" = / && continue
864 for m in $mach ''; do
865 for d in $add_ons_pfx ''; do
866 for a in $add_ons_sfx ''; do
867 try_suffix="$m0$b$v$o$m"
868 if test -n "$try_suffix"; then
869 try_srcdir="${srcdir}/"
870 case "$d" in
871 /*) try_srcdir= ;;
872 esac
873 try="${d}sysdeps$try_suffix$a"
874 test -n "$enable_debug_configure" &&
875 echo "$0 [DEBUG]: try $try" >&2
876 if test -d "$try_srcdir$try"; then
877 sysnames="$sysnames $try"
878 { test -n "$o" || test -n "$b"; } && os_used=t
879 { test -n "$m" || test -n "$m0"; } && machine_used=t
880 case x${m0:-$m} in
881 x*/$submachine) submachine_used=t ;;
882 esac
883 if test -n "$d"; then
884 case "$sysnames_add_ons" in
885 *" $d "*) ;;
886 *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
887 esac
888 fi
889 fi
890 fi
891 done
892 done
893 done
894 done
895 done
896 done
897 done
898
899 # If the assembler supports gnu_indirect_function symbol type and the
900 # architecture supports multi-arch, we enable multi-arch by default.
901 case $sysnames_add_ons$sysnames in
902 *"$multi_arch_d"*)
903 ;;
904 *)
905 test x"$multi_arch" = xdefault && multi_arch=no
906 ;;
907 esac
908 if test x"$multi_arch" != xno; then
909 AC_DEFINE(USE_MULTIARCH)
910 fi
911 AC_SUBST(multi_arch)
912
913 if test -z "$os_used" && test "$os" != none; then
914 AC_MSG_ERROR(Operating system $os is not supported.)
915 fi
916 if test -z "$machine_used" && test "$machine" != none; then
917 AC_MSG_ERROR(The $machine is not supported.)
918 fi
919 if test -z "$submachine_used" && test -n "$submachine"; then
920 AC_MSG_ERROR(The $submachine subspecies of $host_cpu is not supported.)
921 fi
922 AC_SUBST(submachine)
923
924 # We have now validated the configuration.
925
926 # Expand the list of system names into a full list of directories
927 # from each element's parent name and Implies file (if present).
928 set $sysnames
929 names=
930 while test $# -gt 0; do
931 name=$1
932 shift
933
934 case " $names " in *" $name "*)
935 # Already in the list.
936 continue
937 esac
938
939 # Report each name as we discover it, so there is no long pause in output.
940 echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
941
942 name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
943
944 case $name in
945 /*) xsrcdir= ;;
946 *) xsrcdir=$srcdir/ ;;
947 esac
948 test -n "$enable_debug_configure" &&
949 echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
950
951 for implies_file in Implies Implies-before Implies-after; do
952 implies_type=`echo $implies_file | sed s/-/_/`
953 eval ${implies_type}=
954 if test -f $xsrcdir$name/$implies_file; then
955 # Collect more names from the `Implies' file (removing comments).
956 implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
957 for x in $implied_candidate; do
958 found=no
959 if test -d $xsrcdir$name_base/$x; then
960 eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
961 found=yes
962 fi
963 for d in $add_ons_pfx ''; do
964 try="${d}sysdeps/$x"
965 case $d in
966 /*) try_srcdir= ;;
967 *) try_srcdir=$srcdir/ ;;
968 esac
969 test -n "$enable_debug_configure" &&
970 echo "[DEBUG]: $name $implies_file $x try($d) {$try_srcdir}$try" >&2
971 if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
972 then
973 eval "${implies_type}=\"\$${implies_type} \$try\""
974 found=yes
975 case "$sysnames_add_ons" in
976 *" $d "*) ;;
977 *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
978 esac
979 fi
980 done
981 if test $found = no; then
982 AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
983 fi
984 done
985 fi
986 done
987
988 # Add NAME to the list of names.
989 names="$names $name"
990
991 # Find the parent of NAME, using the empty string if it has none.
992 changequote(,)dnl
993 parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
994 changequote([,])dnl
995
996 test -n "$enable_debug_configure" &&
997 echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
998 Implies_before='$Implies_before' Implies_after='$Implies_after'" >&2
999
1000 # Add the names implied by NAME, and NAME's parent (if it has one), to
1001 # the list of names to be processed (the argument list). We prepend the
1002 # implied names to the list and append the parent. We want implied
1003 # directories to come before further directories inferred from the
1004 # configuration components; this ensures that for sysv4, unix/common
1005 # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
1006 # after sysv4).
1007 sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
1008 test -n "$sysnames" && set $sysnames
1009 done
1010
1011 # Add the default directories.
1012 default_sysnames="sysdeps/generic"
1013 sysnames="$names $default_sysnames"
1014 AC_SUBST(sysnames)
1015 # The other names were emitted during the scan.
1016 AC_MSG_RESULT($default_sysnames)
1017
1018 # Collect the list of add-ons that supply partial sysdeps trees.
1019 sysdeps_add_ons=
1020 for add_on in $add_ons; do
1021 case "$add_on" in
1022 /*) xsrcdir= ;;
1023 *) xsrcdir="$srcdir/" ;;
1024 esac
1025
1026 test -d "$xsrcdir$add_on/sysdeps" || {
1027 case "$configured_add_ons " in
1028 *" $add_on "*) ;;
1029 *|'')
1030 AC_MSG_ERROR(add-on $add_on has no configure fragment or sysdeps tree)
1031 ;;
1032 esac
1033 continue
1034 }
1035
1036 sysdeps_add_ons="$sysdeps_add_ons $add_on"
1037 case "$sysnames_add_ons" in
1038 *" $add_on/ "*) ;;
1039 *|'')
1040 AC_MSG_WARN(add-on $add_on contributed no sysdeps directories)
1041 continue ;;
1042 esac
1043
1044 found=no
1045 for d in $sysnames; do
1046 case "$d" in
1047 $add_on/sysdeps/*) ;;
1048 *) continue ;;
1049 esac
1050 (cd "$xsrcdir$d" && for f in *[[!~]]; do
1051 case "$f" in
1052 sys|bits)
1053 for ff in $f/*.h; do
1054 test -d "$ff" || { test -e "$ff" && exit 88; }
1055 done
1056 ;;
1057 *)
1058 test -d "$f" || { test -e "$f" && exit 88; }
1059 ;;
1060 esac
1061 done)
1062 if test $? -eq 88; then
1063 found=yes
1064 break
1065 fi
1066 done
1067 if test $found = no; then
1068 AC_MSG_WARN(add-on $add_on contributed no useful sysdeps directories)
1069 fi
1070 done
1071 AC_SUBST(sysdeps_add_ons)
1072
1073
1074 ### Locate tools.
1075
1076 AC_PROG_INSTALL
1077 if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then
1078 # The makefiles need to use a different form to find it in $srcdir.
1079 INSTALL='\$(..)./scripts/install-sh -c'
1080 fi
1081 AC_PROG_LN_S
1082
1083 LIBC_PROG_BINUTILS
1084
1085 # Accept binutils 2.22 or newer.
1086 AC_CHECK_PROG_VER(AS, $AS, --version,
1087 [GNU assembler.* \([0-9]*\.[0-9.]*\)],
1088 [2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
1089 AS=: critic_missing="$critic_missing as")
1090
1091 if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
1092 # Accept gold 1.14 or higher
1093 AC_CHECK_PROG_VER(LD, $LD, --version,
1094 [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
1095 [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
1096 LD=: critic_missing="$critic_missing GNU gold")
1097 else
1098 AC_CHECK_PROG_VER(LD, $LD, --version,
1099 [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
1100 [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
1101 LD=: critic_missing="$critic_missing GNU ld")
1102 fi
1103
1104 # These programs are version sensitive.
1105 AC_CHECK_TOOL_PREFIX
1106 AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
1107 [GNU Make[^0-9]*\([0-9][0-9.]*\)],
1108 [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
1109
1110 AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
1111 [GNU gettext.* \([0-9]*\.[0-9.]*\)],
1112 [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*],
1113 MSGFMT=: aux_missing="$aux_missing msgfmt")
1114 AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
1115 [GNU texinfo.* \([0-9][0-9.]*\)],
1116 [4.[7-9]*|4.[1-9][0-9]*|[5-9].*],
1117 MAKEINFO=: aux_missing="$aux_missing makeinfo")
1118 AC_CHECK_PROG_VER(SED, sed, --version,
1119 [GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
1120 [3.0[2-9]*|3.[1-9]*|[4-9]*],
1121 SED=: aux_missing="$aux_missing sed")
1122 AC_CHECK_PROG_VER(AWK, gawk, --version,
1123 [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
1124 [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
1125
1126 AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
1127 AC_TRY_COMPILE([], [
1128 #if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9)
1129 #error insufficient compiler
1130 #endif],
1131 [libc_cv_compiler_ok=yes],
1132 [libc_cv_compiler_ok=no])])
1133 AS_IF([test $libc_cv_compiler_ok != yes],
1134 [critic_missing="$critic_missing compiler"])
1135
1136 AC_CHECK_TOOL(NM, nm, false)
1137
1138 if test "x$maintainer" = "xyes"; then
1139 AC_CHECK_PROGS(AUTOCONF, autoconf, no)
1140 case "x$AUTOCONF" in
1141 xno|x|x:) AUTOCONF=no ;;
1142 *)
1143 AC_CACHE_CHECK(dnl
1144 whether $AUTOCONF${ACFLAGS:+ }$ACFLAGS works, libc_cv_autoconf_works, [dnl
1145 if (cd $srcdir; $AUTOCONF $ACFLAGS configure.ac > /dev/null 2>&1); then
1146 libc_cv_autoconf_works=yes
1147 else
1148 libc_cv_autoconf_works=no
1149 fi])
1150 test $libc_cv_autoconf_works = yes || AUTOCONF=no
1151 ;;
1152 esac
1153 if test "x$AUTOCONF" = xno; then
1154 aux_missing="$aux_missing autoconf"
1155 fi
1156 else
1157 AUTOCONF=no
1158 fi
1159
1160 # Check for python3 if available, or else python.
1161 AC_CHECK_PROGS(PYTHON_PROG, python3 python,no)
1162 case "x$PYTHON_PROG" in
1163 xno|x|x:) PYTHON_PROG=no ;;
1164 *) ;;
1165 esac
1166
1167 if test "x$PYTHON_PROG" = xno; then
1168 aux_missing="$aux_missing python"
1169 else
1170 PYTHON="$PYTHON_PROG -B"
1171 AC_SUBST(PYTHON)
1172 fi
1173
1174 test -n "$critic_missing" && AC_MSG_ERROR([
1175 *** These critical programs are missing or too old:$critic_missing
1176 *** Check the INSTALL file for required versions.])
1177
1178 test -n "$aux_missing" && AC_MSG_WARN([
1179 *** These auxiliary programs are missing or incompatible versions:$aux_missing
1180 *** some features or tests will be disabled.
1181 *** Check the INSTALL file for required versions.])
1182
1183 # if using special system headers, find out the compiler's sekrit
1184 # header directory and add that to the list. NOTE: Only does the right
1185 # thing on a system that doesn't need fixincludes. (Not presently a problem.)
1186 if test -n "$sysheaders"; then
1187 SYSINCLUDES=-nostdinc
1188 for d in include include-fixed; do
1189 i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
1190 SYSINCLUDES="$SYSINCLUDES -isystem $i"
1191 done
1192 SYSINCLUDES="$SYSINCLUDES \
1193 -isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
1194 if test -n "$CXX"; then
1195 CXX_SYSINCLUDES=
1196 for cxxheaders in `$CXX -v -S -x c++ /dev/null -o /dev/null 2>&1 \
1197 | sed -n -e '1,/#include/d' -e 's/^ \(\/.*\/[cg]++\)/\1/p'`; do
1198 test "x$cxxheaders" != x &&
1199 CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders"
1200 done
1201 fi
1202 fi
1203 AC_SUBST(SYSINCLUDES)
1204 AC_SUBST(CXX_SYSINCLUDES)
1205
1206 # Obtain some C++ header file paths. This is used to make a local
1207 # copy of those headers in Makerules.
1208 if test -n "$CXX"; then
1209 find_cxx_header () {
1210 echo "#include <$1>" | $CXX -M -MP -x c++ - 2>/dev/null \
1211 | sed -n "\,$1:,{s/:\$//;p}"
1212 }
1213 CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
1214 CXX_CMATH_HEADER="$(find_cxx_header cmath)"
1215 CXX_BITS_STD_ABS_H="$(find_cxx_header bits/std_abs.h)"
1216 fi
1217 AC_SUBST(CXX_CSTDLIB_HEADER)
1218 AC_SUBST(CXX_CMATH_HEADER)
1219 AC_SUBST(CXX_BITS_STD_ABS_H)
1220
1221 # Test if LD_LIBRARY_PATH contains the notation for the current directory
1222 # since this would lead to problems installing/building glibc.
1223 # LD_LIBRARY_PATH contains the current directory if one of the following
1224 # is true:
1225 # - one of the terminals (":" and ";") is the first or last sign
1226 # - two terminals occur directly after each other
1227 # - the path contains an element with a dot in it
1228 AC_MSG_CHECKING(LD_LIBRARY_PATH variable)
1229 changequote(,)dnl
1230 case ${LD_LIBRARY_PATH} in
1231 [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
1232 ld_library_path_setting="contains current directory"
1233 ;;
1234 *)
1235 ld_library_path_setting="ok"
1236 ;;
1237 esac
1238 changequote([,])dnl
1239 AC_MSG_RESULT($ld_library_path_setting)
1240 if test "$ld_library_path_setting" != "ok"; then
1241 AC_MSG_ERROR([
1242 *** LD_LIBRARY_PATH shouldn't contain the current directory when
1243 *** building glibc. Please change the environment variable
1244 *** and run configure again.])
1245 fi
1246
1247 AC_PATH_PROG(BASH_SHELL, bash, no)
1248
1249 AC_PATH_PROG(PERL, perl, no)
1250 if test "$PERL" != no &&
1251 (eval `$PERL -V:apiversion`; test `expr "$apiversion" \< 5` -ne 0); then
1252 PERL=no
1253 fi
1254 AC_PATH_PROG(INSTALL_INFO, install-info, no,
1255 $PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
1256 AC_CHECK_PROG_VER(BISON, bison, --version,
1257 [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
1258 [2.7*|[3-9].*|[1-9][0-9]*],
1259 BISON=no)
1260
1261 AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
1262 cat > conftest.s <<EOF
1263 .text
1264 foo:
1265 .set glibc_conftest_frobozz,foo
1266 .globl glibc_conftest_frobozz
1267 EOF
1268 # The alpha-dec-osf1 assembler gives only a warning for `.set'
1269 # (but it doesn't work), so we must do a linking check to be sure.
1270 cat > conftest1.c <<\EOF
1271 extern int glibc_conftest_frobozz;
1272 void _start() { glibc_conftest_frobozz = 1; }
1273 EOF
1274 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
1275 -nostartfiles -nostdlib $no_ssp \
1276 -o conftest conftest.s conftest1.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
1277 libc_cv_asm_set_directive=yes
1278 else
1279 libc_cv_asm_set_directive=no
1280 fi
1281 rm -f conftest*])
1282 if test $libc_cv_asm_set_directive = yes; then
1283 AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
1284 fi
1285
1286 AC_CACHE_CHECK(linker support for protected data symbol,
1287 libc_cv_protected_data,
1288 [cat > conftest.c <<EOF
1289 int bar __attribute__ ((visibility ("protected"))) = 1;
1290 EOF
1291 libc_cv_protected_data=no
1292 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -o conftest.so); then
1293 cat > conftest.c <<EOF
1294 extern int bar;
1295 int main (void) { return bar; }
1296 EOF
1297 if AC_TRY_COMMAND(${CC-cc} -nostdlib -nostartfiles $no_ssp conftest.c -o conftest conftest.so); then
1298 libc_cv_protected_data=yes
1299 fi
1300 fi
1301 rm -f conftest.*
1302 ])
1303 AC_SUBST(libc_cv_protected_data)
1304
1305 AC_CACHE_CHECK(for broken __attribute__((alias())),
1306 libc_cv_broken_alias_attribute,
1307 [cat > conftest.c <<EOF
1308 extern int foo (int x) __asm ("xyzzy");
1309 int bar (int x) { return x; }
1310 extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
1311 extern int dfoo;
1312 extern __typeof (dfoo) dfoo __asm ("abccb");
1313 int dfoo = 1;
1314 EOF
1315 libc_cv_broken_alias_attribute=yes
1316 if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
1317 if grep 'xyzzy' conftest.s >/dev/null &&
1318 grep 'abccb' conftest.s >/dev/null; then
1319 libc_cv_broken_alias_attribute=no
1320 fi
1321 fi
1322 rm -f conftest.c conftest.s
1323 ])
1324 if test $libc_cv_broken_alias_attribute = yes; then
1325 AC_MSG_ERROR(working alias attribute support required)
1326 fi
1327
1328 AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
1329 libc_cv_have_sdata_section,
1330 [echo "int i;" > conftest.c
1331 libc_cv_have_sdata_section=no
1332 if ${CC-cc} $LDFLAGS -fPIC -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
1333 | grep '\.sdata' >/dev/null; then
1334 libc_cv_have_sdata_section=yes
1335 fi
1336 rm -f conftest.c conftest.so
1337 ])
1338 if test $libc_cv_have_sdata_section = yes; then
1339 AC_DEFINE(HAVE_SDATA_SECTION)
1340 fi
1341
1342 AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
1343 libc_cv_ctors_header, [dnl
1344 libc_cv_ctors_header=yes
1345 LIBC_TRY_LINK_STATIC([
1346 __attribute__ ((constructor)) void ctor (void) { asm (""); }
1347 __attribute__ ((destructor)) void dtor (void) { asm (""); }
1348 ],
1349 [dnl
1350 AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
1351 { gsub(/\@<:@ */, "@<:@") }
1352 $2 == ".ctors" || $2 == ".dtors" {
1353 size = strtonum("0x" $6)
1354 align = strtonum("0x" $NF)
1355 seen@<:@$2@:>@ = 1
1356 stub@<:@$2@:>@ = size == align * 2
1357 }
1358 END {
1359 ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
1360 dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
1361 exit ((ctors_ok && dtors_ok) ? 0 : 1)
1362 }
1363 '], [libc_cv_ctors_header=no])
1364 ], [dnl
1365 AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
1366 ])
1367 ])
1368 if test $libc_cv_ctors_header = no; then
1369 AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
1370 fi
1371
1372 AC_CACHE_CHECK(for libunwind-support in compiler,
1373 libc_cv_cc_with_libunwind, [
1374 cat > conftest.c <<EOF
1375 int main (void) { return 0; }
1376 EOF
1377 if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
1378 conftest.c -v 2>&1 >/dev/null | grep ' -lunwind ' >/dev/null; then
1379 libc_cv_cc_with_libunwind=yes
1380 else
1381 libc_cv_cc_with_libunwind=no
1382 fi
1383 rm -f conftest*])
1384 AC_SUBST(libc_cv_cc_with_libunwind)
1385 if test $libc_cv_cc_with_libunwind = yes; then
1386 AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
1387 fi
1388
1389 ASFLAGS_config=
1390 AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
1391 libc_cv_as_noexecstack, [dnl
1392 cat > conftest.c <<EOF
1393 void foo (void) { }
1394 EOF
1395 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
1396 -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
1397 && grep .note.GNU-stack conftest.s >/dev/null \
1398 && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
1399 -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
1400 then
1401 libc_cv_as_noexecstack=yes
1402 else
1403 libc_cv_as_noexecstack=no
1404 fi
1405 rm -f conftest*])
1406 if test $libc_cv_as_noexecstack = yes; then
1407 ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
1408 fi
1409 AC_SUBST(ASFLAGS_config)
1410
1411 AC_CACHE_CHECK(for -z combreloc,
1412 libc_cv_z_combreloc, [dnl
1413 cat > conftest.c <<EOF
1414 extern int bar (int);
1415 extern int mumble;
1416 int foo (void) { return bar (mumble); }
1417 EOF
1418 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1419 -fPIC -shared $no_ssp -o conftest.so conftest.c
1420 -nostdlib -nostartfiles
1421 -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
1422 then
1423 dnl The following test is a bit weak. We must use a tool which can test
1424 dnl cross-platform since the gcc used can be a cross compiler. Without
1425 dnl introducing new options this is not easily doable. Instead use a tool
1426 dnl which always is cross-platform: readelf. To detect whether -z combreloc
1427 dnl look for a section named .rel.dyn or .rela.dyn.
1428 if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then
1429 libc_cv_z_combreloc=yes
1430 else
1431 libc_cv_z_combreloc=no
1432 fi
1433 else
1434 libc_cv_z_combreloc=no
1435 fi
1436 rm -f conftest*])
1437 if test "$libc_cv_z_combreloc" = yes; then
1438 AC_DEFINE(HAVE_Z_COMBRELOC)
1439 fi
1440 AC_SUBST(libc_cv_z_combreloc)
1441
1442 LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
1443 [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
1444 AC_SUBST(libc_cv_z_execstack)
1445
1446 AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
1447 LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpie=yes], [libc_cv_fpie=no])
1448 ])
1449
1450 AC_SUBST(libc_cv_fpie)
1451
1452 AC_CACHE_CHECK(for --hash-style option,
1453 libc_cv_hashstyle, [dnl
1454 cat > conftest.c <<EOF
1455 int _start (void) { return 42; }
1456 EOF
1457 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
1458 -fPIC -shared -o conftest.so conftest.c
1459 -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
1460 then
1461 libc_cv_hashstyle=yes
1462 else
1463 libc_cv_hashstyle=no
1464 fi
1465 rm -f conftest*])
1466 AC_SUBST(libc_cv_hashstyle)
1467
1468 # The linker's default -shared behavior is good enough if it
1469 # does these things that our custom linker scripts ensure that
1470 # all allocated NOTE sections come first.
1471 if test "$use_default_link" = default; then
1472 AC_CACHE_CHECK([for sufficient default -shared layout],
1473 libc_cv_use_default_link, [dnl
1474 libc_cv_use_default_link=no
1475 cat > conftest.s <<\EOF
1476 .section .note.a,"a",%note
1477 .balign 4
1478 .long 4,4,9
1479 .string "GNU"
1480 .string "foo"
1481 .section .note.b,"a",%note
1482 .balign 4
1483 .long 4,4,9
1484 .string "GNU"
1485 .string "bar"
1486 EOF
1487 if AC_TRY_COMMAND([dnl
1488 ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
1489 ac_try=`$READELF -S conftest.so | sed -n \
1490 ['${x;p;}
1491 s/^ *\[ *[1-9][0-9]*\] *\([^ ][^ ]*\) *\([^ ][^ ]*\) .*$/\2 \1/
1492 t a
1493 b
1494 : a
1495 H']`
1496 then
1497 libc_seen_a=no libc_seen_b=no
1498 set -- $ac_try
1499 while test $# -ge 2 -a "$1" = NOTE; do
1500 case "$2" in
1501 .note.a) libc_seen_a=yes ;;
1502 .note.b) libc_seen_b=yes ;;
1503 esac
1504 shift 2
1505 done
1506 case "$libc_seen_a$libc_seen_b" in
1507 yesyes)
1508 libc_cv_use_default_link=yes
1509 ;;
1510 *)
1511 echo >&AS_MESSAGE_LOG_FD "\
1512 $libc_seen_a$libc_seen_b from:
1513 $ac_try"
1514 ;;
1515 esac
1516 fi
1517 rm -f conftest*])
1518 use_default_link=$libc_cv_use_default_link
1519 fi
1520
1521 AC_CACHE_CHECK(for GLOB_DAT reloc,
1522 libc_cv_has_glob_dat, [dnl
1523 cat > conftest.c <<EOF
1524 extern int mumble;
1525 int foo (void) { return mumble; }
1526 EOF
1527 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
1528 -fPIC -shared -o conftest.so conftest.c
1529 -nostdlib -nostartfiles $no_ssp
1530 1>&AS_MESSAGE_LOG_FD])
1531 then
1532 dnl look for GLOB_DAT relocation.
1533 if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then
1534 libc_cv_has_glob_dat=yes
1535 else
1536 libc_cv_has_glob_dat=no
1537 fi
1538 else
1539 libc_cv_has_glob_dat=no
1540 fi
1541 rm -f conftest*])
1542 AC_SUBST(libc_cv_has_glob_dat)
1543
1544 AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
1545 if libc_cv_output_format=`
1546 ${CC-cc} -nostartfiles -nostdlib $no_ssp -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
1547 then
1548 :
1549 else
1550 libc_cv_output_format=
1551 fi
1552 test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
1553 AC_SUBST(libc_cv_output_format)
1554
1555 AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
1556 cat > conftest.c <<EOF
1557 int foo;
1558 EOF
1559 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
1560 conftest.c 1>&AS_MESSAGE_LOG_FD])
1561 then
1562 libc_cv_fno_toplevel_reorder=yes
1563 else
1564 libc_cv_fno_toplevel_reorder=no
1565 fi
1566 rm -f conftest*])
1567 if test $libc_cv_fno_toplevel_reorder = yes; then
1568 fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
1569 else
1570 fno_unit_at_a_time=-fno-unit-at-a-time
1571 fi
1572 AC_SUBST(fno_unit_at_a_time)
1573
1574 AC_CACHE_CHECK([for -mtls-dialect=gnu2], libc_cv_mtls_dialect_gnu2,
1575 [dnl
1576 cat > conftest.c <<EOF
1577 __thread int i;
1578 void foo (void)
1579 {
1580 i = 10;
1581 }
1582 EOF
1583 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
1584 conftest.c 1>&AS_MESSAGE_LOG_FD])
1585 then
1586 libc_cv_mtls_dialect_gnu2=yes
1587 else
1588 libc_cv_mtls_dialect_gnu2=no
1589 fi
1590 rm -f conftest*])
1591 AC_SUBST(libc_cv_mtls_dialect_gnu2)
1592 LIBC_CONFIG_VAR([have-mtls-dialect-gnu2], [$libc_cv_mtls_dialect_gnu2])
1593
1594 AC_CACHE_CHECK(whether cc puts quotes around section names,
1595 libc_cv_have_section_quotes,
1596 [cat > conftest.c <<EOF
1597 static const int foo
1598 __attribute__ ((section ("bar"))) = 1;
1599 EOF
1600 if ${CC-cc} -S conftest.c -o conftest.s; then
1601 if grep '\.section.*"bar"' conftest.s >/dev/null; then
1602 libc_cv_have_section_quotes=yes
1603 else
1604 libc_cv_have_section_quotes=no
1605 fi
1606 else
1607 libc_cv_have_section_quotes=unknown
1608 fi
1609 rm -f conftest.{c,s}
1610 ])
1611 if test $libc_cv_have_section_quotes = yes; then
1612 AC_DEFINE(HAVE_SECTION_QUOTES)
1613 fi
1614
1615 AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
1616 cat > conftest.c <<\EOF
1617 void zero (void *x)
1618 {
1619 __builtin_memset (x, 0, 1000);
1620 }
1621 EOF
1622 dnl
1623 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "memset" > /dev/null]);
1624 then
1625 libc_cv_gcc_builtin_memset=no
1626 else
1627 libc_cv_gcc_builtin_memset=yes
1628 fi
1629 rm -f conftest* ])
1630 if test "$libc_cv_gcc_builtin_memset" = yes ; then
1631 AC_DEFINE(HAVE_BUILTIN_MEMSET)
1632 fi
1633
1634 AC_CACHE_CHECK(for redirection of built-in functions, libc_cv_gcc_builtin_redirection, [dnl
1635 cat > conftest.c <<\EOF
1636 extern char *strstr (const char *, const char *) __asm ("my_strstr");
1637 char *foo (const char *a, const char *b)
1638 {
1639 return __builtin_strstr (a, b);
1640 }
1641 EOF
1642 dnl
1643 if AC_TRY_COMMAND([${CC-cc} -O3 -S conftest.c -o - | grep -F "my_strstr" > /dev/null]);
1644 then
1645 libc_cv_gcc_builtin_redirection=yes
1646 else
1647 libc_cv_gcc_builtin_redirection=no
1648 fi
1649 rm -f conftest* ])
1650 if test "$libc_cv_gcc_builtin_redirection" = no; then
1651 AC_MSG_ERROR([support for the symbol redirection needed])
1652 fi
1653
1654 dnl Determine how to disable generation of FMA instructions.
1655 AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
1656 libc_cv_cc_nofma, [dnl
1657 libc_cv_cc_nofma=
1658 for opt in -ffp-contract=off -mno-fused-madd; do
1659 LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
1660 done])
1661 AC_SUBST(libc_cv_cc_nofma)
1662
1663 if test -n "$submachine"; then
1664 AC_CACHE_CHECK([for compiler option for CPU variant],
1665 libc_cv_cc_submachine, [dnl
1666 libc_cv_cc_submachine=no
1667 for opt in "-march=$submachine" "-mcpu=$submachine"; do
1668 LIBC_TRY_CC_OPTION([$opt], [
1669 libc_cv_cc_submachine="$opt"
1670 break], [])
1671 done])
1672 if test "x$libc_cv_cc_submachine" = xno; then
1673 AC_MSG_ERROR([${CC-cc} does not support $submachine])
1674 fi
1675 fi
1676 AC_SUBST(libc_cv_cc_submachine)
1677
1678 AC_CACHE_CHECK(if $CC accepts -fno-tree-loop-distribute-patterns with \
1679 __attribute__ ((__optimize__)), libc_cv_cc_loop_to_function, [dnl
1680 cat > conftest.c <<EOF
1681 void
1682 __attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
1683 foo (void) {}
1684 EOF
1685 libc_cv_cc_loop_to_function=no
1686 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c])
1687 then
1688 libc_cv_cc_loop_to_function=yes
1689 fi
1690 rm -f conftest*])
1691 if test $libc_cv_cc_loop_to_function = yes; then
1692 AC_DEFINE(HAVE_CC_INHIBIT_LOOP_TO_LIBCALL)
1693 fi
1694 AC_SUBST(libc_cv_cc_loop_to_function)
1695
1696 dnl Check whether we have the gd library available.
1697 AC_MSG_CHECKING(for libgd)
1698 if test "$with_gd" != "no"; then
1699 old_CFLAGS="$CFLAGS"
1700 CFLAGS="$CFLAGS $libgd_include"
1701 old_LDFLAGS="$LDFLAGS"
1702 LDFLAGS="$LDFLAGS $libgd_ldflags"
1703 old_LIBS="$LIBS"
1704 LIBS="$LIBS -lgd -lpng -lz -lm"
1705 AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
1706 CFLAGS="$old_CFLAGS"
1707 LDFLAGS="$old_LDFLAGS"
1708 LIBS="$old_LIBS"
1709 else
1710 LIBGD=no
1711 fi
1712 AC_MSG_RESULT($LIBGD)
1713 AC_SUBST(LIBGD)
1714
1715 # SELinux detection
1716 if test x$with_selinux = xno ; then
1717 have_selinux=no;
1718 else
1719 # See if we have the SELinux library
1720 AC_CHECK_LIB(selinux, is_selinux_enabled,
1721 have_selinux=yes, have_selinux=no)
1722 if test x$with_selinux = xyes ; then
1723 if test x$have_selinux = xno ; then
1724 AC_MSG_ERROR([SELinux explicitly required, but SELinux library not found])
1725 fi
1726 fi
1727 fi
1728 # Check if we're building with SELinux support.
1729 if test "x$have_selinux" = xyes; then
1730 AC_DEFINE(HAVE_SELINUX, 1, [SELinux support])
1731
1732 # See if we have the libaudit library
1733 AC_CHECK_LIB(audit, audit_log_user_avc_message,
1734 have_libaudit=yes, have_libaudit=no)
1735 if test "x$have_libaudit" = xyes; then
1736 AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
1737 fi
1738 AC_SUBST(have_libaudit)
1739
1740 # See if we have the libcap library
1741 AC_CHECK_LIB(cap, cap_init, have_libcap=yes, have_libcap=no)
1742 if test "x$have_libcap" = xyes; then
1743 AC_DEFINE(HAVE_LIBCAP, 1, [SELinux libcap support])
1744 fi
1745 AC_SUBST(have_libcap)
1746 fi
1747 AC_SUBST(have_selinux)
1748
1749 CPPUNDEFS=
1750 dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
1751 dnl Since we are building the implementations of the fortified functions here,
1752 dnl having the macro defined interacts very badly.
1753 AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
1754 [AC_TRY_COMPILE([], [
1755 #ifdef _FORTIFY_SOURCE
1756 # error bogon
1757 #endif],
1758 [libc_cv_predef_fortify_source=no],
1759 [libc_cv_predef_fortify_source=yes])])
1760 if test $libc_cv_predef_fortify_source = yes; then
1761 CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
1762 fi
1763 AC_SUBST(CPPUNDEFS)
1764
1765 # Some linkers on some architectures support __ehdr_start but with
1766 # bugs. Make sure usage of it does not create relocations in the
1767 # output (as the linker should resolve them all for us).
1768 AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
1769 libc_cv_ehdr_start, [
1770 old_CFLAGS="$CFLAGS"
1771 old_LDFLAGS="$LDFLAGS"
1772 old_LIBS="$LIBS"
1773 CFLAGS="$CFLAGS -fPIC"
1774 LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp"
1775 LIBS=
1776 AC_LINK_IFELSE([AC_LANG_SOURCE([
1777 typedef struct {
1778 char foo;
1779 long val;
1780 } Ehdr;
1781 extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
1782 long ehdr (void) { return __ehdr_start.val; }
1783 ])],
1784 [if $READELF -r conftest | grep -F __ehdr_start >/dev/null; then
1785 libc_cv_ehdr_start=broken
1786 else
1787 libc_cv_ehdr_start=yes
1788 fi], [libc_cv_ehdr_start=no])
1789 CFLAGS="$old_CFLAGS"
1790 LDFLAGS="$old_LDFLAGS"
1791 LIBS="$old_LIBS"
1792 ])
1793 if test "$libc_cv_ehdr_start" = yes; then
1794 AC_DEFINE([HAVE_EHDR_START])
1795 elif test "$libc_cv_ehdr_start" = broken; then
1796 AC_MSG_WARN([linker is broken -- you should upgrade])
1797 fi
1798
1799 AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
1800 libc_cv_builtin_trap, [dnl
1801 libc_cv_builtin_trap=no
1802 AC_TRY_COMPILE([], [__builtin_trap ()], [
1803 libc_undefs=`$NM -u conftest.o |
1804 LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
1805 2>&AS_MESSAGE_LOG_FD` || {
1806 AC_MSG_ERROR([confusing output from $NM -u])
1807 }
1808 echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
1809 if test -z "$libc_undefs"; then
1810 libc_cv_builtin_trap=yes
1811 fi])])
1812 if test $libc_cv_builtin_trap = yes; then
1813 AC_DEFINE([HAVE_BUILTIN_TRAP])
1814 fi
1815
1816 dnl C++ feature tests.
1817 AC_LANG_PUSH([C++])
1818
1819 AC_CACHE_CHECK([whether the C++ compiler supports thread_local],
1820 libc_cv_cxx_thread_local, [
1821 old_CXXFLAGS="$CXXFLAGS"
1822 CXXFLAGS="$CXXFLAGS -std=gnu++11"
1823 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1824 #include <thread>
1825
1826 // Compiler support.
1827 struct S
1828 {
1829 S ();
1830 ~S ();
1831 };
1832 thread_local S s;
1833 S * get () { return &s; }
1834
1835 // libstdc++ support.
1836 #ifndef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL
1837 #error __cxa_thread_atexit_impl not supported
1838 #endif
1839 ])],
1840 [libc_cv_cxx_thread_local=yes],
1841 [libc_cv_cxx_thread_local=no])
1842 CXXFLAGS="$old_CXXFLAGS"
1843 ])
1844 AC_SUBST(libc_cv_cxx_thread_local)
1845
1846 AC_LANG_POP([C++])
1847 dnl End of C++ feature tests.
1848
1849 ### End of automated tests.
1850 ### Now run sysdeps configure fragments.
1851
1852 # They also can set these variables.
1853 use_ldconfig=no
1854 ldd_rewrite_script=no
1855 libc_cv_sysconfdir=$sysconfdir
1856 libc_cv_localstatedir=$localstatedir
1857 libc_cv_gcc_unwind_find_fde=no
1858 libc_cv_idn=no
1859
1860 # Iterate over all the sysdep directories we will use, running their
1861 # configure fragments.
1862 for dir in $sysnames; do
1863 case $dir in
1864 /*) dest=$dir ;;
1865 *) dest=$srcdir/$dir ;;
1866 esac
1867 if test -r $dest/configure; then
1868 AC_MSG_RESULT(running configure fragment for $dir)
1869 . $dest/configure
1870 fi
1871 done
1872
1873 if test x"$build_mathvec" = xnotset; then
1874 build_mathvec=no
1875 fi
1876 LIBC_CONFIG_VAR([build-mathvec], [$build_mathvec])
1877
1878 AC_SUBST(libc_extra_cflags)
1879 AC_SUBST(libc_extra_cppflags)
1880
1881 if test x$libc_cv_gcc_unwind_find_fde = xyes; then
1882 AC_DEFINE(EXPORT_UNWIND_FIND_FDE)
1883 fi
1884 AC_SUBST(libc_cv_gcc_unwind_find_fde)
1885
1886 # A sysdeps configure fragment can reset this if IFUNC is not actually
1887 # usable even though the assembler knows how to generate the symbol type.
1888 if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
1889 AC_DEFINE(HAVE_IFUNC)
1890 fi
1891
1892 if test x"$libc_cv_gcc_indirect_function" = xyes; then
1893 AC_DEFINE(HAVE_GCC_IFUNC)
1894 fi
1895
1896 # This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
1897 # configure fragment can override the value to prevent this AC_DEFINE.
1898 AC_SUBST(use_nscd)
1899 if test "x$use_nscd" != xno; then
1900 AC_DEFINE([USE_NSCD])
1901 fi
1902 if test "x$build_nscd" = xdefault; then
1903 build_nscd=$use_nscd
1904 fi
1905
1906 AC_SUBST(libc_cv_slibdir)
1907 AC_SUBST(libc_cv_rtlddir)
1908 AC_SUBST(libc_cv_complocaledir)
1909 AC_SUBST(libc_cv_sysconfdir)
1910 AC_SUBST(libc_cv_localstatedir)
1911 AC_SUBST(libc_cv_rootsbindir)
1912
1913 if test x$use_ldconfig = xyes; then
1914 AC_DEFINE(USE_LDCONFIG)
1915 fi
1916 AC_SUBST(use_ldconfig)
1917 AC_SUBST(ldd_rewrite_script)
1918
1919 AC_SUBST(static)
1920 AC_SUBST(shared)
1921
1922 AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
1923 [libc_cv_pic_default=yes
1924 cat > conftest.c <<EOF
1925 #if defined __PIC__ || defined __pic__ || defined PIC || defined pic
1926 # error PIC is default.
1927 #endif
1928 EOF
1929 if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1930 libc_cv_pic_default=no
1931 fi
1932 rm -f conftest.*])
1933 AC_SUBST(libc_cv_pic_default)
1934
1935 AC_CACHE_CHECK([whether -fPIE is default], libc_cv_pie_default,
1936 [libc_cv_pie_default=yes
1937 cat > conftest.c <<EOF
1938 #if defined __PIE__ || defined __pie__ || defined PIE || defined pie
1939 # error PIE is default.
1940 #endif
1941 EOF
1942 if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
1943 libc_cv_pie_default=no
1944 fi
1945 rm -f conftest.*])
1946 AC_SUBST(libc_cv_pie_default)
1947
1948 AC_SUBST(profile)
1949 AC_SUBST(static_nss)
1950
1951 AC_SUBST(DEFINES)
1952
1953 dnl See sysdeps/mach/configure.ac for this variable.
1954 AC_SUBST(mach_interface_list)
1955
1956 VERSION=`sed -n -e 's/^#define VERSION "\([^"]*\)"/\1/p' < $srcdir/version.h`
1957 RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
1958 AC_SUBST(VERSION)
1959 AC_SUBST(RELEASE)
1960
1961 AC_CONFIG_FILES([config.make Makefile])
1962 AC_CONFIG_COMMANDS([default],[[
1963 case $CONFIG_FILES in *config.make*)
1964 echo "$config_vars" >> config.make;;
1965 esac
1966 test -d bits || mkdir bits]],[[config_vars='$config_vars']])
1967 AC_OUTPUT