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); +}