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