2025-12-10 17:42:02 -08:00

88 lines
2.6 KiB
Rust

use std::process::Command;
fn main() {
// Compile .icon to Assets.car on macOS
#[cfg(target_os = "macos")]
{
let project_root = std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set");
let icon_source = format!("{}/../Spacedrive.icon", project_root);
let gen_dir = format!("{}/gen", project_root);
// Create gen directory
std::fs::create_dir_all(&gen_dir).expect("Failed to create gen directory");
// Check if .icon file exists
if std::path::Path::new(&icon_source).exists() {
println!("cargo:rerun-if-changed={}", icon_source);
// Run actool to compile .icon to Assets.car
let output = Command::new("xcrun")
.args([
"actool",
&icon_source,
"--compile",
&gen_dir,
"--output-format",
"human-readable-text",
"--notices",
"--warnings",
"--errors",
"--output-partial-info-plist",
&format!("{}/partial.plist", gen_dir),
"--app-icon",
"Spacedrive",
"--include-all-app-icons",
"--enable-on-demand-resources",
"NO",
"--development-region",
"en",
"--target-device",
"mac",
"--minimum-deployment-target",
"11.0",
"--platform",
"macosx",
])
.output()
.expect("Failed to execute actool");
if !output.status.success() {
eprintln!("actool failed: {}", String::from_utf8_lossy(&output.stderr));
} else {
println!("Successfully compiled Spacedrive.icon to Assets.car");
}
} else {
println!("cargo:warning=Spacedrive.icon not found at {}", icon_source);
}
}
// Create symlink for daemon binary with target architecture suffix
let target_triple = std::env::var("TARGET").expect("TARGET not set");
let profile = std::env::var("PROFILE").unwrap_or_else(|_| "debug".to_string());
let workspace_dir = std::env::var("CARGO_WORKSPACE_DIR")
.or_else(|_| std::env::var("CARGO_MANIFEST_DIR").map(|d| format!("{}/../../..", d)))
.expect("Could not find workspace directory");
let daemon_source = format!("{}/target/{}/sd-daemon", workspace_dir, profile);
let daemon_target = format!("{}/target/{}/sd-daemon-{}", workspace_dir, profile, target_triple);
if std::path::Path::new(&daemon_source).exists() {
// Remove existing symlink/file if it exists
let _ = std::fs::remove_file(&daemon_target);
#[cfg(unix)]
{
std::os::unix::fs::symlink(&daemon_source, &daemon_target)
.unwrap_or_else(|e| eprintln!("Warning: Failed to create daemon symlink: {}", e));
}
#[cfg(windows)]
{
std::fs::copy(&daemon_source, &daemon_target)
.unwrap_or_else(|e| eprintln!("Warning: Failed to copy daemon: {}", e));
}
}
tauri_build::build()
}