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