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