[bug#57043] gnu: rust-freetype-sys-0.13: Unbundle freetype2.

Message ID HGgZmDLEAonfFN-y6zfOKMo8NKy1RXvOfRvKz_NhjsFPW6NMdGToBoJpBnJ5Rh8b6eRsJjw7UpVAxlhZeJww-6VXMmYswdYS2QXvB1fdEBE=@jeandudey.tech
State New
Headers
Series [bug#57043] gnu: rust-freetype-sys-0.13: Unbundle freetype2. |

Commit Message

Jean Pierre De Jesus DIAZ Aug. 7, 2022, 6:39 p.m. UTC
Hello,

This patch removes the bundled freetype2 library on `rust-freetype-sys-0.13'.

Also removes unneeded build dependencies (`pkg-config' and `cmake').

One less bundled dependency ;).

—
Jean-Pierre De Jesus DIAZ
  

Comments

Maxime Devos Aug. 7, 2022, 9:59 p.m. UTC | #1
On 07-08-2022 20:39, Jean Pierre De Jesus DIAZ via Guix-patches via wrote:
> Hello,
>
> This patch removes the bundled freetype2 library on `rust-freetype-sys-0.13'.
>
> Also removes unneeded build dependencies (`pkg-config' and `cmake').

I've noticed this in antioxidant (and fixed it there locally) but didn't 
report it yet.

Anyway, this can be done more simple -- all that I needed to do was 
deleting the freetype2 subdirectory (in a snippet) and adding 'freetype' 
to inputs.  Patching the build script or build.rs was not necessary.

Additionally, I noticed that in the modified build.rs, only 
rustc-link-lib (-l) is set, but not rustc-link-search (-L). Antioxidant 
needs the latter to be set, otherwise dependents will fail to link 
because of not finding the freetype library.

Greetings,
Maxime.
  
Hilton Chain June 15, 2025, 5:49 p.m. UTC | #2
Closing since unbundling has been done already and crates-io will be removed.
  

Patch

From f6dec2567dc997a32ef308bd42d259ac60dbbab5 Mon Sep 17 00:00:00 2001
From: Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
Date: Sun, 7 Aug 2022 20:36:14 +0200
Subject: [PATCH] gnu: rust-freetype-sys-0.13: Unbundle freetype2.

* gnu/packages/crates-io.scm (rust-freetype-sys-0.13)
  [source]: Remove bundled `freetype2' source code and add patch to use
  system library.
---
 gnu/packages/crates-io.scm                    | 16 +++---
 ...ust-freetype-sys-0.13-simplify-build.patch | 53 +++++++++++++++++++
 2 files changed, 63 insertions(+), 6 deletions(-)
 create mode 100644 gnu/packages/patches/rust-freetype-sys-0.13-simplify-build.patch

diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index cfafce9aa3..cddd8ebaf0 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -27,6 +27,7 @@ 
 ;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
 ;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2022 Evgenii Lepikhin <e.lepikhin@corp.mail.ru>
+;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22904,14 +22905,17 @@  (define-public rust-freetype-sys-0.13
        (uri (crate-uri "freetype-sys" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "06kkds31s6b1i39dyanwmzbnic7laia1kk3gfvx8sqncq08l0zd3"))))
+        (base32 "06kkds31s6b1i39dyanwmzbnic7laia1kk3gfvx8sqncq08l0zd3"))
+       (patches (search-patches "rust-freetype-sys-0.13-simplify-build.patch"))
+       (modules '((guix build utils)))
+       (snippet
+         '(delete-file-recursively "freetype2"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-cmake" ,rust-cmake-0.1)
-        ("rust-libc" ,rust-libc-0.2)
-        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))))
+    (inputs
+      (list freetype))
     (home-page "https://github.com/PistonDevelopers/freetype-sys")
     (synopsis "Low level binding for FreeType font library")
     (description
diff --git a/gnu/packages/patches/rust-freetype-sys-0.13-simplify-build.patch b/gnu/packages/patches/rust-freetype-sys-0.13-simplify-build.patch
new file mode 100644
index 0000000000..bb16f3e065
--- /dev/null
+++ b/gnu/packages/patches/rust-freetype-sys-0.13-simplify-build.patch
@@ -0,0 +1,53 @@ 
+Force freetype-sys to use system libraries, this removes the need for CMake.
+
+The bundled source is still present at the crate package, it should be removed
+through a package snippet.
+
+diff -Naur freetype-sys-0.13.1/Cargo.toml freetype-sys-0.13.1-patch/Cargo.toml > 1.patch
+--- freetype-sys-0.13.1/Cargo.toml	2020-07-05 11:15:43.000000000 +0200
++++ freetype-sys-0.13.1-patch/Cargo.toml	2022-08-07 19:53:57.649678214 +0200
+@@ -24,8 +24,3 @@
+ repository = "https://github.com/PistonDevelopers/freetype-sys.git"
+ [dependencies.libc]
+ version = "0.2.42"
+-[build-dependencies.cmake]
+-version = "0.1.42"
+-
+-[build-dependencies.pkg-config]
+-version = "0.3.11"
+diff -Naur freetype-sys-0.13.1/build.rs freetype-sys-0.13.1-patch/build.rs > 2.patch
+--- freetype-sys-0.13.1/build.rs	2020-05-30 05:59:09.000000000 +0200
++++ freetype-sys-0.13.1-patch/build.rs	2022-08-07 19:54:34.153503846 +0200
+@@ -1,30 +1,4 @@
+-extern crate cmake;
+-extern crate pkg_config;
+-
+-use cmake::Config;
+-use std::env;
+-
+ fn main() {
+-    let target = env::var("TARGET").unwrap();
+-    if !target.contains("android")
+-        && pkg_config::Config::new().atleast_version("18.5.12").find("freetype2").is_ok()
+-    {
+-        return
+-    }
+-
+-    let mut config = Config::new("freetype2");
+-    if let Ok(s) = env::var("FREETYPE_CMAKE_GENERATOR") {
+-        config.generator(s);
+-    }
+-    let dst = config
+-        .define("WITH_BZip2", "OFF")
+-        .define("WITH_HarfBuzz", "OFF")
+-        .define("WITH_PNG", "OFF")
+-        .define("WITH_ZLIB", "OFF")
+-        .profile("Release")
+-        .build();
+-    let out_dir = env::var("OUT_DIR").unwrap();
+-    println!("cargo:rustc-link-search=native={}/lib", dst.display());
+-    println!("cargo:rustc-link-lib=static=freetype");
++    println!("cargo:rustc-link-lib=freetype");
+-    println!("cargo:outdir={}", out_dir);
+ }
++
-- 
2.36.1