mirror of
https://github.com/termux/termux-packages.git
synced 2024-11-23 13:46:16 +00:00
08761f30ee
Co-authored-by: Biswapriyo Nath <nathbappai@gmail.com> Co-authored-by: TomIO <43716232+TomJo2000@users.noreply.github.com>
107 lines
3.6 KiB
Diff
107 lines
3.6 KiB
Diff
diff --git a/crates/rnote-ui/build.rs b/crates/rnote-ui/build.rs
|
|
index 9e5c07e..cd7baa5 100644
|
|
--- a/crates/rnote-ui/build.rs
|
|
+++ b/crates/rnote-ui/build.rs
|
|
@@ -1,5 +1,11 @@
|
|
fn main() -> anyhow::Result<()> {
|
|
- compile_gresources()?;
|
|
+ let is_cross_compiling = detect_cross_compilation();
|
|
+
|
|
+ if !is_cross_compiling {
|
|
+ println!("cargo:rustc-cfg=feature=\"use_glib_build_tools\"");
|
|
+ }
|
|
+
|
|
+ compile_gresources(is_cross_compiling)?;
|
|
|
|
#[cfg(windows)]
|
|
compile_icon_winres()?;
|
|
@@ -18,11 +24,64 @@ fn compile_icon_winres() -> anyhow::Result<()> {
|
|
.context("Failed to compile winresource resource")
|
|
}
|
|
|
|
-fn compile_gresources() -> anyhow::Result<()> {
|
|
- glib_build_tools::compile_resources(
|
|
- &["data"],
|
|
- "data/resources.gresource.xml",
|
|
- "compiled.gresource",
|
|
- );
|
|
- Ok(())
|
|
+fn detect_cross_compilation() -> bool {
|
|
+ let host = std::env::var("HOST").unwrap_or_default();
|
|
+ let target = std::env::var("TARGET").unwrap_or_default();
|
|
+ host != target
|
|
+}
|
|
+
|
|
+fn compile_gresources(is_cross_compiling: bool) -> anyhow::Result<()> {
|
|
+ use std::env;
|
|
+ use std::path::PathBuf;
|
|
+ use std::process::Command;
|
|
+
|
|
+ let out_dir = env::var("OUT_DIR").expect("OUT_DIR not set");
|
|
+ let output_path = PathBuf::from(&out_dir).join("compiled.gresource");
|
|
+
|
|
+ // First, try using the system's glib-compile-resources
|
|
+ let system_result = Command::new("glib-compile-resources")
|
|
+ .args(&[
|
|
+ "--sourcedir=data",
|
|
+ "data/resources.gresource.xml",
|
|
+ &format!("--target={}", output_path.display()),
|
|
+ ])
|
|
+ .status();
|
|
+
|
|
+ match system_result {
|
|
+ Ok(status) if status.success() => return Ok(()),
|
|
+ Ok(_) => println!("glib-compile-resources command failed, trying fallback method..."),
|
|
+ Err(e) if e.kind() == std::io::ErrorKind::NotFound => {
|
|
+ println!("glib-compile-resources not found, trying fallback method...")
|
|
+ }
|
|
+ Err(e) => println!(
|
|
+ "Error executing glib-compile-resources: {}, trying fallback method...",
|
|
+ e
|
|
+ ),
|
|
+ }
|
|
+
|
|
+ // If cross-compiling, don't use glib_build_tools
|
|
+ if is_cross_compiling {
|
|
+ return Err(anyhow::anyhow!(
|
|
+ "Failed to compile gresources: system glib-compile-resources failed and we're cross-compiling. \
|
|
+ Please ensure you have glib development tools installed on your target system."
|
|
+ ));
|
|
+ }
|
|
+
|
|
+ // If not cross-compiling and system command fails, fall back to glib_build_tools if available
|
|
+ #[cfg(feature = "use_glib_build_tools")]
|
|
+ {
|
|
+ println!("Attempting to use glib_build_tools::compile_resources...");
|
|
+ glib_build_tools::compile_resources(
|
|
+ &["data"],
|
|
+ "data/resources.gresource.xml",
|
|
+ output_path.to_str().unwrap(),
|
|
+ );
|
|
+ Ok(())
|
|
+ }
|
|
+
|
|
+ #[cfg(not(feature = "use_glib_build_tools"))]
|
|
+ Err(anyhow::anyhow!(
|
|
+ "Failed to compile gresources: system glib-compile-resources failed and glib_build_tools is not available. \
|
|
+ Please ensure you have glib development tools installed on your system."
|
|
+ ))
|
|
}
|
|
|
|
diff --git a/crates/rnote-ui/Cargo.toml b/crates/rnote-ui/Cargo.toml
|
|
index 426d8e9..55447fc 100644
|
|
--- a/crates/rnote-ui/Cargo.toml
|
|
+++ b/crates/rnote-ui/Cargo.toml
|
|
@@ -58,7 +58,10 @@ url = { workspace = true }
|
|
|
|
[build-dependencies]
|
|
anyhow = { workspace = true }
|
|
-glib-build-tools = { workspace = true }
|
|
+glib-build-tools = { workspace = true, optional = true }
|
|
+
|
|
+[features]
|
|
+use_glib_build_tools = ["glib-build-tools"]
|
|
|
|
[target.'cfg(windows)'.build-dependencies]
|
|
winresource = { workspace = true }
|