Merge pull request #66 from oconnor0/master

Unset read only on generated rust file before removing it to fix build failure on Windows
This commit is contained in:
Niko Matsakis 2016-02-02 13:08:11 -05:00
commit 7b7fee97aa

View File

@ -33,10 +33,11 @@ fn process_dir<P:AsRef<Path>>(root_dir: P, force_build: bool) -> io::Result<()>
for lalrpop_file in lalrpop_files { for lalrpop_file in lalrpop_files {
let rs_file = lalrpop_file.with_extension("rs"); let rs_file = lalrpop_file.with_extension("rs");
if force_build || try!(needs_rebuild(&lalrpop_file, &rs_file)) { if force_build || try!(needs_rebuild(&lalrpop_file, &rs_file)) {
try!(make_read_only(&rs_file, false));
try!(remove_old_file(&rs_file)); try!(remove_old_file(&rs_file));
let grammar = try!(parse_and_normalize_grammar(lalrpop_file)); let grammar = try!(parse_and_normalize_grammar(lalrpop_file));
try!(emit_recursive_ascent(&rs_file, &grammar)); try!(emit_recursive_ascent(&rs_file, &grammar));
try!(make_read_only(&rs_file)); try!(make_read_only(&rs_file, true));
} }
} }
Ok(()) Ok(())
@ -99,11 +100,15 @@ fn needs_rebuild(lalrpop_file: &Path,
} }
} }
fn make_read_only(rs_file: &Path) -> io::Result<()> { fn make_read_only(rs_file: &Path, ro: bool) -> io::Result<()> {
let rs_metadata = try!(fs::metadata(&rs_file)); if rs_file.is_file() {
let mut rs_permissions = rs_metadata.permissions(); let rs_metadata = try!(fs::metadata(&rs_file));
rs_permissions.set_readonly(true); let mut rs_permissions = rs_metadata.permissions();
fs::set_permissions(&rs_file, rs_permissions) rs_permissions.set_readonly(ro);
fs::set_permissions(&rs_file, rs_permissions)
} else {
Ok(())
}
} }
fn lalrpop_files<P:AsRef<Path>>(root_dir: P) -> io::Result<Vec<PathBuf>> { fn lalrpop_files<P:AsRef<Path>>(root_dir: P) -> io::Result<Vec<PathBuf>> {