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