pEpEngineSequoiaBackend/build.rs

76 lines
2.6 KiB
Rust

use std::env;
use std::fs::File;
use std::io::{Read, Write};
use std::path::PathBuf;
fn main() -> Result<(), std::io::Error> {
// Generate
// ${CARGO_TARGET_DIR}/${PROFILE}/pep_engine_sequoia_backend.pc from
// ${SRC}/pep_engine_sequoia_backend.pc.in.
// Location of pep_engine_sequoia_backend.pc.in.
let src = env::current_dir()?;
let mut pc_in = PathBuf::from(&src);
pc_in.push("pep_engine_sequoia_backend.pc.in");
// Location of the build directory (e.g.,
// `/tmp/pep_engine_sequoia_backend/debug`).
let mut build_dir = PathBuf::from(&src);
if let Some(target_dir) = env::var_os("CARGO_TARGET_DIR") {
// If CARGO_TARGET_DIR is absolute, this will first clear pc.
build_dir.push(target_dir);
} else {
build_dir.push("target");
}
let profile = env::var_os("PROFILE")
.expect("PROFILE not set");
build_dir.push(&profile);
// Location of pep_engine_sequoia_backend.pc.
let mut pc = build_dir.clone();
pc.push("pep_engine_sequoia_backend.pc");
// Read the .pc.in file, do the substitutions, and generate the
// .pc file.
let mut pc_in = File::open(pc_in)?;
let mut content = Vec::new();
pc_in.read_to_end(&mut content)?;
// This is set to allow the use of the library from the build
// directory.
let content = String::from_utf8(content).unwrap()
.replace("REQUIRES",
if cfg!(feature = "crypto-botan2") {
"botan-2"
} else if cfg!(feature = "crypto-botan3") {
"botan-3"
} else if cfg!(feature = "crypto-nettle") {
"nettle"
} else if cfg!(feature = "crypto-cng") {
""
} else {
panic!("Don't know dependencies to add to .pc file")
})
.replace("LIBDIR",
&build_dir
.to_str()
.expect("build directory is not UTF-8 encoded"))
.replace("VERSION",
&env::var_os("CARGO_PKG_VERSION")
.expect("CARGO_PKG_VERSION not set")
.into_string()
.expect("CARGO_PKG_VERSION is not UTF-8 encoded"));
let mut pc = File::create(&pc).expect(
&format!("Creating {:?} (CARGO_TARGET_DIR: {:?})",
pc, env::var_os("CARGO_TARGET_DIR")));
pc.write_all(content.as_bytes())?;
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=pep_engine_sequoia_backend.pc.in");
eprintln!("Generated {:?} with:\n{}\nEOF", pc, content);
Ok(())
}