1 # configure.ac -- Go library configure script.
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.
7 # Process this file with autoreconf to produce configure.
10 AC_INIT(package-unused, version-unused,, libgo)
11 AC_CONFIG_SRCDIR(Makefile.am)
12 AC_CONFIG_HEADER(config.h)
15 AC_SUBST(libtool_VERSION)
17 AM_ENABLE_MULTILIB(, ..)
20 target_alias=${target_alias-$host_alias}
22 AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dist -Wall -Wno-portability])
23 AH_TEMPLATE(PACKAGE, [Name of package])
24 AH_TEMPLATE(VERSION, [Version number of package])
26 m4_rename([_AC_ARG_VAR_PRECIOUS],[glibgo_PRECIOUS])
27 m4_define([_AC_ARG_VAR_PRECIOUS],[])
30 m4_rename_force([glibgo_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
38 AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy)
42 AC_SUBST(enable_shared)
43 AC_SUBST(enable_static)
45 CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
46 AC_SUBST(CC_FOR_BUILD)
50 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
53 AC_ARG_ENABLE(werror, [AS_HELP_STRING([--enable-werror],
54 [turns on -Werror @<:@default=yes@:>@])])
55 if test "x$enable_werror" != "xno"; then
61 glibgo_toolexeclibdir=no
63 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
64 AC_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]),
68 yes) version_specific_libs=yes ;;
69 no) version_specific_libs=no ;;
70 *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
72 [version_specific_libs=no])
73 AC_MSG_RESULT($version_specific_libs)
75 # Version-specific runtime libs processing.
76 if test $version_specific_libs = yes; then
77 glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
78 glibgo_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
81 # Calculate glibgo_toolexecdir, glibgo_toolexeclibdir
82 # Install a library built with a cross compiler in tooldir, not libdir.
83 if 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'
88 nover_glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
89 nover_glibgo_toolexeclibdir='${libdir}'
91 multi_os_directory=`$GOC -print-multi-os-directory`
92 case $multi_os_directory in
93 .) ;; # Avoid trailing /.
94 *) nover_glibgo_toolexeclibdir=${nover_glibgo_toolexeclibdir}/${multi_os_directory} ;;
97 if test x"$glibgo_toolexecdir" = x"no"; then
98 glibgo_toolexecdir="${nover_glibgo_toolexecdir}"
99 glibgo_toolexeclibdir="${nover_glibgo_toolexeclibdir}"
102 AC_SUBST(glibgo_toolexecdir)
103 AC_SUBST(glibgo_toolexeclibdir)
104 AC_SUBST(nover_glibgo_toolexeclibdir)
106 # See if the user wants to configure without libffi. Some
107 # architectures don't support it. FIXME: We should set a default
110 AS_HELP_STRING([--without-libffi],
113 [with_libffi=${with_libffi_default-yes}])
117 if 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'
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.
128 AC_ARG_WITH(libatomic,
129 AS_HELP_STRING([--without-libatomic],
130 [don't use libatomic]),
132 [with_libatomic=${with_libatomic_default-yes}])
135 if test "$with_libatomic" != no; then
136 LIBATOMIC=../libatomic/libatomic_convenience.la
140 # Used to tell GNU make to include a file without telling automake to
142 go_include="-include"
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 ;;
166 AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
167 AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
168 AM_CONDITIONAL(LIBGO_IS_IRIX, test $is_irix = yes)
169 AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes)
170 AM_CONDITIONAL(LIBGO_IS_NETBSD, test $is_netbsd = yes)
171 AM_CONDITIONAL(LIBGO_IS_OPENBSD, test $is_openbsd = yes)
172 AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test $is_dragonfly = yes)
173 AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
174 AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
177 dnl Test whether we need to use DejaGNU or whether we can use the
178 dnl simpler gotest approach. We can only use gotest for a native
182 *-*-rtems*) USE_DEJAGNU=yes ;;
184 *) USE_DEJAGNU=yes ;;
186 AC_SUBST(USE_DEJAGNU)
188 dnl N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch).
213 arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
218 i[34567]86-*-* | x86_64-*-*)
224 [is_386=yes], [is_x86_64=yes])
225 if test "$is_386" = "yes"; then
237 #if _MIPS_SIM != _ABIO32
242 #if _MIPS_SIM != _ABIN32
247 #if _MIPS_SIM != _ABI64
252 #if _MIPS_SIM != _ABIO64
256 [AC_MSG_ERROR([unknown MIPS ABI])
257 [mips_abi="n32"]])])])])
259 "o32") GOARCH=mipso32 ;;
260 "n32") GOARCH=mipsn32 ;;
261 "n64") GOARCH=mipsn64 ;;
262 "o64") GOARCH=mipso64 ;;
265 rs6000*-*-* | powerpc*-*-*)
272 #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
275 [is_ppc64le=yes],[is_ppc64=yes])])
276 if test "$is_ppc" = "yes"; then
278 elif test "$is_ppc64" = "yes"; then
286 #if defined(__s390x__)
289 [is_s390=yes], [is_s390x=yes])
290 if test "$is_s390" = "yes"; then
298 #if defined(__sparcv9) || defined(__arch64__)
301 [is_sparc=yes], [is_sparc64=yes])
302 if test "$is_sparc" = "yes"; then
309 AM_CONDITIONAL(LIBGO_IS_386, test $is_386 = yes)
310 AM_CONDITIONAL(LIBGO_IS_ALPHA, test $is_alpha = yes)
311 AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes)
312 AM_CONDITIONAL(LIBGO_IS_ARM64, test $is_arm64 = yes)
313 AM_CONDITIONAL(LIBGO_IS_M68K, test $is_m68k = yes)
314 AM_CONDITIONAL(LIBGO_IS_MIPS, test $mips_abi != unknown)
315 AM_CONDITIONAL(LIBGO_IS_MIPSO32, test $mips_abi = o32)
316 AM_CONDITIONAL(LIBGO_IS_MIPSN32, test $mips_abi = n32)
317 AM_CONDITIONAL(LIBGO_IS_MIPSN64, test $mips_abi = n64)
318 AM_CONDITIONAL(LIBGO_IS_MIPSO64, test $mips_abi = o64)
319 AM_CONDITIONAL(LIBGO_IS_MIPS64, test $mips_abi = n64 -o $mips_abi = o64)
320 AM_CONDITIONAL(LIBGO_IS_PPC, test $is_ppc = yes)
321 AM_CONDITIONAL(LIBGO_IS_PPC64, test $is_ppc64 = yes)
322 AM_CONDITIONAL(LIBGO_IS_PPC64LE, test $is_ppc64le = yes)
323 AM_CONDITIONAL(LIBGO_IS_S390, test $is_s390 = yes)
324 AM_CONDITIONAL(LIBGO_IS_S390X, test $is_s390x = yes)
325 AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes)
326 AM_CONDITIONAL(LIBGO_IS_SPARC64, test $is_sparc64 = yes)
327 AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes)
330 dnl Some files are only present when needed for specific architectures.
332 GO_LIBCALL_OS_ARCH_FILE=
334 GO_SYSCALL_OS_ARCH_FILE=
335 if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then
336 GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go"
338 if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then
339 GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go"
341 if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then
342 GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go"
344 if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then
345 GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go"
347 AC_SUBST(GO_LIBCALL_OS_FILE)
348 AC_SUBST(GO_LIBCALL_OS_ARCH_FILE)
349 AC_SUBST(GO_SYSCALL_OS_FILE)
350 AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
352 dnl Special flags used to generate sysinfo.go.
353 OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
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"
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__"
369 dnl Use -fsplit-stack when compiling C code if available.
370 AC_CACHE_CHECK([whether -fsplit-stack is supported],
371 [libgo_cv_c_split_stack_supported],
373 CFLAGS="$CFLAGS -fsplit-stack"
374 AC_COMPILE_IFELSE([[int i;]],
375 [libgo_cv_c_split_stack_supported=yes],
376 [libgo_cv_c_split_stack_supported=no])
377 CFLAGS=$CFLAGS_hold])
379 dnl Make sure the linker permits -fsplit-stack. Old versions of gold will
380 dnl reject split-stack code calling non-split-stack code on targets
381 dnl they don't support.
382 AC_CACHE_CHECK([whether linker supports split/non-split linked together],
383 [libgo_cv_c_linker_split_non_split],
384 [cat > conftest1.c << EOF
386 int main() { f(); return 0; }
388 cat > conftest2.c << EOF
391 $CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c
392 $CC -c $CFLAGS $CPPFLAGS conftest2.c
393 if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext; then
394 libgo_cv_c_linker_split_non_split=yes
396 libgo_cv_c_linker_split_non_split=no
398 rm -f conftest1.* conftest2.* conftest])
400 if 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])
407 AC_SUBST(SPLIT_STACK)
408 AM_CONDITIONAL(USING_SPLIT_STACK,
409 test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
411 dnl If the compiler supports split-stack but the linker does not, then
412 dnl we need to explicitly disable split-stack for Go.
413 if 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
418 AC_SUBST(GO_SPLIT_STACK)
420 dnl Check whether the linker does stack munging when calling from
421 dnl split-stack into non-split-stack code. We check this by looking
422 dnl at the --help output. FIXME: This is only half right: it's
423 dnl possible for the linker to support this for some targets but not
425 dnl This is slightly different from the above check, which is whether
426 dnl the linker permits the call at all.
427 AC_CACHE_CHECK([whether linker supports split stack],
428 [libgo_cv_c_linker_supports_split_stack],
429 [libgo_cv_c_linker_supports_split_stack=no
430 if $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
433 if 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])
438 AC_CACHE_CHECK([whether compiler is llgo],
439 [libgo_cv_c_goc_is_llgo],
440 [libgo_cv_c_goc_is_llgo=no
441 if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then
442 libgo_cv_c_goc_is_llgo=yes
444 AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes)
446 dnl Test for the -lm library.
448 AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
451 dnl Test for -lsocket and -lnsl. Copied from libjava/configure.ac.
452 AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
453 [libgo_cv_lib_sockets=
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)
461 if test "$libgo_check_both" = "yes"; then
463 LIBS="$LIBS -lsocket -lnsl"
464 unset ac_cv_func_accept
465 AC_CHECK_FUNC(accept,
467 libgo_cv_lib_sockets="-lsocket -lnsl"])
468 unset ac_cv_func_accept
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"])])
482 NET_LIBS="$libgo_cv_lib_sockets"
485 dnl Test whether the compiler supports the -pthread option.
486 AC_CACHE_CHECK([whether -pthread is supported],
487 [libgo_cv_lib_pthread],
489 CFLAGS="$CFLAGS -pthread"
490 AC_COMPILE_IFELSE([[int i;]],
491 [libgo_cv_lib_pthread=yes],
492 [libgo_cv_lib_pthread=no])
493 CFLAGS=$CFLAGS_hold])
495 if test "$libgo_cv_lib_pthread" = yes; then
496 PTHREAD_CFLAGS=-pthread
498 AC_SUBST(PTHREAD_CFLAGS)
500 dnl Test for the -lpthread library.
502 AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
503 AC_SUBST(PTHREAD_LIBS)
505 dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
506 AC_SEARCH_LIBS([sched_yield], [rt])
507 AC_SEARCH_LIBS([nanosleep], [rt])
508 AC_SEARCH_LIBS([clock_gettime], [rt])
512 GCC_CHECK_UNWIND_GETIPINFO
514 AC_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)
516 AC_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>
522 AC_CACHE_CHECK([whether <ustat.h> can be used],
523 [libgo_cv_c_ustat_h],
525 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS"
528 #include <sys/types.h>
529 #ifdef HAVE_LINUX_FILTER_H
530 #include <linux/filter.h>
533 ])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no])
534 CFLAGS=$CFLAGS_hold])
535 if 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.])
540 AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
542 AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr)
543 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
544 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
546 AC_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)
548 AC_CHECK_TYPES([loff_t])
552 AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
555 CFLAGS_hold="$CFLAGS"
556 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
558 LIBS="$LIBS $PTHREAD_LIBS"
559 AC_CHECK_FUNCS(sem_timedwait)
560 CFLAGS="$CFLAGS_hold"
564 LIBS="$LIBS $MATH_LIBS"
565 AC_CHECK_FUNCS(matherr)
568 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4],
569 [libgo_cv_func___sync_bool_compare_and_swap_4],
571 typedef unsigned int uint32 __attribute__ ((mode (SI)));
573 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
575 [libgo_cv_func___sync_bool_compare_and_swap_4=yes],
576 [libgo_cv_func___sync_bool_compare_and_swap_4=no])])
577 if 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])
582 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8],
583 [libgo_cv_func___sync_bool_compare_and_swap_8],
585 typedef unsigned int uint64 __attribute__ ((mode (DI)));
587 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
589 [libgo_cv_func___sync_bool_compare_and_swap_8=yes],
590 [libgo_cv_func___sync_bool_compare_and_swap_8=no])])
591 if 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])
596 AC_CACHE_CHECK([for __sync_fetch_and_add_4],
597 [libgo_cv_func___sync_fetch_and_add_4],
599 typedef unsigned int uint32 __attribute__ ((mode (SI)));
601 int main() { return __sync_fetch_and_add (&i, 1); }
603 [libgo_cv_func___sync_fetch_and_add_4=yes],
604 [libgo_cv_func___sync_fetch_and_add_4=no])])
605 if 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])
610 AC_CACHE_CHECK([for __sync_add_and_fetch_8],
611 [libgo_cv_func___sync_add_and_fetch_8],
613 typedef unsigned int uint64 __attribute__ ((mode (DI)));
615 int main() { return __sync_add_and_fetch (&i, 1); }
617 [libgo_cv_func___sync_add_and_fetch_8=yes],
618 [libgo_cv_func___sync_add_and_fetch_8=no])])
619 if 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])
624 dnl For x86 we want to use the -minline-all-stringops option to avoid
625 dnl forcing a stack split when calling memcpy and friends.
626 AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
627 [libgo_cv_c_stringops],
629 CFLAGS="$CFLAGS -minline-all-stringops"
630 AC_COMPILE_IFELSE([int i;],
631 [libgo_cv_c_stringops=yes],
632 [libgo_cv_c_stringops=no])
633 CFLAGS=$CFLAGS_hold])
635 if test "$libgo_cv_c_stringops" = yes; then
636 STRINGOPS_FLAG=-minline-all-stringops
638 AC_SUBST(STRINGOPS_FLAG)
640 dnl For x86 we want to compile the math library with -mfancy-math-387
641 dnl -funsafe-math-optimizations so that we can use the builtin
642 dnl instructions directly.
643 AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
644 [libgo_cv_c_fancymath],
646 CFLAGS="$CFLAGS -mfancy-math-387"
647 AC_COMPILE_IFELSE([int i;],
648 [libgo_cv_c_fancymath=yes],
649 [libgo_cv_c_fancymath=no])
650 CFLAGS=$CFLAGS_hold])
652 if test "$libgo_cv_c_fancymath" = yes; then
653 MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations"
655 MATH_FLAG="-ffp-contract=off"
660 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
661 AC_CHECK_TYPES([off64_t])
664 dnl Work out the size of the epoll_events struct on GNU/Linux.
665 AC_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])])
671 SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
672 AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
674 dnl Work out the offset of the fd field in the epoll_events struct on
676 AC_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)],
681 #include <sys/epoll.h>],
682 [libgo_cv_c_epoll_event_fd_offset=0])])
683 STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
684 AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
686 dnl Check if <sys/stat.h> uses timespec_t for st_?tim members. Introduced
687 dnl in Solaris 12 for XPG7 compatibility.
688 AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
689 [have_stat_timespec=yes], [have_stat_timespec=no])
690 AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
692 dnl See if struct exception is defined in <math.h>.
693 AC_CHECK_TYPE([struct exception],
694 [libgo_has_struct_exception=yes],
695 [libgo_has_struct_exception=no],
697 if test "$libgo_has_struct_exception" = "yes"; then
698 AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
699 [Define to 1 if <math.h> defines struct exception])
702 dnl See whether setcontext changes the value of TLS variables.
703 AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
704 [libgo_cv_lib_setcontext_clobbers_tls],
705 [CFLAGS_hold="$CFLAGS"
706 CFLAGS="$PTHREAD_CFLAGS"
708 LIBS="$LIBS $PTHREAD_LIBS"
709 AC_CHECK_SIZEOF([void *])
710 AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
715 #include <ucontext.h>
720 static char stack[[10 * 1024 * 1024]];
723 /* Called via makecontext/setcontext. */
731 /* Called via pthread_create. */
736 /* The thread should still see this value after calling
742 /* The call to setcontext should not return. */
751 /* The thread should not see this value. */
754 if (getcontext (&c) < 0)
757 c.uc_stack.ss_sp = stack;
758 #ifdef MAKECONTEXT_STACK_TOP
759 c.uc_stack.ss_sp += sizeof stack;
761 c.uc_stack.ss_flags = 0;
762 c.uc_stack.ss_size = sizeof stack;
764 makecontext (&c, cfn, 0);
766 if (pthread_create (&tid, NULL, tfn, NULL) != 0)
769 if (pthread_join (tid, NULL) != 0)
772 /* The thread should have called exit. */
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 ;;
782 libgo_cv_lib_setcontext_clobbers_tls=no ;;
785 CFLAGS="$CFLAGS_hold"
788 if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
789 AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
790 [Define if setcontext clobbers TLS variables])
793 AC_CACHE_CHECK([whether .eh_frame section should be read-only],
794 libgo_cv_ro_eh_frame, [
795 libgo_cv_ro_eh_frame=no
796 echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
797 if $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
807 if 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.])
811 AC_DEFINE(EH_FRAME_FLAGS, "aw",
812 [Define to the flags needed for the .section .eh_frame directive.])
815 AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
816 [libgo_cv_c_unused_arguments],
818 CFLAGS="$CFLAGS -Qunused-arguments"
819 AC_COMPILE_IFELSE([[int i;]],
820 [libgo_cv_c_unused_arguments=yes],
821 [libgo_cv_c_unused_arguments=no])
822 CFLAGS=$CFLAGS_hold])
824 AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
825 libgo_cv_as_comdat_gnu, [
826 echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
828 if test "$libgo_cv_c_unused_arguments" = yes; then
829 CFLAGS="$CFLAGS -Qunused-arguments"
831 if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
832 libgo_cv_as_comdat_gnu=yes
834 libgo_cv_as_comdat_gnu=no
838 if 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.])
843 AC_CACHE_CHECK([assembler supports pc related relocs],
844 libgo_cv_as_x86_pcrel, [
845 libgo_cv_as_x86_pcrel=yes
846 echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
848 if test "$libgo_cv_c_unused_arguments" = yes; then
849 CFLAGS="$CFLAGS -Qunused-arguments"
851 if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
852 libgo_cv_as_x86_pcrel=no
856 if 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.])
861 AC_CACHE_CHECK([assembler supports unwind section type],
862 libgo_cv_as_x86_64_unwind_section_type, [
863 libgo_cv_as_x86_64_unwind_section_type=yes
864 echo '.section .eh_frame,"a",@unwind' > conftest.s
866 if test "$libgo_cv_c_unused_arguments" = yes; then
867 CFLAGS="$CFLAGS -Qunused-arguments"
869 if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
870 libgo_cv_as_x86_64_unwind_section_type=no
874 if 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.])
881 if test ${multilib} = yes; then
882 multilib_arg="--enable-multilib"
887 AC_CONFIG_FILES(Makefile testsuite/Makefile)
889 AC_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.
898 # Also, get rid of this simulated-VPATH thing that automake does.
900 s!`test -f '$<' || echo '$(srcdir)/'`!!
902 for i in $SUBDIRS; do
903 case $CONFIG_FILES in
905 #echo "Adding MULTISUBDIR to $i/Makefile"
906 sed -f vpsed $i/Makefile > tmp
907 grep '^MULTISUBDIR =' Makefile >> tmp
916 # Variables needed in config.status (file generation) which aren't already
917 # passed by autoconf.