about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-02-04 13:47:06 -0800
committerAlex Crichton <alex@alexcrichton.com>2015-02-04 13:54:49 -0800
commit6c62839a7ff4752fdd77e599beb87f3ccaaa6e84 (patch)
tree3a36e38033a494d4ec0142eed4b6f2894425a0b5
parentac134f7ca435551964996ee88319241cd3c7c110 (diff)
downloadrust-6c62839a7ff4752fdd77e599beb87f3ccaaa6e84.tar.gz
rust-6c62839a7ff4752fdd77e599beb87f3ccaaa6e84.zip
rustc: Recognize `-L framework=foo`
On OSX the linker has a separate framework lookup path which is specified via
the `-F` flag. This adds a new kind of `-L` path recognized by the compiler for
frameworks to be passed through to the linker.

Closes #20259
-rw-r--r--man/rustc.113
-rw-r--r--src/librustc/session/config.rs3
-rw-r--r--src/librustc/session/search_paths.rs3
-rw-r--r--src/librustc_trans/back/link.rs7
4 files changed, 19 insertions, 7 deletions
diff --git a/man/rustc.1 b/man/rustc.1
index 3d8b27a408a..49056afa045 100644
--- a/man/rustc.1
+++ b/man/rustc.1
@@ -18,10 +18,15 @@ Display the help message
 \fB\-\-cfg\fR SPEC
 Configure the compilation environment
 .TP
-\fB\-L\fR PATH
-Add a directory to the library search path
-.TP
-\fB\-l\fR NAME[:KIND]
+\fB\-L\fR [KIND=]PATH
+Add a directory to the library search path. The optional KIND can be one of:
+    dependency = only lookup transitive dependencies here
+    crate = only lookup local `extern crate` directives here
+    native = only lookup native libraries here
+    framework = only look for OSX frameworks here
+    all = look for anything here (the default)
+.TP
+\fB\-l\fR [KIND=]NAME
 Link the generated crate(s) to the specified native library NAME. The optional
 KIND can be one of, static, dylib, or framework. If omitted, dylib is assumed.
 .TP
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 88f6dc673cf..8faf81a1564 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -738,7 +738,8 @@ pub fn rustc_short_optgroups() -> Vec<RustcOptGroup> {
     vec![
         opt::flag("h", "help", "Display this message"),
         opt::multi("", "cfg", "Configure the compilation environment", "SPEC"),
-        opt::multi("L", "",   "Add a directory to the library search path", "PATH"),
+        opt::multi("L", "",   "Add a directory to the library search path",
+                   "[KIND=]PATH"),
         opt::multi("l", "",   "Link the generated crate(s) to the specified native
                              library NAME. The optional KIND can be one of,
                              static, dylib, or framework. If omitted, dylib is
diff --git a/src/librustc/session/search_paths.rs b/src/librustc/session/search_paths.rs
index c6436d47c73..c314a999f24 100644
--- a/src/librustc/session/search_paths.rs
+++ b/src/librustc/session/search_paths.rs
@@ -25,6 +25,7 @@ pub enum PathKind {
     Native,
     Crate,
     Dependency,
+    Framework,
     ExternFlag,
     All,
 }
@@ -41,6 +42,8 @@ impl SearchPaths {
             (PathKind::Crate, &path["crate=".len()..])
         } else if path.starts_with("dependency=") {
             (PathKind::Dependency, &path["dependency=".len()..])
+        } else if path.starts_with("framework=") {
+            (PathKind::Framework, &path["framework=".len()..])
         } else if path.starts_with("all=") {
             (PathKind::All, &path["all=".len()..])
         } else {
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
index be55ab9fda3..288efd7e5ee 100644
--- a/src/librustc_trans/back/link.rs
+++ b/src/librustc_trans/back/link.rs
@@ -1041,8 +1041,11 @@ fn link_args(cmd: &mut Command,
 // in the current crate. Upstream crates with native library dependencies
 // may have their native library pulled in above.
 fn add_local_native_libraries(cmd: &mut Command, sess: &Session) {
-    sess.target_filesearch(PathKind::All).for_each_lib_search_path(|path, _| {
-        cmd.arg("-L").arg(path);
+    sess.target_filesearch(PathKind::All).for_each_lib_search_path(|path, k| {
+        match k {
+            PathKind::Framework => { cmd.arg("-F").arg(path); }
+            _ => { cmd.arg("-L").arg(path); }
+        }
         FileDoesntMatch
     });