Ctrl K
ComunidadGuías…

apps/assembler/build.rs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// SPDX-License-Identifier: AGPL-3.0-only
// Carbon (github.com/crbnos/carbon). Modified or adapted versions of this file,
// including ports, remain AGPLv3; serving them over a network requires releasing their source.

use std::path::PathBuf;

/// Same OCCT discovery as crates/occt-bridge/build.rs: `OCCT_PREFIX` env → the
/// per-machine static-build cache → a fixed per-target default. No `brew`
/// shell-out, so the build never depends on Homebrew being installed or on PATH.
fn occt_prefix() -> String {
    if let Ok(p) = std::env::var("OCCT_PREFIX") {
        if !p.is_empty() {
            return p;
        }
    }
    // The per-machine static build (apps/assembler/scripts/build-occt.sh).
    if let Some(home) = std::env::var_os("HOME") {
        let cached = PathBuf::from(home).join(".cache/carbon-occt/8.0.0-p1");
        if cached.join("lib/libTKernel.a").exists() {
            return cached.to_string_lossy().into_owned();
        }
    }
    let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
    let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
    match os.as_str() {
        "macos" if arch == "aarch64" => "/opt/homebrew/opt/opencascade".to_string(),
        "macos" => "/usr/local/opt/opencascade".to_string(),
        _ => "/usr".to_string(),
    }
}

fn main() {
    // Static OCCT (the deployment build) is linked into the binary — no rpath
    // needed. Only a dynamic OCCT (e.g. a brew fallback) needs its lib dir on
    // the runtime search path; embed it so the binary runs without
    // DYLD_LIBRARY_PATH/LD_LIBRARY_PATH (macOS SIP strips DYLD_* across
    // protected binaries like nohup).
    let lib = PathBuf::from(format!("{}/lib", occt_prefix()));
    let is_static = lib.join("libTKernel.a").exists();
    if !is_static && lib.exists() {
        println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib.display());
    }
    println!("cargo:rerun-if-env-changed=OCCT_PREFIX");
}