aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-05-03 15:50:56 -0700
committerGraydon Hoare <[email protected]>2011-05-03 15:56:00 -0700
commitb453c3c72825f70499819d97b879c805cac1e5b1 (patch)
tree5561667396700f4a12b1984e4c0cadda1bca4714 /src/comp
parentRename the "llvm" API to "llvm-intrinsic" (diff)
downloadrust-b453c3c72825f70499819d97b879c805cac1e5b1.tar.xz
rust-b453c3c72825f70499819d97b879c805cac1e5b1.zip
Start sketching --depend support in rustc.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/driver/rustc.rs1
-rw-r--r--src/comp/front/eval.rs12
-rw-r--r--src/comp/front/parser.rs7
3 files changed, 19 insertions, 1 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index 634c6512..a6f6ae05 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -142,6 +142,7 @@ options:
--ls list the symbols defined by a crate file
-L <path> add a directory to the library search path
--noverify suppress LLVM verification step (slight speedup)
+ --depend print dependencies, in makefile-rule form
--parse-only parse only; do not compile, assemble, or link
-O optimize
-S compile only; do not assemble or link
diff --git a/src/comp/front/eval.rs b/src/comp/front/eval.rs
index 06fa9cea..a1b3392c 100644
--- a/src/comp/front/eval.rs
+++ b/src/comp/front/eval.rs
@@ -24,8 +24,15 @@ tag val {
val_str(str);
}
+tag eval_mode {
+ mode_depend;
+ mode_parse;
+}
+
type env = vec[tup(ident, val)];
type ctx = @rec(parser p,
+ eval_mode mode,
+ mutable vec[str] deps,
session.session sess,
mutable uint chpos);
@@ -383,6 +390,11 @@ fn eval_crate_directive(ctx cx,
auto full_path = prefix + std.fs.path_sep() + file_path;
+ if (cx.mode == mode_depend) {
+ cx.deps += vec(full_path);
+ ret;
+ }
+
auto start_id = cx.p.next_def_id();
auto p0 = new_parser(cx.sess, e, start_id, full_path, cx.chpos);
auto m0 = parse_mod_items(p0, token.EOF);
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index 4beb5afc..904efc2e 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -2497,7 +2497,12 @@ fn parse_crate_from_crate_file(parser p) -> @ast.crate {
auto lo = p.get_lo_pos();
auto prefix = std.fs.dirname(p.get_filemap().name);
auto cdirs = parse_crate_directives(p, token.EOF);
- auto cx = @rec(p=p, sess=p.get_session(), mutable chpos=p.get_chpos());
+ let vec[str] deps = vec();
+ auto cx = @rec(p=p,
+ mode=eval.mode_parse,
+ mutable deps = deps,
+ sess=p.get_session(),
+ mutable chpos=p.get_chpos());
auto m = eval.eval_crate_directives_to_mod(cx, p.get_env(),
cdirs, prefix);
auto hi = p.get_hi_pos();