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.
This commit is contained in:
parent
9c1f03a38a
commit
c5eefb7f37
Notes:
git
2022-12-23 08:45:45 +00:00
@ -3053,14 +3053,9 @@ AC_SUBST(EXTOBJS)
|
|||||||
: ${LDFLAGS=""}
|
: ${LDFLAGS=""}
|
||||||
: ${LIBPATHENV=DYLD_FALLBACK_LIBRARY_PATH}
|
: ${LIBPATHENV=DYLD_FALLBACK_LIBRARY_PATH}
|
||||||
: ${PRELOADENV=DYLD_INSERT_LIBRARIES}
|
: ${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
|
# When building exts as bundles, a mach-o bundle needs to know its loader
|
||||||
# program to bind symbols from the ruby executable
|
# program to bind symbols from the ruby executable
|
||||||
EXTDLDFLAGS="-bundle_loader '\$(BUILTRUBY)'"
|
EXTDLDFLAGS="-bundle_loader '\$(BUILTRUBY)' -Wl,-flat_namespace"
|
||||||
])
|
|
||||||
rb_cv_dlopen=yes],
|
rb_cv_dlopen=yes],
|
||||||
[aix*], [ : ${LDSHARED='$(CC)'}
|
[aix*], [ : ${LDSHARED='$(CC)'}
|
||||||
AS_IF([test "$GCC" = yes], [
|
AS_IF([test "$GCC" = yes], [
|
||||||
@ -3354,7 +3349,7 @@ AS_IF([test x"$cross_compiling" = xyes], [
|
|||||||
AC_SUBST(XRUBY_RUBYLIBDIR)
|
AC_SUBST(XRUBY_RUBYLIBDIR)
|
||||||
AC_SUBST(XRUBY_RUBYHDRDIR)
|
AC_SUBST(XRUBY_RUBYHDRDIR)
|
||||||
PREP='$(arch)-fake.rb'
|
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
|
# darwin target requires miniruby for linking ext bundles
|
||||||
PREP="$PREP"' miniruby$(EXEEXT)'
|
PREP="$PREP"' miniruby$(EXEEXT)'
|
||||||
])
|
])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user