Home | History | Annotate | Download | only in gold
      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