diff options
author | Yuta Saito <kateinoigakukun@gmail.com> | 2022-12-23 13:58:45 +0900 |
---|---|---|
committer | Yuta Saito <kateinoigakukun@gmail.com> | 2022-12-23 17:45:20 +0900 |
commit | c5eefb7f37db2865891298dd1a1e60dff09560ad (patch) | |
tree | 37251b4f3bf04c02193b4b17f1aed121cb435b79 /configure.ac | |
parent | 9c1f03a38a2650a10c24433663eaf46e8dcfab59 (diff) |
darwin: resolve rb symbols from ext by `-flat_namespace` to see libruby transitively
This repairs the assumption, which many fat-gem maintainer expect, "An
extension built with --disable-shared Ruby is loadable from
--enable-shared Ruby".
By default all references resolved to a dynamic library use "two-level
namespace", which record the library name and symbol name for each
resolution entry. On the other hand, `-flat_namespace` discards the
library name information and resolves symbols "flatly".
This behavior is useful for us to ignore which image (`ruby`
executable or `libruby.dylib`) provides rb symbols at runtime.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7008
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/configure.ac b/configure.ac index 218c441ff7..5aa2ad60ca 100644 --- a/configure.ac +++ b/configure.ac @@ -3053,14 +3053,9 @@ AC_SUBST(EXTOBJS) : ${LDFLAGS=""} : ${LIBPATHENV=DYLD_FALLBACK_LIBRARY_PATH} : ${PRELOADENV=DYLD_INSERT_LIBRARIES} - AS_IF([test x"$enable_shared" = xyes], [ - # Resolve symbols from libruby.dylib when --enable-shared - EXTDLDFLAGS='$(LIBRUBYARG_SHARED)' - ], [test "x$EXTSTATIC" = x], [ - # When building exts as bundles, a mach-o bundle needs to know its loader - # program to bind symbols from the ruby executable - EXTDLDFLAGS="-bundle_loader '\$(BUILTRUBY)'" - ]) + # When building exts as bundles, a mach-o bundle needs to know its loader + # program to bind symbols from the ruby executable + EXTDLDFLAGS="-bundle_loader '\$(BUILTRUBY)' -Wl,-flat_namespace" rb_cv_dlopen=yes], [aix*], [ : ${LDSHARED='$(CC)'} AS_IF([test "$GCC" = yes], [ @@ -3354,7 +3349,7 @@ AS_IF([test x"$cross_compiling" = xyes], [ AC_SUBST(XRUBY_RUBYLIBDIR) AC_SUBST(XRUBY_RUBYHDRDIR) PREP='$(arch)-fake.rb' - AS_CASE(["$enable_shared:$EXTSTATIC:$target_os"], [no::darwin*], [ + AS_CASE(["$target_os"], [darwin*], [ # darwin target requires miniruby for linking ext bundles PREP="$PREP"' miniruby$(EXEEXT)' ]) |