libgo: add aix build tags
[official-gcc.git] / libgo / configure.ac
blob9a9da38d605783f73f77787f07e3894d53f0608f
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.
9 AC_PREREQ(2.64)
10 AC_INIT(package-unused, version-unused,, libgo)
11 AC_CONFIG_SRCDIR(Makefile.am)
12 AC_CONFIG_HEADER(config.h)
14 libtool_VERSION=13:0:0
15 AC_SUBST(libtool_VERSION)
17 AM_ENABLE_MULTILIB(, ..)
19 AC_CANONICAL_SYSTEM
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],[])
28 AC_PROG_CC
29 AC_PROG_GO
30 m4_rename_force([glibgo_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
32 AC_SUBST(CFLAGS)
34 case ${host} in
35   *-*-aix*)
36     # static hash tables crashes on AIX when libgo is built with O2
37     CFLAGS="$CFLAGS -fno-section-anchors"
38     GOCFLAGS="$GOCFLAGS -fno-section-anchors"
39     ;;
40 esac
42 AM_MAINTAINER_MODE
44 AC_PROG_LD
45 AC_PROG_RANLIB
46 AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy)
48 AC_LIBTOOL_DLOPEN
49 AM_PROG_LIBTOOL
50 AC_SUBST(enable_shared)
51 AC_SUBST(enable_static)
53 CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
54 AC_SUBST(CC_FOR_BUILD)
56 AC_PROG_AWK
58 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
59 AC_SUBST(WARN_FLAGS)
61 AC_ARG_ENABLE(werror, [AS_HELP_STRING([--enable-werror],
62                                       [turns on -Werror @<:@default=yes@:>@])])
63 if test "x$enable_werror" != "xno"; then
64   WERROR="-Werror"
66 AC_SUBST(WERROR)
68 glibgo_toolexecdir=no
69 glibgo_toolexeclibdir=no
71 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
72 AC_ARG_ENABLE([version-specific-runtime-libs],
73   AC_HELP_STRING([--enable-version-specific-runtime-libs],
74                  [Specify that runtime libraries should be installed in a compiler-specific directory]),
75   [case "$enableval" in
76     yes) version_specific_libs=yes ;;
77     no)  version_specific_libs=no ;;
78     *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
79    esac],
80   [version_specific_libs=no])
81 AC_MSG_RESULT($version_specific_libs)
83 # Version-specific runtime libs processing.
84 if test $version_specific_libs = yes; then
85   glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
86   glibgo_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
89 # Calculate glibgo_toolexecdir, glibgo_toolexeclibdir
90 # Install a library built with a cross compiler in tooldir, not libdir.
91 if test -n "$with_cross_host" &&
92    test x"$with_cross_host" != x"no"; then
93   nover_glibgo_toolexecdir='${exec_prefix}/${host_alias}'
94   nover_glibgo_toolexeclibdir='${toolexecdir}/lib'
95 else
96   nover_glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
97   nover_glibgo_toolexeclibdir='${libdir}'
99 multi_os_directory=`$GOC -print-multi-os-directory`
100 case $multi_os_directory in
101   .) ;; # Avoid trailing /.
102   *) nover_glibgo_toolexeclibdir=${nover_glibgo_toolexeclibdir}/${multi_os_directory} ;;
103 esac
105 if test x"$glibgo_toolexecdir" = x"no"; then
106   glibgo_toolexecdir="${nover_glibgo_toolexecdir}"
107   glibgo_toolexeclibdir="${nover_glibgo_toolexeclibdir}"
110 AC_SUBST(glibgo_toolexecdir)
111 AC_SUBST(glibgo_toolexeclibdir)
112 AC_SUBST(nover_glibgo_toolexeclibdir)
114 # See if the user wants to configure without libffi.  Some
115 # architectures don't support it.  FIXME: We should set a default
116 # based on the host.
117 AC_ARG_WITH(libffi,
118   AS_HELP_STRING([--without-libffi],
119                  [don't use libffi]),
120   [:],
121   [with_libffi=${with_libffi_default-yes}])
123 LIBFFI=
124 LIBFFIINCS=
125 if test "$with_libffi" != no; then
126    AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
127    LIBFFI=../libffi/libffi_convenience.la
128    LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
130 AC_SUBST(LIBFFI)
131 AC_SUBST(LIBFFIINCS)
132 AM_CONDITIONAL(USE_LIBFFI, test "$with_liffi" != "no")
134 # See if the user wants to configure without libatomic. This is useful if we are
135 # on an architecture for which libgo does not need an atomic support library and
136 # libatomic does not support our C compiler.
137 AC_ARG_WITH(libatomic,
138   AS_HELP_STRING([--without-libatomic],
139                  [don't use libatomic]),
140   [:],
141   [with_libatomic=${with_libatomic_default-yes}])
143 LIBATOMIC=
144 if test "$with_libatomic" != no; then
145    LIBATOMIC=../libatomic/libatomic_convenience.la
147 AC_SUBST(LIBATOMIC)
149 # Used to tell GNU make to include a file without telling automake to
150 # include it.
151 go_include="-include"
152 AC_SUBST(go_include)
154 # All known GOOS values.  This is the union of all operating systems
155 # supported by the gofrontend and all operating systems supported by
156 # the gc toolchain.
157 ALLGOOS="aix android darwin dragonfly freebsd irix linux netbsd openbsd plan9 rtems solaris windows"
159 is_darwin=no
160 is_freebsd=no
161 is_irix=no
162 is_linux=no
163 is_netbsd=no
164 is_openbsd=no
165 is_dragonfly=no
166 is_rtems=no
167 is_solaris=no
168 is_aix=no
169 GOOS=unknown
170 case ${host} in
171   *-*-darwin*)   is_darwin=yes;  GOOS=darwin ;;
172   *-*-freebsd*)  is_freebsd=yes; GOOS=freebsd ;;
173   *-*-irix6*)    is_irix=yes;    GOOS=irix ;;
174   *-*-linux*)    is_linux=yes;   GOOS=linux ;;
175   *-*-netbsd*)   is_netbsd=yes;  GOOS=netbsd ;;
176   *-*-openbsd*)  is_openbsd=yes; GOOS=openbsd ;;
177   *-*-dragonfly*) is_dragonfly=yes; GOOS=dragonfly ;;
178   *-*-rtems*)    is_rtems=yes;   GOOS=rtems ;;
179   *-*-solaris2*) is_solaris=yes; GOOS=solaris ;;
180   *-*-aix*)      is_aix=yes;     GOOS=aix ;;
181 esac
182 AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
183 AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
184 AM_CONDITIONAL(LIBGO_IS_IRIX, test $is_irix = yes)
185 AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes)
186 AM_CONDITIONAL(LIBGO_IS_NETBSD, test $is_netbsd = yes)
187 AM_CONDITIONAL(LIBGO_IS_OPENBSD, test $is_openbsd = yes)
188 AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test $is_dragonfly = yes)
189 AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
190 AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
191 AM_CONDITIONAL(LIBGO_IS_AIX, test $is_aix = yes)
192 AM_CONDITIONAL(LIBGO_IS_BSD, test $is_darwin = yes -o $is_dragonfly = yes -o $is_freebsd = yes -o $is_netbsd = yes -o $is_openbsd = yes)
193 AC_SUBST(GOOS)
194 AC_SUBST(ALLGOOS)
196 dnl Test whether we need to use DejaGNU or whether we can use the
197 dnl simpler gotest approach.  We can only use gotest for a native
198 dnl build.
199 USE_DEJAGNU=no
200 case ${host} in
201   *-*-rtems*) USE_DEJAGNU=yes ;;
202   ${build}) ;;
203   *) USE_DEJAGNU=yes ;;
204 esac
205 AC_SUBST(USE_DEJAGNU)
207 # All known GOARCH values.  This is the union of all architectures
208 # supported by the gofrontend and all architectures supported by the
209 # gc toolchain.
210 # N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch).
211 ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mips mipsle mips64 mips64le mips64p32 mips64p32le ppc ppc64 ppc64le s390 s390x sparc sparc64"
213 # All known GOARCH_FAMILY values.
214 ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SPARC SPARC64"
216 GOARCH=unknown
217 GOARCH_FAMILY=unknown
218 GOARCH_BIGENDIAN=false
219 GOARCH_CACHELINESIZE=64
220 GOARCH_PHYSPAGESIZE=4096
221 GOARCH_PCQUANTUM=1
222 GOARCH_INT64ALIGN=8
223 GOARCH_HUGEPAGESIZE=0
224 GOARCH_MINFRAMESIZE=0
225 case ${host} in
226   alpha*-*-*)
227     GOARCH=alpha
228     GOARCH_FAMILY=ALPHA
229     GOARCH_PHYSPAGESIZE=8192
230     GOARCH_PCQUANTUM=4
231     ;;
232   aarch64-*-*)
233     GOARCH=arm64
234     GOARCH_FAMILY=ARM64
235     GOARCH_CACHELINESIZE=32
236     GOARCH_PHYSPAGESIZE=65536
237     GOARCH_PCQUANTUM=4
238     GOARCH_MINFRAMESIZE=8
239     ;;
240   arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
241     GOARCH=arm
242     GOARCH_FAMILY=ARM
243     GOARCH_CACHELINESIZE=32
244     GOARCH_PCQUANTUM=4
245     GOARCH_MINFRAMESIZE=4
246     case ${host} in
247       arm*b*-*-*)
248         GOARCH=armbe
249         GOARCH_BIGENDIAN=true
250         ;;
251     esac
252     ;;
253 changequote(,)dnl
254   i[34567]86-*-* | x86_64-*-*)
255 changequote([,])dnl
256     AC_COMPILE_IFELSE([
257 #ifdef __x86_64__
258 #error 64-bit
259 #endif],
260 [GOARCH=386
261 GOARCH_FAMILY=I386
262 GOARCH_INT64ALIGN=4
263 GOARCH_HUGEPAGESIZE="1 << 21"
265 [GOARCH=amd64
266 GOARCH_FAMILY=AMD64
267 GOARCH_HUGEPAGESIZE="1 << 21"
269     ;;
270   ia64-*-*)
271     GOARCH=ia64
272     GOARCH_FAMILY=IA64
273     GOARCH_CACHELINESIZE=128
274     GOARCH_PHYSPAGESIZE=65536
275     ;;
276   m68k*-*-*)
277     GOARCH=m68k
278     GOARCH_FAMILY=M68K
279     GOARCH_BIGENDIAN=true
280     GOARCH_CACHELINESIZE=16
281     GOARCH_PCQUANTUM=4
282     GOARCH_INT64ALIGN=2
283     ;;
284   mips*-*-*)
285     AC_COMPILE_IFELSE([
286 #if _MIPS_SIM != _ABIO32
287 #error not o32
288 #endif],
289 [mips_abi="o32"],
290         [AC_COMPILE_IFELSE([
291 #if _MIPS_SIM != _ABIN32
292 #error not n32
293 #endif],
294 [mips_abi="n32"],
295         [AC_COMPILE_IFELSE([
296 #if _MIPS_SIM != _ABI64
297 #error not n64
298 #endif],
299 [mips_abi="n64"],
300         [AC_MSG_ERROR([unknown MIPS ABI])
301 [mips_abi="n32"]])])])
302     case "$mips_abi" in
303     "o32") GOARCH=mips ;;
304     "n32") GOARCH=mips64p32 ;;
305     "n64") GOARCH=mips64 ;;
306     esac
307     case "$mips_abi" in
308     "o32" | "n32")
309         GOARCH_FAMILY=MIPS
310         GOARCH_MINFRAMESIZE=4
311         ;;
312     "n64")
313         GOARCH_FAMILY=MIPS64
314         GOARCH_MINFRAMESIZE=8
315         ;;
316     esac
317     case "${host}" in
318     mips*el-*-*)
319         GOARCH="${GOARCH}le"
320         ;;
321     *)
322         GOARCH_BIGENDIAN=true
323         ;;
324     esac
325     GOARCH_CACHELINESIZE=32
326     GOARCH_PHYSPAGESIZE=16384
327     GOARCH_PCQUANTUM=4
328     ;;
329   rs6000*-*-* | powerpc*-*-*)
330     AC_COMPILE_IFELSE([
331 #ifdef _ARCH_PPC64
332 #error 64-bit
333 #endif],
334 [GOARCH=ppc
335 GOARCH_FAMILY=PPC
336 GOARCH_BIGENDIAN=true
338     [
339 GOARCH_FAMILY=PPC64
340 AC_COMPILE_IFELSE([
341 #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
342 #error 64be
343 #endif],
344 [GOARCH=ppc64le
346 [GOARCH=ppc64
347 GOARCH_BIGENDIAN=true
348 ])])
349     GOARCH_PHYSPAGESIZE=65536
350     GOARCH_PCQUANTUM=4
351     GOARCH_MINFRAMESIZE=32
352     ;;
353   s390*-*-*)
354     AC_COMPILE_IFELSE([
355 #if defined(__s390x__)
356 #error 64-bit
357 #endif],
358 [GOARCH=s390
359 GOARCH_FAMILY=S390
360 GOARCH_MINFRAMESIZE=4
361 ], [GOARCH=s390x
362 GOARCH_FAMILY=S390X
363 GOARCH_MINFRAMESIZE=8
365     GOARCH_BIGENDIAN=true
366     GOARCH_CACHELINESIZE=256
367     GOARCH_PCQUANTUM=2
368     ;;
369   sparc*-*-*)
370     AC_COMPILE_IFELSE([
371 #if defined(__sparcv9) || defined(__arch64__)
372 #error 64-bit
373 #endif],
374 [GOARCH=sparc
375 GOARCH_FAMILY=SPARC
377 [GOARCH=sparc64
378 GOARCH_FAMILY=SPARC64
380     GOARCH_BIGENDIAN=true
381     GOARCH_PHYSPAGESIZE=8192
382     GOARCH_PCQUANTUM=4
383     ;;
384 esac
385 AC_SUBST(GOARCH)
386 AC_SUBST(GOARCH_FAMILY)
387 AC_SUBST(GOARCH_BIGENDIAN)
388 AC_SUBST(GOARCH_CACHELINESIZE)
389 AC_SUBST(GOARCH_PHYSPAGESIZE)
390 AC_SUBST(GOARCH_PCQUANTUM)
391 AC_SUBST(GOARCH_INT64ALIGN)
392 AC_SUBST(GOARCH_HUGEPAGESIZE)
393 AC_SUBST(GOARCH_MINFRAMESIZE)
394 AC_SUBST(ALLGOARCH)
395 AC_SUBST(ALLGOARCHFAMILY)
397 dnl Some files are only present when needed for specific architectures.
398 GO_LIBCALL_OS_FILE=
399 GO_LIBCALL_OS_ARCH_FILE=
400 GO_SYSCALL_OS_FILE=
401 GO_SYSCALL_OS_ARCH_FILE=
402 if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then
403   GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go"
405 if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then
406   GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go"
408 if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then
409   GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go"
411 if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then
412   GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go"
414 AC_SUBST(GO_LIBCALL_OS_FILE)
415 AC_SUBST(GO_LIBCALL_OS_ARCH_FILE)
416 AC_SUBST(GO_SYSCALL_OS_FILE)
417 AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
419 dnl Special flags used to generate sysinfo.go.
420 OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
421 case "$target" in
422     mips-sgi-irix6.5*)
423         # IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct
424         # msghdr in <sys/socket.h>.
425         OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500"
426         ;;
427     *-*-solaris2.1[[01]])
428         # Solaris 10+ needs this so struct msghdr gets the msg_control
429         # etc. fields in <sys/socket.h> (_XPG4_2).  _XOPEN_SOURCE=600 as
430         # above doesn't work with C99.
431         OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__"
432         ;;
433 esac
434 AC_SUBST(OSCFLAGS)
436 dnl Check if assembler supports disabling hardware capability support.
437 GCC_CHECK_ASSEMBLER_HWCAP
439 dnl Use -fsplit-stack when compiling C code if available.
440 AC_CACHE_CHECK([whether -fsplit-stack is supported],
441 [libgo_cv_c_split_stack_supported],
442 [CFLAGS_hold=$CFLAGS
443 CFLAGS="$CFLAGS -fsplit-stack"
444 AC_COMPILE_IFELSE([[int i;]],
445 [libgo_cv_c_split_stack_supported=yes],
446 [libgo_cv_c_split_stack_supported=no])
447 CFLAGS=$CFLAGS_hold])
449 dnl Make sure the linker permits -fsplit-stack.  Old versions of gold will
450 dnl reject split-stack code calling non-split-stack code on targets
451 dnl they don't support.
452 AC_CACHE_CHECK([whether linker supports split/non-split linked together],
453 [libgo_cv_c_linker_split_non_split],
454 [cat > conftest1.c << EOF
455 extern void f();
456 int main() { f(); return 0; }
458 cat > conftest2.c << EOF
459 void f() {}
461 $CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c >/dev/null 2>&1
462 $CC -c $CFLAGS $CPPFLAGS conftest2.c > /dev/null 2>&1
463 if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext > /dev/null 2>&1; then
464   libgo_cv_c_linker_split_non_split=yes
465 else
466   libgo_cv_c_linker_split_non_split=no
468 rm -f conftest1.* conftest2.* conftest])
470 if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then
471   SPLIT_STACK=-fsplit-stack
472   AC_DEFINE(USING_SPLIT_STACK, 1,
473                 [Define if the compiler supports -fsplit-stack])
474 else
475   SPLIT_STACK=
477 AC_SUBST(SPLIT_STACK)
478 AM_CONDITIONAL(USING_SPLIT_STACK,
479         test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
481 dnl If the compiler supports split-stack but the linker does not, then
482 dnl we need to explicitly disable split-stack for Go.
483 if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
484   GO_SPLIT_STACK=-fno-split-stack
485 else
486   GO_SPLIT_STACK=
488 AC_SUBST(GO_SPLIT_STACK)
490 dnl Check whether the linker does stack munging when calling from
491 dnl split-stack into non-split-stack code.  We check this by looking
492 dnl at the --help output.  FIXME: This is only half right: it's
493 dnl possible for the linker to support this for some targets but not
494 dnl others.
495 dnl This is slightly different from the above check, which is whether
496 dnl the linker permits the call at all.
497 AC_CACHE_CHECK([whether linker supports split stack],
498 [libgo_cv_c_linker_supports_split_stack],
499 [libgo_cv_c_linker_supports_split_stack=no
500 if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
501   libgo_cv_c_linker_supports_split_stack=yes
502 fi])
503 if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
504   AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
505             [Define if the linker support split stack adjustments])
508 AC_CACHE_CHECK([whether compiler is llgo],
509 [libgo_cv_c_goc_is_llgo],
510 [libgo_cv_c_goc_is_llgo=no
511 if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then
512   libgo_cv_c_goc_is_llgo=yes
513 fi])
514 AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes)
516 dnl Test for the -lm library.
517 MATH_LIBS=
518 AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
519 AC_SUBST(MATH_LIBS)
521 dnl Test for -lsocket and -lnsl.  Copied from libjava/configure.ac.
522 AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
523   [libgo_cv_lib_sockets=
524    libgo_check_both=no
525    AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
526    if test "$libgo_check_socket" = "yes"; then
527      unset ac_cv_func_connect
528      AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
529                   libgo_check_both=yes)
530    fi
531    if test "$libgo_check_both" = "yes"; then
532      libgo_old_libs=$LIBS
533      LIBS="$LIBS -lsocket -lnsl"
534      unset ac_cv_func_accept
535      AC_CHECK_FUNC(accept,
536                    [libgo_check_nsl=no
537                     libgo_cv_lib_sockets="-lsocket -lnsl"])
538      unset ac_cv_func_accept
539      LIBS=$libgo_old_libs
540    fi
541    unset ac_cv_func_gethostbyname
542    libgo_old_libs="$LIBS"
543    AC_CHECK_FUNC(gethostbyname, ,
544                  [AC_CHECK_LIB(nsl, main,
545                         [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
546    unset ac_cv_func_gethostbyname
547    AC_CHECK_FUNC(sendfile, ,
548                  [AC_CHECK_LIB(sendfile, main,
549                         [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])])
550    LIBS=$libgo_old_libs
552 NET_LIBS="$libgo_cv_lib_sockets"
553 AC_SUBST(NET_LIBS)
555 dnl Test whether the compiler supports the -pthread option.
556 AC_CACHE_CHECK([whether -pthread is supported],
557 [libgo_cv_lib_pthread],
558 [CFLAGS_hold=$CFLAGS
559 CFLAGS="$CFLAGS -pthread"
560 AC_COMPILE_IFELSE([[int i;]],
561 [libgo_cv_lib_pthread=yes],
562 [libgo_cv_lib_pthread=no])
563 CFLAGS=$CFLAGS_hold])
564 PTHREAD_CFLAGS=
565 if test "$libgo_cv_lib_pthread" = yes; then
566   PTHREAD_CFLAGS=-pthread
568 AC_SUBST(PTHREAD_CFLAGS)
570 dnl Test for the -lpthread library.
571 PTHREAD_LIBS=
572 AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
573 AC_SUBST(PTHREAD_LIBS)
575 dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
576 AC_SEARCH_LIBS([sched_yield], [rt])
577 AC_SEARCH_LIBS([nanosleep], [rt])
578 AC_SEARCH_LIBS([clock_gettime], [rt])
580 AC_C_BIGENDIAN
582 GCC_CHECK_UNWIND_GETIPINFO
584 AC_CHECK_HEADERS(port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.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/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h)
586 AC_CHECK_HEADERS([netinet/icmp6.h], [], [],
587 [#include <netinet/in.h>
590 AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
591 [#ifdef HAVE_SYS_SOCKET_H
592 #include <sys/socket.h>
593 #endif
596 AC_CACHE_CHECK([whether <ustat.h> can be used],
597 [libgo_cv_c_ustat_h],
598 [CFLAGS_hold=$CFLAGS
599 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS"
600 AC_COMPILE_IFELSE(
601 [AC_LANG_SOURCE([
602 #include <sys/types.h>
603 #ifdef HAVE_LINUX_FILTER_H
604 #include <linux/filter.h>
605 #endif
606 #include <ustat.h>
607 ])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no])
608 CFLAGS=$CFLAGS_hold])
609 if test $libgo_cv_c_ustat_h = yes; then
610   AC_DEFINE(HAVE_USTAT_H, 1,
611     [Define to 1 if you have the <ustat.h> header file and it works.])
614 AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
616 AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr)
617 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
618 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
620 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 syscall tee unlinkat unshare utimensat)
621 AC_TYPE_OFF_T
622 AC_CHECK_TYPES([loff_t])
624 LIBS_hold="$LIBS"
625 LIBS="$LIBS -lm"
626 AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
627 LIBS="$LIBS_hold"
629 CFLAGS_hold="$CFLAGS"
630 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
631 LIBS_hold="$LIBS"
632 LIBS="$LIBS $PTHREAD_LIBS"
633 AC_CHECK_FUNCS(sem_timedwait)
634 CFLAGS="$CFLAGS_hold"
635 LIBS="$LIBS_hold"
637 LIBS_hold="$LIBS"
638 LIBS="$LIBS $MATH_LIBS"
639 AC_CHECK_FUNCS(matherr)
640 LIBS="$LIBS_hold"
642 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4],
643 [libgo_cv_func___sync_bool_compare_and_swap_4],
644 [AC_LINK_IFELSE([
645 typedef unsigned int uint32  __attribute__ ((mode (SI)));
646 uint32 i;
647 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
649 [libgo_cv_func___sync_bool_compare_and_swap_4=yes],
650 [libgo_cv_func___sync_bool_compare_and_swap_4=no])])
651 if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then
652   AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1,
653     [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32])
656 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8],
657 [libgo_cv_func___sync_bool_compare_and_swap_8],
658 [AC_LINK_IFELSE([
659 typedef unsigned int uint64  __attribute__ ((mode (DI)));
660 uint64 i;
661 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
663 [libgo_cv_func___sync_bool_compare_and_swap_8=yes],
664 [libgo_cv_func___sync_bool_compare_and_swap_8=no])])
665 if test "$libgo_cv_func___sync_bool_compare_and_swap_8" = "yes"; then
666   AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8, 1,
667     [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint64])
670 AC_CACHE_CHECK([for __sync_fetch_and_add_4],
671 [libgo_cv_func___sync_fetch_and_add_4],
672 [AC_LINK_IFELSE([
673 typedef unsigned int uint32  __attribute__ ((mode (SI)));
674 uint32 i;
675 int main() { return __sync_fetch_and_add (&i, 1); }
677 [libgo_cv_func___sync_fetch_and_add_4=yes],
678 [libgo_cv_func___sync_fetch_and_add_4=no])])
679 if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then
680   AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1,
681     [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32])
684 AC_CACHE_CHECK([for __sync_add_and_fetch_8],
685 [libgo_cv_func___sync_add_and_fetch_8],
686 [AC_LINK_IFELSE([
687 typedef unsigned int uint64  __attribute__ ((mode (DI)));
688 uint64 i;
689 int main() { return __sync_add_and_fetch (&i, 1); }
691 [libgo_cv_func___sync_add_and_fetch_8=yes],
692 [libgo_cv_func___sync_add_and_fetch_8=no])])
693 if test "$libgo_cv_func___sync_add_and_fetch_8" = "yes"; then
694   AC_DEFINE(HAVE_SYNC_ADD_AND_FETCH_8, 1,
695     [Define to 1 if the compiler provides the __sync_add_and_fetch function for uint64])
698 dnl For x86 we want to use the -minline-all-stringops option to avoid
699 dnl forcing a stack split when calling memcpy and friends.
700 AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
701 [libgo_cv_c_stringops],
702 [CFLAGS_hold=$CFLAGS
703 CFLAGS="$CFLAGS -minline-all-stringops"
704 AC_COMPILE_IFELSE([int i;],
705 [libgo_cv_c_stringops=yes],
706 [libgo_cv_c_stringops=no])
707 CFLAGS=$CFLAGS_hold])
708 STRINGOPS_FLAG=
709 if test "$libgo_cv_c_stringops" = yes; then
710   STRINGOPS_FLAG=-minline-all-stringops
712 AC_SUBST(STRINGOPS_FLAG)
714 dnl For x86 we want to compile the math library with -mfancy-math-387
715 dnl -funsafe-math-optimizations so that we can use the builtin
716 dnl instructions directly.
717 AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
718 [libgo_cv_c_fancymath],
719 [CFLAGS_hold=$CFLAGS
720 CFLAGS="$CFLAGS -mfancy-math-387"
721 AC_COMPILE_IFELSE([int i;],
722 [libgo_cv_c_fancymath=yes],
723 [libgo_cv_c_fancymath=no])
724 CFLAGS=$CFLAGS_hold])
725 MATH_FLAG=
726 if test "$libgo_cv_c_fancymath" = yes; then
727   MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations -fno-math-errno"
728 else
729   MATH_FLAG="-ffp-contract=off"
731 AC_SUBST(MATH_FLAG)
733 CFLAGS_hold=$CFLAGS
734 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
735 AC_CHECK_TYPES([off64_t])
736 CFLAGS=$CFLAGS_hold
738 dnl Work out the size of the epoll_events struct on GNU/Linux.
739 AC_CACHE_CHECK([epoll_event size],
740 [libgo_cv_c_epoll_event_size],
741 [AC_COMPUTE_INT(libgo_cv_c_epoll_event_size,
742 [sizeof (struct epoll_event)],
743 [#include <sys/epoll.h>],
744 [libgo_cv_c_epoll_event_size=0])])
745 SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
746 AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
748 dnl Work out the offset of the fd field in the epoll_events struct on
749 dnl GNU/Linux.
750 AC_CACHE_CHECK([epoll_event data.fd offset],
751 [libgo_cv_c_epoll_event_fd_offset],
752 [AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset,
753 [offsetof (struct epoll_event, data.fd)],
754 [#include <stddef.h>
755 #include <sys/epoll.h>],
756 [libgo_cv_c_epoll_event_fd_offset=0])])
757 STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
758 AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
760 dnl Check if <sys/stat.h> uses timespec_t for st_?tim members.  Introduced
761 dnl in Solaris 11.4 for XPG7 compatibility.
762 AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
763                 [have_stat_timespec=yes], [have_stat_timespec=no])
764 AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
766 dnl See if struct exception is defined in <math.h>.
767 AC_CHECK_TYPE([struct exception],
768 [libgo_has_struct_exception=yes],
769 [libgo_has_struct_exception=no],
770 [#include <math.h>])
771 if test "$libgo_has_struct_exception" = "yes"; then
772   AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
773             [Define to 1 if <math.h> defines struct exception])
776 dnl See whether setcontext changes the value of TLS variables.
777 AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
778 [libgo_cv_lib_setcontext_clobbers_tls],
779 [CFLAGS_hold="$CFLAGS"
780 CFLAGS="$PTHREAD_CFLAGS"
781 LIBS_hold="$LIBS"
782 LIBS="$LIBS $PTHREAD_LIBS"
783 AC_CHECK_SIZEOF([void *])
784 AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
785 AC_RUN_IFELSE(
786   [AC_LANG_SOURCE([
787 #include <pthread.h>
788 #include <stdlib.h>
789 #include <ucontext.h>
790 #include <unistd.h>
792 __thread int tls;
794 static char stack[[10 * 1024 * 1024]];
795 static ucontext_t c;
797 /* Called via makecontext/setcontext.  */
799 static void
800 cfn (void)
802   exit (tls);
805 /* Called via pthread_create.  */
807 static void *
808 tfn (void *dummy)
810   /* The thread should still see this value after calling
811      setcontext.  */
812   tls = 0;
814   setcontext (&c);
816   /* The call to setcontext should not return.  */
817   abort ();
821 main ()
823   pthread_t tid;
825   /* The thread should not see this value.  */
826   tls = 1;
828   if (getcontext (&c) < 0)
829     abort ();
831   c.uc_stack.ss_sp = stack;
832 #ifdef MAKECONTEXT_STACK_TOP
833   c.uc_stack.ss_sp += sizeof stack;
834 #endif
835   c.uc_stack.ss_flags = 0;
836   c.uc_stack.ss_size = sizeof stack;
837   c.uc_link = NULL;
838   makecontext (&c, cfn, 0);
840   if (pthread_create (&tid, NULL, tfn, NULL) != 0)
841     abort ();
843   if (pthread_join (tid, NULL) != 0)
844     abort ();
846   /* The thread should have called exit.  */
847   abort ();
849 ])],
850 [libgo_cv_lib_setcontext_clobbers_tls=no],
851 [libgo_cv_lib_setcontext_clobbers_tls=yes],
852 [case "$target:$ptr_type_size" in
853   i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64)
854     libgo_cv_lib_setcontext_clobbers_tls=yes ;;
855   *)
856     libgo_cv_lib_setcontext_clobbers_tls=no ;;
857  esac
859 CFLAGS="$CFLAGS_hold"
860 LIBS="$LIBS_hold"
862 if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
863   AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
864             [Define if setcontext clobbers TLS variables])
867 AC_CACHE_CHECK([whether .eh_frame section should be read-only],
868 libgo_cv_ro_eh_frame, [
869 libgo_cv_ro_eh_frame=no
870 echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
871 if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
872   if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
873     libgo_cv_ro_eh_frame=yes
874   elif grep '.section.*eh_frame.*#alloc' conftest.c \
875        | grep -v '#write' > /dev/null; then
876     libgo_cv_ro_eh_frame=yes
877   fi
879 rm -f conftest.*
881 if test "x$libgo_cv_ro_eh_frame" = xyes; then
882   AC_DEFINE(EH_FRAME_FLAGS, "a",
883             [Define to the flags needed for the .section .eh_frame directive.])
884 else
885   AC_DEFINE(EH_FRAME_FLAGS, "aw",
886             [Define to the flags needed for the .section .eh_frame directive.])
889 AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
890 [libgo_cv_c_unused_arguments],
891 [CFLAGS_hold=$CFLAGS
892 CFLAGS="$CFLAGS -Qunused-arguments"
893 AC_COMPILE_IFELSE([[int i;]],
894 [libgo_cv_c_unused_arguments=yes],
895 [libgo_cv_c_unused_arguments=no])
896 CFLAGS=$CFLAGS_hold])
898 AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
899 libgo_cv_as_comdat_gnu, [
900 echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
901 CFLAGS_hold=$CFLAGS
902 if test "$libgo_cv_c_unused_arguments" = yes; then
903   CFLAGS="$CFLAGS -Qunused-arguments"
905 if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
906   libgo_cv_as_comdat_gnu=yes
907 else
908   libgo_cv_as_comdat_gnu=no
910 CFLAGS=$CFLAGS_hold
912 if test "x$libgo_cv_as_comdat_gnu" = xyes; then
913   AC_DEFINE(HAVE_AS_COMDAT_GAS, 1,
914             [Define if your assembler supports GNU comdat group syntax.])
917 AC_CACHE_CHECK([assembler supports pc related relocs],
918 libgo_cv_as_x86_pcrel, [
919 libgo_cv_as_x86_pcrel=yes
920 echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
921 CFLAGS_hold=$CFLAGS
922 if test "$libgo_cv_c_unused_arguments" = yes; then
923   CFLAGS="$CFLAGS -Qunused-arguments"
925 if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
926     libgo_cv_as_x86_pcrel=no
928 CFLAGS=$CFLAGS_hold
930 if test "x$libgo_cv_as_x86_pcrel" = xyes; then
931   AC_DEFINE(HAVE_AS_X86_PCREL, 1,
932             [Define if your assembler supports PC relative relocs.])
935 AC_CACHE_CHECK([assembler supports unwind section type],
936 libgo_cv_as_x86_64_unwind_section_type, [
937 libgo_cv_as_x86_64_unwind_section_type=yes
938 echo '.section .eh_frame,"a",@unwind' > conftest.s
939 CFLAGS_hold=$CFLAGS
940 if test "$libgo_cv_c_unused_arguments" = yes; then
941   CFLAGS="$CFLAGS -Qunused-arguments"
943 if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
944     libgo_cv_as_x86_64_unwind_section_type=no
946 CFLAGS=$CFLAGS_hold
948 if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then
949   AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
950             [Define if your assembler supports unwind section type.])
953 AC_CACHE_CHECK([assembler supports AES instructions],
954 libgo_cv_as_x86_aes, [
955 libgo_cv_as_x86_aes=yes
956 echo 'aesenc %xmm0, %xmm1' > conftest.s
957 CFLAGS_hold=$CFLAGS
958 if test "$libgo_cv_c_unused_arguments" = yes; then
959   CFLAGS="$CFLAGS -Qunused-arguments"
961 if $CC $CFLAGS -c conftest.s 2>&1 | grep -i error > /dev/null; then
962     libgo_cv_as_x86_aes=no
964 CFLAGS=$CFLAGS_hold
966 if test "x$libgo_cv_as_x86_aes" = xyes; then
967   AC_DEFINE(HAVE_AS_X86_AES, 1,
968             [Define if your assembler supports AES instructions.])
971 AC_CACHE_SAVE
973 if test ${multilib} = yes; then
974   multilib_arg="--enable-multilib"
975 else
976   multilib_arg=
979 AC_CONFIG_FILES(Makefile testsuite/Makefile)
981 AC_CONFIG_COMMANDS([default],
982 [if test -n "$CONFIG_FILES"; then
983    # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
984    # that multilib installs will end up installed in the correct place.
985    # The testsuite needs it for multilib-aware ABI baseline files.
986    # To work around this not being passed down from config-ml.in ->
987    # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
988    # append it here.  Only modify Makefiles that have just been created.
989    #
990    # Also, get rid of this simulated-VPATH thing that automake does.
991    cat > vpsed << \_EOF
992 s!`test -f '$<' || echo '$(srcdir)/'`!!
993 _EOF
994    for i in $SUBDIRS; do
995     case $CONFIG_FILES in
996      *${i}/Makefile*)
997        #echo "Adding MULTISUBDIR to $i/Makefile"
998        sed -f vpsed $i/Makefile > tmp
999        grep '^MULTISUBDIR =' Makefile >> tmp
1000        mv tmp $i/Makefile
1001        ;;
1002     esac
1003    done
1004    rm vpsed
1005  fi
1008 # Variables needed in config.status (file generation) which aren't already
1009 # passed by autoconf.
1010 SUBDIRS="$SUBDIRS"
1013 AC_OUTPUT