diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index be0c9bb0ba3..0c40666239a 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -615,6 +615,12 @@ pub fn stop_after_phase_5(sess: &Session) -> bool { return false; } +fn escape_dep_filename(filename: &str) -> String { + // Apparently clang and gcc *only* escape spaces: + // http://llvm.org/klaus/clang/commit/9d50634cfc268ecc9a7250226dd5ca0e945240d4 + filename.replace(" ", "\\ ") +} + fn write_out_deps(sess: &Session, input: &Input, outputs: &OutputFilenames, @@ -658,7 +664,7 @@ fn write_out_deps(sess: &Session, // write Makefile-compatible dependency rules let files: Vec = sess.codemap().files.borrow() .iter().filter(|fmap| fmap.is_real_file()) - .map(|fmap| fmap.name.to_string()) + .map(|fmap| escape_dep_filename(fmap.name.as_slice())) .collect(); let mut file = try!(io::File::create(&deps_filename)); for path in out_filenames.iter() { diff --git a/src/test/run-make/dep-info-spaces/Makefile b/src/test/run-make/dep-info-spaces/Makefile new file mode 100644 index 00000000000..72dca3d3c90 --- /dev/null +++ b/src/test/run-make/dep-info-spaces/Makefile @@ -0,0 +1,25 @@ +-include ../tools.mk + +# FIXME: ignore freebsd/windows +# (windows: see `../dep-info/Makefile`) +ifneq ($(shell uname),FreeBSD) +ifndef IS_WINDOWS +all: + $(RUSTC) --dep-info $(TMPDIR)/custom-deps-file.d --crate-type=lib lib.rs + sleep 1 + touch 'foo foo.rs' + -rm -f $(TMPDIR)/done + $(MAKE) -drf Makefile.foo + rm $(TMPDIR)/done + pwd + $(MAKE) -drf Makefile.foo + rm $(TMPDIR)/done && exit 1 || exit 0 +else +all: + +endif + +else +all: + +endif diff --git a/src/test/run-make/dep-info-spaces/Makefile.foo b/src/test/run-make/dep-info-spaces/Makefile.foo new file mode 100644 index 00000000000..0e187565d6d --- /dev/null +++ b/src/test/run-make/dep-info-spaces/Makefile.foo @@ -0,0 +1,7 @@ +LIB := $(shell $(RUSTC) --print-file-name --crate-type=lib lib.rs) + +$(TMPDIR)/$(LIB): + $(RUSTC) --dep-info $(TMPDIR)/custom-deps-file.d --crate-type=lib lib.rs + touch $(TMPDIR)/done + +-include $(TMPDIR)/custom-deps-file.d diff --git a/src/test/run-make/dep-info-spaces/bar.rs b/src/test/run-make/dep-info-spaces/bar.rs new file mode 100644 index 00000000000..4c79f7e2855 --- /dev/null +++ b/src/test/run-make/dep-info-spaces/bar.rs @@ -0,0 +1,11 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn bar() {} diff --git a/src/test/run-make/dep-info-spaces/foo foo.rs b/src/test/run-make/dep-info-spaces/foo foo.rs new file mode 100644 index 00000000000..2661b1f4eb4 --- /dev/null +++ b/src/test/run-make/dep-info-spaces/foo foo.rs @@ -0,0 +1,11 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn foo() {} diff --git a/src/test/run-make/dep-info-spaces/lib.rs b/src/test/run-make/dep-info-spaces/lib.rs new file mode 100644 index 00000000000..bfbe41baeac --- /dev/null +++ b/src/test/run-make/dep-info-spaces/lib.rs @@ -0,0 +1,14 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[path="foo foo.rs"] +pub mod foo; + +pub mod bar;