Skip to content

Commit 6a4932d

Browse files
committed
fix: ci
1 parent 3cb50a4 commit 6a4932d

2 files changed

Lines changed: 44 additions & 10 deletions

File tree

libxml-sys/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ zlib = []
1919
[build-dependencies]
2020
cmake = "0.1.57"
2121
bindgen = "0.72.1"
22-
22+
regex = "1.12.3"
2323

2424
[package.metadata.cross.target.x86_64-pc-windows-gnu]
2525
pre-build = [

libxml-sys/build.rs

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
use std::{env, path::PathBuf};
1+
use std::{env, fs, path::PathBuf};
22

33
fn main() {
44
let out_dir = env::var("OUT_DIR").unwrap();
55

66
let iconv = if cfg!(feature = "iconv") { "ON" } else { "OFF" };
77
let zlib = if cfg!(feature = "zlib") { "ON" } else { "OFF" };
8+
89
let path = cmake::Config::new("libxml2")
910
.define("BUILD_SHARED_LIBS", "OFF")
1011
.define("LIBXML2_WITH_ICONV", iconv)
@@ -14,19 +15,52 @@ fn main() {
1415

1516
println!("cargo::rerun-if-changed=libxml2");
1617

17-
let libs = std::process::Command::new(format!("{}/bin/xml2-config", path.display(),))
18+
let host = env::var("HOST").unwrap();
19+
20+
let mut libs = std::process::Command::new("sh")
21+
.arg(path.join("bin/xml2-config"))
1822
.arg("--libs")
1923
.output()
20-
.expect("");
21-
let libs = String::from_utf8_lossy(&libs.stdout);
22-
println!("cargo::rustc-flags={}", libs);
23-
24-
let cflags = std::process::Command::new(format!("{}/bin/xml2-config", path.display(),))
24+
.map(|output| String::from_utf8_lossy(&output.stdout).to_string());
25+
let mut cflags = std::process::Command::new("sh")
26+
.arg(path.join("bin/xml2-config"))
2527
.arg("--cflags")
2628
.output()
27-
.expect("");
28-
let cflags = String::from_utf8_lossy(&cflags.stdout);
29+
.map(|output| String::from_utf8_lossy(&output.stdout).to_string());
30+
31+
if host.contains("windows") {
32+
let reg = regex::Regex::new("-(.)/(.)/").expect("reg");
33+
libs = libs.map(|v| reg.replace_all(&v, "-$1$2:/").to_string());
34+
cflags = cflags.map(|v| reg.replace_all(&v, "-$1$2:/").to_string());
35+
}
36+
// NOTE: Manually specify
37+
let mut libs = libs.unwrap_or_else(|_| format!("-L{} -lxml2", path.join("lib").display()));
38+
if host.contains("msvc") {
39+
let mut iters = fs::read_dir(path.join("lib"))
40+
.expect("read_dir")
41+
.filter_map(|p| {
42+
p.ok().and_then(|p| {
43+
let metadata = p.metadata().ok()?;
44+
let file_name = p.file_name();
45+
let name = file_name.to_string_lossy();
46+
if metadata.is_file() && name.starts_with("libxml2") && name.ends_with(".lib") {
47+
return Some(
48+
name
49+
.trim_end_matches(".lib")
50+
.to_string(),
51+
);
52+
}
53+
None
54+
})
55+
});
56+
let name = iters.next().expect("xml name");
57+
println!("cargo:rustc-link-lib=bcrypt");
58+
libs = libs.replace("-lxml2", &format!("-l{}", name));
59+
}
60+
println!("cargo::rustc-flags={}", libs);
2961

62+
// Note: Manually specify
63+
let cflags = cflags.unwrap_or_else(|_| format!("-I{}", path.join("include/libxml2").display()));
3064
let bindings_path = PathBuf::from(out_dir).join("bindings.rs");
3165
bindgen::builder()
3266
.opaque_type("max_align_t")

0 commit comments

Comments
 (0)