rust/src/etc/combine-tests.py
Corey Richardson dee1107571 Rename pkgid to crate_id
Closes #11035
2013-12-19 10:10:23 -05:00

85 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python
# xfail-license
# this combines all the working run-pass tests into a single large crate so we
# can run it "fast": spawning zillions of windows processes is our major build
# bottleneck (and it doesn't hurt to run faster on other platforms as well).
import sys
import os
import codecs
def scrub(b):
if sys.version_info >= (3,) and type(b) == bytes:
return b.decode('ascii')
else:
return b
src_dir = scrub(os.getenv("CFG_SRC_DIR"))
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 = []
for t in os.listdir(run_pass):
if t.endswith(".rs") and not (
t.startswith(".") or t.startswith("#") or t.startswith("~")):
f = codecs.open(os.path.join(run_pass, t), "r", "utf8")
s = f.read()
if not ("xfail-test" in s or
"xfail-fast" in s or
"xfail-win32" in s):
if not "pub fn main" in s and "fn main" in s:
print("Warning: no public entry point in " + t)
stage2_tests.append(t)
f.close()
stage2_tests.sort()
c = open("tmp/run_pass_stage2.rc", "w")
i = 0
c.write(
"""
// AUTO-GENERATED FILE: DO NOT EDIT
#[crate_id=\"run_pass_stage2#0.1\"];
#[pkgid=\"run_pass_stage2#0.1\"];
#[link(name=\"run_pass_stage2\", vers=\"0.1\")];
#[feature(globs, macro_rules, struct_variant, managed_boxes)];
#[allow(warnings)];
"""
)
for t in stage2_tests:
p = os.path.join(run_pass, t)
p = p.replace("\\", "\\\\")
c.write("#[path = \"%s\"]" % p)
c.write("pub mod t_%d;\n" % i)
i += 1
c.close()
d = open("tmp/run_pass_stage2_driver.rs", "w")
d.write(
"""
// AUTO-GENERATED FILE: DO NOT EDIT
#[feature(globs, managed_boxes)];
extern mod extra;
extern mod run_pass_stage2;
use run_pass_stage2::*;
use std::io;
use std::io::Writer;
fn main() {
let mut out = io::stdout();
"""
)
i = 0
for t in stage2_tests:
p = os.path.join("test", "run-pass", t)
p = p.replace("\\", "\\\\")
d.write(" out.write(\"run-pass [stage2]: %s\\n\".as_bytes());\n" % p)
d.write(" t_%d::main();\n" % i)
i += 1
d.write("}\n")