summaryrefslogtreecommitdiff
path: root/template
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-03 15:09:47 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-03 15:09:47 +0000
commita4fd2a791e4261bdfe726da20d2762956ab38cda (patch)
tree36f3931c86f6b774d5608211f40d90b1a8245050 /template
parent8b6e42a92cfafa1c4522a498efcfeeb8cda2bc3b (diff)
ruby-runner
* 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 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'template')
-rw-r--r--template/ruby-runner.c.in27
1 files changed, 27 insertions, 0 deletions
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;
+}