[前][次][番号順一覧][スレッド一覧]

ruby-changes:73832

From: Nobuyoshi <ko1@a...>
Date: Sat, 1 Oct 2022 18:10:32 +0900 (JST)
Subject: [ruby-changes:73832] bf92aace45 (ruby_3_1): [Bug #19005] dynamic_lookup linker option in external libraries

https://git.ruby-lang.org/ruby.git/commit/?id=bf92aace45

From bf92aace45ed7f2e5455cf0a2fdd4d1cfa9edd38 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Sat, 17 Sep 2022 12:09:34 +0900
Subject: [Bug #19005] dynamic_lookup linker option in external libraries

The warning against `-undefined dynamic_lookup` is just a warning yet,
and many gems seem to pay no attention to warnings.  Until it fails
actually, keep it as a migration path, except for standard extension
libraries and bundled extension gems.
---
 configure.ac | 36 ++++++++++++++++++++++++------------
 lib/mkmf.rb  |  1 +
 2 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/configure.ac b/configure.ac
index fe46bde717..56f987d6a9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2939,7 +2939,7 @@ STATIC= https://github.com/ruby/ruby/blob/trunk/configure.ac#L2939
 }
 
 : "rpath" && {
-  AS_CASE(["$target_os"],
+    AS_CASE(["$target_os"],
 	[hpux*], [	DLDFLAGS="$DLDFLAGS -E"
 			: ${LDSHARED='$(LD) -b'}
 			XLDFLAGS="$XLDFLAGS -Wl,-E"
@@ -3043,23 +3043,35 @@ STATIC= https://github.com/ruby/ruby/blob/trunk/configure.ac#L3043
 	[atheos*], [	: ${LDSHARED='$(CC) -shared'}
 			rb_cv_dlopen=yes],
 	[	: ${LDSHARED='$(LD)'}])
-  AC_MSG_RESULT($rb_cv_dlopen)
+    AC_MSG_RESULT($rb_cv_dlopen)
+}
 
-  AS_IF([test "$rb_cv_dlopen" = yes], [
+AS_IF([test "$rb_cv_dlopen" = yes], [
     AS_CASE(["$target_os"],
-      [darwin*], [
+    [darwin*], [
+        AC_SUBST(ADDITIONAL_DLDFLAGS, "")
 	for flag in \
 	  "-multiply_defined suppress" \
+	  "-undefined dynamic_lookup" \
 	  ; do
-	  test "x${linker_flag}" = x || flag="${linker_flag}`echo ${flag} | tr ' ' ,`"
-	  RUBY_TRY_LDFLAGS([$flag], [], [flag=])
-	  AS_IF([test "x$flag" != x], [
-	    RUBY_APPEND_OPTIONS(DLDFLAGS, [$flag])
-	  ])
+            test "x${linker_flag}" = x || flag="${linker_flag}`echo ${flag} | tr ' ' ,`"
+            RUBY_TRY_LDFLAGS([$flag], [], [$flag=])
+            AS_IF([test x"$flag" = x], [continue])
+
+            AC_MSG_CHECKING([whether $flag is accepted for bundle])
+            : > conftest.c
+            AS_IF([${LDSHARED/'$(CC)'/$CC} -o conftest.bundle $flag conftest.c >/dev/null 2>conftest.err &&
+                test ! -s conftest.err], [
+                AC_MSG_RESULT([yes])
+                RUBY_APPEND_OPTIONS(DLDFLAGS, [$flag])
+            ], [
+                AC_MSG_RESULT([no])
+                RUBY_APPEND_OPTIONS(ADDITIONAL_DLDFLAGS, [$flag])
+            ])
+            rm -fr conftest.*
 	done
-      ])
-  ])
-}
+    ])
+])
 
 AS_IF([test "${LDSHAREDXX}" = ""], [
     AS_CASE(["${LDSHARED}"],
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index 9ec4c8fff0..907c9dbcbc 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -2602,6 +2602,7 @@ site-install-rb: install-rb https://github.com/ruby/ruby/blob/trunk/lib/mkmf.rb#L2602
     $INCFLAGS << " -I$(hdrdir)/ruby/backward" unless $extmk
     $INCFLAGS << " -I$(hdrdir) -I$(srcdir)"
     $DLDFLAGS = with_config("dldflags", arg_config("DLDFLAGS", config["DLDFLAGS"])).dup
+    config_string("ADDITIONAL_DLDFLAGS") {|flags| $DLDFLAGS << " " << flags} unless $extmk
     $LIBEXT = config['LIBEXT'].dup
     $OBJEXT = config["OBJEXT"].dup
     $EXEEXT = config["EXEEXT"].dup
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]