fn run(self, builder: &Builder) -> Interned<PathBuf> {
let compiler = self.compiler;
- let lib = if compiler.stage >= 1 && builder.build.config.libdir.is_some() {
- builder.build.config.libdir.clone().unwrap()
+ let lib = if compiler.stage >= 1 && builder.build.config.libdir_relative.is_some() {
+ builder.build.config.libdir_relative.clone().unwrap()
} else {
PathBuf::from("lib")
};
.env("CFG_PREFIX", build.config.prefix.clone().unwrap_or_default());
let libdir_relative =
- build.config.libdir.clone().unwrap_or(PathBuf::from("lib"));
+ build.config.libdir_relative.clone().unwrap_or(PathBuf::from("lib"));
cargo.env("CFG_LIBDIR_RELATIVE", libdir_relative);
// If we're not building a compiler with debugging information then remove
pub docdir: Option<PathBuf>,
pub bindir: Option<PathBuf>,
pub libdir: Option<PathBuf>,
+ pub libdir_relative: Option<PathBuf>,
pub mandir: Option<PathBuf>,
pub codegen_tests: bool,
pub nodejs: Option<PathBuf>,
config.mandir = install.mandir.clone().map(PathBuf::from);
}
+ // Try to infer `libdir_relative` from `libdir`.
+ if let Some(ref libdir) = config.libdir {
+ let mut libdir = libdir.as_path();
+ if !libdir.is_relative() {
+ // Try to make it relative to the prefix.
+ if let Some(ref prefix) = config.prefix {
+ if let Ok(suffix) = libdir.strip_prefix(prefix) {
+ libdir = suffix;
+ }
+ }
+ }
+ if libdir.is_relative() {
+ config.libdir_relative = Some(libdir.to_path_buf());
+ }
+ }
+
// Store off these values as options because if they're not provided
// we'll infer default values for them later
let mut thinlto = None;