summaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-05-15 10:50:57 -0700
committerIan Lance Taylor <iant@golang.org>2020-05-15 15:33:20 -0700
commite478cacb62f116d2c8efdabc4b51e6d2d7041aae (patch)
tree842f0f76d7668a745c1842e07f39b3cd56356a37 /libgo
parent29f0e90d9904d8e0965443d4da4c95ddde5edb1e (diff)
libgo: only build syscall test with -static if it works
Test whether -static works, and use it if possible. This time for sure. For PR go/95061 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/234024
Diffstat (limited to 'libgo')
-rw-r--r--libgo/Makefile.am4
-rw-r--r--libgo/Makefile.in4
-rwxr-xr-xlibgo/configure48
-rw-r--r--libgo/configure.ac11
4 files changed, 61 insertions, 6 deletions
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index 0bbe54cfe1b..5b1807228ad 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -967,8 +967,8 @@ endif
# Also use -fno-inline to get better results from the memory profiler.
runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
-if LIBGO_IS_LINUX
-# Use -static for the syscall tests, because otherwise when
+if HAVE_STATIC_LINK
+# Use -static for the syscall tests if possible, because otherwise when
# running as root the re-execs ignore LD_LIBRARY_PATH.
syscall_check_GOCFLAGS = -static
endif
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index 982253d7293..b2712eba971 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -1105,9 +1105,9 @@ runtime_internal_sys_lo_check_GOCFLAGS = -fgo-compiling-runtime
# Also use -fno-inline to get better results from the memory profiler.
runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
-# Use -static for the syscall tests, because otherwise when
+# Use -static for the syscall tests if possible, because otherwise when
# running as root the re-execs ignore LD_LIBRARY_PATH.
-@LIBGO_IS_LINUX_TRUE@syscall_check_GOCFLAGS = -static
+@HAVE_STATIC_LINK_TRUE@syscall_check_GOCFLAGS = -static
extra_go_files_runtime_internal_sys = version.go
extra_go_files_internal_cpu = cpugen.go
extra_go_files_golang_org_x_sys_cpu = gcpugen.go
diff --git a/libgo/configure b/libgo/configure
index 2f787392abd..2a9c7e61f63 100755
--- a/libgo/configure
+++ b/libgo/configure
@@ -633,6 +633,8 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+HAVE_STATIC_LINK_FALSE
+HAVE_STATIC_LINK_TRUE
HAVE_STAT_TIMESPEC_FALSE
HAVE_STAT_TIMESPEC_TRUE
STRUCT_EPOLL_EVENT_FD_OFFSET
@@ -11490,7 +11492,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11493 "configure"
+#line 11495 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11596,7 +11598,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11599 "configure"
+#line 11601 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15788,6 +15790,44 @@ $as_echo "#define HAVE_AS_X86_AES 1" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -static is supported" >&5
+$as_echo_n "checking whether -static is supported... " >&6; }
+if ${libgo_cv_ld_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ LDFLAGS_hold=$LDFLAGS
+LDFLAGS="$LDFLAGS -static"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ libgo_cv_ld_static=yes
+else
+ libgo_cv_ld_static=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LDFLAGS=$LDFLAGS_hold
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgo_cv_ld_static" >&5
+$as_echo "$libgo_cv_ld_static" >&6; }
+ if test "$libgo_cv_ld_static" = yes; then
+ HAVE_STATIC_LINK_TRUE=
+ HAVE_STATIC_LINK_FALSE='#'
+else
+ HAVE_STATIC_LINK_TRUE='#'
+ HAVE_STATIC_LINK_FALSE=
+fi
+
+
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@@ -16108,6 +16148,10 @@ if test -z "${HAVE_STAT_TIMESPEC_TRUE}" && test -z "${HAVE_STAT_TIMESPEC_FALSE}"
as_fn_error $? "conditional \"HAVE_STAT_TIMESPEC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_STATIC_LINK_TRUE}" && test -z "${HAVE_STATIC_LINK_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_STATIC_LINK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
diff --git a/libgo/configure.ac b/libgo/configure.ac
index f800d44a0e9..235d867ccda 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -881,6 +881,17 @@ if test "x$libgo_cv_as_x86_aes" = xyes; then
[Define if your assembler supports AES instructions.])
fi
+dnl Test whether the linker supports the -static option.
+AC_CACHE_CHECK([whether -static is supported],
+[libgo_cv_ld_static],
+[LDFLAGS_hold=$LDFLAGS
+LDFLAGS="$LDFLAGS -static"
+AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
+[libgo_cv_ld_static=yes],
+[libgo_cv_ld_static=no])
+LDFLAGS=$LDFLAGS_hold])
+AM_CONDITIONAL(HAVE_STATIC_LINK, test "$libgo_cv_ld_static" = yes)
+
AC_CACHE_SAVE
if test ${multilib} = yes; then