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