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