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