use std::env;
fn main() {
println!("cargo:rustc-check-cfg=cfg(kpathsea_linked)");
println!("cargo:rerun-if-env-changed=KPSEWHICH");
println!("cargo:rerun-if-env-changed=KPATHSEA_SKIP_TOOLCHAIN_CHECK");
if env::var("DEP_KPATHSEA_LINKED").as_deref() == Ok("1") {
println!("cargo:rustc-cfg=kpathsea_linked");
return;
}
require_kpsewhich();
}
fn require_kpsewhich() {
if env::var_os("KPATHSEA_SKIP_TOOLCHAIN_CHECK").is_some() {
println!(
"cargo:warning=kpathsea: skipping the TeX toolchain check \
(KPATHSEA_SKIP_TOOLCHAIN_CHECK is set); lookups will fail at \
runtime unless `kpsewhich` is available there."
);
return;
}
if env::var_os("DOCS_RS").is_some() {
return;
}
if env::var("HOST") != env::var("TARGET") {
println!(
"cargo:warning=kpathsea: cross-compiling; skipping the `kpsewhich` \
presence check (the build host's PATH says nothing about the \
target system)."
);
return;
}
let explicit = env::var("KPSEWHICH").ok();
let name = explicit.as_deref().unwrap_or("kpsewhich");
if which::which(name).is_err() {
let detail = match &explicit {
Some(name) => format!("KPSEWHICH is set to `{name}`, but no such executable was found."),
None => "no `kpsewhich` executable was found on PATH.".to_string(),
};
eprintln!(
"\n\
kpathsea: no usable TeX backend.\n\
\n\
libkpathsea was not found at build time (see the kpathsea_sys \
warning above),\nand {detail}\n\
\n\
This crate needs ONE of:\n\
\n\
1. libkpathsea to link against (in-process backend): install your\n\
\u{20} platform's kpathsea development package — `libkpathsea-dev` on\n\
\u{20} Debian/Ubuntu, `texlive` via Homebrew, or a TeX Live source\n\
\u{20} install — or point KPATHSEA_LIB_DIR at the library directory.\n\
\n\
2. a `kpsewhich` executable to delegate to (subprocess backend):\n\
\u{20} install any TeX distribution (TeX Live, MacTeX/BasicTeX, MiKTeX)\n\
\u{20} and ensure `kpsewhich` is on PATH, or set KPSEWHICH to its\n\
\u{20} location.\n\
\n\
Building on a machine without TeX for deployment to one with it?\n\
Set KPATHSEA_SKIP_TOOLCHAIN_CHECK=1 to bypass this check.\n"
);
std::process::exit(1);
}
}