Skip to content

Commit d62ca77

Browse files
committed
wip ci
1 parent 10d581b commit d62ca77

File tree

1 file changed

+52
-6
lines changed

1 file changed

+52
-6
lines changed

build.rs

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -322,14 +322,27 @@ mod linker_config {
322322
// Link against the microtex-cairo library (contains Cairo rendering code)
323323
println!("cargo:rustc-link-lib=static=microtex-cairo");
324324

325-
// Always link C++ runtime on macOS
325+
// Link C++ standard library
326326
#[cfg(target_os = "macos")]
327327
{
328328
println!("cargo:rustc-link-lib=dylib=c++");
329329
}
330330

331-
// Try to use pkg-config to find Cairo dependencies
332-
// This is more reliable than hardcoding library names
331+
#[cfg(target_os = "linux")]
332+
{
333+
println!("cargo:rustc-link-lib=dylib=stdc++");
334+
}
335+
336+
#[cfg(target_os = "windows")]
337+
{
338+
println!("cargo:rustc-link-lib=dylib=msvcrt");
339+
}
340+
341+
// Use pkg-config to find and link all Cairo and Pango dependencies
342+
let mut cairo_libs = Vec::new();
343+
let mut search_paths = Vec::new();
344+
345+
// Get Cairo flags from pkg-config
333346
if let Ok(output) = Command::new("pkg-config")
334347
.arg("--exists")
335348
.arg("cairo")
@@ -340,19 +353,52 @@ mod linker_config {
340353

341354
if let Ok(libs_output) = Command::new("pkg-config")
342355
.arg("--libs")
356+
.arg("--static")
343357
.arg("cairo")
358+
.arg("pango")
359+
.arg("pangocairo")
344360
.output()
345361
{
346362
let libs_str = String::from_utf8_lossy(&libs_output.stdout);
347-
println!("cargo:warning=Cairo linker flags: {}", libs_str.trim());
363+
println!("cargo:warning=Cairo/Pango linker flags: {}", libs_str.trim());
348364

349365
for flag in libs_str.split_whitespace() {
350366
if flag.starts_with("-l") {
351367
let lib_name = &flag[2..];
352-
println!("cargo:rustc-link-lib={}", lib_name);
368+
if !cairo_libs.contains(&lib_name.to_string()) {
369+
cairo_libs.push(lib_name.to_string());
370+
println!("cargo:rustc-link-lib={}", lib_name);
371+
}
353372
} else if flag.starts_with("-L") {
354373
let lib_path = &flag[2..];
355-
println!("cargo:rustc-link-search=native={}", lib_path);
374+
if !search_paths.contains(&lib_path.to_string()) {
375+
search_paths.push(lib_path.to_string());
376+
println!("cargo:rustc-link-search=native={}", lib_path);
377+
}
378+
}
379+
}
380+
} else {
381+
// Fallback: try to get libs without --static flag
382+
if let Ok(libs_output) = Command::new("pkg-config")
383+
.arg("--libs")
384+
.arg("cairo")
385+
.output()
386+
{
387+
let libs_str = String::from_utf8_lossy(&libs_output.stdout);
388+
println!("cargo:warning=Cairo linker flags: {}", libs_str.trim());
389+
390+
for flag in libs_str.split_whitespace() {
391+
if flag.starts_with("-l") {
392+
let lib_name = &flag[2..];
393+
if !cairo_libs.contains(&lib_name.to_string()) {
394+
println!("cargo:rustc-link-lib={}", lib_name);
395+
}
396+
} else if flag.starts_with("-L") {
397+
let lib_path = &flag[2..];
398+
if !search_paths.contains(&lib_path.to_string()) {
399+
println!("cargo:rustc-link-search=native={}", lib_path);
400+
}
401+
}
356402
}
357403
}
358404
}

0 commit comments

Comments
 (0)