Use top-level config support for enabling plugins.
[external/binutils.git] / gold / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2 dnl
3 dnl   Copyright (C) 2006-2018 Free Software Foundation, Inc.
4 dnl
5 dnl This file is free software; you can redistribute it and/or modify
6 dnl it under the terms of the GNU General Public License as published by
7 dnl the Free Software Foundation; either version 3 of the License, or
8 dnl (at your option) any later version.
9 dnl
10 dnl This program is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 dnl GNU General Public License for more details.
14 dnl
15 dnl You should have received a copy of the GNU General Public License
16 dnl along with this program; see the file COPYING3.  If not see
17 dnl <http://www.gnu.org/licenses/>.
18 dnl
19
20 AC_PREREQ(2.59)
21
22 AC_INIT(gold, 0.1)
23 AC_CONFIG_SRCDIR(gold.cc)
24
25 AC_CANONICAL_TARGET
26
27 AM_INIT_AUTOMAKE([no-dist parallel-tests])
28
29 AM_CONFIG_HEADER(config.h:config.in)
30
31 AC_USE_SYSTEM_EXTENSIONS
32
33 # PR 14072
34 AH_VERBATIM([00_CONFIG_H_CHECK],
35 [/* Check that config.h is #included before system headers
36    (this works only for glibc, but that should be enough).  */
37 #if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
38 #  error config.h must be #included before system headers
39 #endif
40 #define __CONFIG_H__ 1])
41
42 AC_ARG_WITH(sysroot,
43 [  --with-sysroot[=DIR]    search for usr/lib et al within DIR],
44 [sysroot=$withval], [sysroot=no])
45
46 if test "$sysroot" = "yes"; then
47   sysroot='${exec_prefix}/${target_alias}/sys-root'
48 elif test "$sysroot" = "no"; then
49   sysroot=
50 fi
51
52 sysroot_relocatable=0
53 if test -n "$sysroot"; then
54   case "$sysroot" in
55     "${prefix}" | "${prefix}/"* | \
56     "${exec_prefix}" | "${exec_prefix}/"* | \
57     '${prefix}' | '${prefix}/'*| \
58     '${exec_prefix}' | '${exec_prefix}/'*)
59       sysroot_relocatable=1
60       ;;
61   esac
62 fi
63
64 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
65   [System root for target files])
66 AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
67   [Whether the system root can be relocated])
68
69 dnl "install_as_default" is true if the linker to be installed as the
70 dnl default linker, ld.
71 dnl "installed_linker" is the installed gold linker name.
72
73 installed_linker=ld.gold
74 AC_ARG_ENABLE(gold,
75 [[  --enable-gold[=ARG]     build gold [ARG={default,yes,no}]]],
76 [case "${enableval}" in
77  default)
78    install_as_default=yes
79    ;;
80  yes)
81    if test x${enable_ld} = xno; then
82      install_as_default=yes
83    fi
84    ;;
85  esac],
86 [install_as_default=no])
87 AC_SUBST(install_as_default)
88 AC_SUBST(installed_linker)
89
90 dnl For now threads are a configure time option.
91 AC_ARG_ENABLE([threads],
92 [  --enable-threads        multi-threaded linking],
93 [case "${enableval}" in
94   yes | "") threads=yes ;;
95   no) threads=no ;;
96   *) threads=yes ;;
97  esac],
98 [threads=no])
99 if test "$threads" = "yes"; then
100   AC_DEFINE(ENABLE_THREADS, 1,
101             [Define to do multi-threaded linking])
102 fi
103 AM_CONDITIONAL(THREADS, test "$threads" = "yes")
104
105 AC_PLUGINS
106 if test "$plugins" = "yes"; then
107   AC_DEFINE(ENABLE_PLUGINS, 1,
108             [Define to enable linker plugins])
109 fi
110 AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
111
112 # Decide if -z relro should be enabled in ELF linker by default.
113 ac_default_ld_z_relro=unset
114 # Provide a configure time option to override our default.
115 AC_ARG_ENABLE(relro,
116               AS_HELP_STRING([--enable-relro],
117               [enable -z relro in ELF linker by default]),
118 [case "${enableval}" in
119   yes)  ac_default_ld_z_relro=1 ;;
120   no)  ac_default_ld_z_relro=0 ;;
121 esac])dnl
122 if test "${ac_default_ld_z_relro}" = unset; then
123   ac_default_ld_z_relro=1
124 fi
125 AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_RELRO,
126   $ac_default_ld_z_relro,
127   [Define to 1 if you want to enable -z relro in ELF linker by default.])
128
129 AC_ARG_ENABLE([targets],
130 [  --enable-targets        alternative target configurations],
131 [case "${enableval}" in
132   yes | "")
133     AC_MSG_ERROR([--enable-targets option must specify target names or 'all'])
134     ;;
135   no)
136     enable_targets=
137     ;;
138   *)
139     enable_targets=$enableval
140     ;;
141 esac],
142 [# For now, enable all targets by default
143  enable_targets=all
144 ])
145
146 # Canonicalize the enabled targets.
147 if test -n "$enable_targets"; then
148   for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
149     result=`$ac_config_sub $targ 2>/dev/null`
150     if test -n "$result"; then
151       canon_targets="$canon_targets $result"
152     else
153       # Permit unrecognized target names, like "all".
154       canon_targets="$canon_targets $targ"
155     fi
156   done
157 fi
158
159 # Decide which "--hash-style" to use by default
160 # Provide a configure time option to override our default.
161 AC_ARG_ENABLE([default-hash-style],
162 AS_HELP_STRING([--enable-default-hash-style={sysv,gnu,both}],
163                [use this default hash style]),
164 [case "${enable_default_hash_style}" in
165   sysv | gnu | both) ;;
166   *) AC_MSG_ERROR([bad value ${enable_default_hash_style} for enable-default-hash-style option]) ;;
167 esac],
168 [case "${target}" in
169   # Enable gnu hash only on GNU targets, but not mips
170   mips*-*-*) enable_default_hash_style=sysv ;;
171   *-*-gnu* | *-*-linux* | *-*-nacl*) enable_default_hash_style=both ;;
172   *) enable_default_hash_style=sysv ;;
173 esac])
174
175 AC_DEFINE_UNQUOTED([DEFAULT_HASH_STYLE],
176   ["${enable_default_hash_style}"],
177   [Set the default --hash-style value])
178
179 # See which specific instantiations we need.
180 targetobjs=
181 all_targets=
182 default_machine=
183 default_size=
184 default_big_endian=
185 default_osabi=ELFOSABI_NONE
186 targ_32_little=
187 targ_32_big=
188 targ_64_little=
189 targ_64_big=
190 for targ in $target $canon_targets; do
191   if test "$targ" = "all"; then
192     targ_32_little=yes
193     targ_32_big=yes
194     targ_64_little=yes
195     targ_64_big=yes
196     all_targets=yes
197   else
198     . ${srcdir}/configure.tgt
199
200     if test "$targ_obj" = "UNKNOWN"; then
201       AC_MSG_ERROR("unsupported target $targ")
202     else
203       targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
204       if test "$targ_extra_obj" != ""; then
205         targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
206       fi
207       if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
208           if test "$targ_big_endian" = "true" \
209               -o "$targ_extra_big_endian" = "true"; then
210               targ_32_big=yes
211           fi
212           if test "$targ_big_endian" = "false" \
213               -o "$targ_extra_big_endian" = "false"; then
214               targ_32_little=yes
215           fi
216       fi
217       if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
218           if test "$targ_big_endian" = "true" \
219               -o "$targ_extra_big_endian" = "true"; then
220               targ_64_big=yes
221           fi
222           if test "$targ_big_endian" = "false" \
223               -o "$targ_extra_big_endian" = "false"; then
224               targ_64_little=yes
225           fi
226       fi
227
228       if test "$target" = "$targ"; then
229         default_machine=$targ_machine
230         default_size=$targ_size
231         default_big_endian=$targ_big_endian
232         default_osabi=$targ_osabi
233
234         AM_CONDITIONAL(DEFAULT_TARGET_AARCH64, test "$targ_obj" = "aarch64")
235         AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
236         AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
237         AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
238         AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
239         AM_CONDITIONAL(DEFAULT_TARGET_S390, test "$targ_obj" = "s390")
240         target_x86_64=no
241         target_x32=no
242         if test "$targ_obj" = "x86_64"; then
243           case "$target" in
244           x86_64*-linux-gnux32)
245             target_x32=yes
246             default_size=32
247             ;;
248           *)
249             target_x86_64=yes
250             ;;
251           esac
252         fi
253         AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$target_x86_64" = "yes")
254         AM_CONDITIONAL(DEFAULT_TARGET_X32, test "$target_x32" = "yes")
255         AM_CONDITIONAL(DEFAULT_TARGET_X86_64_OR_X32,
256                        test "$target_x86_64" = "yes" -o "$target_x32" = "yes")
257         AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
258         AM_CONDITIONAL(DEFAULT_TARGET_MIPS, test "$targ_obj" = "mips")
259         DEFAULT_TARGET=${targ_obj}
260         AC_SUBST(DEFAULT_TARGET)
261       fi
262     fi
263   fi
264 done
265
266 # Remove any duplicates.
267 to=""
268 for t in $targetobjs; do
269   case " $to " in
270   *" $t "*) ;;
271   *) to="$to $t" ;;
272   esac
273 done
274 targetobjs=$to
275
276 if test -n "$targ_32_little"; then
277   AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
278               [Define to support 32-bit little-endian targets])
279 fi
280 if test -n "$targ_32_big"; then
281   AC_DEFINE(HAVE_TARGET_32_BIG, 1,
282               [Define to support 32-bit big-endian targets])
283 fi
284 if test -n "$targ_64_little"; then
285   AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
286               [Define to support 64-bit little-endian targets])
287 fi
288 if test -n "$targ_64_big"; then
289   AC_DEFINE(HAVE_TARGET_64_BIG, 1,
290               [Define to support 64-bit big-endian targets])
291 fi
292
293 if test -n "$all_targets"; then
294   TARGETOBJS='$(ALL_TARGETOBJS)'
295 else
296   TARGETOBJS="$targetobjs"
297 fi
298 AC_SUBST(TARGETOBJS)
299
300 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
301                    [Default machine code])
302 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
303                    [Default size (32 or 64)])
304 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
305                    [Default big endian (true or false)])
306 AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
307                    [Default OSABI code])
308
309 AC_ARG_WITH(lib-path,
310 [  --with-lib-path=dir1:dir2...  set default LIB_PATH],
311 [case "$withval" in
312  yes) LIB_PATH='"/lib:/usr/lib"' ;;
313  no) LIB_PATH='""' ;;
314  *) LIB_PATH='"'"$withval"'"' ;;
315  esac],
316 [LIB_PATH='"::DEFAULT::"'])
317 AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
318                    [Default library search path])
319 if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
320   AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
321 fi
322
323 AC_CHECK_TOOL(NM, nm)
324
325 AC_PROG_CC
326 AC_PROG_CXX
327 AC_PROG_YACC
328 AC_PROG_RANLIB
329 AC_PROG_INSTALL
330 AC_PROG_LN_S
331
332 AC_GNU_SOURCE
333
334 ZW_GNU_GETTEXT_SISTER_DIR
335 AM_PO_SUBDIRS
336
337 AC_C_BIGENDIAN
338
339 AC_EXEEXT
340
341 AM_CONDITIONAL(NATIVE_LINKER,
342   test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
343 AM_CONDITIONAL(GCC, test "$GCC" = yes)
344
345 AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
346   test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
347
348 dnl Test for whether static linking is supported.  Some systems do not
349 dnl install static libraries.  This only affects the set of tests that
350 dnl we run.
351 AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
352 [LDFLAGS_hold=$LDFLAGS
353 LDFLAGS="$LDFLAGS -static"
354 AC_LINK_IFELSE([
355 AC_LANG_PROGRAM([[void f() { }]])],
356 [gold_cv_lib_static=yes], [gold_cv_lib_static=no])
357 LDFLAGS=$LDFLAGS_hold])
358 AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
359
360 dnl Some architectures do not support taking pointers of functions
361 dnl defined in shared libraries except in -fPIC mode.  We need to
362 dnl tell the unittest framework if we're compiling for one of those
363 dnl targets, so it doesn't try to run the tests that do that.
364 AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
365   case $target_cpu in
366     powerpc*) false;;
367     x86_64) false;;
368     sparc64) false;;
369     s390x) false;;
370     *) true;;
371   esac])
372
373 dnl Test for gcc 4.1 or later.  Full support for -mcmodel=medium is
374 dnl only available in gcc 4.1.
375 AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
376 [AC_COMPILE_IFELSE([
377 #if !defined __GNUC__
378 error
379 #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
380 error
381 #endif
382 ], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
383
384 save_CFLAGS="$CFLAGS"
385 CFLAGS="$CFLAGS -mcmodel=medium"
386 AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
387 CFLAGS="$save_CFLAGS"
388 dnl Whether we can test -mcmodel=medium.
389 AM_CONDITIONAL(MCMODEL_MEDIUM,
390 [test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
391
392 AC_CACHE_CHECK([whether $CC supports -fmerge-constants],
393                [gold_cv_merge_constants], [
394 save_CFLAGS="$CFLAGS"
395 CFLAGS="$CFLAGS -fmerge-constants"
396 AC_COMPILE_IFELSE([const char *s = "foo";],
397                   [gold_cv_merge_constants=yes],
398                   [gold_cv_merge_constants=no])
399 CFLAGS="$save_CFLAGS"])
400 AC_SUBST([MERGE_CONSTANTS_FLAG])
401 AS_IF([test "$gold_cv_merge_constants" = yes],
402       [MERGE_CONSTANTS_FLAG=-fmerge-constants],
403       [MERGE_CONSTANTS_FLAG=])
404
405 dnl Test for __thread support.
406 AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
407 [AC_COMPILE_IFELSE([__thread int i = 1;],
408 [gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
409
410 AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
411
412 dnl On GNU/Linux TLS in static programs only works when using glibc
413 dnl 2.4 or later.
414 AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
415 [AC_COMPILE_IFELSE([
416 #include <features.h>
417 #if !defined __GLIBC__
418 error
419 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
420 error
421 #endif
422 ], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
423
424 AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
425
426 dnl Test for #pragma omp threadprivate
427 AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
428 [save_CFLAGS="$CFLAGS"
429 CFLAGS="$CFLAGS -fopenmp"
430 AC_COMPILE_IFELSE([
431 #include <omp.h>
432 int i;
433 #pragma omp threadprivate (i)
434 ], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
435 CFLAGS="$save_CFLAGS"])
436 if test "$gold_cv_c_threadprivate" = "yes"; then
437   AC_DEFINE(HAVE_OMP_SUPPORT, 1,
438             [Define if compiler supports #pragma omp threadprivate])
439 fi
440 AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
441
442 dnl Test for the -ftls-dialect=gnu2 option.
443 dnl Use -Werror in case of compilers that make unknown -m options warnings.
444 dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
445 dnl gets set later by default Autoconf magic to include -Werror.  (We are
446 dnl assuming here that there is no compiler that groks -mtls-dialect=gnu2
447 dnl but does not grok -Werror.)
448 save_CFLAGS="$CFLAGS"
449 CFLAGS="$CFLAGS -Werror -fpic -mtls-dialect=gnu2"
450 AC_COMPILE_IFELSE([
451 __thread int i;
452 void foo (void)
453 {
454   i = 10;
455 }
456 ], [have_tls_gnu2=yes], [have_tls_gnu2=no])
457 CFLAGS="$save_CFLAGS"
458 AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
459
460 dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
461 dnl only with glibc 2.9 or later.
462 AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
463 [AC_COMPILE_IFELSE([
464 #include <features.h>
465 #if !defined __GLIBC__
466 error
467 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
468 error
469 #endif
470 ], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
471
472 AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
473
474 dnl Test for the -frandom-seed option.
475 AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
476 [save_CFLAGS="$CFLAGS"
477 CFLAGS="$CFLAGS -frandom-seed=foo"
478 AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
479 [gold_cv_c_random_seed=no])
480 CFLAGS="$save_CFLAGS"])
481 if test "$gold_cv_c_random_seed" = "yes"; then
482   # In Makefile, '$@' will be expanded to be the name of the file
483   # being built, providing a unique seed for each file.
484   RANDOM_SEED_CFLAGS=-frandom-seed=\$@
485 fi
486 AC_SUBST(RANDOM_SEED_CFLAGS)
487
488 dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
489 dnl 2.11 or later, and by binutils 2.20.1 or later.
490 AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
491 [save_LDFLAGS="$LDFLAGS"
492 LDFLAGS="$LDFLAGS -static"
493 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
494 #include <features.h>
495 #if !defined __GLIBC__
496 error
497 #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
498 error
499 #endif
500 void func (void) { }
501 void invoke (void);
502 __asm__(".type invoke, %gnu_indirect_function");
503 typedef void (*funcptr) (void);
504 funcptr dispatch (void) __asm__ ("invoke");
505 funcptr dispatch (void) { return &func; }]],
506 [[invoke();]])
507 ], [
508 if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
509   gold_cv_lib_glibc_ifunc=both
510 else
511   gold_cv_lib_glibc_ifunc=dyn
512 fi], [gold_cv_lib_glibc_ifunc=no])
513 LDFLAGS="$save_LDFLAGS"])
514
515 AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
516 AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
517
518 AM_BINUTILS_WARNINGS
519
520 WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
521 AC_SUBST(WARN_CXXFLAGS)
522
523 AC_ARG_WITH(gold-ldflags,
524 [  --with-gold-ldflags=FLAGS  additional link flags for gold],
525 [if test "$withval" = "no" -o "$withval" = "yes"; then
526    GOLD_LDFLAGS=
527  else
528    GOLD_LDFLAGS=$withval
529  fi],
530 [GOLD_LDFLAGS=])
531 AC_SUBST(GOLD_LDFLAGS)
532
533 AC_ARG_WITH(gold-ldadd,
534 [  --with-gold-ldadd=LIBS     additional libraries for gold],
535 [if test "$withval" = "no" -o "$withval" = "yes"; then
536    GOLD_LDADD=
537  else
538    GOLD_LDADD=$withval
539  fi],
540 [GOLD_LDADD=])
541 AC_SUBST(GOLD_LDADD)
542
543 dnl Force support for large files by default.  This may need to be
544 dnl host dependent.  If build == host, we can check getconf LFS_CFLAGS.
545 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
546 AC_SUBST(LFS_CFLAGS)
547
548 AC_CHECK_HEADERS(sys/mman.h)
549 AC_CHECK_FUNCS(chsize mmap)
550 AC_REPLACE_FUNCS(pread ftruncate ffsll)
551
552 AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
553 [AC_LINK_IFELSE([
554 AC_LANG_PROGRAM([[
555 #include <sys/mman.h>
556 void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
557 ]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
558 if test "$gold_cv_lib_mremap_maymove" = "yes"; then
559   AC_DEFINE(HAVE_MREMAP, 1,
560     [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
561 else
562   AC_LIBOBJ(mremap)
563 fi
564
565 # Link in zlib if we can.  This allows us to write compressed sections.
566 AM_ZLIB
567
568 dnl We have to check these in C, not C++, because autoconf generates
569 dnl tests which have no type information, and current glibc provides
570 dnl multiple declarations of functions like basename when compiling
571 dnl with C++.
572 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
573
574 dnl Check if gcc supports the -gpubnames option.
575 dnl Use -Werror in case of compilers that make unknown -g options warnings.
576 dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
577 dnl gets set later by default Autoconf magic to include -Werror.  (We are
578 dnl assuming here that there is no compiler that groks -gpubnames
579 dnl but does not grok -Werror.)
580 save_CFLAGS="$CFLAGS"
581 CFLAGS="$CFLAGS -Werror -gpubnames"
582 AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
583 CFLAGS="$save_CFLAGS"
584 AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
585
586 dnl Check if gcc supports the -fno-use-linker-plugin option.
587 save_CFLAGS="$CFLAGS"
588 CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin"
589 AC_COMPILE_IFELSE([int i;], [have_no_use_linker_plugin=yes], [have_no_use_linker_plugin=no])
590 CFLAGS="$save_CFLAGS"
591 AM_CONDITIONAL(HAVE_NO_USE_LINKER_PLUGIN, test "$have_no_use_linker_plugin" = "yes")
592
593 AC_LANG_PUSH(C++)
594
595 AC_CHECK_HEADERS(unordered_set unordered_map)
596 AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
597 AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
598 AC_CHECK_HEADERS(byteswap.h)
599
600 dnl When plugins enabled dynamic loader interface is required. Check headers
601 dnl which may provide this interface. Add the necessary library to link.
602 AC_CHECK_HEADERS(windows.h)
603 AC_CHECK_HEADERS(dlfcn.h)
604 AC_SEARCH_LIBS(dlopen, [dl dld])
605 case "$ac_cv_search_dlopen" in
606   no*) DLOPEN_LIBS="";;
607   *)   DLOPEN_LIBS="$ac_cv_search_dlopen";;
608 esac
609 AC_SUBST(DLOPEN_LIBS)
610
611 AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
612 AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
613
614 # Use of ::std::tr1::unordered_map::rehash causes undefined symbols
615 # at link time with some versions of GCC.
616 AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
617 [gold_cv_unordered_map_rehash],
618 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
619 #include <tr1/unordered_map>
620 void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
621 ]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
622 if test "$gold_cv_unordered_map_rehash" = "yes"; then
623   AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
624             [Define if ::std::tr1::unordered_map::rehash is usable])
625 fi
626
627 # Use of tr1/unordered_map with off_t as a key is not supported on GCC
628 # 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
629 AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
630 [gold_cv_hash_off_t],
631 [CXXFLAGS_hold=$CXXFLAGS
632 CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
633 AC_COMPILE_IFELSE([
634 #include <sys/types.h>
635 #include <tr1/unordered_map>
636 std::tr1::hash<off_t> h;
637 ],
638 [gold_cv_hash_off_t=yes],
639 [gold_cv_hash_off_t=no])
640 CXXFLAGS=$CXXFLAGS_hold])
641 if test "$gold_cv_hash_off_t" = "yes"; then
642    AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
643              [Define if std::tr1::hash<off_t> is usable])
644 fi
645
646 # gcc 4.3.0 doesn't recognize the printf attribute on a template
647 # function.  Check for that.  This is gcc bug 35546.  This test can
648 # probably be removed after the bug has been fixed for a while.
649 AC_CACHE_CHECK([whether we can use attributes with template functions],
650 [gold_cv_template_attribute],
651 [AC_COMPILE_IFELSE([
652 template<typename T> extern void foo(const char*, ...)
653   __attribute__ ((__format__ (__printf__, 1, 2)));
654 template<typename T> void foo(const char* format, ...) {}
655 void bar() { foo<int>("%s\n", "foo"); }
656 ], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
657 if test "$gold_cv_template_attribute" = "yes"; then
658   AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
659             [Define if attributes work on C++ templates])
660 fi
661
662 dnl Check if the system has struct stat::st_mtim.
663 AC_CACHE_CHECK([for struct stat::st_mtim.],
664 [gold_cv_stat_st_mtim],
665 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
666 #include <sys/stat.h>
667 long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
668 ]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
669 if test "$gold_cv_stat_st_mtim" = "yes"; then
670   AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
671             [Define if struct stat has a field st_mtim with timespec for mtime])
672 fi
673
674 AC_LANG_POP(C++)
675
676 AC_CHECK_HEADERS(locale.h)
677 AC_CHECK_FUNCS(setlocale)
678 AM_LC_MESSAGES
679
680 AM_MAINTAINER_MODE
681
682 AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)