github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/third_party/gofrontend/libgo/configure.ac (about)

     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  
     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)
    13  
    14  libtool_VERSION=8:0:0
    15  AC_SUBST(libtool_VERSION)
    16  
    17  AM_ENABLE_MULTILIB(, ..)
    18  
    19  AC_CANONICAL_SYSTEM
    20  target_alias=${target_alias-$host_alias}
    21  
    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])
    25  
    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])
    31  
    32  AC_SUBST(CFLAGS)
    33  
    34  AM_MAINTAINER_MODE
    35  
    36  AC_PROG_LD
    37  AC_PROG_RANLIB
    38  AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy)
    39  
    40  AC_LIBTOOL_DLOPEN
    41  AM_PROG_LIBTOOL
    42  AC_SUBST(enable_shared)
    43  AC_SUBST(enable_static)
    44  
    45  CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
    46  AC_SUBST(CC_FOR_BUILD)
    47  
    48  AC_PROG_AWK
    49  
    50  WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
    51  AC_SUBST(WARN_FLAGS)
    52  
    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"
    57  fi
    58  AC_SUBST(WERROR)
    59  
    60  glibgo_toolexecdir=no
    61  glibgo_toolexeclibdir=no
    62  
    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)
    74  
    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)'
    79  fi
    80  
    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}'
    90  fi
    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
    96  
    97  if test x"$glibgo_toolexecdir" = x"no"; then
    98    glibgo_toolexecdir="${nover_glibgo_toolexecdir}"
    99    glibgo_toolexeclibdir="${nover_glibgo_toolexeclibdir}"
   100  fi
   101  
   102  AC_SUBST(glibgo_toolexecdir)
   103  AC_SUBST(glibgo_toolexeclibdir)
   104  AC_SUBST(nover_glibgo_toolexeclibdir)
   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.
   109  AC_ARG_WITH(libffi,
   110    AS_HELP_STRING([--without-libffi],
   111                   [don't use libffi]),
   112    [:],
   113    [with_libffi=${with_libffi_default-yes}])
   114  
   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'
   121  fi
   122  AC_SUBST(LIBFFI)
   123  AC_SUBST(LIBFFIINCS)
   124  
   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}])
   133  
   134  LIBATOMIC=
   135  if test "$with_libatomic" != no; then
   136     LIBATOMIC=../libatomic/libatomic_convenience.la
   137  fi
   138  AC_SUBST(LIBATOMIC)
   139  
   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)
   144  
   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)
   176  
   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)
   187  
   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_PPC, test $is_ppc = yes)
   320  AM_CONDITIONAL(LIBGO_IS_PPC64, test $is_ppc64 = yes)
   321  AM_CONDITIONAL(LIBGO_IS_PPC64LE, test $is_ppc64le = yes)
   322  AM_CONDITIONAL(LIBGO_IS_S390, test $is_s390 = yes)
   323  AM_CONDITIONAL(LIBGO_IS_S390X, test $is_s390x = yes)
   324  AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes)
   325  AM_CONDITIONAL(LIBGO_IS_SPARC64, test $is_sparc64 = yes)
   326  AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes)
   327  AC_SUBST(GOARCH)
   328  
   329  dnl Some files are only present when needed for specific architectures.
   330  GO_LIBCALL_OS_FILE=
   331  GO_LIBCALL_OS_ARCH_FILE=
   332  GO_SYSCALL_OS_FILE=
   333  GO_SYSCALL_OS_ARCH_FILE=
   334  if test -f "${srcdir}/go/syscall/libcall_${GOOS}.go"; then
   335    GO_LIBCALL_OS_FILE="go/syscall/libcall_${GOOS}.go"
   336  fi
   337  if test -f "${srcdir}/go/syscall/libcall_${GOOS}_${GOARCH}.go"; then
   338    GO_LIBCALL_OS_ARCH_FILE="go/syscall/libcall_${GOOS}_${GOARCH}.go"
   339  fi
   340  if test -f "${srcdir}/go/syscall/syscall_${GOOS}.go"; then
   341    GO_SYSCALL_OS_FILE="go/syscall/syscall_${GOOS}.go"
   342  fi
   343  if test -f "${srcdir}/go/syscall/syscall_${GOOS}_${GOARCH}.go"; then
   344    GO_SYSCALL_OS_ARCH_FILE="go/syscall/syscall_${GOOS}_${GOARCH}.go"
   345  fi
   346  AC_SUBST(GO_LIBCALL_OS_FILE)
   347  AC_SUBST(GO_LIBCALL_OS_ARCH_FILE)
   348  AC_SUBST(GO_SYSCALL_OS_FILE)
   349  AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
   350  
   351  dnl Special flags used to generate sysinfo.go.
   352  OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
   353  case "$target" in
   354      mips-sgi-irix6.5*)
   355  	# IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct
   356  	# msghdr in <sys/socket.h>.
   357  	OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500"
   358  	;;
   359      *-*-solaris2.1[[01]])
   360  	# Solaris 10+ needs this so struct msghdr gets the msg_control
   361  	# etc. fields in <sys/socket.h> (_XPG4_2).  _XOPEN_SOURCE=600 as
   362  	# above doesn't work with C99.
   363  	OSCFLAGS="$OSCFLAGS -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__"
   364  	;;
   365  esac
   366  AC_SUBST(OSCFLAGS)
   367  
   368  dnl Use -fsplit-stack when compiling C code if available.
   369  AC_CACHE_CHECK([whether -fsplit-stack is supported],
   370  [libgo_cv_c_split_stack_supported],
   371  [CFLAGS_hold=$CFLAGS
   372  CFLAGS="$CFLAGS -fsplit-stack"
   373  AC_COMPILE_IFELSE([[int i;]],
   374  [libgo_cv_c_split_stack_supported=yes],
   375  [libgo_cv_c_split_stack_supported=no])
   376  CFLAGS=$CFLAGS_hold])
   377  
   378  dnl Make sure the linker permits -fsplit-stack.  Old versions of gold will
   379  dnl reject split-stack code calling non-split-stack code on targets
   380  dnl they don't support.
   381  AC_CACHE_CHECK([whether linker supports split/non-split linked together],
   382  [libgo_cv_c_linker_split_non_split],
   383  [cat > conftest1.c << EOF
   384  extern void f();
   385  int main() { f(); return 0; }
   386  EOF
   387  cat > conftest2.c << EOF
   388  void f() {}
   389  EOF
   390  $CC -c -fsplit-stack $CFLAGS $CPPFLAGS conftest1.c
   391  $CC -c $CFLAGS $CPPFLAGS conftest2.c
   392  if $CC -o conftest conftest1.$ac_objext conftest2.$ac_objext; then
   393    libgo_cv_c_linker_split_non_split=yes
   394  else
   395    libgo_cv_c_linker_split_non_split=no
   396  fi
   397  rm -f conftest1.* conftest2.* conftest])
   398  
   399  if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes; then
   400    SPLIT_STACK=-fsplit-stack
   401    AC_DEFINE(USING_SPLIT_STACK, 1,
   402  		[Define if the compiler supports -fsplit-stack])
   403  else
   404    SPLIT_STACK=
   405  fi
   406  AC_SUBST(SPLIT_STACK)
   407  AM_CONDITIONAL(USING_SPLIT_STACK,
   408  	test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
   409  
   410  dnl If the compiler supports split-stack but the linker does not, then
   411  dnl we need to explicitly disable split-stack for Go.
   412  if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
   413    GO_SPLIT_STACK=-fno-split-stack
   414  else
   415    GO_SPLIT_STACK=
   416  fi
   417  AC_SUBST(GO_SPLIT_STACK)
   418  
   419  dnl Check whether the linker does stack munging when calling from
   420  dnl split-stack into non-split-stack code.  We check this by looking
   421  dnl at the --help output.  FIXME: This is only half right: it's
   422  dnl possible for the linker to support this for some targets but not
   423  dnl others.
   424  dnl This is slightly different from the above check, which is whether
   425  dnl the linker permits the call at all.
   426  AC_CACHE_CHECK([whether linker supports split stack],
   427  [libgo_cv_c_linker_supports_split_stack],
   428  [libgo_cv_c_linker_supports_split_stack=no
   429  if $GOC -Wl,--help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
   430    libgo_cv_c_linker_supports_split_stack=yes
   431  fi])
   432  if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
   433    AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
   434  	    [Define if the linker support split stack adjustments])
   435  fi
   436  
   437  AC_CACHE_CHECK([whether compiler is llgo],
   438  [libgo_cv_c_goc_is_llgo],
   439  [libgo_cv_c_goc_is_llgo=no
   440  if $GOC -dumpversion 2>/dev/null | grep llgo >/dev/null 2>&1; then
   441    libgo_cv_c_goc_is_llgo=yes
   442  fi])
   443  AM_CONDITIONAL(GOC_IS_LLGO, test "$libgo_cv_c_goc_is_llgo" = yes)
   444  
   445  dnl Test for the -lm library.
   446  MATH_LIBS=
   447  AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
   448  AC_SUBST(MATH_LIBS)
   449  
   450  dnl Test for -lsocket and -lnsl.  Copied from libjava/configure.ac.
   451  AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
   452    [libgo_cv_lib_sockets=
   453     libgo_check_both=no
   454     AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
   455     if test "$libgo_check_socket" = "yes"; then
   456       unset ac_cv_func_connect
   457       AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
   458       		  libgo_check_both=yes)
   459     fi
   460     if test "$libgo_check_both" = "yes"; then
   461       libgo_old_libs=$LIBS
   462       LIBS="$LIBS -lsocket -lnsl"
   463       unset ac_cv_func_accept
   464       AC_CHECK_FUNC(accept,
   465  		   [libgo_check_nsl=no
   466  		    libgo_cv_lib_sockets="-lsocket -lnsl"])
   467       unset ac_cv_func_accept
   468       LIBS=$libgo_old_libs
   469     fi
   470     unset ac_cv_func_gethostbyname
   471     libgo_old_libs="$LIBS"
   472     AC_CHECK_FUNC(gethostbyname, ,
   473  		 [AC_CHECK_LIB(nsl, main,
   474  		 	[libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
   475     unset ac_cv_func_gethostbyname
   476     AC_CHECK_FUNC(sendfile, ,
   477  		 [AC_CHECK_LIB(sendfile, main,
   478  		 	[libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lsendfile"])])
   479     LIBS=$libgo_old_libs
   480  ])
   481  NET_LIBS="$libgo_cv_lib_sockets"
   482  AC_SUBST(NET_LIBS)
   483  
   484  dnl Test whether the compiler supports the -pthread option.
   485  AC_CACHE_CHECK([whether -pthread is supported],
   486  [libgo_cv_lib_pthread],
   487  [CFLAGS_hold=$CFLAGS
   488  CFLAGS="$CFLAGS -pthread"
   489  AC_COMPILE_IFELSE([[int i;]],
   490  [libgo_cv_lib_pthread=yes],
   491  [libgo_cv_lib_pthread=no])
   492  CFLAGS=$CFLAGS_hold])
   493  PTHREAD_CFLAGS=
   494  if test "$libgo_cv_lib_pthread" = yes; then
   495    PTHREAD_CFLAGS=-pthread
   496  fi
   497  AC_SUBST(PTHREAD_CFLAGS)
   498  
   499  dnl Test for the -lpthread library.
   500  PTHREAD_LIBS=
   501  AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
   502  AC_SUBST(PTHREAD_LIBS)
   503  
   504  dnl Test if -lrt is required for sched_yield or nanosleep or clock_gettime.
   505  AC_SEARCH_LIBS([sched_yield], [rt])
   506  AC_SEARCH_LIBS([nanosleep], [rt])
   507  AC_SEARCH_LIBS([clock_gettime], [rt])
   508  
   509  AC_C_BIGENDIAN
   510  
   511  GCC_CHECK_UNWIND_GETIPINFO
   512  
   513  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)
   514  
   515  AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
   516  [#ifdef HAVE_SYS_SOCKET_H
   517  #include <sys/socket.h>
   518  #endif
   519  ])
   520  
   521  AC_CACHE_CHECK([whether <ustat.h> can be used],
   522  [libgo_cv_c_ustat_h],
   523  [CFLAGS_hold=$CFLAGS
   524  CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS"
   525  AC_COMPILE_IFELSE(
   526  [AC_LANG_SOURCE([
   527  #include <sys/types.h>
   528  #ifdef HAVE_LINUX_FILTER_H
   529  #include <linux/filter.h>
   530  #endif
   531  #include <ustat.h>
   532  ])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no])
   533  CFLAGS=$CFLAGS_hold])
   534  if test $libgo_cv_c_ustat_h = yes; then
   535    AC_DEFINE(HAVE_USTAT_H, 1,
   536      [Define to 1 if you have the <ustat.h> header file and it works.])
   537  fi
   538  
   539  AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
   540  
   541  AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr)
   542  AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
   543  AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
   544  
   545  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)
   546  AC_TYPE_OFF_T
   547  AC_CHECK_TYPES([loff_t])
   548  
   549  LIBS_hold="$LIBS"
   550  LIBS="$LIBS -lm"
   551  AC_CHECK_FUNCS(cosl expl logl sinl tanl acosl asinl atanl atan2l expm1l ldexpl log10l log1pl)
   552  LIBS="$LIBS_hold"
   553  
   554  CFLAGS_hold="$CFLAGS"
   555  CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
   556  LIBS_hold="$LIBS"
   557  LIBS="$LIBS $PTHREAD_LIBS"
   558  AC_CHECK_FUNCS(sem_timedwait)
   559  CFLAGS="$CFLAGS_hold"
   560  LIBS="$LIBS_hold"
   561  
   562  LIBS_hold="$LIBS"
   563  LIBS="$LIBS $MATH_LIBS"
   564  AC_CHECK_FUNCS(matherr)
   565  LIBS="$LIBS_hold"
   566  
   567  AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4],
   568  [libgo_cv_func___sync_bool_compare_and_swap_4],
   569  [AC_LINK_IFELSE([
   570  typedef unsigned int uint32  __attribute__ ((mode (SI)));
   571  uint32 i;
   572  int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
   573  ],
   574  [libgo_cv_func___sync_bool_compare_and_swap_4=yes],
   575  [libgo_cv_func___sync_bool_compare_and_swap_4=no])])
   576  if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then
   577    AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1,
   578      [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32])
   579  fi
   580  
   581  AC_CACHE_CHECK([for __sync_bool_compare_and_swap_8],
   582  [libgo_cv_func___sync_bool_compare_and_swap_8],
   583  [AC_LINK_IFELSE([
   584  typedef unsigned int uint64  __attribute__ ((mode (DI)));
   585  uint64 i;
   586  int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
   587  ],
   588  [libgo_cv_func___sync_bool_compare_and_swap_8=yes],
   589  [libgo_cv_func___sync_bool_compare_and_swap_8=no])])
   590  if test "$libgo_cv_func___sync_bool_compare_and_swap_8" = "yes"; then
   591    AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_8, 1,
   592      [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint64])
   593  fi
   594  
   595  AC_CACHE_CHECK([for __sync_fetch_and_add_4],
   596  [libgo_cv_func___sync_fetch_and_add_4],
   597  [AC_LINK_IFELSE([
   598  typedef unsigned int uint32  __attribute__ ((mode (SI)));
   599  uint32 i;
   600  int main() { return __sync_fetch_and_add (&i, 1); }
   601  ],
   602  [libgo_cv_func___sync_fetch_and_add_4=yes],
   603  [libgo_cv_func___sync_fetch_and_add_4=no])])
   604  if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then
   605    AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1,
   606      [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32])
   607  fi
   608  
   609  AC_CACHE_CHECK([for __sync_add_and_fetch_8],
   610  [libgo_cv_func___sync_add_and_fetch_8],
   611  [AC_LINK_IFELSE([
   612  typedef unsigned int uint64  __attribute__ ((mode (DI)));
   613  uint64 i;
   614  int main() { return __sync_add_and_fetch (&i, 1); }
   615  ],
   616  [libgo_cv_func___sync_add_and_fetch_8=yes],
   617  [libgo_cv_func___sync_add_and_fetch_8=no])])
   618  if test "$libgo_cv_func___sync_add_and_fetch_8" = "yes"; then
   619    AC_DEFINE(HAVE_SYNC_ADD_AND_FETCH_8, 1,
   620      [Define to 1 if the compiler provides the __sync_add_and_fetch function for uint64])
   621  fi
   622  
   623  dnl For x86 we want to use the -minline-all-stringops option to avoid
   624  dnl forcing a stack split when calling memcpy and friends.
   625  AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
   626  [libgo_cv_c_stringops],
   627  [CFLAGS_hold=$CFLAGS
   628  CFLAGS="$CFLAGS -minline-all-stringops"
   629  AC_COMPILE_IFELSE([int i;],
   630  [libgo_cv_c_stringops=yes],
   631  [libgo_cv_c_stringops=no])
   632  CFLAGS=$CFLAGS_hold])
   633  STRINGOPS_FLAG=
   634  if test "$libgo_cv_c_stringops" = yes; then
   635    STRINGOPS_FLAG=-minline-all-stringops
   636  fi
   637  AC_SUBST(STRINGOPS_FLAG)
   638  
   639  dnl For x86 we want to compile the math library with -mfancy-math-387
   640  dnl -funsafe-math-optimizations so that we can use the builtin
   641  dnl instructions directly.
   642  AC_CACHE_CHECK([whether compiler supports -mfancy-math-387],
   643  [libgo_cv_c_fancymath],
   644  [CFLAGS_hold=$CFLAGS
   645  CFLAGS="$CFLAGS -mfancy-math-387"
   646  AC_COMPILE_IFELSE([int i;],
   647  [libgo_cv_c_fancymath=yes],
   648  [libgo_cv_c_fancymath=no])
   649  CFLAGS=$CFLAGS_hold])
   650  MATH_FLAG=
   651  if test "$libgo_cv_c_fancymath" = yes; then
   652    MATH_FLAG="-mfancy-math-387 -funsafe-math-optimizations"
   653  else
   654    MATH_FLAG="-ffp-contract=off"
   655  fi
   656  AC_SUBST(MATH_FLAG)
   657  
   658  CFLAGS_hold=$CFLAGS
   659  CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
   660  AC_CHECK_TYPES([off64_t])
   661  CFLAGS=$CFLAGS_hold
   662  
   663  dnl Work out the size of the epoll_events struct on GNU/Linux.
   664  AC_CACHE_CHECK([epoll_event size],
   665  [libgo_cv_c_epoll_event_size],
   666  [AC_COMPUTE_INT(libgo_cv_c_epoll_event_size,
   667  [sizeof (struct epoll_event)],
   668  [#include <sys/epoll.h>],
   669  [libgo_cv_c_epoll_event_size=0])])
   670  SIZEOF_STRUCT_EPOLL_EVENT=${libgo_cv_c_epoll_event_size}
   671  AC_SUBST(SIZEOF_STRUCT_EPOLL_EVENT)
   672  
   673  dnl Work out the offset of the fd field in the epoll_events struct on
   674  dnl GNU/Linux.
   675  AC_CACHE_CHECK([epoll_event data.fd offset],
   676  [libgo_cv_c_epoll_event_fd_offset],
   677  [AC_COMPUTE_INT(libgo_cv_c_epoll_event_fd_offset,
   678  [offsetof (struct epoll_event, data.fd)],
   679  [#include <stddef.h>
   680  #include <sys/epoll.h>],
   681  [libgo_cv_c_epoll_event_fd_offset=0])])
   682  STRUCT_EPOLL_EVENT_FD_OFFSET=${libgo_cv_c_epoll_event_fd_offset}
   683  AC_SUBST(STRUCT_EPOLL_EVENT_FD_OFFSET)
   684  
   685  dnl Check if <sys/stat.h> uses timespec_t for st_?tim members.  Introduced
   686  dnl in Solaris 12 for XPG7 compatibility.
   687  AC_EGREP_HEADER([timespec_t.*st_atim], [sys/stat.h],
   688  		[have_stat_timespec=yes], [have_stat_timespec=no])
   689  AM_CONDITIONAL(HAVE_STAT_TIMESPEC, test $have_stat_timespec = yes)
   690  
   691  dnl See if struct exception is defined in <math.h>.
   692  AC_CHECK_TYPE([struct exception],
   693  [libgo_has_struct_exception=yes],
   694  [libgo_has_struct_exception=no],
   695  [#include <math.h>])
   696  if test "$libgo_has_struct_exception" = "yes"; then
   697    AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
   698              [Define to 1 if <math.h> defines struct exception])
   699  fi
   700  
   701  dnl See whether setcontext changes the value of TLS variables.
   702  AC_CACHE_CHECK([whether setcontext clobbers TLS variables],
   703  [libgo_cv_lib_setcontext_clobbers_tls],
   704  [CFLAGS_hold="$CFLAGS"
   705  CFLAGS="$PTHREAD_CFLAGS"
   706  LIBS_hold="$LIBS"
   707  LIBS="$LIBS $PTHREAD_LIBS"
   708  AC_CHECK_SIZEOF([void *])
   709  AS_VAR_ARITH([ptr_type_size], [$ac_cv_sizeof_void_p \* 8])
   710  AC_RUN_IFELSE(
   711    [AC_LANG_SOURCE([
   712  #include <pthread.h>
   713  #include <stdlib.h>
   714  #include <ucontext.h>
   715  #include <unistd.h>
   716  
   717  __thread int tls;
   718  
   719  static char stack[[10 * 1024 * 1024]];
   720  static ucontext_t c;
   721  
   722  /* Called via makecontext/setcontext.  */
   723  
   724  static void
   725  cfn (void)
   726  {
   727    exit (tls);
   728  }
   729  
   730  /* Called via pthread_create.  */
   731  
   732  static void *
   733  tfn (void *dummy)
   734  {
   735    /* The thread should still see this value after calling
   736       setcontext.  */
   737    tls = 0;
   738  
   739    setcontext (&c);
   740  
   741    /* The call to setcontext should not return.  */
   742    abort ();
   743  }
   744  
   745  int
   746  main ()
   747  {
   748    pthread_t tid;
   749  
   750    /* The thread should not see this value.  */
   751    tls = 1;
   752  
   753    if (getcontext (&c) < 0)
   754      abort ();
   755  
   756    c.uc_stack.ss_sp = stack;
   757  #ifdef MAKECONTEXT_STACK_TOP
   758    c.uc_stack.ss_sp += sizeof stack;
   759  #endif
   760    c.uc_stack.ss_flags = 0;
   761    c.uc_stack.ss_size = sizeof stack;
   762    c.uc_link = NULL;
   763    makecontext (&c, cfn, 0);
   764  
   765    if (pthread_create (&tid, NULL, tfn, NULL) != 0)
   766      abort ();
   767  
   768    if (pthread_join (tid, NULL) != 0)
   769      abort ();
   770  
   771    /* The thread should have called exit.  */
   772    abort ();
   773  }
   774  ])],
   775  [libgo_cv_lib_setcontext_clobbers_tls=no],
   776  [libgo_cv_lib_setcontext_clobbers_tls=yes],
   777  [case "$target:$ptr_type_size" in
   778    i?86-*-solaris2.1[[01]]:64 | x86_64*-*-solaris2.1[[01]]:64)
   779      libgo_cv_lib_setcontext_clobbers_tls=yes ;;
   780    *)
   781      libgo_cv_lib_setcontext_clobbers_tls=no ;;
   782   esac
   783  ])
   784  CFLAGS="$CFLAGS_hold"
   785  LIBS="$LIBS_hold"
   786  ])
   787  if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
   788    AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
   789  	    [Define if setcontext clobbers TLS variables])
   790  fi
   791  
   792  AC_CACHE_CHECK([whether .eh_frame section should be read-only],
   793  libgo_cv_ro_eh_frame, [
   794  libgo_cv_ro_eh_frame=no
   795  echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
   796  if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
   797    if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
   798      libgo_cv_ro_eh_frame=yes
   799    elif grep '.section.*eh_frame.*#alloc' conftest.c \
   800         | grep -v '#write' > /dev/null; then
   801      libgo_cv_ro_eh_frame=yes
   802    fi
   803  fi
   804  rm -f conftest.*
   805  ])
   806  if test "x$libgo_cv_ro_eh_frame" = xyes; then
   807    AC_DEFINE(EH_FRAME_FLAGS, "a",
   808  	    [Define to the flags needed for the .section .eh_frame directive.])
   809  else
   810    AC_DEFINE(EH_FRAME_FLAGS, "aw",
   811  	    [Define to the flags needed for the .section .eh_frame directive.])
   812  fi
   813  
   814  AC_CACHE_CHECK([if compiler supports -Qunused-arguments],
   815  [libgo_cv_c_unused_arguments],
   816  [CFLAGS_hold=$CFLAGS
   817  CFLAGS="$CFLAGS -Qunused-arguments"
   818  AC_COMPILE_IFELSE([[int i;]],
   819  [libgo_cv_c_unused_arguments=yes],
   820  [libgo_cv_c_unused_arguments=no])
   821  CFLAGS=$CFLAGS_hold])
   822  
   823  AC_CACHE_CHECK([if assembler supports GNU comdat group syntax],
   824  libgo_cv_as_comdat_gnu, [
   825  echo '.section .text,"axG",@progbits,.foo,comdat' > conftest.s
   826  CFLAGS_hold=$CFLAGS
   827  if test "$libgo_cv_c_unused_arguments" = yes; then
   828    CFLAGS="$CFLAGS -Qunused-arguments"
   829  fi
   830  if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
   831    libgo_cv_as_comdat_gnu=yes
   832  else
   833    libgo_cv_as_comdat_gnu=no
   834  fi
   835  CFLAGS=$CFLAGS_hold
   836  ])
   837  if test "x$libgo_cv_as_comdat_gnu" = xyes; then
   838    AC_DEFINE(HAVE_AS_COMDAT_GAS, 1,
   839  	    [Define if your assembler supports GNU comdat group syntax.])
   840  fi
   841  
   842  AC_CACHE_CHECK([assembler supports pc related relocs],
   843  libgo_cv_as_x86_pcrel, [
   844  libgo_cv_as_x86_pcrel=yes
   845  echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
   846  CFLAGS_hold=$CFLAGS
   847  if test "$libgo_cv_c_unused_arguments" = yes; then
   848    CFLAGS="$CFLAGS -Qunused-arguments"
   849  fi
   850  if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
   851      libgo_cv_as_x86_pcrel=no
   852  fi
   853  CFLAGS=$CFLAGS_hold
   854  ])
   855  if test "x$libgo_cv_as_x86_pcrel" = xyes; then
   856    AC_DEFINE(HAVE_AS_X86_PCREL, 1,
   857  	    [Define if your assembler supports PC relative relocs.])
   858  fi
   859  
   860  AC_CACHE_CHECK([assembler supports unwind section type],
   861  libgo_cv_as_x86_64_unwind_section_type, [
   862  libgo_cv_as_x86_64_unwind_section_type=yes
   863  echo '.section .eh_frame,"a",@unwind' > conftest.s
   864  CFLAGS_hold=$CFLAGS
   865  if test "$libgo_cv_c_unused_arguments" = yes; then
   866    CFLAGS="$CFLAGS -Qunused-arguments"
   867  fi
   868  if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
   869      libgo_cv_as_x86_64_unwind_section_type=no
   870  fi
   871  CFLAGS=$CFLAGS_hold
   872  ])
   873  if test "x$libgo_cv_as_x86_64_unwind_section_type" = xyes; then
   874    AC_DEFINE(HAVE_AS_X86_64_UNWIND_SECTION_TYPE, 1,
   875  	    [Define if your assembler supports unwind section type.])
   876  fi
   877  
   878  AC_CACHE_SAVE
   879  
   880  if test ${multilib} = yes; then
   881    multilib_arg="--enable-multilib"
   882  else
   883    multilib_arg=
   884  fi
   885  
   886  AC_CONFIG_FILES(Makefile testsuite/Makefile)
   887  
   888  AC_CONFIG_COMMANDS([default],
   889  [if test -n "$CONFIG_FILES"; then
   890     # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
   891     # that multilib installs will end up installed in the correct place.
   892     # The testsuite needs it for multilib-aware ABI baseline files.
   893     # To work around this not being passed down from config-ml.in ->
   894     # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
   895     # append it here.  Only modify Makefiles that have just been created.
   896     #
   897     # Also, get rid of this simulated-VPATH thing that automake does.
   898     cat > vpsed << \_EOF
   899  s!`test -f '$<' || echo '$(srcdir)/'`!!
   900  _EOF
   901     for i in $SUBDIRS; do
   902      case $CONFIG_FILES in
   903       *${i}/Makefile*)
   904         #echo "Adding MULTISUBDIR to $i/Makefile"
   905         sed -f vpsed $i/Makefile > tmp
   906         grep '^MULTISUBDIR =' Makefile >> tmp
   907         mv tmp $i/Makefile
   908         ;;
   909      esac
   910     done
   911     rm vpsed
   912   fi
   913  ],
   914  [
   915  # Variables needed in config.status (file generation) which aren't already
   916  # passed by autoconf.
   917  SUBDIRS="$SUBDIRS"
   918  ])
   919  
   920  AC_OUTPUT