Skip to content

Commit 0bddfec

Browse files
committed
Don't copy sources in OUT_DIR anymore (fixes #218)
This messes things up on Windows. :(
1 parent 49c377b commit 0bddfec

File tree

1 file changed

+23
-48
lines changed

1 file changed

+23
-48
lines changed

build.rs

+23-48
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,14 @@ fn main() {
4343
env::set_var("MOZCONFIG", "");
4444

4545
let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap());
46-
let src_dir = out_dir.join("mozjs");
4746
let build_dir = out_dir.join("build");
4847

4948
// Used by rust-mozjs downstream, don't remove.
5049
println!("cargo:outdir={}", build_dir.display());
5150

52-
copy_sources("mozjs".as_ref(), &src_dir);
53-
5451
fs::create_dir_all(&build_dir).expect("could not create build dir");
5552

56-
build_jsapi(&src_dir, &build_dir);
53+
build_jsapi(&build_dir);
5754
build_jsglue(&build_dir);
5855
build_jsapi_bindings(&build_dir);
5956

@@ -62,7 +59,11 @@ fn main() {
6259
}
6360

6461
for entry in WalkDir::new("mozjs") {
65-
println!("cargo:rerun-if-changed={}", entry.path().display());
62+
let entry = entry.unwrap();
63+
let path = entry.path();
64+
if !ignore(path) {
65+
println!("cargo:rerun-if-changed={}", path.display());
66+
}
6667
}
6768

6869
for file in EXTRA_FILES {
@@ -125,7 +126,7 @@ fn cc_flags() -> Vec<&'static str> {
125126
result
126127
}
127128

128-
fn build_jsapi(src_dir: &Path, build_dir: &Path) {
129+
fn build_jsapi(build_dir: &Path) {
129130
let target = env::var("TARGET").unwrap();
130131
let mut make = find_make();
131132

@@ -160,7 +161,7 @@ fn build_jsapi(src_dir: &Path, build_dir: &Path) {
160161
.args(&["-R", "-f"])
161162
.arg(cargo_manifest_dir.join("makefile.cargo"))
162163
.current_dir(&build_dir)
163-
.env("SRC_DIR", &src_dir)
164+
.env("SRC_DIR", &cargo_manifest_dir.join("mozjs"))
164165
.status()
165166
.expect("Failed to run `make`");
166167
assert!(result.success());
@@ -390,45 +391,19 @@ const MODULE_RAW_LINES: &'static [(&'static str, &'static str)] = &[
390391
("root::JS", "pub type Rooted<T> = ::jsgc::Rooted<T>;"),
391392
];
392393

393-
fn copy_sources(source: &Path, target: &Path) {
394-
for entry in WalkDir::new(source) {
395-
let entry = entry.expect("could not walk source tree");
396-
let relative_path = entry.path().strip_prefix(&source).unwrap();
397-
let target_path = target.join(relative_path);
398-
399-
if entry.path().is_dir() {
400-
if !target_path.exists() {
401-
fs::create_dir(target_path).expect("could not create directory");
402-
}
403-
} else {
404-
copy_file(entry.path(), &target_path)
405-
}
406-
}
407-
}
408-
409-
fn copy_file(source: &Path, target: &Path) {
410-
if !target_is_up_to_date(&source, &target) {
411-
fs::copy(&source, &target).expect("could not copy file");
412-
}
413-
}
414-
415-
fn target_is_up_to_date(source: &Path, target: &Path) -> bool {
416-
if !target.exists() {
417-
return false;
418-
}
419-
420-
let source_metadata = source.metadata().expect("could not read source metadata");
421-
let target_metadata = target.metadata().expect("could not read target metadata");
422-
423-
let source_modified = match source_metadata.modified() {
424-
Ok(modified) => modified,
425-
Err(_) => return false,
426-
};
427-
428-
let target_modified = match target_metadata.modified() {
429-
Ok(modified) => modified,
430-
Err(_) => return false,
431-
};
432-
433-
source_modified < target_modified
394+
/// Rerun this build script if files under mozjs/ changed, unless this returns true.
395+
/// Keep this in sync with .gitignore
396+
fn ignore(path: &Path) -> bool {
397+
let ignored_extensions = ["pyc", "so", "dll", "dylib"];
398+
let ignored_trailing_paths = [["psutil", "build"], ["psutil", "tmp"]];
399+
400+
path.extension().map_or(false, |extension| {
401+
ignored_extensions.iter().any(|&ignored| extension == ignored)
402+
}) ||
403+
ignored_trailing_paths.iter().any(|trailing| {
404+
let mut components = path.components().rev();
405+
trailing.iter().rev().all(|&ignored| {
406+
components.next().map_or(false, |component| component.as_os_str() == ignored)
407+
})
408+
})
434409
}

0 commit comments

Comments
 (0)