in tools/buildsys/src/main.rs [120:181]
fn build_package() -> Result<()> {
let manifest_file = "Cargo.toml";
println!("cargo:rerun-if-changed={}", manifest_file);
let root_dir: PathBuf = getenv("BUILDSYS_ROOT_DIR")?.into();
let variant = getenv("BUILDSYS_VARIANT")?;
let variant_manifest_path = root_dir.join("variants").join(variant).join(manifest_file);
let variant_manifest =
ManifestInfo::new(variant_manifest_path).context(error::ManifestParse)?;
supported_arch(&variant_manifest)?;
let manifest_dir: PathBuf = getenv("CARGO_MANIFEST_DIR")?.into();
let manifest =
ManifestInfo::new(manifest_dir.join(manifest_file)).context(error::ManifestParse)?;
// if manifest has package.metadata.build-package.variant-specific = true, then println rerun-if-env-changed
if let Some(sensitive) = manifest.variant_sensitive() {
if sensitive {
println!("cargo:rerun-if-env-changed=BUILDSYS_VARIANT");
}
}
if let Some(files) = manifest.external_files() {
LookasideCache::fetch(&files).context(error::ExternalFileFetch)?;
}
if let Some(groups) = manifest.source_groups() {
let var = "BUILDSYS_SOURCES_DIR";
let root: PathBuf = getenv(var)?.into();
println!("cargo:rerun-if-env-changed={}", var);
let dirs = groups.iter().map(|d| root.join(d)).collect::<Vec<_>>();
let info = ProjectInfo::crawl(&dirs).context(error::ProjectCrawl)?;
for f in info.files {
println!("cargo:rerun-if-changed={}", f.display());
}
}
// Package developer can override name of package if desired, e.g. to name package with
// characters invalid in Cargo crate names
let package = if let Some(name_override) = manifest.package_name() {
name_override.clone()
} else {
getenv("CARGO_PKG_NAME")?
};
let spec = format!("{}.spec", package);
println!("cargo:rerun-if-changed={}", spec);
let info = SpecInfo::new(PathBuf::from(&spec)).context(error::SpecParse)?;
for f in info.sources {
println!("cargo:rerun-if-changed={}", f.display());
}
for f in info.patches {
println!("cargo:rerun-if-changed={}", f.display());
}
PackageBuilder::build(&package).context(error::BuildAttempt)?;
Ok(())
}