about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-01-25 11:36:18 -0800
committerAlex Crichton <alex@alexcrichton.com>2016-02-08 14:28:46 -0800
commita1ffe6b6bbfec7374f91dbbfb2e51a3fa5fadb1e (patch)
treec61ac15eeccf5ae60a37d1e40410b8a866640be3 /src
parent26105b1a3765a73bab44fb18ccbd5a4635018fdf (diff)
downloadrust-a1ffe6b6bbfec7374f91dbbfb2e51a3fa5fadb1e.tar.gz
rust-a1ffe6b6bbfec7374f91dbbfb2e51a3fa5fadb1e.zip
rustc: Implement a new `--print cfg` flag
This commit is an implementation of the new compiler flags required by [RFC
1361][rfc]. This specifically adds a new `cfg` option to the `--print` flag to
the compiler. This new directive will print the defined `#[cfg]` directives by
the compiler for the target in question.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/1361-cargo-cfg-dependencies.md
Diffstat (limited to 'src')
-rw-r--r--src/librustc/session/config.rs2
-rw-r--r--src/librustc_driver/lib.rs19
-rw-r--r--src/test/run-make/print-cfg/Makefile15
3 files changed, 36 insertions, 0 deletions
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 68949863bfc..f6079217829 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -163,6 +163,7 @@ pub enum PrintRequest {
     FileNames,
     Sysroot,
     CrateName,
+    Cfg,
 }
 
 pub enum Input {
@@ -1105,6 +1106,7 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
             "crate-name" => PrintRequest::CrateName,
             "file-names" => PrintRequest::FileNames,
             "sysroot" => PrintRequest::Sysroot,
+            "cfg" => PrintRequest::Cfg,
             req => {
                 early_error(error_format, &format!("unknown print request `{}`", req))
             }
diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs
index 70bd938321a..67a9f032a71 100644
--- a/src/librustc_driver/lib.rs
+++ b/src/librustc_driver/lib.rs
@@ -518,6 +518,25 @@ impl RustcDefaultCalls {
                                       .to_string_lossy());
                     }
                 }
+                PrintRequest::Cfg => {
+                    for cfg in config::build_configuration(sess) {
+                        match cfg.node {
+                            ast::MetaWord(ref word) => println!("{}", word),
+                            ast::MetaNameValue(ref name, ref value) => {
+                                println!("{}=\"{}\"", name, match value.node {
+                                    ast::LitStr(ref s, _) => s,
+                                    _ => continue,
+                                });
+                            }
+                            // Right now there are not and should not be any
+                            // MetaList items in the configuration returned by
+                            // `build_configuration`.
+                            ast::MetaList(..) => {
+                                panic!("MetaList encountered in default cfg")
+                            }
+                        }
+                    }
+                }
             }
         }
         return Compilation::Stop;
diff --git a/src/test/run-make/print-cfg/Makefile b/src/test/run-make/print-cfg/Makefile
new file mode 100644
index 00000000000..c74233d495b
--- /dev/null
+++ b/src/test/run-make/print-cfg/Makefile
@@ -0,0 +1,15 @@
+-include ../tools.mk
+
+all: default
+	$(RUSTC) --target x86_64-pc-windows-gnu --print cfg | grep windows
+	$(RUSTC) --target x86_64-pc-windows-gnu --print cfg | grep x86_64
+	$(RUSTC) --target i686-pc-windows-msvc --print cfg | grep msvc
+	$(RUSTC) --target i686-apple-darwin --print cfg | grep macos
+
+ifdef IS_WINDOWS
+default:
+	$(RUSTC) --print cfg | grep windows
+else
+default:
+	$(RUSTC) --print cfg | grep unix
+endif