From: Ian Jackson Date: Sun, 25 Feb 2024 17:28:56 +0000 (+0000) Subject: build.rs: Prepare to handle multiple packages X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=d397a09f29d1117bbd061c436d9ab1fdcab64336;p=hippotat.git build.rs: Prepare to handle multiple packages We'll want this for hyper. (Which is nontrivial.) Signed-off-by: Ian Jackson --- diff --git a/build.rs b/build.rs index 64c2269..2643bbf 100644 --- a/build.rs +++ b/build.rs @@ -35,6 +35,30 @@ impl Metadata { } } +struct Context<'c> { + hippo: &'c MNode, + metadata: &'c Metadata, +} + +impl Context<'_> { + fn emit_for_package(&self, package: &str, versions: &[&str]) { + let pkg = self.hippo.dependencies.iter() + .map(|i| self.metadata.package(i)) + .find(|i| i.name == package).expect("no nix in hippotat's deps"); + + let pkg = &pkg.version; + let pkg: semver::Version = pkg.parse().expect(pkg); + + for test in versions { + let cfg = test.replace('.', "_").replace(">=", "ge_"); + let test: semver::VersionReq = test.parse().unwrap(); + if test.matches(&pkg) { + println!("cargo:rustc-cfg={package}_{cfg}"); + } + } + } +} + fn main(){ let x = Command::new("cargo") .args(["metadata", "--format-version=1"]) @@ -51,17 +75,7 @@ fn main(){ let hippo = metadata.resolve.nodes.iter() .find(|n| n.id == hippo.id).expect("no hippotat in nodes!"); - let nix = hippo.dependencies.iter() - .map(|i| metadata.package(i)) - .find(|i| i.name == "nix").expect("no nix in hippotat's deps"); + let ctx = Context { hippo, metadata: &metadata }; - let nix = &nix.version; - let nix: semver::Version = nix.parse().expect(nix); - for test in [">=0.27", ">=0.28"] { - let cfg = test.replace('.', "_").replace(">=", "ge_"); - let test: semver::VersionReq = test.parse().unwrap(); - if test.matches(&nix) { - println!("cargo:rustc-cfg=nix_{cfg}"); - } - } + ctx.emit_for_package("nix", &[">=0.27", ">=0.28"]); }