0
0
mirror of https://github.com/termux/termux-packages.git synced 2024-11-23 13:46:16 +00:00
termux-packages/x11-packages/rnote/fix-compile-gresource.patch
EDllT 08761f30ee
addpkg(x11/rnote): 0.11.0 (#21524)
Co-authored-by: Biswapriyo Nath <nathbappai@gmail.com>
Co-authored-by: TomIO <43716232+TomJo2000@users.noreply.github.com>
2024-09-25 01:59:44 +02:00

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 }