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