1# configure.ac -- Go library configure script. 2 3# Copyright 2009 The Go Authors. All rights reserved. 4# Use of this source code is governed by a BSD-style 5# license that can be found in the LICENSE file. 6 7# Process this file with autoreconf to produce configure. 8 9AC_PREREQ(2.64) 10AC_INIT(package-unused, version-unused,, libgo) 11AC_CONFIG_SRCDIR(Makefile.am) 12AC_CONFIG_HEADER(config.h) 13 14libtool_VERSION=9:0:0 15AC_SUBST(libtool_VERSION) 16 17AM_ENABLE_MULTILIB(, ..) 18 19AC_CANONICAL_SYSTEM 20target_alias=${target_alias-$host_alias} 21 22AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dist -Wall -Wno-portability]) 23AH_TEMPLATE(PACKAGE, [Name of package]) 24AH_TEMPLATE(VERSION, [Version number of package]) 25 26m4_rename([_AC_ARG_VAR_PRECIOUS],[glibgo_PRECIOUS]) 27m4_define([_AC_ARG_VAR_PRECIOUS],[]) 28AC_PROG_CC 29AC_PROG_GO 30m4_rename_force([glibgo_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) 31 32AC_SUBST(CFLAGS) 33 34AM_MAINTAINER_MODE 35 36AC_PROG_LD 37AC_PROG_RANLIB 38AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy) 39 40AC_LIBTOOL_DLOPEN 41AM_PROG_LIBTOOL 42AC_SUBST(enable_shared) 43AC_SUBST(enable_static) 44 45CC_FOR_BUILD=${CC_FOR_BUILD:-gcc} 46AC_SUBST(CC_FOR_BUILD) 47 48AC_PROG_AWK 49 50WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual' 51AC_SUBST(WARN_FLAGS) 52 53AC_ARG_ENABLE(werror, [AS_HELP_STRING([--enable-werror], 54 [turns on -Werror @<:@default=yes@:>@])]) 55if test "x$enable_werror" != "xno"; then 56 WERROR="-Werror" 57fi 58AC_SUBST(WERROR) 59 60glibgo_toolexecdir=no 61glibgo_toolexeclibdir=no 62 63AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) 64AC_ARG_ENABLE([version-specific-runtime-libs], 65 AC_HELP_STRING([--enable-version-specific-runtime-libs], 66 [Specify that runtime libraries should be installed in a compiler-specific directory]), 67 [case "$enableval" in 68 yes) version_specific_libs=yes ;; 69 no) version_specific_libs=no ;; 70 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; 71 esac], 72 [version_specific_libs=no]) 73AC_MSG_RESULT($version_specific_libs) 74 75# Version-specific runtime libs processing. 76if test $version_specific_libs = yes; then 77 glibgo_toolexecdir='${libdir}/gcc/${host_alias}' 78 glibgo_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)' 79fi 80 81# Calculate glibgo_toolexecdir, glibgo_toolexeclibdir 82# Install a library built with a cross compiler in tooldir, not libdir. 83if test -n "$with_cross_host" && 84 test x"$with_cross_host" != x"no"; then 85 nover_glibgo_toolexecdir='${exec_prefix}/${host_alias}' 86 nover_glibgo_toolexeclibdir='${toolexecdir}/lib' 87else 88 nover_glibgo_toolexecdir='${libdir}/gcc/${host_alias}' 89 nover_glibgo_toolexeclibdir='${libdir}' 90fi 91multi_os_directory=`$GOC -print-multi-os-directory` 92case $multi_os_directory in 93 .) ;; # Avoid trailing /. 94 *) nover_glibgo_toolexeclibdir=${nover_glibgo_toolexeclibdir}/${multi_os_directory} ;; 95esac 96 97if test x"$glibgo_toolexecdir" = x"no"; then 98 glibgo_toolexecdir="${nover_glibgo_toolexecdir}" 99 glibgo_toolexeclibdir="${nover_glibgo_toolexeclibdir}" 100fi 101 102AC_SUBST(glibgo_toolexecdir) 103AC_SUBST(glibgo_toolexeclibdir) 104AC_SUBST(nover_glibgo_toolexeclibdir) 105 106# See if the user wants to configure without libffi. Some 107# architectures don't support it. FIXME: We should set a default 108# based on the host. 109AC_ARG_WITH(libffi, 110 AS_HELP_STRING([--without-libffi], 111 [don't use libffi]), 112 [:], 113 [with_libffi=${with_libffi_default-yes}]) 114 115LIBFFI= 116LIBFFIINCS= 117if test "$with_libffi" != no; then 118 AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.]) 119 LIBFFI=../libffi/libffi_convenience.la 120 LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include' 121fi 122AC_SUBST(LIBFFI) 123AC_SUBST(LIBFFIINCS) 124 125# See if the user wants to configure without libatomic. This is useful if we are 126# on an architecture for which libgo does not need an atomic support library and 127# libatomic does not support our C compiler. 128AC_ARG_WITH(libatomic, 129 AS_HELP_STRING([--without-libatomic], 130 [don't use libatomic]), 131 [:], 132 [with_libatomic=${with_libatomic_default-yes}]) 133 134LIBATOMIC= 135if test "$with_libatomic" != no; then 136 LIBATOMIC=../libatomic/libatomic_convenience.la 137fi 138AC_SUBST(LIBATOMIC) 139 140# Used to tell GNU make to include a file without telling automake to 141# include it. 142go_include="-include" 143AC_SUBST(go_include) 144 145is_darwin=no 146is_freebsd=no 147is_irix=no 148is_linux=no 149is_netbsd=no 150is_openbsd=no 151is_dragonfly=no 152is_rtems=no 153is_solaris=no 154GOOS=unknown 155case ${host} in 156 *-*-darwin*) is_darwin=yes; GOOS=darwin ;; 157 *-*-freebsd*) is_freebsd=yes; GOOS=freebsd ;; 158 *-*-irix6*) is_irix=yes; GOOS=irix ;; 159 *-*-linux*) is_linux=yes; GOOS=linux ;; 160 *-*-netbsd*) is_netbsd=yes; GOOS=netbsd ;; 161 *-*-openbsd*) is_openbsd=yes; GOOS=openbsd ;; 162 *-*-dragonfly*) is_dragonfly=yes; GOOS=dragonfly ;; 163 *-*-rtems*) is_rtems=yes; GOOS=rtems ;; 164 *-*-solaris2*) is_solaris=yes; GOOS=solaris ;; 165esac 166AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes) 167AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes) 168AM_CONDITIONAL(LIBGO_IS_IRIX, test $is_irix = yes) 169AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes) 170AM_CONDITIONAL(LIBGO_IS_NETBSD, test $is_netbsd = yes) 171AM_CONDITIONAL(LIBGO_IS_OPENBSD, test $is_openbsd = yes) 172AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test $is_dragonfly = yes) 173AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes) 174AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes) 175AC_SUBST(GOOS) 176 177dnl Test whether we need to use DejaGNU or whether we can use the 178dnl simpler gotest approach. We can only use gotest for a native 179dnl build. 180USE_DEJAGNU=no 181case ${host} in 182 *-*-rtems*) USE_DEJAGNU=yes ;; 183 ${build}) ;; 184 *) USE_DEJAGNU=yes ;; 185esac 186AC_SUBST(USE_DEJAGNU) 187 188dnl N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch). 189is_386=no 190is_alpha=no 191is_arm=no 192is_arm64=no 193is_m68k=no 194mips_abi=unknown 195is_ppc=no 196is_ppc64=no 197is_ppc64le=no 198is_s390=no 199is_s390x=no 200is_sparc=no 201is_sparc64=no 202is_x86_64=no 203GOARCH=unknown 204case ${host} in 205 alpha*-*-*) 206 is_alpha=yes 207 GOARCH=alpha 208 ;; 209 aarch64-*-*) 210 is_arm64=yes 211 GOARCH=arm64 212 ;; 213 arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*) 214 is_arm=yes 215 GOARCH=arm 216 ;; 217changequote(,)dnl 218 i[34567]86-*-* | x86_64-*-*) 219changequote([,])dnl 220 AC_COMPILE_IFELSE([ 221#ifdef __x86_64__ 222#error 64-bit 223#endif], 224[is_386=yes], [is_x86_64=yes]) 225 if test "$is_386" = "yes"; then 226 GOARCH=386 227 else 228 GOARCH=amd64 229 fi 230 ;; 231 m68k*-*-*) 232 is_m68k=yes 233 GOARCH=m68k 234 ;; 235 mips*-*-*) 236 AC_COMPILE_IFELSE([ 237#if _MIPS_SIM != _ABIO32 238#error not o32 239#endif], 240[mips_abi="o32"], 241 [AC_COMPILE_IFELSE([ 242#if _MIPS_SIM != _ABIN32 243#error not n32 244#endif], 245[mips_abi="n32"], 246 [AC_COMPILE_IFELSE([ 247#if _MIPS_SIM != _ABI64 248#error not n64 249#endif], 250[mips_abi="n64"], 251 [AC_COMPILE_IFELSE([ 252#if _MIPS_SIM != _ABIO64 253#error not o64 254#endif], 255[mips_abi="o64"], 256 [AC_MSG_ERROR([unknown MIPS ABI]) 257[mips_abi="n32"]])])])]) 258 case "$mips_abi" in 259 "o32") GOARCH=mipso32 ;; 260 "n32") GOARCH=mipsn32 ;; 261 "n64") GOARCH=mipsn64 ;; 262 "o64") GOARCH=mipso64 ;; 263 esac 264 ;; 265 rs6000*-*-* | powerpc*-*-*) 266 AC_COMPILE_IFELSE([ 267#ifdef _ARCH_PPC64 268#error 64-bit 269#endif], 270[is_ppc=yes], 271 [AC_COMPILE_IFELSE([ 272#if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) 273#error 64be 274#endif], 275[is_ppc64le=yes],[is_ppc64=yes])]) 276 if test "$is_ppc" = "yes"; then 277 GOARCH=ppc 278 elif test "$is_ppc64" = "yes"; then 279 GOARCH=ppc64 280 else 281 GOARCH=ppc64le 282 fi 283 ;; 284 s390*-*-*) 285 AC_COMPILE_IFELSE([ 286#if defined(__s390x__) 287#error 64-bit 288#endif], 289[is_s390=yes], [is_s390x=yes]) 290 if test "$is_s390" = "yes"; then 291 GOARCH=s390 292 else 293 GOARCH=s390x 294 fi 295 ;; 296 sparc*-*-*) 297 AC_COMPILE_IFELSE([ 298#if defined(__sparcv9) || defined(__arch64__) 299#error 64-bit 300#endif], 301[is_sparc=yes], [is_sparc64=yes]) 302 if test "$is_sparc" = "yes"; then 303 GOARCH=sparc 304 else 305 GOARCH=sparc64 306 fi 307 ;; 308esac 309AM_CONDITIONAL(LIBGO_IS_386, test $is_386 = yes) 310AM_CONDITIONAL(LIBGO_IS_ALPHA, test $is_alpha = yes) 311AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes) 312AM_CONDITIONAL(LIBGO_IS_ARM64, test $is_arm64 = yes) 313AM_CONDITIONAL(LIBGO_IS_M68K, test $is_m68k = yes) 314AM_CONDITIONAL(LIBGO_IS_MIPS, test $mips_abi != unknown) 315AM_CONDITIONAL(LIBGO_IS_MIPSO32, test $mips_abi = o32) 316AM_CONDITIONAL(LIBGO_IS_MIPSN32, test $mips_abi = n32) 317AM_CONDITIONAL(LIBGO_IS_MIPSN64, test $mips_abi = n64) 318AM_CONDITIONAL(LIBGO_IS_MIPSO64, test $mips_abi = o64) 319AM_CONDITIONAL(LIBGO_IS_MIPS64, test $mips_abi = n64 -o $mips_abi = o64) 320AM_CONDITIONAL(LIBGO_IS_PPC, test $is_ppc = yes) 321AM_CONDITIONAL(LIBGO_IS_PPC64, test $is_ppc64 = yes) 322AM_CONDITIONAL(LIBGO_IS_PPC64LE, test $is_ppc64le = yes) 323AM_CONDITIONAL(LIBGO_IS_S390, test $is_s390 = yes) 324AM_CONDITIONAL(LIBGO_IS_S390X, test $is_s390x = yes) 325AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes) 326AM_CONDITIONAL(LIBGO_IS_SPARC64, test $is_sparc64 = yes) 327AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes) 328AC_SUBST(GOARCH) 329 330dnl Some files are only present when needed for specific architectures. 331GO_LIBCALL_OS_FILE= 332GO_LIBCALL_OS_ARCH_FILE= 333GO_SYSCALL_OS_FILE= 334GO_SYSCALL_OS_ARCH_FILE= 335if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then 336 GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go" 337fi 338if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then 339 GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go" 340fi 341if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then 342 GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go" 343fi 344if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then 345 GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go" 346fi 347AC_SUBST(GO_LIBCALL_OS_FILE) 348AC_SUBST(GO_LIBCALL_OS_ARCH_FILE) 349AC_SUBST(GO_SYSCALL_OS_FILE) 350AC_SUBST(GO_SYSCALL_OS_ARCH_FILE) 351 352dnl Special flags used to generate sysinfo.go. 353OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" 354case "$target" in 355 mips-sgi-irix6.5*) 356 # IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct 357 # msghdr in <sys/socket.h>. 358 OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500" 359 ;; 360 *-*-solaris2.1[[01]]) 361 # Solaris 10+ needs this so struct msghdr gets the msg_control 362 # etc. fields in <sys/socket.h> (_XPG4_2). _XOPEN_SOURCE=600 as 363 # above doesn't work with C99. 364 OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__" 365 ;; 366esac 367AC_SUBST(OSCFLAGS) 368 369dnl Use -fsplit-stack when compiling C code if available. 370AC_CACHE_CHECK([whether -fsplit-stack is supported], 371[libgo_cv_c_split_stack_supported], 372[CFLAGS_hold=$CFLAGS 373CFLAGS="$CFLAGS -fsplit-stack" 374AC_COMPILE_IFELSE([[int i;]], 375[libgo_cv_c_split_stack_supported=yes], 376[libgo_cv_c_split_stack_supported=no]) 377CFLAGS=$CFLAGS_hold]) 378 379dnl Make sure the linker permits -fsplit-stack. Old versions of gold will 380dnl reject split-stack code calling non-split-stack code on targets 381dnl they don't support. 382AC_CACHE_CHECK([whether linker supports split/non-split linked together], 383[libgo_cv_c_linker_split_non_split], 384[cat > conftest1.c << EOF 385extern void f(); 386int main() { f(); return 0; } 387EOF 388cat > conftest2.c << EOF 389void f() {} 390EOF 391$CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c 392$CC -c $CFLAGS $CPPFLAGS conftest2.c 393if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext; then 394 libgo_cv_c_linker_split_non_split=yes 395else 396 libgo_cv_c_linker_split_non_split=no 397fi 398rm -f conftest1.* conftest2.* conftest]) 399 400if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then 401 SPLIT_STACK=-fsplit-stack 402 AC_DEFINE(USING_SPLIT_STACK, 1, 403 [Define if the compiler supports -fsplit-stack]) 404else 405 SPLIT_STACK= 406fi 407AC_SUBST(SPLIT_STACK) 408AM_CONDITIONAL(USING_SPLIT_STACK, 409 test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes) 410 411dnl If the compiler supports split-stack but the linker does not, then 412dnl we need to explicitly disable split-stack for Go. 413if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then 414 GO_SPLIT_STACK=-fno-split-stack 415else 416 GO_SPLIT_STACK= 417fi 418AC_SUBST(GO_SPLIT_STACK) 419 420dnl Check whether the linker does stack munging when calling from 421dnl split-stack into non-split-stack code. We check this by looking 422dnl at the --help output. FIXME: This is only half right: it's 423dnl possible for the linker to support this for some targets but not 424dnl others. 425dnl This is slightly different from the above check, which is whether 426dnl the linker permits the call at all. 427AC_CACHE_CHECK([whether linker supports split stack], 428[libgo_cv_c_linker_supports_split_stack], 429[libgo_cv_c_linker_supports_split_stack=no 430if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then 431 libgo_cv_c_linker_supports_split_stack=yes 432fi]) 433if test "$libgo_cv_c_linker_supports_split_stack" = yes; then 434 AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1, 435 [Define if the linker support split stack adjustments]) 436fi 437 438AC_CACHE_CHECK([whether compiler is llgo], 439[libgo_cv_c_goc_is_llgo], 440[libgo_cv_c_goc_is_llgo=no 441if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then 442 libgo_cv_c_goc_is_llgo=yes 443fi]) 444AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes) 445 446dnl Test for the -lm library. 447MATH_LIBS= 448AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm) 449AC_SUBST(MATH_LIBS) 450 451dnl Test for -lsocket and -lnsl. Copied from libjava/configure.ac. 452AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets, 453 [libgo_cv_lib_sockets= 454 libgo_check_both=no 455 AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes) 456 if test "$libgo_check_socket" = "yes"; then 457 unset ac_cv_func_connect 458 AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket", 459 libgo_check_both=yes) 460 fi 461 if test "$libgo_check_both" = "yes"; then 462 libgo_old_libs=$LIBS 463 LIBS="$LIBS -lsocket -lnsl" 464 unset ac_cv_func_accept 465 AC_CHECK_FUNC(accept, 466 [libgo_check_nsl=no 467 libgo_cv_lib_sockets="-lsocket -lnsl"]) 468 unset ac_cv_func_accept 469 LIBS=$libgo_old_libs 470 fi 471 unset ac_cv_func_gethostbyname 472 libgo_old_libs="$LIBS" 473 AC_CHECK_FUNC(gethostbyname, , 474 [AC_CHECK_LIB(nsl, main, 475 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])]) 476 unset ac_cv_func_gethostbyname 477 AC_CHECK_FUNC(sendfile, , 478 [AC_CHECK_LIB(sendfile, main, 479 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])]) 480 LIBS=$libgo_old_libs 481]) 482NET_LIBS="$libgo_cv_lib_sockets" 483AC_SUBST(NET_LIBS) 484 485dnl Test whether the compiler supports the -pthread option. 486AC_CACHE_CHECK([whether -pthread is supported], 487[libgo_cv_lib_pthread], 488[CFLAGS_hold=$CFLAGS 489CFLAGS="$CFLAGS -pthread" 490AC_COMPILE_IFELSE([[int i;]], 491[libgo_cv_lib_pthread=yes], 492[libgo_cv_lib_pthread=no]) 493CFLAGS=$CFLAGS_hold]) 494PTHREAD_CFLAGS= 495if test "$libgo_cv_lib_pthread" = yes; then 496 PTHREAD_CFLAGS=-pthread 497fi 498AC_SUBST(PTHREAD_CFLAGS) 499 500dnl Test for the -lpthread library. 501PTHREAD_LIBS= 502AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread) 503AC_SUBST(PTHREAD_LIBS) 504 505dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime. 506AC_SEARCH_LIBS([sched_yield], [rt]) 507AC_SEARCH_LIBS([nanosleep], [rt]) 508AC_SEARCH_LIBS([clock_gettime], [rt]) 509 510AC_C_BIGENDIAN 511 512GCC_CHECK_UNWIND_GETIPINFO 513 514AC_CHECK_HEADERS(sched.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h) 515 516AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [], 517[#ifdef HAVE_SYS_SOCKET_H 518#include <sys/socket.h> 519#endif 520]) 521 522AC_CACHE_CHECK([whether <ustat.h> can be used], 523[libgo_cv_c_ustat_h], 524[CFLAGS_hold=$CFLAGS 525CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS" 526AC_COMPILE_IFELSE( 527[AC_LANG_SOURCE([ 528#include <sys/types.h> 529#ifdef HAVE_LINUX_FILTER_H 530#include <linux/filter.h> 531#endif 532#include <ustat.h> 533])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no]) 534CFLAGS=$CFLAGS_hold]) 535if test $libgo_cv_c_ustat_h = yes; then 536 AC_DEFINE(HAVE_USTAT_H, 1, 537 [Define to 1 if you have the <ustat.h> header file and it works.]) 538fi 539 540AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes) 541 542AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr) 543AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes) 544AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes) 545 546AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat open64 openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat) 547AC_TYPE_OFF_T 548AC_CHECK_TYPES([loff_t]) 549 550LIBS_hold="$LIBS" 551LIBS="$LIBS -lm" 552AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl) 553LIBS="$LIBS_hold" 554 555CFLAGS_hold="$CFLAGS" 556CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 557LIBS_hold="$LIBS" 558LIBS="$LIBS $PTHREAD_LIBS" 559AC_CHECK_FUNCS(sem_timedwait) 560CFLAGS="$CFLAGS_hold" 561LIBS="$LIBS_hold" 562 563LIBS_hold="$LIBS" 564LIBS="$LIBS $MATH_LIBS" 565AC_CHECK_FUNCS(matherr) 566LIBS="$LIBS_hold" 567 568AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4], 569[libgo_cv_func___sync_bool_compare_and_swap_4], 570[AC_LINK_IFELSE([ 571typedef unsigned int uint32 __attribute__ ((mode (SI))); 572uint32 i; 573int main() { return __sync_bool_compare_and_swap (&i, 0, 1); } 574], 575[libgo_cv_func___sync_bool_compare_and_swap_4=yes], 576[libgo_cv_func___sync_bool_compare_and_swap_4=no])]) 577if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then 578 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1, 579 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32]) 580fi 581 582AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8], 583[libgo_cv_func___sync_bool_compare_and_swap_8], 584[AC_LINK_IFELSE([ 585typedef unsigned int uint64 __attribute__ ((mode (DI))); 586uint64 i; 587int main() { return __sync_bool_compare_and_swap (&i, 0, 1); } 588], 589[libgo_cv_func___sync_bool_compare_and_swap_8=yes], 590[libgo_cv_func___sync_bool_compare_and_swap_8=no])]) 591if test "$libgo_cv_func___sync_bool_compare_and_swap_8" = "yes"; then 592 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8, 1, 593 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint64]) 594fi 595 596AC_CACHE_CHECK([for __sync_fetch_and_add_4], 597[libgo_cv_func___sync_fetch_and_add_4], 598[AC_LINK_IFELSE([ 599typedef unsigned int uint32 __attribute__ ((mode (SI))); 600uint32 i; 601int main() { return __sync_fetch_and_add (&i, 1); } 602], 603[libgo_cv_func___sync_fetch_and_add_4=yes], 604[libgo_cv_func___sync_fetch_and_add_4=no])]) 605if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then 606 AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1, 607 [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32]) 608fi 609 610AC_CACHE_CHECK([for __sync_add_and_fetch_8], 611[libgo_cv_func___sync_add_and_fetch_8], 612[AC_LINK_IFELSE([ 613typedef unsigned int uint64 __attribute__ ((mode (DI))); 614uint64 i; 615int main() { return __sync_add_and_fetch (&i, 1); } 616], 617[libgo_cv_func___sync_add_and_fetch_8=yes], 618[libgo_cv_func___sync_add_and_fetch_8=no])]) 619if test "$libgo_cv_func___sync_add_and_fetch_8" = "yes"; then 620 AC_DEFINE(HAVE_SYNC_ADD_AND_FETCH_8, 1, 621 [Define to 1 if the compiler provides the __sync_add_and_fetch function for uint64]) 622fi 623 624dnl For x86 we want to use the -minline-all-stringops option to avoid 625dnl forcing a stack split when calling memcpy and friends. 626AC_CACHE_CHECK([whether compiler supports -minline-all-stringops], 627[libgo_cv_c_stringops], 628[CFLAGS_hold=$CFLAGS 629CFLAGS="$CFLAGS -minline-all-stringops" 630AC_COMPILE_IFELSE([int i;], 631[libgo_cv_c_stringops=yes], 632[libgo_cv_c_stringops=no]) 633CFLAGS=$CFLAGS_hold]) 634STRINGOPS_FLAG= 635if test "$libgo_cv_c_stringops" = yes; then 636 STRINGOPS_FLAG=-minline-all-stringops 637fi 638AC_SUBST(STRINGOPS_FLAG) 639 640dnl For x86 we want to compile the math library with -mfancy-math-387 641dnl -funsafe-math-optimizations so that we can use the builtin 642dnl instructions directly. 643AC_CACHE_CHECK([whether compiler supports -mfancy-math-387], 644[libgo_cv_c_fancymath], 645[CFLAGS_hold=$CFLAGS 646CFLAGS="$CFLAGS -mfancy-math-387" 647AC_COMPILE_IFELSE([int i;], 648[libgo_cv_c_fancymath=yes], 649[libgo_cv_c_fancymath=no]) 650CFLAGS=$CFLAGS_hold]) 651MATH_FLAG= 652if test "$libgo_cv_c_fancymath" = yes; then 653 MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations" 654else 655 MATH_FLAG="-ffp-contract=off" 656fi 657AC_SUBST(MATH_FLAG) 658 659CFLAGS_hold=$CFLAGS 660CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" 661AC_CHECK_TYPES([off64_t]) 662CFLAGS=$CFLAGS_hold 663 664dnl Work out the size of the epoll_events struct on GNU/Linux. 665AC_CACHE_CHECK([epoll_event size], 666[libgo_cv_c_epoll_event_size], 667[AC_COMPUTE_INT(libgo_cv_c_epoll_event_size, 668[sizeof (struct epoll_event)], 669[#include <sys/epoll.h>], 670[libgo_cv_c_epoll_event_size=0])]) 671SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size} 672AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT) 673 674dnl Work out the offset of the fd field in the epoll_events struct on 675dnl GNU/Linux. 676AC_CACHE_CHECK([epoll_event data.fd offset], 677[libgo_cv_c_epoll_event_fd_offset], 678[AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset, 679[offsetof (struct epoll_event, data.fd)], 680[#include <stddef.h> 681#include <sys/epoll.h>], 682[libgo_cv_c_epoll_event_fd_offset=0])]) 683STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset} 684AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET) 685 686dnl Check if <sys/stat.h> uses timespec_t for st_?tim members. Introduced 687dnl in Solaris 11.4 for XPG7 compatibility. 688AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h], 689 [have_stat_timespec=yes], [have_stat_timespec=no]) 690AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes) 691 692dnl See if struct exception is defined in <math.h>. 693AC_CHECK_TYPE([struct exception], 694[libgo_has_struct_exception=yes], 695[libgo_has_struct_exception=no], 696[#include <math.h>]) 697if test "$libgo_has_struct_exception" = "yes"; then 698 AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1, 699 [Define to 1 if <math.h> defines struct exception]) 700fi 701 702dnl See whether setcontext changes the value of TLS variables. 703AC_CACHE_CHECK([whether setcontext clobbers TLS variables], 704[libgo_cv_lib_setcontext_clobbers_tls], 705[CFLAGS_hold="$CFLAGS" 706CFLAGS="$PTHREAD_CFLAGS" 707LIBS_hold="$LIBS" 708LIBS="$LIBS $PTHREAD_LIBS" 709AC_CHECK_SIZEOF([void *]) 710AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8]) 711AC_RUN_IFELSE( 712 [AC_LANG_SOURCE([ 713#include <pthread.h> 714#include <stdlib.h> 715#include <ucontext.h> 716#include <unistd.h> 717 718__thread int tls; 719 720static char stack[[10 * 1024 * 1024]]; 721static ucontext_t c; 722 723/* Called via makecontext/setcontext. */ 724 725static void 726cfn (void) 727{ 728 exit (tls); 729} 730 731/* Called via pthread_create. */ 732 733static void * 734tfn (void *dummy) 735{ 736 /* The thread should still see this value after calling 737 setcontext. */ 738 tls = 0; 739 740 setcontext (&c); 741 742 /* The call to setcontext should not return. */ 743 abort (); 744} 745 746int 747main () 748{ 749 pthread_t tid; 750 751 /* The thread should not see this value. */ 752 tls = 1; 753 754 if (getcontext (&c) < 0) 755 abort (); 756 757 c.uc_stack.ss_sp = stack; 758#ifdef MAKECONTEXT_STACK_TOP 759 c.uc_stack.ss_sp += sizeof stack; 760#endif 761 c.uc_stack.ss_flags = 0; 762 c.uc_stack.ss_size = sizeof stack; 763 c.uc_link = NULL; 764 makecontext (&c, cfn, 0); 765 766 if (pthread_create (&tid, NULL, tfn, NULL) != 0) 767 abort (); 768 769 if (pthread_join (tid, NULL) != 0) 770 abort (); 771 772 /* The thread should have called exit. */ 773 abort (); 774} 775])], 776[libgo_cv_lib_setcontext_clobbers_tls=no], 777[libgo_cv_lib_setcontext_clobbers_tls=yes], 778[case "$target:$ptr_type_size" in 779 i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64) 780 libgo_cv_lib_setcontext_clobbers_tls=yes ;; 781 *) 782 libgo_cv_lib_setcontext_clobbers_tls=no ;; 783 esac 784]) 785CFLAGS="$CFLAGS_hold" 786LIBS="$LIBS_hold" 787]) 788if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then 789 AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1, 790 [Define if setcontext clobbers TLS variables]) 791fi 792 793AC_CACHE_CHECK([whether .eh_frame section should be read-only], 794libgo_cv_ro_eh_frame, [ 795libgo_cv_ro_eh_frame=no 796echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c 797if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then 798 if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then 799 libgo_cv_ro_eh_frame=yes 800 elif grep '.section.*eh_frame.*#alloc' conftest.c \ 801 | grep -v '#write' > /dev/null; then 802 libgo_cv_ro_eh_frame=yes 803 fi 804fi 805rm -f conftest.* 806]) 807if test "x$libgo_cv_ro_eh_frame" = xyes; then 808 AC_DEFINE(EH_FRAME_FLAGS, "a", 809 [Define to the flags needed for the .section .eh_frame directive.]) 810else 811 AC_DEFINE(EH_FRAME_FLAGS, "aw", 812 [Define to the flags needed for the .section .eh_frame directive.]) 813fi 814 815AC_CACHE_CHECK([if compiler supports -Qunused-arguments], 816[libgo_cv_c_unused_arguments], 817[CFLAGS_hold=$CFLAGS 818CFLAGS="$CFLAGS -Qunused-arguments" 819AC_COMPILE_IFELSE([[int i;]], 820[libgo_cv_c_unused_arguments=yes], 821[libgo_cv_c_unused_arguments=no]) 822CFLAGS=$CFLAGS_hold]) 823 824AC_CACHE_CHECK([if assembler supports GNU comdat group syntax], 825libgo_cv_as_comdat_gnu, [ 826echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s 827CFLAGS_hold=$CFLAGS 828if test "$libgo_cv_c_unused_arguments" = yes; then 829 CFLAGS="$CFLAGS -Qunused-arguments" 830fi 831if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then 832 libgo_cv_as_comdat_gnu=yes 833else 834 libgo_cv_as_comdat_gnu=no 835fi 836CFLAGS=$CFLAGS_hold 837]) 838if test "x$libgo_cv_as_comdat_gnu" = xyes; then 839 AC_DEFINE(HAVE_AS_COMDAT_GAS, 1, 840 [Define if your assembler supports GNU comdat group syntax.]) 841fi 842 843AC_CACHE_CHECK([assembler supports pc related relocs], 844libgo_cv_as_x86_pcrel, [ 845libgo_cv_as_x86_pcrel=yes 846echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s 847CFLAGS_hold=$CFLAGS 848if test "$libgo_cv_c_unused_arguments" = yes; then 849 CFLAGS="$CFLAGS -Qunused-arguments" 850fi 851if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then 852 libgo_cv_as_x86_pcrel=no 853fi 854CFLAGS=$CFLAGS_hold 855]) 856if test "x$libgo_cv_as_x86_pcrel" = xyes; then 857 AC_DEFINE(HAVE_AS_X86_PCREL, 1, 858 [Define if your assembler supports PC relative relocs.]) 859fi 860 861AC_CACHE_CHECK([assembler supports unwind section type], 862libgo_cv_as_x86_64_unwind_section_type, [ 863libgo_cv_as_x86_64_unwind_section_type=yes 864echo '.section .eh_frame,"a",@unwind' > conftest.s 865CFLAGS_hold=$CFLAGS 866if test "$libgo_cv_c_unused_arguments" = yes; then 867 CFLAGS="$CFLAGS -Qunused-arguments" 868fi 869if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then 870 libgo_cv_as_x86_64_unwind_section_type=no 871fi 872CFLAGS=$CFLAGS_hold 873]) 874if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then 875 AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1, 876 [Define if your assembler supports unwind section type.]) 877fi 878 879AC_CACHE_SAVE 880 881if test ${multilib} = yes; then 882 multilib_arg="--enable-multilib" 883else 884 multilib_arg= 885fi 886 887AC_CONFIG_FILES(Makefile testsuite/Makefile) 888 889AC_CONFIG_COMMANDS([default], 890[if test -n "$CONFIG_FILES"; then 891 # Multilibs need MULTISUBDIR defined correctly in certain makefiles so 892 # that multilib installs will end up installed in the correct place. 893 # The testsuite needs it for multilib-aware ABI baseline files. 894 # To work around this not being passed down from config-ml.in -> 895 # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually 896 # append it here. Only modify Makefiles that have just been created. 897 # 898 # Also, get rid of this simulated-VPATH thing that automake does. 899 cat > vpsed << \_EOF 900s!`test -f '$<' || echo '$(srcdir)/'`!! 901_EOF 902 for i in $SUBDIRS; do 903 case $CONFIG_FILES in 904 *${i}/Makefile*) 905 #echo "Adding MULTISUBDIR to $i/Makefile" 906 sed -f vpsed $i/Makefile > tmp 907 grep '^MULTISUBDIR =' Makefile >> tmp 908 mv tmp $i/Makefile 909 ;; 910 esac 911 done 912 rm vpsed 913 fi 914], 915[ 916# Variables needed in config.status (file generation) which aren't already 917# passed by autoconf. 918SUBDIRS="$SUBDIRS" 919]) 920 921AC_OUTPUT 922