summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuta Saito <kateinoigakukun@gmail.com>2021-12-06 11:25:44 +0900
committerYuta Saito <kateinoigakukun@gmail.com>2022-01-19 11:19:06 +0900
commitbe1382b498e05a806f1db52629a54046a2e558d0 (patch)
tree7ccac879111eab9f740f818a6b8d39b2438c2328
parent9033ac3e2ce5735c11e99f7f4ecf63d5c258ac1e (diff)
ruby.c: initialize extra optional extensions linked statically
Add a hook point to initialize extra extension libraries. The default hook function is replaced when linking a strong `Init_extra_exts` symbol. A builder can insert an object file that defines Init_extra_exts by XLDFLAGS.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/5407
-rw-r--r--ruby.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/ruby.c b/ruby.c
index b300526017..ade434cff3 100644
--- a/ruby.c
+++ b/ruby.c
@@ -1524,6 +1524,15 @@ ruby_init_prelude(void)
void rb_call_builtin_inits(void);
+// Initialize extra optional exts linked statically.
+// This empty definition will be replaced with the actual strong symbol by linker.
+#if RBIMPL_HAS_ATTRIBUTE(weak)
+__attribute__((weak))
+#endif
+void Init_extra_exts(void)
+{
+}
+
static void
ruby_opt_init(ruby_cmdline_options_t *opt)
{
@@ -1542,6 +1551,7 @@ ruby_opt_init(ruby_cmdline_options_t *opt)
rb_warning_category_update(opt->warn.mask, opt->warn.set);
Init_ext(); /* load statically linked extensions before rubygems */
+ Init_extra_exts();
rb_call_builtin_inits();
ruby_init_prelude();