diff --git a/mk/tests.mk b/mk/tests.mk index 7f0c2731b30..b77682aaa02 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -206,11 +206,11 @@ stage2/lib/$(FT_LIB): test/$(FT).rc $(SREQ2) @$(call E, compile_and_link: $@) $(STAGE2) --shared -o $@ $< -test/$(FT_DRIVER): test/$(FT_DRIVER).rs stage2/lib/$(FT_LIB) $(SREQ2) +test/$(FT_DRIVER)$(X): test/$(FT_DRIVER).rs stage2/lib/$(FT_LIB) $(SREQ2) @$(call E, compile_and_link: $@) $(STAGE2) -o $@ $< -test/$(FT_DRIVER).out: test/$(FT_DRIVER) $(SREQ2) +test/$(FT_DRIVER).out: test/$(FT_DRIVER)$(X) $(SREQ2) $(Q)$(call CFG_RUN_TEST, $<) | tee $@ diff --git a/src/comp/front/eval.rs b/src/comp/front/eval.rs index ce08daf5c50..2dc76bd793b 100644 --- a/src/comp/front/eval.rs +++ b/src/comp/front/eval.rs @@ -285,7 +285,11 @@ fn eval_crate_directive(ctx cx, env e, @ast::crate_directive cdir, str prefix, case (some(?f)) { file_path = f; } case (none) { } } - auto full_path = prefix + std::fs::path_sep() + file_path; + auto full_path = if (std::fs::path_is_absolute(file_path)) { + file_path + } else { + prefix + std::fs::path_sep() + file_path + }; if (cx.mode == mode_depend) { cx.deps += [full_path]; ret; } auto p0 = new_parser(cx.sess, e, full_path, cx.chpos, @@ -306,7 +310,11 @@ fn eval_crate_directive(ctx cx, env e, @ast::crate_directive cdir, str prefix, case (ast::cdir_dir_mod(?id, ?dir_opt, ?cdirs, ?attrs)) { auto path = id; alt (dir_opt) { case (some(?d)) { path = d; } case (none) { } } - auto full_path = prefix + std::fs::path_sep() + path; + auto full_path = if (std::fs::path_is_absolute(path)) { + path + } else { + prefix + std::fs::path_sep() + path + }; auto m0 = eval_crate_directives_to_mod(cx, e, cdirs, full_path); auto i = @rec(ident=id, attrs=attrs, diff --git a/src/etc/combine-tests.py b/src/etc/combine-tests.py index 8abbed8dd6e..d1ee5048ddd 100755 --- a/src/etc/combine-tests.py +++ b/src/etc/combine-tests.py @@ -17,6 +17,7 @@ if not src_dir: raise Exception("missing env var CFG_SRC_DIR") run_pass = os.path.join(src_dir, "src", "test", "run-pass") +run_pass = os.path.abspath(run_pass) stage2_tests = [] take_args = {} @@ -32,17 +33,13 @@ for t in os.listdir(run_pass): stage2_tests.sort() -# add a .. prefix because we're about to write down into test/.. -parent_run_pass = os.path.join("..", run_pass); - - c = open("test/run_pass_stage2.rc", "w") i = 0 c.write("// AUTO-GENERATED FILE: DO NOT EDIT\n") c.write("#[link(name=\"run_pass_stage2\", vers=\"0.1\")];\n") for t in stage2_tests: c.write("mod t_%d = \"%s\";\n" - % (i, os.path.join(parent_run_pass, t))) + % (i, os.path.join(run_pass, t))) i += 1 c.close()