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=8: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_PPC, test $is_ppc = yes) 320AM_CONDITIONAL(LIBGO_IS_PPC64, test $is_ppc64 = yes) 321AM_CONDITIONAL(LIBGO_IS_PPC64LE, test $is_ppc64le = yes) 322AM_CONDITIONAL(LIBGO_IS_S390, test $is_s390 = yes) 323AM_CONDITIONAL(LIBGO_IS_S390X, test $is_s390x = yes) 324AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes) 325AM_CONDITIONAL(LIBGO_IS_SPARC64, test $is_sparc64 = yes) 326AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes) 327AC_SUBST(GOARCH) 328 329dnl Some files are only present when needed for specific architectures. 330GO_LIBCALL_OS_FILE= 331GO_LIBCALL_OS_ARCH_FILE= 332GO_SYSCALL_OS_FILE= 333GO_SYSCALL_OS_ARCH_FILE= 334if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then 335 GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go" 336fi 337if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then 338 GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go" 339fi 340if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then 341 GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go" 342fi 343if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then 344 GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go" 345fi 346AC_SUBST(GO_LIBCALL_OS_FILE) 347AC_SUBST(GO_LIBCALL_OS_ARCH_FILE) 348AC_SUBST(GO_SYSCALL_OS_FILE) 349AC_SUBST(GO_SYSCALL_OS_ARCH_FILE) 350 351dnl Special flags used to generate sysinfo.go. 352OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" 353case "$target" in 354 mips-sgi-irix6.5*) 355 # IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct 356 # msghdr in <sys/socket.h>. 357 OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500" 358 ;; 359 *-*-solaris2.1[[01]]) 360 # Solaris 10+ needs this so struct msghdr gets the msg_control 361 # etc. fields in <sys/socket.h> (_XPG4_2). _XOPEN_SOURCE=600 as 362 # above doesn't work with C99. 363 OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__" 364 ;; 365esac 366AC_SUBST(OSCFLAGS) 367 368dnl Use -fsplit-stack when compiling C code if available. 369AC_CACHE_CHECK([whether -fsplit-stack is supported], 370[libgo_cv_c_split_stack_supported], 371[CFLAGS_hold=$CFLAGS 372CFLAGS="$CFLAGS -fsplit-stack" 373AC_COMPILE_IFELSE([[int i;]], 374[libgo_cv_c_split_stack_supported=yes], 375[libgo_cv_c_split_stack_supported=no]) 376CFLAGS=$CFLAGS_hold]) 377 378dnl Make sure the linker permits -fsplit-stack. Old versions of gold will 379dnl reject split-stack code calling non-split-stack code on targets 380dnl they don't support. 381AC_CACHE_CHECK([whether linker supports split/non-split linked together], 382[libgo_cv_c_linker_split_non_split], 383[cat > conftest1.c << EOF 384extern void f(); 385int main() { f(); return 0; } 386EOF 387cat > conftest2.c << EOF 388void f() {} 389EOF 390$CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c 391$CC -c $CFLAGS $CPPFLAGS conftest2.c 392if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext; then 393 libgo_cv_c_linker_split_non_split=yes 394else 395 libgo_cv_c_linker_split_non_split=no 396fi 397rm -f conftest1.* conftest2.* conftest]) 398 399if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then 400 SPLIT_STACK=-fsplit-stack 401 AC_DEFINE(USING_SPLIT_STACK, 1, 402 [Define if the compiler supports -fsplit-stack]) 403else 404 SPLIT_STACK= 405fi 406AC_SUBST(SPLIT_STACK) 407AM_CONDITIONAL(USING_SPLIT_STACK, 408 test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes) 409 410dnl If the compiler supports split-stack but the linker does not, then 411dnl we need to explicitly disable split-stack for Go. 412if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then 413 GO_SPLIT_STACK=-fno-split-stack 414else 415 GO_SPLIT_STACK= 416fi 417AC_SUBST(GO_SPLIT_STACK) 418 419dnl Check whether the linker does stack munging when calling from 420dnl split-stack into non-split-stack code. We check this by looking 421dnl at the --help output. FIXME: This is only half right: it's 422dnl possible for the linker to support this for some targets but not 423dnl others. 424dnl This is slightly different from the above check, which is whether 425dnl the linker permits the call at all. 426AC_CACHE_CHECK([whether linker supports split stack], 427[libgo_cv_c_linker_supports_split_stack], 428[libgo_cv_c_linker_supports_split_stack=no 429if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then 430 libgo_cv_c_linker_supports_split_stack=yes 431fi]) 432if test "$libgo_cv_c_linker_supports_split_stack" = yes; then 433 AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1, 434 [Define if the linker support split stack adjustments]) 435fi 436 437AC_CACHE_CHECK([whether compiler is llgo], 438[libgo_cv_c_goc_is_llgo], 439[libgo_cv_c_goc_is_llgo=no 440if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then 441 libgo_cv_c_goc_is_llgo=yes 442fi]) 443AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes) 444 445dnl Test for the -lm library. 446MATH_LIBS= 447AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm) 448AC_SUBST(MATH_LIBS) 449 450dnl Test for -lsocket and -lnsl. Copied from libjava/configure.ac. 451AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets, 452 [libgo_cv_lib_sockets= 453 libgo_check_both=no 454 AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes) 455 if test "$libgo_check_socket" = "yes"; then 456 unset ac_cv_func_connect 457 AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket", 458 libgo_check_both=yes) 459 fi 460 if test "$libgo_check_both" = "yes"; then 461 libgo_old_libs=$LIBS 462 LIBS="$LIBS -lsocket -lnsl" 463 unset ac_cv_func_accept 464 AC_CHECK_FUNC(accept, 465 [libgo_check_nsl=no 466 libgo_cv_lib_sockets="-lsocket -lnsl"]) 467 unset ac_cv_func_accept 468 LIBS=$libgo_old_libs 469 fi 470 unset ac_cv_func_gethostbyname 471 libgo_old_libs="$LIBS" 472 AC_CHECK_FUNC(gethostbyname, , 473 [AC_CHECK_LIB(nsl, main, 474 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])]) 475 unset ac_cv_func_gethostbyname 476 AC_CHECK_FUNC(sendfile, , 477 [AC_CHECK_LIB(sendfile, main, 478 [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])]) 479 LIBS=$libgo_old_libs 480]) 481NET_LIBS="$libgo_cv_lib_sockets" 482AC_SUBST(NET_LIBS) 483 484dnl Test whether the compiler supports the -pthread option. 485AC_CACHE_CHECK([whether -pthread is supported], 486[libgo_cv_lib_pthread], 487[CFLAGS_hold=$CFLAGS 488CFLAGS="$CFLAGS -pthread" 489AC_COMPILE_IFELSE([[int i;]], 490[libgo_cv_lib_pthread=yes], 491[libgo_cv_lib_pthread=no]) 492CFLAGS=$CFLAGS_hold]) 493PTHREAD_CFLAGS= 494if test "$libgo_cv_lib_pthread" = yes; then 495 PTHREAD_CFLAGS=-pthread 496fi 497AC_SUBST(PTHREAD_CFLAGS) 498 499dnl Test for the -lpthread library. 500PTHREAD_LIBS= 501AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread) 502AC_SUBST(PTHREAD_LIBS) 503 504dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime. 505AC_SEARCH_LIBS([sched_yield], [rt]) 506AC_SEARCH_LIBS([nanosleep], [rt]) 507AC_SEARCH_LIBS([clock_gettime], [rt]) 508 509AC_C_BIGENDIAN 510 511GCC_CHECK_UNWIND_GETIPINFO 512 513AC_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) 514 515AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [], 516[#ifdef HAVE_SYS_SOCKET_H 517#include <sys/socket.h> 518#endif 519]) 520 521AC_CACHE_CHECK([whether <ustat.h> can be used], 522[libgo_cv_c_ustat_h], 523[CFLAGS_hold=$CFLAGS 524CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS" 525AC_COMPILE_IFELSE( 526[AC_LANG_SOURCE([ 527#include <sys/types.h> 528#ifdef HAVE_LINUX_FILTER_H 529#include <linux/filter.h> 530#endif 531#include <ustat.h> 532])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no]) 533CFLAGS=$CFLAGS_hold]) 534if test $libgo_cv_c_ustat_h = yes; then 535 AC_DEFINE(HAVE_USTAT_H, 1, 536 [Define to 1 if you have the <ustat.h> header file and it works.]) 537fi 538 539AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes) 540 541AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr) 542AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes) 543AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes) 544 545AC_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) 546AC_TYPE_OFF_T 547AC_CHECK_TYPES([loff_t]) 548 549LIBS_hold="$LIBS" 550LIBS="$LIBS -lm" 551AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl) 552LIBS="$LIBS_hold" 553 554CFLAGS_hold="$CFLAGS" 555CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 556LIBS_hold="$LIBS" 557LIBS="$LIBS $PTHREAD_LIBS" 558AC_CHECK_FUNCS(sem_timedwait) 559CFLAGS="$CFLAGS_hold" 560LIBS="$LIBS_hold" 561 562LIBS_hold="$LIBS" 563LIBS="$LIBS $MATH_LIBS" 564AC_CHECK_FUNCS(matherr) 565LIBS="$LIBS_hold" 566 567AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4], 568[libgo_cv_func___sync_bool_compare_and_swap_4], 569[AC_LINK_IFELSE([ 570typedef unsigned int uint32 __attribute__ ((mode (SI))); 571uint32 i; 572int main() { return __sync_bool_compare_and_swap (&i, 0, 1); } 573], 574[libgo_cv_func___sync_bool_compare_and_swap_4=yes], 575[libgo_cv_func___sync_bool_compare_and_swap_4=no])]) 576if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then 577 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1, 578 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32]) 579fi 580 581AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8], 582[libgo_cv_func___sync_bool_compare_and_swap_8], 583[AC_LINK_IFELSE([ 584typedef unsigned int uint64 __attribute__ ((mode (DI))); 585uint64 i; 586int main() { return __sync_bool_compare_and_swap (&i, 0, 1); } 587], 588[libgo_cv_func___sync_bool_compare_and_swap_8=yes], 589[libgo_cv_func___sync_bool_compare_and_swap_8=no])]) 590if test "$libgo_cv_func___sync_bool_compare_and_swap_8" = "yes"; then 591 AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8, 1, 592 [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint64]) 593fi 594 595AC_CACHE_CHECK([for __sync_fetch_and_add_4], 596[libgo_cv_func___sync_fetch_and_add_4], 597[AC_LINK_IFELSE([ 598typedef unsigned int uint32 __attribute__ ((mode (SI))); 599uint32 i; 600int main() { return __sync_fetch_and_add (&i, 1); } 601], 602[libgo_cv_func___sync_fetch_and_add_4=yes], 603[libgo_cv_func___sync_fetch_and_add_4=no])]) 604if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then 605 AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1, 606 [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32]) 607fi 608 609AC_CACHE_CHECK([for __sync_add_and_fetch_8], 610[libgo_cv_func___sync_add_and_fetch_8], 611[AC_LINK_IFELSE([ 612typedef unsigned int uint64 __attribute__ ((mode (DI))); 613uint64 i; 614int main() { return __sync_add_and_fetch (&i, 1); } 615], 616[libgo_cv_func___sync_add_and_fetch_8=yes], 617[libgo_cv_func___sync_add_and_fetch_8=no])]) 618if test "$libgo_cv_func___sync_add_and_fetch_8" = "yes"; then 619 AC_DEFINE(HAVE_SYNC_ADD_AND_FETCH_8, 1, 620 [Define to 1 if the compiler provides the __sync_add_and_fetch function for uint64]) 621fi 622 623dnl For x86 we want to use the -minline-all-stringops option to avoid 624dnl forcing a stack split when calling memcpy and friends. 625AC_CACHE_CHECK([whether compiler supports -minline-all-stringops], 626[libgo_cv_c_stringops], 627[CFLAGS_hold=$CFLAGS 628CFLAGS="$CFLAGS -minline-all-stringops" 629AC_COMPILE_IFELSE([int i;], 630[libgo_cv_c_stringops=yes], 631[libgo_cv_c_stringops=no]) 632CFLAGS=$CFLAGS_hold]) 633STRINGOPS_FLAG= 634if test "$libgo_cv_c_stringops" = yes; then 635 STRINGOPS_FLAG=-minline-all-stringops 636fi 637AC_SUBST(STRINGOPS_FLAG) 638 639dnl For x86 we want to compile the math library with -mfancy-math-387 640dnl -funsafe-math-optimizations so that we can use the builtin 641dnl instructions directly. 642AC_CACHE_CHECK([whether compiler supports -mfancy-math-387], 643[libgo_cv_c_fancymath], 644[CFLAGS_hold=$CFLAGS 645CFLAGS="$CFLAGS -mfancy-math-387" 646AC_COMPILE_IFELSE([int i;], 647[libgo_cv_c_fancymath=yes], 648[libgo_cv_c_fancymath=no]) 649CFLAGS=$CFLAGS_hold]) 650MATH_FLAG= 651if test "$libgo_cv_c_fancymath" = yes; then 652 MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations" 653else 654 MATH_FLAG="-ffp-contract=off" 655fi 656AC_SUBST(MATH_FLAG) 657 658CFLAGS_hold=$CFLAGS 659CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" 660AC_CHECK_TYPES([off64_t]) 661CFLAGS=$CFLAGS_hold 662 663dnl Work out the size of the epoll_events struct on GNU/Linux. 664AC_CACHE_CHECK([epoll_event size], 665[libgo_cv_c_epoll_event_size], 666[AC_COMPUTE_INT(libgo_cv_c_epoll_event_size, 667[sizeof (struct epoll_event)], 668[#include <sys/epoll.h>], 669[libgo_cv_c_epoll_event_size=0])]) 670SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size} 671AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT) 672 673dnl Work out the offset of the fd field in the epoll_events struct on 674dnl GNU/Linux. 675AC_CACHE_CHECK([epoll_event data.fd offset], 676[libgo_cv_c_epoll_event_fd_offset], 677[AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset, 678[offsetof (struct epoll_event, data.fd)], 679[#include <stddef.h> 680#include <sys/epoll.h>], 681[libgo_cv_c_epoll_event_fd_offset=0])]) 682STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset} 683AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET) 684 685dnl Check if <sys/stat.h> uses timespec_t for st_?tim members. Introduced 686dnl in Solaris 12 for XPG7 compatibility. 687AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h], 688 [have_stat_timespec=yes], [have_stat_timespec=no]) 689AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes) 690 691dnl See if struct exception is defined in <math.h>. 692AC_CHECK_TYPE([struct exception], 693[libgo_has_struct_exception=yes], 694[libgo_has_struct_exception=no], 695[#include <math.h>]) 696if test "$libgo_has_struct_exception" = "yes"; then 697 AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1, 698 [Define to 1 if <math.h> defines struct exception]) 699fi 700 701dnl See whether setcontext changes the value of TLS variables. 702AC_CACHE_CHECK([whether setcontext clobbers TLS variables], 703[libgo_cv_lib_setcontext_clobbers_tls], 704[CFLAGS_hold="$CFLAGS" 705CFLAGS="$PTHREAD_CFLAGS" 706LIBS_hold="$LIBS" 707LIBS="$LIBS $PTHREAD_LIBS" 708AC_CHECK_SIZEOF([void *]) 709AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8]) 710AC_RUN_IFELSE( 711 [AC_LANG_SOURCE([ 712#include <pthread.h> 713#include <stdlib.h> 714#include <ucontext.h> 715#include <unistd.h> 716 717__thread int tls; 718 719static char stack[[10 * 1024 * 1024]]; 720static ucontext_t c; 721 722/* Called via makecontext/setcontext. */ 723 724static void 725cfn (void) 726{ 727 exit (tls); 728} 729 730/* Called via pthread_create. */ 731 732static void * 733tfn (void *dummy) 734{ 735 /* The thread should still see this value after calling 736 setcontext. */ 737 tls = 0; 738 739 setcontext (&c); 740 741 /* The call to setcontext should not return. */ 742 abort (); 743} 744 745int 746main () 747{ 748 pthread_t tid; 749 750 /* The thread should not see this value. */ 751 tls = 1; 752 753 if (getcontext (&c) < 0) 754 abort (); 755 756 c.uc_stack.ss_sp = stack; 757#ifdef MAKECONTEXT_STACK_TOP 758 c.uc_stack.ss_sp += sizeof stack; 759#endif 760 c.uc_stack.ss_flags = 0; 761 c.uc_stack.ss_size = sizeof stack; 762 c.uc_link = NULL; 763 makecontext (&c, cfn, 0); 764 765 if (pthread_create (&tid, NULL, tfn, NULL) != 0) 766 abort (); 767 768 if (pthread_join (tid, NULL) != 0) 769 abort (); 770 771 /* The thread should have called exit. */ 772 abort (); 773} 774])], 775[libgo_cv_lib_setcontext_clobbers_tls=no], 776[libgo_cv_lib_setcontext_clobbers_tls=yes], 777[case "$target:$ptr_type_size" in 778 i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64) 779 libgo_cv_lib_setcontext_clobbers_tls=yes ;; 780 *) 781 libgo_cv_lib_setcontext_clobbers_tls=no ;; 782 esac 783]) 784CFLAGS="$CFLAGS_hold" 785LIBS="$LIBS_hold" 786]) 787if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then 788 AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1, 789 [Define if setcontext clobbers TLS variables]) 790fi 791 792AC_CACHE_CHECK([whether .eh_frame section should be read-only], 793libgo_cv_ro_eh_frame, [ 794libgo_cv_ro_eh_frame=no 795echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c 796if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then 797 if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then 798 libgo_cv_ro_eh_frame=yes 799 elif grep '.section.*eh_frame.*#alloc' conftest.c \ 800 | grep -v '#write' > /dev/null; then 801 libgo_cv_ro_eh_frame=yes 802 fi 803fi 804rm -f conftest.* 805]) 806if test "x$libgo_cv_ro_eh_frame" = xyes; then 807 AC_DEFINE(EH_FRAME_FLAGS, "a", 808 [Define to the flags needed for the .section .eh_frame directive.]) 809else 810 AC_DEFINE(EH_FRAME_FLAGS, "aw", 811 [Define to the flags needed for the .section .eh_frame directive.]) 812fi 813 814AC_CACHE_CHECK([if compiler supports -Qunused-arguments], 815[libgo_cv_c_unused_arguments], 816[CFLAGS_hold=$CFLAGS 817CFLAGS="$CFLAGS -Qunused-arguments" 818AC_COMPILE_IFELSE([[int i;]], 819[libgo_cv_c_unused_arguments=yes], 820[libgo_cv_c_unused_arguments=no]) 821CFLAGS=$CFLAGS_hold]) 822 823AC_CACHE_CHECK([if assembler supports GNU comdat group syntax], 824libgo_cv_as_comdat_gnu, [ 825echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s 826CFLAGS_hold=$CFLAGS 827if test "$libgo_cv_c_unused_arguments" = yes; then 828 CFLAGS="$CFLAGS -Qunused-arguments" 829fi 830if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then 831 libgo_cv_as_comdat_gnu=yes 832else 833 libgo_cv_as_comdat_gnu=no 834fi 835CFLAGS=$CFLAGS_hold 836]) 837if test "x$libgo_cv_as_comdat_gnu" = xyes; then 838 AC_DEFINE(HAVE_AS_COMDAT_GAS, 1, 839 [Define if your assembler supports GNU comdat group syntax.]) 840fi 841 842AC_CACHE_CHECK([assembler supports pc related relocs], 843libgo_cv_as_x86_pcrel, [ 844libgo_cv_as_x86_pcrel=yes 845echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s 846CFLAGS_hold=$CFLAGS 847if test "$libgo_cv_c_unused_arguments" = yes; then 848 CFLAGS="$CFLAGS -Qunused-arguments" 849fi 850if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then 851 libgo_cv_as_x86_pcrel=no 852fi 853CFLAGS=$CFLAGS_hold 854]) 855if test "x$libgo_cv_as_x86_pcrel" = xyes; then 856 AC_DEFINE(HAVE_AS_X86_PCREL, 1, 857 [Define if your assembler supports PC relative relocs.]) 858fi 859 860AC_CACHE_CHECK([assembler supports unwind section type], 861libgo_cv_as_x86_64_unwind_section_type, [ 862libgo_cv_as_x86_64_unwind_section_type=yes 863echo '.section .eh_frame,"a",@unwind' > conftest.s 864CFLAGS_hold=$CFLAGS 865if test "$libgo_cv_c_unused_arguments" = yes; then 866 CFLAGS="$CFLAGS -Qunused-arguments" 867fi 868if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then 869 libgo_cv_as_x86_64_unwind_section_type=no 870fi 871CFLAGS=$CFLAGS_hold 872]) 873if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then 874 AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1, 875 [Define if your assembler supports unwind section type.]) 876fi 877 878AC_CACHE_SAVE 879 880if test ${multilib} = yes; then 881 multilib_arg="--enable-multilib" 882else 883 multilib_arg= 884fi 885 886AC_CONFIG_FILES(Makefile testsuite/Makefile) 887 888AC_CONFIG_COMMANDS([default], 889[if test -n "$CONFIG_FILES"; then 890 # Multilibs need MULTISUBDIR defined correctly in certain makefiles so 891 # that multilib installs will end up installed in the correct place. 892 # The testsuite needs it for multilib-aware ABI baseline files. 893 # To work around this not being passed down from config-ml.in -> 894 # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually 895 # append it here. Only modify Makefiles that have just been created. 896 # 897 # Also, get rid of this simulated-VPATH thing that automake does. 898 cat > vpsed << \_EOF 899s!`test -f '$<' || echo '$(srcdir)/'`!! 900_EOF 901 for i in $SUBDIRS; do 902 case $CONFIG_FILES in 903 *${i}/Makefile*) 904 #echo "Adding MULTISUBDIR to $i/Makefile" 905 sed -f vpsed $i/Makefile > tmp 906 grep '^MULTISUBDIR =' Makefile >> tmp 907 mv tmp $i/Makefile 908 ;; 909 esac 910 done 911 rm vpsed 912 fi 913], 914[ 915# Variables needed in config.status (file generation) which aren't already 916# passed by autoconf. 917SUBDIRS="$SUBDIRS" 918]) 919 920AC_OUTPUT 921