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