From 9f481b85142362e725e6eb6b33a2eba062453c95 Mon Sep 17 00:00:00 2001
From: Theo Belaire <theo.belaire@gmail.com>
Date: Tue, 14 Apr 2015 13:53:23 -0400
Subject: [PATCH 1/2] include_bytes! now registers the file included

This is a little bit tricky, since with include_str!, we know that we
are including utf-8 content, so it's safe to store the source as a
String in a FileMap. We don't know that for include_bytes!, but I don't
think we actually need to track the contents anyways, so I'm passing "".

new_filemap does check for the zero length content, and it should be
reasonable, howeven I'm not sure if it would be better to pass None
instead of Some(Rc::new("")) as the src component of a FileMap.

Fixes bug #24348
---
 src/libsyntax/ext/source_util.rs | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/libsyntax/ext/source_util.rs b/src/libsyntax/ext/source_util.rs
index a4c2d2dc030..d91659bafe4 100644
--- a/src/libsyntax/ext/source_util.rs
+++ b/src/libsyntax/ext/source_util.rs
@@ -184,6 +184,11 @@ pub fn expand_include_bytes(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
             return DummyResult::expr(sp);
         }
         Ok(..) => {
+            // Add this input file to the code map to make it available as
+            // dependency information, but don't enter it's contents
+            let filename = format!("{}", file.display());
+            cx.codemap().new_filemap(filename, "".to_string());
+
             base::MacEager::expr(cx.expr_lit(sp, ast::LitBinary(Rc::new(bytes))))
         }
     }

From e4b3faca5167aeb77f49b9cfa9140482cd5ebd11 Mon Sep 17 00:00:00 2001
From: Theo Belaire <theo.belaire@gmail.com>
Date: Wed, 15 Apr 2015 10:40:04 -0400
Subject: [PATCH 2/2] Added a test for include_bytes! dep info

This tests that both include_str! and include_bytes!  mark their input
file as a dependancy, and it's correctly outputted when you run
`rustc --emit dep-info`.
---
 src/test/run-make/include_bytes_deps/Makefile | 21 +++++++++++++++++++
 .../run-make/include_bytes_deps/input.bin     |  1 +
 .../run-make/include_bytes_deps/input.txt     |  1 +
 src/test/run-make/include_bytes_deps/main.rs  | 17 +++++++++++++++
 4 files changed, 40 insertions(+)
 create mode 100644 src/test/run-make/include_bytes_deps/Makefile
 create mode 100644 src/test/run-make/include_bytes_deps/input.bin
 create mode 100644 src/test/run-make/include_bytes_deps/input.txt
 create mode 100644 src/test/run-make/include_bytes_deps/main.rs

diff --git a/src/test/run-make/include_bytes_deps/Makefile b/src/test/run-make/include_bytes_deps/Makefile
new file mode 100644
index 00000000000..0400db412dd
--- /dev/null
+++ b/src/test/run-make/include_bytes_deps/Makefile
@@ -0,0 +1,21 @@
+-include ../tools.mk
+
+# FIXME: ignore freebsd/windows
+# on windows `rustc --dep-info` produces Makefile dependency with
+# windows native paths (e.g. `c:\path\to\libfoo.a`)
+# but msys make seems to fail to recognize such paths, so test fails.
+ifneq ($(shell uname),FreeBSD)
+ifndef IS_WINDOWS
+all:
+	$(RUSTC) --emit dep-info main.rs
+	grep "input.txt" $(TMPDIR)/main.d
+	grep "input.bin" $(TMPDIR)/main.d
+else
+all:
+
+endif
+
+else
+all:
+
+endif
diff --git a/src/test/run-make/include_bytes_deps/input.bin b/src/test/run-make/include_bytes_deps/input.bin
new file mode 100644
index 00000000000..cd0875583aa
--- /dev/null
+++ b/src/test/run-make/include_bytes_deps/input.bin
@@ -0,0 +1 @@
+Hello world!
diff --git a/src/test/run-make/include_bytes_deps/input.txt b/src/test/run-make/include_bytes_deps/input.txt
new file mode 100644
index 00000000000..cd0875583aa
--- /dev/null
+++ b/src/test/run-make/include_bytes_deps/input.txt
@@ -0,0 +1 @@
+Hello world!
diff --git a/src/test/run-make/include_bytes_deps/main.rs b/src/test/run-make/include_bytes_deps/main.rs
new file mode 100644
index 00000000000..579b2a452a1
--- /dev/null
+++ b/src/test/run-make/include_bytes_deps/main.rs
@@ -0,0 +1,17 @@
+// 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 main() {
+    const INPUT_TXT: &'static str = include_str!("input.txt");
+    const INPUT_BIN: &'static [u8] = include_bytes!("input.bin");
+
+    println!("{}", INPUT_TXT);
+    println!("{:?}", INPUT_BIN);
+}