about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Gallagher <jgallagher@bignerdranch.com>2014-10-01 07:47:38 -0400
committerJohn Gallagher <jgallagher@bignerdranch.com>2014-10-01 11:40:00 -0400
commit2883b7682a06e19dcf8b669db1e34d0f4a83dc02 (patch)
treeee53a43efe62e1a265b5a357f6b365473d6bc2d4
parent8dab56ea9d5f10924ef980f705bc864567d5b72a (diff)
Make --dep-info escape spaces in filenames
Closes #17627
-rw-r--r--src/librustc/driver/driver.rs8
-rw-r--r--src/test/run-make/dep-info-spaces/Makefile25
-rw-r--r--src/test/run-make/dep-info-spaces/Makefile.foo7
-rw-r--r--src/test/run-make/dep-info-spaces/bar.rs11
-rw-r--r--src/test/run-make/dep-info-spaces/foo foo.rs11
-rw-r--r--src/test/run-make/dep-info-spaces/lib.rs14
6 files changed, 75 insertions, 1 deletions
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<String> = 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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;