From 64106c4d3d4ddba8c7bc2af75376e6d3d3d75601 Mon Sep 17 00:00:00 2001
From:
Date: Mon, 29 Jun 2015 20:16:15 +0000
Subject: Update documentation
---
src/pkg_config/lib.rs.html | 679 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 679 insertions(+)
create mode 100644 src/pkg_config/lib.rs.html
(limited to 'src/pkg_config')
diff --git a/src/pkg_config/lib.rs.html b/src/pkg_config/lib.rs.html
new file mode 100644
index 0000000..250138e
--- /dev/null
+++ b/src/pkg_config/lib.rs.html
@@ -0,0 +1,679 @@
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#![doc(html_root_url = "http://alexcrichton.com/pkg-config-rs")]
+#![cfg_attr(test, deny(warnings))]
+
+use std::ascii::AsciiExt;
+use std::env;
+use std::ffi::{OsStr, OsString};
+use std::fs;
+use std::path::{PathBuf, Path};
+use std::process::Command;
+use std::str;
+
+pub fn target_supported() -> bool {
+ env::var("HOST") == env::var("TARGET") ||
+ env::var_os("PKG_CONFIG_ALLOW_CROSS").is_some()
+}
+
+#[derive(Clone)]
+pub struct Config {
+ statik: Option<bool>,
+ atleast_version: Option<String>,
+ extra_args: Vec<OsString>,
+}
+
+#[derive(Debug)]
+pub struct Library {
+ pub libs: Vec<String>,
+ pub link_paths: Vec<PathBuf>,
+ pub frameworks: Vec<String>,
+ pub framework_paths: Vec<PathBuf>,
+ pub include_paths: Vec<PathBuf>,
+ pub version: String,
+ _priv: (),
+}
+
+
+pub fn find_library(name: &str) -> Result<Library, String> {
+ Config::new().find(name)
+}
+
+impl Config {
+
+
+ pub fn new() -> Config {
+ Config {
+ statik: None,
+ atleast_version: None,
+ extra_args: vec![],
+ }
+ }
+
+
+
+
+
+ pub fn statik(&mut self, statik: bool) -> &mut Config {
+ self.statik = Some(statik);
+ self
+ }
+
+
+ pub fn atleast_version(&mut self, vers: &str) -> &mut Config {
+ self.atleast_version = Some(vers.to_string());
+ self
+ }
+
+
+
+
+ pub fn arg<S: AsRef<OsStr>>(&mut self, arg: S) -> &mut Config {
+ self.extra_args.push(arg.as_ref().to_os_string());
+ self
+ }
+
+
+
+
+
+ pub fn find(&self, name: &str) -> Result<Library, String> {
+ if env::var_os(&format!("{}_NO_PKG_CONFIG", envify(name))).is_some() {
+ return Err(format!("pkg-config requested to be aborted for {}", name))
+ } else if !target_supported() {
+ return Err("pkg-config doesn't handle cross compilation. Use \
+ PKG_CONFIG_ALLOW_CROSS=1 to override".to_string());
+ }
+
+ let mut library = Library::new();
+
+ let output = try!(run(self.command(name, &["--libs", "--cflags"])));
+ library.parse_libs_cflags(name, &output, self);
+
+ let output = try!(run(self.command(name, &["--modversion"])));
+ library.parse_modversion(&output);
+
+ Ok(library)
+ }
+
+
+
+ pub fn get_variable(package: &str, variable: &str) -> Result<String, String> {
+ let arg = format!("--variable={}", variable);
+ let cfg = Config::new();
+ Ok(try!(run(cfg.command(package, &[&arg]))).trim_right().to_owned())
+ }
+
+ fn is_static(&self, name: &str) -> bool {
+ self.statik.unwrap_or_else(|| infer_static(name))
+ }
+
+ fn command(&self, name: &str, args: &[&str]) -> Command {
+ let mut cmd = Command::new("pkg-config");
+ if self.is_static(name) {
+ cmd.arg("--static");
+ }
+ cmd.args(args)
+ .args(&self.extra_args)
+ .env("PKG_CONFIG_ALLOW_SYSTEM_LIBS", "1");
+ if let Some(ref version) = self.atleast_version {
+ cmd.arg(&format!("{} >= {}", name, version));
+ } else {
+ cmd.arg(name);
+ }
+ cmd
+ }
+}
+
+impl Library {
+ fn new() -> Library {
+ Library {
+ libs: Vec::new(),
+ link_paths: Vec::new(),
+ include_paths: Vec::new(),
+ frameworks: Vec::new(),
+ framework_paths: Vec::new(),
+ version: String::new(),
+ _priv: (),
+ }
+ }
+
+ fn parse_libs_cflags(&mut self, name: &str, output: &str, config: &Config) {
+ let parts = output.split(' ')
+ .filter(|l| l.len() > 2)
+ .map(|arg| (&arg[0..2], &arg[2..]))
+ .collect::<Vec<_>>();
+
+ let mut dirs = Vec::new();
+ let statik = config.is_static(name);
+ for &(flag, val) in parts.iter() {
+ match flag {
+ "-L" => {
+ println!("cargo:rustc-link-search=native={}", val);
+ dirs.push(PathBuf::from(val));
+ self.link_paths.push(PathBuf::from(val));
+ }
+ "-F" => {
+ println!("cargo:rustc-link-search=framework={}", val);
+ self.framework_paths.push(PathBuf::from(val));
+ }
+ "-I" => {
+ self.include_paths.push(PathBuf::from(val));
+ }
+ "-l" => {
+ self.libs.push(val.to_string());
+ if statik && !is_system(val, &dirs) {
+ println!("cargo:rustc-link-lib=static={}", val);
+ } else {
+ println!("cargo:rustc-link-lib={}", val);
+ }
+ }
+ _ => {}
+ }
+ }
+
+ let mut iter = output.split(' ');
+ while let Some(part) = iter.next() {
+ if part != "-framework" { continue }
+ if let Some(lib) = iter.next() {
+ println!("cargo:rustc-link-lib=framework={}", lib);
+ self.frameworks.push(lib.to_string());
+ }
+ }
+ }
+
+ fn parse_modversion(&mut self, output: &str) {
+ self.version.push_str(output.trim());
+ }
+}
+
+fn infer_static(name: &str) -> bool {
+ let name = envify(name);
+ if env::var_os(&format!("{}_STATIC", name)).is_some() {
+ true
+ } else if env::var_os(&format!("{}_DYNAMIC", name)).is_some() {
+ false
+ } else if env::var_os("PKG_CONFIG_ALL_STATIC").is_some() {
+ true
+ } else if env::var_os("PKG_CONFIG_ALL_DYNAMIC").is_some() {
+ false
+ } else {
+ false
+ }
+}
+
+fn envify(name: &str) -> String {
+ name.chars().map(|c| c.to_ascii_uppercase()).map(|c| {
+ if c == '-' {'_'} else {c}
+ }).collect()
+}
+
+fn is_system(name: &str, dirs: &[PathBuf]) -> bool {
+ let libname = format!("lib{}.a", name);
+ let root = Path::new("/usr");
+ !dirs.iter().any(|d| {
+ !d.starts_with(root) && fs::metadata(&d.join(&libname)).is_ok()
+ })
+}
+
+fn run(mut cmd: Command) -> Result<String, String> {
+ let out = try!(cmd.output().map_err(|e| {
+ format!("failed to run `{:?}`: {}", cmd, e)
+ }));
+
+ let stdout = String::from_utf8(out.stdout).unwrap();
+ if out.status.success() {
+ return Ok(stdout);
+ }
+
+ let stderr = str::from_utf8(&out.stderr).unwrap();
+ let mut msg = format!("`{:?}` did not exit successfully: {}", cmd, out.status);
+ if stdout.len() > 0 {
+ msg.push_str("\n--- stdout\n");
+ msg.push_str(&stdout);
+ }
+ if stderr.len() > 0 {
+ msg.push_str("\n--- stderr\n");
+ msg.push_str(stderr);
+ }
+
+ return Err(msg);
+}
+
+
+