configure.ac revision 1.1.1.4
1dnl Process this file with autoconf to produce a configure script.
2dnl
3dnl   Copyright (C) 2006-2015 Free Software Foundation, Inc.
4dnl
5dnl This file is free software; you can redistribute it and/or modify
6dnl it under the terms of the GNU General Public License as published by
7dnl the Free Software Foundation; either version 3 of the License, or
8dnl (at your option) any later version.
9dnl
10dnl This program is distributed in the hope that it will be useful,
11dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13dnl GNU General Public License for more details.
14dnl
15dnl You should have received a copy of the GNU General Public License
16dnl along with this program; see the file COPYING3.  If not see
17dnl <http://www.gnu.org/licenses/>.
18dnl
19
20AC_PREREQ(2.59)
21
22AC_INIT(gold, 0.1)
23AC_CONFIG_SRCDIR(gold.cc)
24
25AC_CANONICAL_TARGET
26
27AM_INIT_AUTOMAKE([no-dist parallel-tests])
28
29AM_CONFIG_HEADER(config.h:config.in)
30
31# PR 14072
32AH_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
40AC_ARG_WITH(sysroot,
41[  --with-sysroot[=DIR]    search for usr/lib et al within DIR],
42[sysroot=$withval], [sysroot=no])
43
44if test "$sysroot" = "yes"; then
45  sysroot='${exec_prefix}/${target_alias}/sys-root'
46elif test "$sysroot" = "no"; then
47  sysroot=
48fi
49
50sysroot_relocatable=0
51if 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
60fi
61
62AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT, "$sysroot",
63  [System root for target files])
64AC_DEFINE_UNQUOTED(TARGET_SYSTEM_ROOT_RELOCATABLE, $sysroot_relocatable,
65  [Whether the system root can be relocated])
66
67dnl "install_as_default" is true if the linker to be installed as the
68dnl default linker, ld.
69dnl "installed_linker" is the installed gold linker name.
70
71installed_linker=ld.gold
72AC_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])
85AC_SUBST(install_as_default)
86AC_SUBST(installed_linker)
87
88dnl For now threads are a configure time option.
89AC_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])
97if test "$threads" = "yes"; then
98  AC_DEFINE(ENABLE_THREADS, 1,
99	    [Define to do multi-threaded linking])
100fi
101AM_CONDITIONAL(THREADS, test "$threads" = "yes")
102
103AC_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])
111if test "$plugins" = "yes"; then
112  AC_DEFINE(ENABLE_PLUGINS, 1,
113	    [Define to enable linker plugins])
114fi
115AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
116
117AC_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    ;;
129esac],
130[# For now, enable all targets by default
131 enable_targets=all
132])
133
134# Canonicalize the enabled targets.
135if 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
145fi
146
147# See which specific instantiations we need.
148targetobjs=
149all_targets=
150default_machine=
151default_size=
152default_big_endian=
153default_osabi=ELFOSABI_NONE
154targ_32_little=
155targ_32_big=
156targ_64_little=
157targ_64_big=
158for 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
230done
231
232# Remove any duplicates.
233to=""
234for t in $targetobjs; do
235  case " $to " in
236  *" $t "*) ;;
237  *) to="$to $t" ;;
238  esac
239done
240targetobjs=$to
241
242if test -n "$targ_32_little"; then
243  AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
244	      [Define to support 32-bit little-endian targets])
245fi
246if test -n "$targ_32_big"; then
247  AC_DEFINE(HAVE_TARGET_32_BIG, 1,
248	      [Define to support 32-bit big-endian targets])
249fi
250if test -n "$targ_64_little"; then
251  AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
252	      [Define to support 64-bit little-endian targets])
253fi
254if test -n "$targ_64_big"; then
255  AC_DEFINE(HAVE_TARGET_64_BIG, 1,
256	      [Define to support 64-bit big-endian targets])
257fi
258
259if test -n "$all_targets"; then
260  TARGETOBJS='$(ALL_TARGETOBJS)'
261else
262  TARGETOBJS="$targetobjs"
263fi
264AC_SUBST(TARGETOBJS)
265
266AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
267		   [Default machine code])
268AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
269		   [Default size (32 or 64)])
270AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
271		   [Default big endian (true or false)])
272AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
273		   [Default OSABI code])
274
275AC_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::"'])
283AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
284		   [Default library search path])
285if 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])
287fi
288
289AC_CHECK_TOOL(NM, nm)
290
291AC_PROG_CC
292AC_PROG_CXX
293AC_PROG_YACC
294AC_PROG_RANLIB
295AC_PROG_INSTALL
296AC_PROG_LN_S
297
298AC_GNU_SOURCE
299
300ZW_GNU_GETTEXT_SISTER_DIR
301AM_PO_SUBDIRS
302
303AC_C_BIGENDIAN
304
305AC_EXEEXT
306
307AM_CONDITIONAL(NATIVE_LINKER,
308  test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
309AM_CONDITIONAL(GCC, test "$GCC" = yes)
310
311AM_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
314dnl Test for whether static linking is supported.  Some systems do not
315dnl install static libraries.  This only affects the set of tests that
316dnl we run.
317AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
318[LDFLAGS_hold=$LDFLAGS
319LDFLAGS="$LDFLAGS -static"
320AC_LINK_IFELSE([
321AC_LANG_PROGRAM([[void f() { }]])],
322[gold_cv_lib_static=yes], [gold_cv_lib_static=no])
323LDFLAGS=$LDFLAGS_hold])
324AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
325
326dnl Some architectures do not support taking pointers of functions
327dnl defined in shared libraries except in -fPIC mode.  We need to
328dnl tell the unittest framework if we're compiling for one of those
329dnl targets, so it doesn't try to run the tests that do that.
330AM_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
339dnl Test for gcc 4.1 or later.  Full support for -mcmodel=medium is
340dnl only available in gcc 4.1.
341AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
342[AC_COMPILE_IFELSE([
343#if !defined __GNUC__
344error
345#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
346error
347#endif
348], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
349
350save_CFLAGS="$CFLAGS"
351CFLAGS="$CFLAGS -mcmodel=medium"
352AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
353CFLAGS="$save_CFLAGS"
354dnl Whether we can test -mcmodel=medium.
355AM_CONDITIONAL(MCMODEL_MEDIUM,
356[test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
357
358AC_CACHE_CHECK([whether $CC supports -fmerge-constants],
359	       [gold_cv_merge_constants], [
360save_CFLAGS="$CFLAGS"
361CFLAGS="$CFLAGS -fmerge-constants"
362AC_COMPILE_IFELSE([const char *s = "foo";],
363		  [gold_cv_merge_constants=yes],
364		  [gold_cv_merge_constants=no])
365CFLAGS="$save_CFLAGS"])
366AC_SUBST([MERGE_CONSTANTS_FLAG])
367AS_IF([test "$gold_cv_merge_constants" = yes],
368      [MERGE_CONSTANTS_FLAG=-fmerge-constants],
369      [MERGE_CONSTANTS_FLAG=])
370
371dnl Test for __thread support.
372AC_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
376AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
377
378dnl On GNU/Linux TLS in static programs only works when using glibc
379dnl 2.4 or later.
380AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
381[AC_COMPILE_IFELSE([
382#include <features.h>
383#if !defined __GLIBC__
384error
385#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
386error
387#endif
388], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
389
390AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
391
392dnl Test for #pragma omp threadprivate
393AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
394[save_CFLAGS="$CFLAGS"
395CFLAGS="$CFLAGS -fopenmp"
396AC_COMPILE_IFELSE([
397#include <omp.h>
398int i;
399#pragma omp threadprivate (i)
400], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
401CFLAGS="$save_CFLAGS"])
402if test "$gold_cv_c_threadprivate" = "yes"; then
403  AC_DEFINE(HAVE_OMP_SUPPORT, 1,
404	    [Define if compiler supports #pragma omp threadprivate])
405fi
406AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
407
408dnl Test for the -ftls-dialect=gnu2 option.
409dnl Use -Werror in case of compilers that make unknown -m options warnings.
410dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
411dnl gets set later by default Autoconf magic to include -Werror.  (We are
412dnl assuming here that there is no compiler that groks -mtls-dialect=gnu2
413dnl but does not grok -Werror.)
414save_CFLAGS="$CFLAGS"
415CFLAGS="$CFLAGS -Werror -fpic -mtls-dialect=gnu2"
416AC_COMPILE_IFELSE([
417__thread int i;
418void foo (void)
419{
420  i = 10;
421}
422], [have_tls_gnu2=yes], [have_tls_gnu2=no])
423CFLAGS="$save_CFLAGS"
424AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
425
426dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
427dnl only with glibc 2.9 or later.
428AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
429[AC_COMPILE_IFELSE([
430#include <features.h>
431#if !defined __GLIBC__
432error
433#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
434error
435#endif
436], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
437
438AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
439
440dnl Test for the -frandom-seed option.
441AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
442[save_CFLAGS="$CFLAGS"
443CFLAGS="$CFLAGS -frandom-seed=foo"
444AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
445[gold_cv_c_random_seed=no])
446CFLAGS="$save_CFLAGS"])
447if 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=\$@
451fi
452AC_SUBST(RANDOM_SEED_CFLAGS)
453
454dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
455dnl 2.11 or later, and by binutils 2.20.1 or later.
456AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
457[save_LDFLAGS="$LDFLAGS"
458LDFLAGS="$LDFLAGS -static"
459AC_LINK_IFELSE([AC_LANG_PROGRAM([[
460#include <features.h>
461#if !defined __GLIBC__
462error
463#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
464error
465#endif
466void func (void) { }
467void invoke (void);
468__asm__(".type invoke, %gnu_indirect_function");
469typedef void (*funcptr) (void);
470funcptr dispatch (void) __asm__ ("invoke");
471funcptr dispatch (void) { return &func; }]],
472[[invoke();]])
473], [
474if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
475  gold_cv_lib_glibc_ifunc=both
476else
477  gold_cv_lib_glibc_ifunc=dyn
478fi], [gold_cv_lib_glibc_ifunc=no])
479LDFLAGS="$save_LDFLAGS"])
480
481AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
482AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
483
484AM_BINUTILS_WARNINGS
485
486WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
487AC_SUBST(WARN_CXXFLAGS)
488
489AC_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=])
497AC_SUBST(GOLD_LDFLAGS)
498
499AC_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=])
507AC_SUBST(GOLD_LDADD)
508
509dnl Force support for large files by default.  This may need to be
510dnl host dependent.  If build == host, we can check getconf LFS_CFLAGS.
511LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
512AC_SUBST(LFS_CFLAGS)
513
514AC_CHECK_HEADERS(sys/mman.h)
515AC_CHECK_FUNCS(chsize mmap)
516AC_REPLACE_FUNCS(pread ftruncate ffsll)
517
518AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
519[AC_LINK_IFELSE([
520AC_LANG_PROGRAM([[
521#include <sys/mman.h>
522void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
523]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
524if 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])
527else
528  AC_LIBOBJ(mremap)
529fi
530
531# Link in zlib if we can.  This allows us to write compressed sections.
532AM_ZLIB
533
534dnl We have to check these in C, not C++, because autoconf generates
535dnl tests which have no type information, and current glibc provides
536dnl multiple declarations of functions like basename when compiling
537dnl with C++.
538AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
539
540dnl Check if gcc supports the -gpubnames option.
541dnl Use -Werror in case of compilers that make unknown -g options warnings.
542dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS
543dnl gets set later by default Autoconf magic to include -Werror.  (We are
544dnl assuming here that there is no compiler that groks -gpubnames
545dnl but does not grok -Werror.)
546save_CFLAGS="$CFLAGS"
547CFLAGS="$CFLAGS -Werror -gpubnames"
548AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
549CFLAGS="$save_CFLAGS"
550AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
551
552dnl Check if gcc supports the -fno-use-linker-plugin option.
553save_CFLAGS="$CFLAGS"
554CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin"
555AC_COMPILE_IFELSE([int i;], [have_no_use_linker_plugin=yes], [have_no_use_linker_plugin=no])
556CFLAGS="$save_CFLAGS"
557AM_CONDITIONAL(HAVE_NO_USE_LINKER_PLUGIN, test "$have_no_use_linker_plugin" = "yes")
558
559AC_LANG_PUSH(C++)
560
561AC_CHECK_HEADERS(unordered_set unordered_map)
562AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
563AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
564AC_CHECK_HEADERS(byteswap.h)
565
566dnl When plugins enabled dynamic loader interface is required. Check headers
567dnl which may provide this interface. Add the necessary library to link.
568AC_CHECK_HEADERS(windows.h)
569AC_CHECK_HEADERS(dlfcn.h)
570AC_SEARCH_LIBS(dlopen, [dl dld])
571case "$ac_cv_search_dlopen" in
572  no*) DLOPEN_LIBS="";;
573  *)   DLOPEN_LIBS="$ac_cv_search_dlopen";;
574esac
575AC_SUBST(DLOPEN_LIBS)
576
577AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
578AC_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.
582AC_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>
586void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
587]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
588if 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])
591fi
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.
595AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
596[gold_cv_hash_off_t],
597[CXXFLAGS_hold=$CXXFLAGS
598CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
599AC_COMPILE_IFELSE([
600#include <sys/types.h>
601#include <tr1/unordered_map>
602std::tr1::hash<off_t> h;
603],
604[gold_cv_hash_off_t=yes],
605[gold_cv_hash_off_t=no])
606CXXFLAGS=$CXXFLAGS_hold])
607if 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])
610fi
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.
615AC_CACHE_CHECK([whether we can use attributes with template functions],
616[gold_cv_template_attribute],
617[AC_COMPILE_IFELSE([
618template<typename T> extern void foo(const char*, ...)
619  __attribute__ ((__format__ (__printf__, 1, 2)));
620template<typename T> void foo(const char* format, ...) {}
621void bar() { foo<int>("%s\n", "foo"); }
622], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
623if test "$gold_cv_template_attribute" = "yes"; then
624  AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
625	    [Define if attributes work on C++ templates])
626fi
627
628dnl Check if the system has struct stat::st_mtim.
629AC_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>
633long 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])])
635if 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])
638fi
639
640AC_LANG_POP(C++)
641
642AC_CHECK_HEADERS(locale.h)
643AC_CHECK_FUNCS(setlocale)
644AM_LC_MESSAGES
645
646AM_MAINTAINER_MODE
647
648AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
649