Small ChangeLog tweak.
[official-gcc.git] / libgo / configure.ac
blob5a1032f4dab379d296ad35a21dcd05998a32fa4e
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=11: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 mipso32 mipsn32 mipso64 mipsn64 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=0
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     ;;
247 changequote(,)dnl
248   i[34567]86-*-* | x86_64-*-*)
249 changequote([,])dnl
250     AC_COMPILE_IFELSE([
251 #ifdef __x86_64__
252 #error 64-bit
253 #endif],
254 [GOARCH=386
255 GOARCH_FAMILY=I386
256 GOARCH_INT64ALIGN=4
257 GOARCH_HUGEPAGESIZE="1 << 21"
259 [GOARCH=amd64
260 GOARCH_FAMILY=AMD64
261 GOARCH_HUGEPAGESIZE="1 << 21"
263     ;;
264   ia64-*-*)
265     GOARCH=ia64
266     GOARCH_FAMILY=IA64
267     GOARCH_CACHELINESIZE=16384
268     GOARCH_PHYSPAGESIZE=65536
269     ;;
270   m68k*-*-*)
271     GOARCH=m68k
272     GOARCH_FAMILY=M68K
273     GOARCH_BIGENDIAN=1
274     GOARCH_CACHELINESIZE=16
275     GOARCH_PCQUANTUM=4
276     GOARCH_INT64ALIGN=2
277     ;;
278   mips*-*-*)
279     AC_COMPILE_IFELSE([
280 #if _MIPS_SIM != _ABIO32
281 #error not o32
282 #endif],
283 [mips_abi="o32"],
284         [AC_COMPILE_IFELSE([
285 #if _MIPS_SIM != _ABIN32
286 #error not n32
287 #endif],
288 [mips_abi="n32"],
289         [AC_COMPILE_IFELSE([
290 #if _MIPS_SIM != _ABI64
291 #error not n64
292 #endif],
293 [mips_abi="n64"],
294         [AC_COMPILE_IFELSE([
295 #if _MIPS_SIM != _ABIO64
296 #error not o64
297 #endif],
298 [mips_abi="o64"],
299         [AC_MSG_ERROR([unknown MIPS ABI])
300 [mips_abi="n32"]])])])])
301     case "$mips_abi" in
302     "o32") GOARCH=mipso32 ;;
303     "n32") GOARCH=mipsn32 ;;
304     "n64") GOARCH=mipsn64 ;;
305     "o64") GOARCH=mipso64 ;;
306     esac
307     case "$mips_abi" in
308     "o32" | "n32")
309         GOARCH_FAMILY=MIPS
310         GOARCH_MINFRAMESIZE=4
311         ;;
312     "n64" | "o64")
313         GOARCH_FAMILY=MIPS64
314         GOARCH_MINFRAMESIZE=8
315         ;;
316     esac
317     case "${host}" in
318     mips*el)
319         ;;
320     *)
321         GOARCH_BIGENDIAN=1
322         ;;
323     esac
324     GOARCH_CACHELINESIZE=32
325     GOARCH_PHYSPAGESIZE=16384
326     GOARCH_PCQUANTUM=4
327     ;;
328   rs6000*-*-* | powerpc*-*-*)
329     AC_COMPILE_IFELSE([
330 #ifdef _ARCH_PPC64
331 #error 64-bit
332 #endif],
333 [GOARCH=ppc
334 GOARCH_FAMILY=PPC
335 GOARCH_BIGENDIAN=1
337     [
338 GOARCH_FAMILY=PPC64
339 AC_COMPILE_IFELSE([
340 #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
341 #error 64be
342 #endif],
343 [GOARCH=ppc64le
345 [GOARCH=ppc64
346 GOARCH_BIGENDIAN=1
347 ])])
348     GOARCH_PHYSPAGESIZE=65536
349     GOARCH_PCQUANTUM=4
350     GOARCH_MINFRAMESIZE=32
351     ;;
352   s390*-*-*)
353     AC_COMPILE_IFELSE([
354 #if defined(__s390x__)
355 #error 64-bit
356 #endif],
357 [GOARCH=s390
358 GOARCH_FAMILY=S390
359 GOARCH_MINFRAMESIZE=4
360 ], [GOARCH=s390x
361 GOARCH_FAMILY=S390X
362 GOARCH_MINFRAMESIZE=8
364     GOARCH_BIGENDIAN=1
365     GOARCH_CACHELINESIZE=256
366     GOARCH_PCQUANTUM=2
367     ;;
368   sparc*-*-*)
369     AC_COMPILE_IFELSE([
370 #if defined(__sparcv9) || defined(__arch64__)
371 #error 64-bit
372 #endif],
373 [GOARCH=sparc
374 GOARCH_FAMILY=SPARC
376 [GOARCH=sparc64
377 GOARCH_FAMILY=SPARC64
379     GOARCH_BIGENDIAN=1
380     GOARCH_PHYSPAGESIZE=8192
381     GOARCH_PCQUANTUM=4
382     ;;
383 esac
384 AC_SUBST(GOARCH)
385 AC_SUBST(GOARCH_FAMILY)
386 AC_SUBST(GOARCH_BIGENDIAN)
387 AC_SUBST(GOARCH_CACHELINESIZE)
388 AC_SUBST(GOARCH_PHYSPAGESIZE)
389 AC_SUBST(GOARCH_PCQUANTUM)
390 AC_SUBST(GOARCH_INT64ALIGN)
391 AC_SUBST(GOARCH_HUGEPAGESIZE)
392 AC_SUBST(GOARCH_MINFRAMESIZE)
393 AC_SUBST(ALLGOARCH)
394 AC_SUBST(ALLGOARCHFAMILY)
396 dnl Some files are only present when needed for specific architectures.
397 GO_LIBCALL_OS_FILE=
398 GO_LIBCALL_OS_ARCH_FILE=
399 GO_SYSCALL_OS_FILE=
400 GO_SYSCALL_OS_ARCH_FILE=
401 if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then
402   GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go"
404 if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then
405   GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go"
407 if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then
408   GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go"
410 if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then
411   GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go"
413 AC_SUBST(GO_LIBCALL_OS_FILE)
414 AC_SUBST(GO_LIBCALL_OS_ARCH_FILE)
415 AC_SUBST(GO_SYSCALL_OS_FILE)
416 AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
418 dnl Special flags used to generate sysinfo.go.
419 OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
420 case "$target" in
421     mips-sgi-irix6.5*)
422         # IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct
423         # msghdr in <sys/socket.h>.
424         OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500"
425         ;;
426     *-*-solaris2.1[[01]])
427         # Solaris 10+ needs this so struct msghdr gets the msg_control
428         # etc. fields in <sys/socket.h> (_XPG4_2).  _XOPEN_SOURCE=600 as
429         # above doesn't work with C99.
430         OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__"
431         ;;
432 esac
433 AC_SUBST(OSCFLAGS)
435 dnl Check if assembler supports disabling hardware capability support.
436 GCC_CHECK_ASSEMBLER_HWCAP
438 dnl Use -fsplit-stack when compiling C code if available.
439 AC_CACHE_CHECK([whether -fsplit-stack is supported],
440 [libgo_cv_c_split_stack_supported],
441 [CFLAGS_hold=$CFLAGS
442 CFLAGS="$CFLAGS -fsplit-stack"
443 AC_COMPILE_IFELSE([[int i;]],
444 [libgo_cv_c_split_stack_supported=yes],
445 [libgo_cv_c_split_stack_supported=no])
446 CFLAGS=$CFLAGS_hold])
448 dnl Make sure the linker permits -fsplit-stack.  Old versions of gold will
449 dnl reject split-stack code calling non-split-stack code on targets
450 dnl they don't support.
451 AC_CACHE_CHECK([whether linker supports split/non-split linked together],
452 [libgo_cv_c_linker_split_non_split],
453 [cat > conftest1.c << EOF
454 extern void f();
455 int main() { f(); return 0; }
457 cat > conftest2.c << EOF
458 void f() {}
460 $CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c >/dev/null 2>&1
461 $CC -c $CFLAGS $CPPFLAGS conftest2.c > /dev/null 2>&1
462 if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext > /dev/null 2>&1; then
463   libgo_cv_c_linker_split_non_split=yes
464 else
465   libgo_cv_c_linker_split_non_split=no
467 rm -f conftest1.* conftest2.* conftest])
469 if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then
470   SPLIT_STACK=-fsplit-stack
471   AC_DEFINE(USING_SPLIT_STACK, 1,
472                 [Define if the compiler supports -fsplit-stack])
473 else
474   SPLIT_STACK=
476 AC_SUBST(SPLIT_STACK)
477 AM_CONDITIONAL(USING_SPLIT_STACK,
478         test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
480 dnl If the compiler supports split-stack but the linker does not, then
481 dnl we need to explicitly disable split-stack for Go.
482 if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
483   GO_SPLIT_STACK=-fno-split-stack
484 else
485   GO_SPLIT_STACK=
487 AC_SUBST(GO_SPLIT_STACK)
489 dnl Check whether the linker does stack munging when calling from
490 dnl split-stack into non-split-stack code.  We check this by looking
491 dnl at the --help output.  FIXME: This is only half right: it's
492 dnl possible for the linker to support this for some targets but not
493 dnl others.
494 dnl This is slightly different from the above check, which is whether
495 dnl the linker permits the call at all.
496 AC_CACHE_CHECK([whether linker supports split stack],
497 [libgo_cv_c_linker_supports_split_stack],
498 [libgo_cv_c_linker_supports_split_stack=no
499 if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
500   libgo_cv_c_linker_supports_split_stack=yes
501 fi])
502 if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
503   AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
504             [Define if the linker support split stack adjustments])
507 AC_CACHE_CHECK([whether compiler is llgo],
508 [libgo_cv_c_goc_is_llgo],
509 [libgo_cv_c_goc_is_llgo=no
510 if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then
511   libgo_cv_c_goc_is_llgo=yes
512 fi])
513 AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes)
515 dnl Test for the -lm library.
516 MATH_LIBS=
517 AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
518 AC_SUBST(MATH_LIBS)
520 dnl Test for -lsocket and -lnsl.  Copied from libjava/configure.ac.
521 AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
522   [libgo_cv_lib_sockets=
523    libgo_check_both=no
524    AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
525    if test "$libgo_check_socket" = "yes"; then
526      unset ac_cv_func_connect
527      AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
528                   libgo_check_both=yes)
529    fi
530    if test "$libgo_check_both" = "yes"; then
531      libgo_old_libs=$LIBS
532      LIBS="$LIBS -lsocket -lnsl"
533      unset ac_cv_func_accept
534      AC_CHECK_FUNC(accept,
535                    [libgo_check_nsl=no
536                     libgo_cv_lib_sockets="-lsocket -lnsl"])
537      unset ac_cv_func_accept
538      LIBS=$libgo_old_libs
539    fi
540    unset ac_cv_func_gethostbyname
541    libgo_old_libs="$LIBS"
542    AC_CHECK_FUNC(gethostbyname, ,
543                  [AC_CHECK_LIB(nsl, main,
544                         [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
545    unset ac_cv_func_gethostbyname
546    AC_CHECK_FUNC(sendfile, ,
547                  [AC_CHECK_LIB(sendfile, main,
548                         [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])])
549    LIBS=$libgo_old_libs
551 NET_LIBS="$libgo_cv_lib_sockets"
552 AC_SUBST(NET_LIBS)
554 dnl Test whether the compiler supports the -pthread option.
555 AC_CACHE_CHECK([whether -pthread is supported],
556 [libgo_cv_lib_pthread],
557 [CFLAGS_hold=$CFLAGS
558 CFLAGS="$CFLAGS -pthread"
559 AC_COMPILE_IFELSE([[int i;]],
560 [libgo_cv_lib_pthread=yes],
561 [libgo_cv_lib_pthread=no])
562 CFLAGS=$CFLAGS_hold])
563 PTHREAD_CFLAGS=
564 if test "$libgo_cv_lib_pthread" = yes; then
565   PTHREAD_CFLAGS=-pthread
567 AC_SUBST(PTHREAD_CFLAGS)
569 dnl Test for the -lpthread library.
570 PTHREAD_LIBS=
571 AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
572 AC_SUBST(PTHREAD_LIBS)
574 dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
575 AC_SEARCH_LIBS([sched_yield], [rt])
576 AC_SEARCH_LIBS([nanosleep], [rt])
577 AC_SEARCH_LIBS([clock_gettime], [rt])
579 AC_C_BIGENDIAN
581 GCC_CHECK_UNWIND_GETIPINFO
583 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/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h)
585 AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
586 [#ifdef HAVE_SYS_SOCKET_H
587 #include <sys/socket.h>
588 #endif
591 AC_CACHE_CHECK([whether <ustat.h> can be used],
592 [libgo_cv_c_ustat_h],
593 [CFLAGS_hold=$CFLAGS
594 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS"
595 AC_COMPILE_IFELSE(
596 [AC_LANG_SOURCE([
597 #include <sys/types.h>
598 #ifdef HAVE_LINUX_FILTER_H
599 #include <linux/filter.h>
600 #endif
601 #include <ustat.h>
602 ])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no])
603 CFLAGS=$CFLAGS_hold])
604 if test $libgo_cv_c_ustat_h = yes; then
605   AC_DEFINE(HAVE_USTAT_H, 1,
606     [Define to 1 if you have the <ustat.h> header file and it works.])
609 AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
611 AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr)
612 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
613 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
615 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)
616 AC_TYPE_OFF_T
617 AC_CHECK_TYPES([loff_t])
619 LIBS_hold="$LIBS"
620 LIBS="$LIBS -lm"
621 AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
622 LIBS="$LIBS_hold"
624 CFLAGS_hold="$CFLAGS"
625 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
626 LIBS_hold="$LIBS"
627 LIBS="$LIBS $PTHREAD_LIBS"
628 AC_CHECK_FUNCS(sem_timedwait)
629 CFLAGS="$CFLAGS_hold"
630 LIBS="$LIBS_hold"
632 LIBS_hold="$LIBS"
633 LIBS="$LIBS $MATH_LIBS"
634 AC_CHECK_FUNCS(matherr)
635 LIBS="$LIBS_hold"
637 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4],
638 [libgo_cv_func___sync_bool_compare_and_swap_4],
639 [AC_LINK_IFELSE([
640 typedef unsigned int uint32  __attribute__ ((mode (SI)));
641 uint32 i;
642 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
644 [libgo_cv_func___sync_bool_compare_and_swap_4=yes],
645 [libgo_cv_func___sync_bool_compare_and_swap_4=no])])
646 if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then
647   AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1,
648     [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32])
651 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8],
652 [libgo_cv_func___sync_bool_compare_and_swap_8],
653 [AC_LINK_IFELSE([
654 typedef unsigned int uint64  __attribute__ ((mode (DI)));
655 uint64 i;
656 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
658 [libgo_cv_func___sync_bool_compare_and_swap_8=yes],
659 [libgo_cv_func___sync_bool_compare_and_swap_8=no])])
660 if test "$libgo_cv_func___sync_bool_compare_and_swap_8" = "yes"; then
661   AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8, 1,
662     [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint64])
665 AC_CACHE_CHECK([for __sync_fetch_and_add_4],
666 [libgo_cv_func___sync_fetch_and_add_4],
667 [AC_LINK_IFELSE([
668 typedef unsigned int uint32  __attribute__ ((mode (SI)));
669 uint32 i;
670 int main() { return __sync_fetch_and_add (&i, 1); }
672 [libgo_cv_func___sync_fetch_and_add_4=yes],
673 [libgo_cv_func___sync_fetch_and_add_4=no])])
674 if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then
675   AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1,
676     [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32])
679 AC_CACHE_CHECK([for __sync_add_and_fetch_8],
680 [libgo_cv_func___sync_add_and_fetch_8],
681 [AC_LINK_IFELSE([
682 typedef unsigned int uint64  __attribute__ ((mode (DI)));
683 uint64 i;
684 int main() { return __sync_add_and_fetch (&i, 1); }
686 [libgo_cv_func___sync_add_and_fetch_8=yes],
687 [libgo_cv_func___sync_add_and_fetch_8=no])])
688 if test "$libgo_cv_func___sync_add_and_fetch_8" = "yes"; then
689   AC_DEFINE(HAVE_SYNC_ADD_AND_FETCH_8, 1,
690     [Define to 1 if the compiler provides the __sync_add_and_fetch function for uint64])
693 dnl For x86 we want to use the -minline-all-stringops option to avoid
694 dnl forcing a stack split when calling memcpy and friends.
695 AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
696 [libgo_cv_c_stringops],
697 [CFLAGS_hold=$CFLAGS
698 CFLAGS="$CFLAGS -minline-all-stringops"
699 AC_COMPILE_IFELSE([int i;],
700 [libgo_cv_c_stringops=yes],
701 [libgo_cv_c_stringops=no])
702 CFLAGS=$CFLAGS_hold])
703 STRINGOPS_FLAG=
704 if test "$libgo_cv_c_stringops" = yes; then
705   STRINGOPS_FLAG=-minline-all-stringops
707 AC_SUBST(STRINGOPS_FLAG)
709 dnl For x86 we want to compile the math library with -mfancy-math-387
710 dnl -funsafe-math-optimizations so that we can use the builtin
711 dnl instructions directly.
712 AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
713 [libgo_cv_c_fancymath],
714 [CFLAGS_hold=$CFLAGS
715 CFLAGS="$CFLAGS -mfancy-math-387"
716 AC_COMPILE_IFELSE([int i;],
717 [libgo_cv_c_fancymath=yes],
718 [libgo_cv_c_fancymath=no])
719 CFLAGS=$CFLAGS_hold])
720 MATH_FLAG=
721 if test "$libgo_cv_c_fancymath" = yes; then
722   MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations"
723 else
724   MATH_FLAG="-ffp-contract=off"
726 AC_SUBST(MATH_FLAG)
728 CFLAGS_hold=$CFLAGS
729 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
730 AC_CHECK_TYPES([off64_t])
731 CFLAGS=$CFLAGS_hold
733 dnl Work out the size of the epoll_events struct on GNU/Linux.
734 AC_CACHE_CHECK([epoll_event size],
735 [libgo_cv_c_epoll_event_size],
736 [AC_COMPUTE_INT(libgo_cv_c_epoll_event_size,
737 [sizeof (struct epoll_event)],
738 [#include <sys/epoll.h>],
739 [libgo_cv_c_epoll_event_size=0])])
740 SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
741 AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
743 dnl Work out the offset of the fd field in the epoll_events struct on
744 dnl GNU/Linux.
745 AC_CACHE_CHECK([epoll_event data.fd offset],
746 [libgo_cv_c_epoll_event_fd_offset],
747 [AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset,
748 [offsetof (struct epoll_event, data.fd)],
749 [#include <stddef.h>
750 #include <sys/epoll.h>],
751 [libgo_cv_c_epoll_event_fd_offset=0])])
752 STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
753 AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
755 dnl Check if <sys/stat.h> uses timespec_t for st_?tim members.  Introduced
756 dnl in Solaris 12 for XPG7 compatibility.
757 AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
758                 [have_stat_timespec=yes], [have_stat_timespec=no])
759 AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
761 dnl See if struct exception is defined in <math.h>.
762 AC_CHECK_TYPE([struct exception],
763 [libgo_has_struct_exception=yes],
764 [libgo_has_struct_exception=no],
765 [#include <math.h>])
766 if test "$libgo_has_struct_exception" = "yes"; then
767   AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
768             [Define to 1 if <math.h> defines struct exception])
771 dnl See whether setcontext changes the value of TLS variables.
772 AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
773 [libgo_cv_lib_setcontext_clobbers_tls],
774 [CFLAGS_hold="$CFLAGS"
775 CFLAGS="$PTHREAD_CFLAGS"
776 LIBS_hold="$LIBS"
777 LIBS="$LIBS $PTHREAD_LIBS"
778 AC_CHECK_SIZEOF([void *])
779 AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
780 AC_RUN_IFELSE(
781   [AC_LANG_SOURCE([
782 #include <pthread.h>
783 #include <stdlib.h>
784 #include <ucontext.h>
785 #include <unistd.h>
787 __thread int tls;
789 static char stack[[10 * 1024 * 1024]];
790 static ucontext_t c;
792 /* Called via makecontext/setcontext.  */
794 static void
795 cfn (void)
797   exit (tls);
800 /* Called via pthread_create.  */
802 static void *
803 tfn (void *dummy)
805   /* The thread should still see this value after calling
806      setcontext.  */
807   tls = 0;
809   setcontext (&c);
811   /* The call to setcontext should not return.  */
812   abort ();
816 main ()
818   pthread_t tid;
820   /* The thread should not see this value.  */
821   tls = 1;
823   if (getcontext (&c) < 0)
824     abort ();
826   c.uc_stack.ss_sp = stack;
827 #ifdef MAKECONTEXT_STACK_TOP
828   c.uc_stack.ss_sp += sizeof stack;
829 #endif
830   c.uc_stack.ss_flags = 0;
831   c.uc_stack.ss_size = sizeof stack;
832   c.uc_link = NULL;
833   makecontext (&c, cfn, 0);
835   if (pthread_create (&tid, NULL, tfn, NULL) != 0)
836     abort ();
838   if (pthread_join (tid, NULL) != 0)
839     abort ();
841   /* The thread should have called exit.  */
842   abort ();
844 ])],
845 [libgo_cv_lib_setcontext_clobbers_tls=no],
846 [libgo_cv_lib_setcontext_clobbers_tls=yes],
847 [case "$target:$ptr_type_size" in
848   i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64)
849     libgo_cv_lib_setcontext_clobbers_tls=yes ;;
850   *)
851     libgo_cv_lib_setcontext_clobbers_tls=no ;;
852  esac
854 CFLAGS="$CFLAGS_hold"
855 LIBS="$LIBS_hold"
857 if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
858   AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
859             [Define if setcontext clobbers TLS variables])
862 AC_CACHE_CHECK([whether .eh_frame section should be read-only],
863 libgo_cv_ro_eh_frame, [
864 libgo_cv_ro_eh_frame=no
865 echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
866 if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
867   if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
868     libgo_cv_ro_eh_frame=yes
869   elif grep '.section.*eh_frame.*#alloc' conftest.c \
870        | grep -v '#write' > /dev/null; then
871     libgo_cv_ro_eh_frame=yes
872   fi
874 rm -f conftest.*
876 if test "x$libgo_cv_ro_eh_frame" = xyes; then
877   AC_DEFINE(EH_FRAME_FLAGS, "a",
878             [Define to the flags needed for the .section .eh_frame directive.])
879 else
880   AC_DEFINE(EH_FRAME_FLAGS, "aw",
881             [Define to the flags needed for the .section .eh_frame directive.])
884 AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
885 [libgo_cv_c_unused_arguments],
886 [CFLAGS_hold=$CFLAGS
887 CFLAGS="$CFLAGS -Qunused-arguments"
888 AC_COMPILE_IFELSE([[int i;]],
889 [libgo_cv_c_unused_arguments=yes],
890 [libgo_cv_c_unused_arguments=no])
891 CFLAGS=$CFLAGS_hold])
893 AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
894 libgo_cv_as_comdat_gnu, [
895 echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
896 CFLAGS_hold=$CFLAGS
897 if test "$libgo_cv_c_unused_arguments" = yes; then
898   CFLAGS="$CFLAGS -Qunused-arguments"
900 if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
901   libgo_cv_as_comdat_gnu=yes
902 else
903   libgo_cv_as_comdat_gnu=no
905 CFLAGS=$CFLAGS_hold
907 if test "x$libgo_cv_as_comdat_gnu" = xyes; then
908   AC_DEFINE(HAVE_AS_COMDAT_GAS, 1,
909             [Define if your assembler supports GNU comdat group syntax.])
912 AC_CACHE_CHECK([assembler supports pc related relocs],
913 libgo_cv_as_x86_pcrel, [
914 libgo_cv_as_x86_pcrel=yes
915 echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
916 CFLAGS_hold=$CFLAGS
917 if test "$libgo_cv_c_unused_arguments" = yes; then
918   CFLAGS="$CFLAGS -Qunused-arguments"
920 if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
921     libgo_cv_as_x86_pcrel=no
923 CFLAGS=$CFLAGS_hold
925 if test "x$libgo_cv_as_x86_pcrel" = xyes; then
926   AC_DEFINE(HAVE_AS_X86_PCREL, 1,
927             [Define if your assembler supports PC relative relocs.])
930 AC_CACHE_CHECK([assembler supports unwind section type],
931 libgo_cv_as_x86_64_unwind_section_type, [
932 libgo_cv_as_x86_64_unwind_section_type=yes
933 echo '.section .eh_frame,"a",@unwind' > conftest.s
934 CFLAGS_hold=$CFLAGS
935 if test "$libgo_cv_c_unused_arguments" = yes; then
936   CFLAGS="$CFLAGS -Qunused-arguments"
938 if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
939     libgo_cv_as_x86_64_unwind_section_type=no
941 CFLAGS=$CFLAGS_hold
943 if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then
944   AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
945             [Define if your assembler supports unwind section type.])
948 AC_CACHE_CHECK([assembler supports AES instructions],
949 libgo_cv_as_x86_aes, [
950 libgo_cv_as_x86_aes=yes
951 echo 'aesenc %xmm0, %xmm1' > conftest.s
952 CFLAGS_hold=$CFLAGS
953 if test "$libgo_cv_c_unused_arguments" = yes; then
954   CFLAGS="$CFLAGS -Qunused-arguments"
956 if $CC $CFLAGS -c conftest.s 2>&1 | grep -i error > /dev/null; then
957     libgo_cv_as_x86_aes=no
959 CFLAGS=$CFLAGS_hold
961 if test "x$libgo_cv_as_x86_aes" = xyes; then
962   AC_DEFINE(HAVE_AS_X86_AES, 1,
963             [Define if your assembler supports AES instructions.])
966 AC_CACHE_SAVE
968 if test ${multilib} = yes; then
969   multilib_arg="--enable-multilib"
970 else
971   multilib_arg=
974 AC_CONFIG_FILES(Makefile testsuite/Makefile)
976 AC_CONFIG_COMMANDS([default],
977 [if test -n "$CONFIG_FILES"; then
978    # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
979    # that multilib installs will end up installed in the correct place.
980    # The testsuite needs it for multilib-aware ABI baseline files.
981    # To work around this not being passed down from config-ml.in ->
982    # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
983    # append it here.  Only modify Makefiles that have just been created.
984    #
985    # Also, get rid of this simulated-VPATH thing that automake does.
986    cat > vpsed << \_EOF
987 s!`test -f '$<' || echo '$(srcdir)/'`!!
988 _EOF
989    for i in $SUBDIRS; do
990     case $CONFIG_FILES in
991      *${i}/Makefile*)
992        #echo "Adding MULTISUBDIR to $i/Makefile"
993        sed -f vpsed $i/Makefile > tmp
994        grep '^MULTISUBDIR =' Makefile >> tmp
995        mv tmp $i/Makefile
996        ;;
997     esac
998    done
999    rm vpsed
1000  fi
1003 # Variables needed in config.status (file generation) which aren't already
1004 # passed by autoconf.
1005 SUBDIRS="$SUBDIRS"
1008 AC_OUTPUT