aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--Makefile.in8
-rw-r--r--template/ruby-runner.c.in27
-rwxr-xr-xtool/runruby.rb2
4 files changed, 46 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 1859053d7d..417a001dd1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Sun Oct 4 00:09:45 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/ruby-runner.c.in: wrapper to set dynamic loading path
+ environment variable. /bin/sh on Mac OS X 10.11 (El Capitan)
+ clears DYLD_LIBRARY_PATH.
+
+ it must:
+ - do nothing even if current directory is not present
+ - do not set other environment variables, e.g. PWD, SHLVL, etc
+ - do not open other FDs, e.g. pipes for timer thread
+
Fri Oct 2 09:20:20 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
* common.mk, lib/unicode_normalize/tables.rb: Change Unicode
diff --git a/Makefile.in b/Makefile.in
index 2becf39a4f..817976999a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -147,7 +147,7 @@ DTRACE_DEPENDENT_OBJS = array.$(OBJEXT) \
THREAD_MODEL = @THREAD_MODEL@
-PREP = @PREP@
+PREP = @PREP@ ruby-runner
ARCHFILE = @ARCHFILE@
SETUP =
EXTSTATIC = @EXTSTATIC@
@@ -252,6 +252,12 @@ ruby_pc = @ruby_pc@
$(ruby_pc):
@./config.status --file=$@:$(srcdir)/template/ruby.pc.in
+ruby-runner.c: template/ruby-runner.c.in
+ @./config.status --file=$@:$(srcdir)/template/$(@F).in
+
+ruby-runner$(EXEEXT): ruby-runner.c
+ $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(LIBS) $(OUTFLAG)$@ ruby-runner.c
+
$(RBCONFIG): $($(CROSS_COMPILING:no=)PREP)
rbconfig.rb: $(RBCONFIG)
diff --git a/template/ruby-runner.c.in b/template/ruby-runner.c.in
new file mode 100644
index 0000000000..56386a8d6f
--- /dev/null
+++ b/template/ruby-runner.c.in
@@ -0,0 +1,27 @@
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define BUILDDIR "@abs_top_builddir@"
+#define LIBPATHENV "@LIBPATHENV@"
+
+int
+main(int argc, char **argv)
+{
+ static const char builddir[] = BUILDDIR;
+ const char *libpath = getenv(LIBPATHENV);
+ if (libpath) {
+ size_t n = strlen(libpath);
+ char *e = malloc(sizeof(builddir)+n+1);
+ memcpy(e, builddir, sizeof(builddir)-1);
+ e[sizeof(builddir)-1] = '@PATH_SEPARATOR@';
+ memcpy(e+sizeof(builddir), libpath, n+1);
+ libpath = e;
+ }
+ else {
+ libpath = builddir;
+ }
+ setenv(LIBPATHENV, libpath, 1);
+ execv(BUILDDIR"/@RUBY_BASE_NAME@", argv);
+ return -1;
+}
diff --git a/tool/runruby.rb b/tool/runruby.rb
index 21735e8202..e6ddbf7f39 100755
--- a/tool/runruby.rb
+++ b/tool/runruby.rb
@@ -66,7 +66,7 @@ config["bindir"] = abs_archdir
env = {}
-env["RUBY"] = File.expand_path(ruby)
+env["RUBY"] = File.join(abs_archdir, "ruby-runner#{config['EXEEXT']}")
env["PATH"] = [abs_archdir, ENV["PATH"]].compact.join(File::PATH_SEPARATOR)
if e = ENV["RUBYLIB"]