// Copyright 2020 the Tectonic Project
// Licensed under the MIT License.
//! graphite2 build script. For now, we always find it externally. One day, we'd
//! like to be able to vendor it.
use std::env;
use tectonic_dep_support::{Configuration, Dependency, Spec};
struct Graphite2Spec;
impl Spec for Graphite2Spec {
fn get_pkgconfig_spec(&self) -> &str {
"graphite2"
}
fn get_vcpkg_spec(&self) -> &[&str] {
&["graphite2"]
}
}
fn main() {
let cfg = Configuration::default();
let dep = Dependency::probe(Graphite2Spec, &cfg);
// This is the key. What we print here will be propagated into depending
// crates' build scripts as the environment variable
// DEP_GRAPHITE2_INCLUDE_PATH, allowing them to find the headers internally.
// If/when we start vendoring graphite2, this can become $OUT_DIR.
let mut sep = "cargo:include-path=";
dep.foreach_include_path(|p| {
print!("{}{}", sep, p.to_str().unwrap());
sep = ";";
});
println!();
dep.emit();
// As a special case, code that compiles against graphite2 must also
// sometimes provide -DGRAPHITE2_STATIC. We'd prefer not to get into the
// business of propagating arbitrary cflags through our build system, so we
// indicate it with a specialized variable.
let target = env::var("TARGET").unwrap();
let rustflags = env::var("CARGO_ENCODED_RUSTFLAGS")
.unwrap_or_else(|_| env::var("RUSTFLAGS").unwrap_or_default());
let define_static_flag = if target.contains("-msvc") && rustflags.contains("+crt-static") {
"1"
} else {
""
};
println!("cargo:define_static={define_static_flag}");
}