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