aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authork0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-31 12:43:06 +0000
committerk0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-31 12:43:06 +0000
commit26e79f49284569598f458f7335d12de8f2e62706 (patch)
treeaf04e13ee66ad9b16930ac3fefead4bcecc2082f
parent1a442507a7b74ee9fe62b4811a7a625ba761fb25 (diff)
downloadruby-26e79f49284569598f458f7335d12de8f2e62706.tar.gz
mjit.c: allow using MJIT header in build directory
when $MJIT_SEARCH_BUILD_DIR is set. If prefix path is owned by root, `make install` needs to be run by root. But in general we don't want to run `make test-all`, and also running `make test-all` currently fails due to permission tests of rdoc and rubygems. Thus, prior to this commit, specifying a prefix like "/usr/local" could mean there was no way to pass test-all. So we should not depend on `make install` for `make test-all`. Thus I reverted r64104 and r64103, and applied this workaround to pass `make test-all` without `make install`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--Makefile.in1
-rw-r--r--common.mk5
-rw-r--r--mjit.c17
-rw-r--r--test/lib/jit_support.rb3
-rw-r--r--win32/Makefile.sub1
5 files changed, 18 insertions, 9 deletions
diff --git a/Makefile.in b/Makefile.in
index 863e573baa..bd5ab6a120 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -589,6 +589,7 @@ mjit_config.h:
echo '#define RUBY_MJIT_CONFIG_H 1'; \
echo; \
sep=; \
+ quote MJIT_BUILD_DIR "$(dir $(realpath $(firstword $(MAKEFILE_LIST))))"; \
quote MJIT_MIN_HEADER_NAME "/$(MJIT_HEADER_INSTALL_DIR)/$(MJIT_MIN_HEADER_NAME)"; \
sep=,; \
quote "MJIT_CC_COMMON " $(MJIT_CC); \
diff --git a/common.mk b/common.mk
index 34ed94eaa5..858fbb8047 100644
--- a/common.mk
+++ b/common.mk
@@ -732,13 +732,10 @@ no-test-testframework: PHONY
test-sample: test-basic # backward compatibility for mswin-build
test: btest-ruby test-knownbug test-basic
-INPLACE_TEST = $(LIBRUBY_RELATIVE:yes=)
# $ make test-all TESTOPTS="--help" displays more detail
# for example, make test-all TESTOPTS="-j2 -v -n test-name -- test-file-name"
test-all: $(TEST_RUNNABLE)-test-all
-# `make test-all` depends on `make install`: Since r62262, test_jit.rb fails if installed MJIT header is not updated
-# and --enable-load-relative is not specified. We don't have solution for this yet. See also: https://bugs.ruby-lang.org/issues/13620
-yes-test-all: programs $(INPLACE_TEST:no=install) PHONY
+yes-test-all: programs PHONY
$(gnumake_recursive)$(Q)$(exec) $(RUNRUBY) "$(srcdir)/test/runner.rb" --ruby="$(RUNRUBY)" $(TEST_EXCLUDES) $(TESTOPTS) $(TESTS)
TESTS_BUILD = mkmf
no-test-all: PHONY
diff --git a/mjit.c b/mjit.c
index 91839092c9..fe1d21af67 100644
--- a/mjit.c
+++ b/mjit.c
@@ -1469,7 +1469,7 @@ init_header_filename(void)
int fd;
/* Root path of the running ruby process. Equal to RbConfig::TOPDIR. */
VALUE basedir_val;
- char *basedir;
+ const char *basedir;
size_t baselen;
/* A name of the header file included in any C file generated by MJIT for iseqs. */
static const char header_name[] = MJIT_MIN_HEADER_NAME;
@@ -1486,9 +1486,18 @@ init_header_filename(void)
const size_t libpathflag_len = sizeof(libpathflag) - 1;
#endif
- basedir_val = ruby_prefix_path;
- basedir = StringValuePtr(basedir_val);
- baselen = RSTRING_LEN(basedir_val);
+ if (getenv("MJIT_SEARCH_BUILD_DIR")) {
+ /* This path is not intended to be used on production, but using build directory's
+ header file here because people want to run `make test-all` without running
+ `make install`. Don't use $MJIT_SEARCH_BUILD_DIR except for test-all. */
+ basedir = MJIT_BUILD_DIR;
+ baselen = strlen(basedir);
+ }
+ else {
+ basedir_val = ruby_prefix_path;
+ basedir = StringValuePtr(basedir_val);
+ baselen = RSTRING_LEN(basedir_val);
+ }
header_file = xmalloc(baselen + header_name_len + 1);
p = append_str2(header_file, basedir, baselen);
diff --git a/test/lib/jit_support.rb b/test/lib/jit_support.rb
index 2ee1329e31..31f62c0a60 100644
--- a/test/lib/jit_support.rb
+++ b/test/lib/jit_support.rb
@@ -35,7 +35,8 @@ module JITSupport
]
args << '--jit-save-temps' if save_temps
args << '-e' << script
- args.unshift(env) if env
+ base_env = { 'MJIT_SEARCH_BUILD_DIR' => 'true' } # workaround to skip requiring `make install` for `make test-all`
+ args.unshift(env ? base_env.merge!(env) : base_env)
EnvUtil.invoke_ruby(args,
'', true, true, timeout: timeout,
)
diff --git a/win32/Makefile.sub b/win32/Makefile.sub
index becc6c2057..fff0e55d75 100644
--- a/win32/Makefile.sub
+++ b/win32/Makefile.sub
@@ -1295,6 +1295,7 @@ mjit_config.h:
#ifndef RUBY_MJIT_CONFIG_H
#define RUBY_MJIT_CONFIG_H 1
+#define MJIT_BUILD_DIR "$(MAKEDIR)"
#define MJIT_MIN_HEADER_NAME "/$(MJIT_HEADER_INSTALL_DIR)/$(MJIT_MIN_HEADER_NAME)"
<<KEEP
@