]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gold/configure.ac
*** empty log message ***
[thirdparty/binutils-gdb.git] / gold / configure.ac
CommitLineData
bae7f79e 1dnl Process this file with autoconf to produce a configure script.
5bf135a7
NC
2dnl
3dnl Copyright 2012 Free Software Foundation
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
bae7f79e
ILT
19
20AC_PREREQ(2.59)
8486ee48
ILT
21
22AC_INIT(gold, 0.1)
23AC_CONFIG_SRCDIR(gold.cc)
bae7f79e
ILT
24
25AC_CANONICAL_TARGET
26
6ea55b82 27AM_INIT_AUTOMAKE([no-dist parallel-tests])
bae7f79e
ILT
28
29AM_CONFIG_HEADER(config.h:config.in)
30
df7b86aa
NC
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). */
0a6f1bf2 35#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
df7b86aa
NC
36# error config.h must be #included before system headers
37#endif
38#define __CONFIG_H__ 1])
39
ad2d6943
ILT
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
4fda8867
NC
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.
c7791212
NC
70
71default_ld=
72AC_ARG_ENABLE(ld,
73[[ --enable-ld[=ARG] build ld [ARG={default,yes,no}]]],
58797674 74[case "${enableval}" in
c7791212
NC
75 default)
76 default_ld=ld.bfd
77 ;;
78esac])
79
80AC_ARG_ENABLE(gold,
81[[ --enable-gold[=ARG] build gold [ARG={default,yes,no}]]],
82[case "${enableval}" in
83 yes|default)
84 if test x${default_ld} = x; then
85 install_as_default=yes
86 fi
4fda8867
NC
87 installed_linker=ld.gold
88 ;;
c7791212 89 no)
4fda8867
NC
90 ;;
91 *)
92 AC_MSG_ERROR([invalid --enable-gold argument])
93 ;;
94 esac],
c7791212
NC
95[install_as_default=no
96 installed_linker=ld.gold])
4fda8867
NC
97AC_SUBST(install_as_default)
98AC_SUBST(installed_linker)
99
fe9a4c12
ILT
100dnl For now threads are a configure time option.
101AC_ARG_ENABLE([threads],
102[ --enable-threads multi-threaded linking],
103[case "${enableval}" in
104 yes | "") threads=yes ;;
105 no) threads=no ;;
106 *) threads=yes ;;
107 esac],
108[threads=no])
109if test "$threads" = "yes"; then
110 AC_DEFINE(ENABLE_THREADS, 1,
111 [Define to do multi-threaded linking])
112fi
113AM_CONDITIONAL(THREADS, test "$threads" = "yes")
89fc3421
CC
114
115AC_ARG_ENABLE([plugins],
116[ --enable-plugins linker plugins],
117[case "${enableval}" in
118 yes | "") plugins=yes ;;
119 no) plugins=no ;;
120 *) plugins=yes ;;
121 esac],
122[plugins=no])
123if test "$plugins" = "yes"; then
124 AC_DEFINE(ENABLE_PLUGINS, 1,
125 [Define to enable linker plugins])
126fi
127AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes")
fe9a4c12 128
193a53d9
ILT
129AC_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 ;;
141esac],
142[# For now, enable all targets by default
143 enable_targets=all
144])
145
146# Canonicalize the enabled targets.
147if 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
157fi
158
159# See which specific instantiations we need.
6df6da4a
ILT
160targetobjs=
161all_targets=
fbfba508
ILT
162default_machine=
163default_size=
164default_big_endian=
36959681 165default_osabi=ELFOSABI_NONE
fbfba508
ILT
166targ_32_little=
167targ_32_big=
168targ_64_little=
169targ_64_big=
193a53d9 170for targ in $target $canon_targets; do
193a53d9
ILT
171 if test "$targ" = "all"; then
172 targ_32_little=yes
173 targ_32_big=yes
174 targ_64_little=yes
175 targ_64_big=yes
6df6da4a 176 all_targets=yes
193a53d9 177 else
fbfba508
ILT
178 . ${srcdir}/configure.tgt
179
180 if test "$targ_obj" = "UNKNOWN"; then
6df6da4a 181 AC_MSG_ERROR("unsupported target $targ")
fbfba508
ILT
182 else
183 targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
60b2b4e7
ILT
184 if test "$targ_extra_obj" != ""; then
185 targetobjs="$targetobjs ${targ_extra_obj}.\$(OBJEXT)"
186 fi
f5314dd5
DM
187 if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
188 if test "$targ_big_endian" = "true" \
189 -o "$targ_extra_big_endian" = "true"; then
190 targ_32_big=yes
191 fi
192 if test "$targ_big_endian" = "false" \
193 -o "$targ_extra_big_endian" = "false"; then
194 targ_32_little=yes
195 fi
196 fi
197 if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
198 if test "$targ_big_endian" = "true" \
199 -o "$targ_extra_big_endian" = "true"; then
200 targ_64_big=yes
201 fi
202 if test "$targ_big_endian" = "false" \
203 -o "$targ_extra_big_endian" = "false"; then
204 targ_64_little=yes
205 fi
fbfba508
ILT
206 fi
207
208 if test "$target" = "$targ"; then
209 default_machine=$targ_machine
210 default_size=$targ_size
211 default_big_endian=$targ_big_endian
36959681 212 default_osabi=$targ_osabi
364c7fa5
ILT
213
214 AM_CONDITIONAL(DEFAULT_TARGET_ARM, test "$targ_obj" = "arm")
215 AM_CONDITIONAL(DEFAULT_TARGET_I386, test "$targ_obj" = "i386")
216 AM_CONDITIONAL(DEFAULT_TARGET_POWERPC, test "$targ_obj" = "powerpc")
217 AM_CONDITIONAL(DEFAULT_TARGET_SPARC, test "$targ_obj" = "sparc")
218 AM_CONDITIONAL(DEFAULT_TARGET_X86_64, test "$targ_obj" = "x86_64")
5c0b3823 219 AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
fbfba508
ILT
220 fi
221 fi
193a53d9
ILT
222 fi
223done
224
6cfaf60b 225# Remove any duplicates.
9109c078
ILT
226to=""
227for t in $targetobjs; do
228 case " $to " in
229 *" $t "*) ;;
230 *) to="$to $t" ;;
231 esac
232done
233targetobjs=$to
6cfaf60b 234
193a53d9
ILT
235if test -n "$targ_32_little"; then
236 AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
237 [Define to support 32-bit little-endian targets])
238fi
239if test -n "$targ_32_big"; then
240 AC_DEFINE(HAVE_TARGET_32_BIG, 1,
241 [Define to support 32-bit big-endian targets])
242fi
243if test -n "$targ_64_little"; then
244 AC_DEFINE(HAVE_TARGET_64_LITTLE, 1,
245 [Define to support 64-bit little-endian targets])
246fi
247if test -n "$targ_64_big"; then
248 AC_DEFINE(HAVE_TARGET_64_BIG, 1,
249 [Define to support 64-bit big-endian targets])
250fi
251
6df6da4a
ILT
252if test -n "$all_targets"; then
253 TARGETOBJS='$(ALL_TARGETOBJS)'
254else
255 TARGETOBJS="$targetobjs"
256fi
257AC_SUBST(TARGETOBJS)
258
fbfba508
ILT
259AC_DEFINE_UNQUOTED(GOLD_DEFAULT_MACHINE, $default_machine,
260 [Default machine code])
261AC_DEFINE_UNQUOTED(GOLD_DEFAULT_SIZE, $default_size,
262 [Default size (32 or 64)])
263AC_DEFINE_UNQUOTED(GOLD_DEFAULT_BIG_ENDIAN, $default_big_endian,
264 [Default big endian (true or false)])
36959681
ILT
265AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
266 [Default OSABI code])
fbfba508 267
3f3cddf1
ILT
268AC_ARG_WITH(lib-path,
269[ --with-lib-path=dir1:dir2... set default LIB_PATH],
270[case "$withval" in
271 yes) LIB_PATH='"/lib:/usr/lib"' ;;
272 no) LIB_PATH='""' ;;
273 *) LIB_PATH='"'"$withval"'"' ;;
274 esac],
275[LIB_PATH='"::DEFAULT::"'])
276AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
277 [Default library search path])
278if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
279 AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
280fi
281
ebb300b2
CC
282AC_CHECK_TOOL(NM, nm)
283
bae7f79e
ILT
284AC_PROG_CC
285AC_PROG_CXX
dbe717ef 286AC_PROG_YACC
5a6f7e2d 287AC_PROG_RANLIB
bae7f79e 288AC_PROG_INSTALL
537b5f51 289AC_PROG_LN_S
fa99aa09
ILT
290
291AC_GNU_SOURCE
292
bae7f79e
ILT
293ZW_GNU_GETTEXT_SISTER_DIR
294AM_PO_SUBDIRS
295
92e059d8
ILT
296AC_C_BIGENDIAN
297
bae7f79e
ILT
298AC_EXEEXT
299
537b5f51
ILT
300AM_CONDITIONAL(NATIVE_LINKER,
301 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias")
302AM_CONDITIONAL(GCC, test "$GCC" = yes)
303
eb373049
ILT
304AM_CONDITIONAL(NATIVE_OR_CROSS_LINKER,
305 test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias" -o "x$host_alias" = "x$build_alias")
306
328c7c2f
ILT
307dnl Test for whether static linking is supported. Some systems do not
308dnl install static libraries. This only affects the set of tests that
309dnl we run.
310AC_CACHE_CHECK([whether static linking works], [gold_cv_lib_static],
dd7af074 311[LDFLAGS_hold=$LDFLAGS
328c7c2f 312LDFLAGS="$LDFLAGS -static"
dd7af074 313AC_LINK_IFELSE([
328c7c2f 314AC_LANG_PROGRAM([[void f() { }]])],
dd7af074
ILT
315[gold_cv_lib_static=yes], [gold_cv_lib_static=no])
316LDFLAGS=$LDFLAGS_hold])
328c7c2f
ILT
317AM_CONDITIONAL(HAVE_STATIC, test "$gold_cv_lib_static" = "yes")
318
63402fe4
ILT
319dnl Some architectures do not support taking pointers of functions
320dnl defined in shared libraries except in -fPIC mode. We need to
321dnl tell the unittest framework if we're compiling for one of those
322dnl targets, so it doesn't try to run the tests that do that.
323AM_CONDITIONAL(FN_PTRS_IN_SO_WITHOUT_PIC, [
324 case $target_cpu in
864a1b56 325 powerpc*) false;;
63402fe4 326 x86_64) false;;
11936fb1 327 sparc64) false;;
63402fe4
ILT
328 *) true;;
329 esac])
330
084e2665
ILT
331dnl Test for gcc 4.1 or later. Full support for -mcmodel=medium is
332dnl only available in gcc 4.1.
333AC_CACHE_CHECK([for gcc >= 4.1], [gold_cv_prog_gcc41],
334[AC_COMPILE_IFELSE([
335#if !defined __GNUC__
336error
337#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
338error
339#endif
340], [gold_cv_prog_gcc41=yes], [gold_cv_prog_gcc41=no])])
341
24482ca0
L
342save_CFLAGS="$CFLAGS"
343CFLAGS="$CFLAGS -mcmodel=medium"
344AC_COMPILE_IFELSE([int i;], [have_mcmodel_medium=yes], [have_mcmodel_medium=no])
345CFLAGS="$save_CFLAGS"
8a5e3e08 346dnl Whether we can test -mcmodel=medium.
084e2665 347AM_CONDITIONAL(MCMODEL_MEDIUM,
24482ca0 348[test "$target_cpu" = "x86_64" -a "$have_mcmodel_medium" = "yes" -a "$gold_cv_prog_gcc41" = "yes"])
8a5e3e08 349
6eee141f 350dnl Test for __thread support.
097ec620
ILT
351AC_CACHE_CHECK([for thread support], [gold_cv_c_thread],
352[AC_COMPILE_IFELSE([__thread int i = 1;],
353[gold_cv_c_thread=yes], [gold_cv_c_thread=no])])
354
355AM_CONDITIONAL(TLS, test "$gold_cv_c_thread" = "yes")
356
357dnl On GNU/Linux TLS in static programs only works when using glibc
358dnl 2.4 or later.
359AC_CACHE_CHECK([for glibc >= 2.4], [gold_cv_lib_glibc24],
360[AC_COMPILE_IFELSE([
361#include <features.h>
362#if !defined __GLIBC__
363error
364#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4)
365error
366#endif
367], [gold_cv_lib_glibc24=yes], [gold_cv_lib_glibc24=no])])
368
369AM_CONDITIONAL(STATIC_TLS, test "$gold_cv_lib_glibc24" = "yes")
6eee141f 370
155a0dd7
ILT
371dnl Test for #pragma omp threadprivate
372AC_CACHE_CHECK([for omp support], [gold_cv_c_threadprivate],
373[save_CFLAGS="$CFLAGS"
374CFLAGS="$CFLAGS -fopenmp"
375AC_COMPILE_IFELSE([
376#include <omp.h>
377int i;
378#pragma omp threadprivate (i)
379], [gold_cv_c_threadprivate=yes], [gold_cv_c_threadprivate=no])
380CFLAGS="$save_CFLAGS"])
381if test "$gold_cv_c_threadprivate" = "yes"; then
382 AC_DEFINE(HAVE_OMP_SUPPORT, 1,
383 [Define if compiler supports #pragma omp threadprivate])
384fi
385AM_CONDITIONAL(OMP_SUPPORT, test "$gold_cv_c_threadprivate" = "yes")
386
c2b45e22
CC
387dnl Test for the -ftls-dialect=gnu2 option.
388save_CFLAGS="$CFLAGS"
63887f3d
L
389CFLAGS="$CFLAGS -fpic -mtls-dialect=gnu2"
390AC_COMPILE_IFELSE([
391__thread int i;
392void foo (void)
393{
394 i = 10;
395}
396], [have_tls_gnu2=yes], [have_tls_gnu2=no])
c2b45e22
CC
397CFLAGS="$save_CFLAGS"
398AM_CONDITIONAL(TLS_GNU2_DIALECT, test "$have_tls_gnu2" = "yes")
399
400dnl On GNU/Linux TLS descriptors are supported by the dynamic loader
b0074644
ILT
401dnl only with glibc 2.9 or later.
402AC_CACHE_CHECK([for glibc >= 2.9], [gold_cv_lib_glibc29],
c2b45e22
CC
403[AC_COMPILE_IFELSE([
404#include <features.h>
405#if !defined __GLIBC__
406error
b0074644 407#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 9)
c2b45e22
CC
408error
409#endif
b0074644 410], [gold_cv_lib_glibc29=yes], [gold_cv_lib_glibc29=no])])
c2b45e22 411
b0074644 412AM_CONDITIONAL(TLS_DESCRIPTORS, test "$gold_cv_lib_glibc29" = "yes")
c2b45e22 413
1d1f116d
CD
414dnl Test for the -frandom-seed option.
415AC_CACHE_CHECK([for -frandom-seed support], [gold_cv_c_random_seed],
416[save_CFLAGS="$CFLAGS"
417CFLAGS="$CFLAGS -frandom-seed=foo"
418AC_COMPILE_IFELSE([int i;], [gold_cv_c_random_seed=yes],
419[gold_cv_c_random_seed=no])
420CFLAGS="$save_CFLAGS"])
421if test "$gold_cv_c_random_seed" = "yes"; then
422 # In Makefile, '$@' will be expanded to be the name of the file
423 # being built, providing a unique seed for each file.
424 RANDOM_SEED_CFLAGS=-frandom-seed=\$@
425fi
426AC_SUBST(RANDOM_SEED_CFLAGS)
427
7223e9ca 428dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
d0773f31 429dnl 2.11 or later, and by binutils 2.20.1 or later.
ebb300b2
CC
430AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
431[save_LDFLAGS="$LDFLAGS"
432LDFLAGS="$LDFLAGS -static"
433AC_LINK_IFELSE([AC_LANG_PROGRAM([[
7223e9ca
ILT
434#include <features.h>
435#if !defined __GLIBC__
436error
437#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
438error
439#endif
ebb300b2
CC
440void func (void) { }
441void invoke (void);
442__asm__(".type invoke, %gnu_indirect_function");
443typedef void (*funcptr) (void);
444funcptr dispatch (void) __asm__ ("invoke");
445funcptr dispatch (void) { return &func; }]],
446[[invoke();]])
447], [
448if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
449 gold_cv_lib_glibc_ifunc=both
450else
451 gold_cv_lib_glibc_ifunc=dyn
452fi], [gold_cv_lib_glibc_ifunc=no])
453LDFLAGS="$save_LDFLAGS"])
7223e9ca 454
ebb300b2
CC
455AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
456AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
7223e9ca 457
bae7f79e
ILT
458AM_BINUTILS_WARNINGS
459
2ea97941 460WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
bae7f79e
ILT
461AC_SUBST(WARN_CXXFLAGS)
462
dc87f620
ILT
463AC_ARG_WITH(gold-ldflags,
464[ --with-gold-ldflags=FLAGS additional link flags for gold],
465[if test "$withval" = "no" -o "$withval" = "yes"; then
466 GOLD_LDFLAGS=
467 else
468 GOLD_LDFLAGS=$withval
469 fi],
470[GOLD_LDFLAGS=])
471AC_SUBST(GOLD_LDFLAGS)
472
473AC_ARG_WITH(gold-ldadd,
474[ --with-gold-ldadd=LIBS additional libraries for gold],
475[if test "$withval" = "no" -o "$withval" = "yes"; then
476 GOLD_LDADD=
477 else
478 GOLD_LDADD=$withval
479 fi],
480[GOLD_LDADD=])
481AC_SUBST(GOLD_LDADD)
482
bae7f79e
ILT
483dnl Force support for large files by default. This may need to be
484dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
494e05f4
ILT
485LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
486AC_SUBST(LFS_CFLAGS)
bae7f79e 487
88597d34
ILT
488AC_CHECK_HEADERS(sys/mman.h)
489AC_CHECK_FUNCS(chsize mmap)
490AC_REPLACE_FUNCS(pread ftruncate ffsll)
491
492AC_CACHE_CHECK([mremap with MREMAP_MAYMOVE], [gold_cv_lib_mremap_maymove],
493[AC_LINK_IFELSE([
494AC_LANG_PROGRAM([[
495#include <sys/mman.h>
496void f() { mremap (0, 0, 0, MREMAP_MAYMOVE); }
497]])], [gold_cv_lib_mremap_maymove=yes], [gold_cv_lib_mremap_maymove=no])])
498if test "$gold_cv_lib_mremap_maymove" = "yes"; then
499 AC_DEFINE(HAVE_MREMAP, 1,
500 [Define to 1 if you have the mremap function with MREMAP_MAYMOVE support])
501else
502 AC_LIBOBJ(mremap)
503fi
82dcae9d 504
9a0910c3 505# Link in zlib if we can. This allows us to write compressed sections.
ae2eea65
ILT
506AM_ZLIB
507AM_CONDITIONAL(HAVE_ZLIB, test "$ac_cv_header_zlib_h" = "yes")
9a0910c3 508
0639a6f6
ILT
509dnl We have to check these in C, not C++, because autoconf generates
510dnl tests which have no type information, and current glibc provides
511dnl multiple declarations of functions like basename when compiling
512dnl with C++.
513AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
514
54dc6425 515AC_LANG_PUSH(C++)
d288e464 516
54dc6425
ILT
517AC_CHECK_HEADERS(tr1/unordered_set tr1/unordered_map)
518AC_CHECK_HEADERS(ext/hash_map ext/hash_set)
15d5fa16 519AC_CHECK_HEADERS(byteswap.h)
7c0640fa 520AC_CHECK_FUNCS(mallinfo posix_fallocate fallocate readv sysconf times)
3d857b98 521AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp, strndup, memmem])
d288e464 522
40fde488
CD
523# Use of ::std::tr1::unordered_map::rehash causes undefined symbols
524# at link time with some versions of GCC.
525AC_CACHE_CHECK([whether ::std::tr1::unordered_map::rehash is usable.],
526[gold_cv_unordered_map_rehash],
527[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
528#include <tr1/unordered_map>
529void bar() { ::std::tr1::unordered_map<int, int> x; x.rehash(10); }
530]])], [gold_cv_unordered_map_rehash=yes], [gold_cv_unordered_map_rehash=no])])
531if test "$gold_cv_unordered_map_rehash" = "yes"; then
532 AC_DEFINE(HAVE_TR1_UNORDERED_MAP_REHASH, 1,
533 [Define if ::std::tr1::unordered_map::rehash is usable])
534fi
535
81c82a68
ILT
536# Use of tr1/unordered_map with off_t as a key is not supported on GCC
537# 4.1.xx when compiling in 32-bit mode with a 64-bit off_t type.
538AC_CACHE_CHECK([whether std::tr1::hash<off_t> is defined],
539[gold_cv_hash_off_t],
540[CXXFLAGS_hold=$CXXFLAGS
541CXXFLAGS="$CXXFLAGS $LFS_CFLAGS"
542AC_COMPILE_IFELSE([
543#include <sys/types.h>
544#include <tr1/unordered_map>
545std::tr1::hash<off_t> h;
546],
547[gold_cv_hash_off_t=yes],
548[gold_cv_hash_off_t=no])
549CXXFLAGS=$CFLAGS_hold])
550if test "$gold_cv_hash_off_t" = "yes"; then
551 AC_DEFINE(HAVE_TR1_HASH_OFF_T, 1,
552 [Define if std::tr1::hash<off_t> is usable])
553fi
554
04bf7072
ILT
555# gcc 4.3.0 doesn't recognize the printf attribute on a template
556# function. Check for that. This is gcc bug 35546. This test can
557# probably be removed after the bug has been fixed for a while.
558AC_CACHE_CHECK([whether we can use attributes with template functions],
559[gold_cv_template_attribute],
560[AC_COMPILE_IFELSE([
561template<typename T> extern void foo(const char*, ...)
562 __attribute__ ((__format__ (__printf__, 1, 2)));
563template<typename T> void foo(const char* format, ...) {}
564void bar() { foo<int>("%s\n", "foo"); }
565], [gold_cv_template_attribute=yes], [gold_cv_template_attribute=no])])
566if test "$gold_cv_template_attribute" = "yes"; then
567 AC_DEFINE(HAVE_TEMPLATE_ATTRIBUTES, 1,
568 [Define if attributes work on C++ templates])
569fi
570
5d329b7d
ILT
571dnl Check if the system has struct stat::st_mtim.
572AC_CACHE_CHECK([for struct stat::st_mtim.],
573[gold_cv_stat_st_mtim],
574[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
575#include <sys/stat.h>
576long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
577]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
578if test "$gold_cv_stat_st_mtim" = "yes"; then
579 AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
580 [Define if struct stat has a field st_mtim with timespec for mtime])
581fi
582
f1415016
CC
583dnl Check if gcc supports the -gpubnames option.
584save_CXXFLAGS="$CXXFLAGS"
585CXXFLAGS="$CXXFLAGS -gpubnames"
586AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no])
587CXXFLAGS="$save_CXXFLAGS"
588AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes")
589
54dc6425
ILT
590AC_LANG_POP(C++)
591
58797674 592AC_CHECK_HEADERS(locale.h)
44350750
NC
593AC_CHECK_FUNCS(setlocale)
594AM_LC_MESSAGES
595
bae7f79e
ILT
596AM_MAINTAINER_MODE
597
5a6f7e2d 598AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)