GNU bug report logs - #60939
[PATCH] Add skia-for-libreoffice.

Previous Next

Package: guix-patches;

Reported by: Nicolas Graves <ngraves <at> ngraves.fr>

Date: Wed, 18 Jan 2023 18:26:02 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 60939 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#60939; Package guix-patches. (Wed, 18 Jan 2023 18:26:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Nicolas Graves <ngraves <at> ngraves.fr>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Wed, 18 Jan 2023 18:26:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: guix-patches <at> gnu.org
Cc: efraim <at> flashner.co.il
Subject: [PATCH] Add skia-for-libreoffice.
Date: Wed, 18 Jan 2023 19:24:46 +0100
Hi!

Here is a patch series enabling the skia 2D graphics library for
libreoffice.

It should improve performance of libreoffice, but adds no new
functionality. I will test it in a real environment from now on.

The implementation can be reworked. In particular :
- skia is built by keeping the libreoffice source, adding the skia
tarball, building skia only, and exporting the libraries.
- it builds fine, but relies on many arguments from libreoffice, which
probably implies a rebuild each time libreoffice is updated (while it is
not a strict need, since the skia tarball is not updated for each new
libreoffice version).
- but separating both arguments fields by copying them is fine, but it
  will lead to a lot of duplicated code.


-- 
Best regards,
Nicolas Graves




Information forwarded to guix-patches <at> gnu.org:
bug#60939; Package guix-patches. (Wed, 18 Jan 2023 18:36:01 GMT) Full text and rfc822 format available.

Message #8 received at 60939 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: 60939 <at> debbugs.gnu.org
Cc: ngraves <at> ngraves.fr
Subject: [PATCH 1/2] gnu: Add skia-for-libreoffice.
Date: Wed, 18 Jan 2023 19:34:59 +0100
* gnu/packages/libreoffice.scm (skia-for-libreoffice): New variable.
---
 gnu/packages/libreoffice.scm | 76 ++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)

diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index b959470d8f..36d7bc0c66 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -75,6 +75,7 @@ (define-module (gnu packages libreoffice)
   #:use-module (gnu packages image)
   #:use-module (gnu packages java)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages maths)
@@ -1155,3 +1156,78 @@ (define (install-appdata app)
      '((release-monitoring-url
         . "https://www.libreoffice.org/download/download-libreoffice/")))
     (license license:mpl2.0)))
+
+(define skia-tarball
+  (origin
+    (method url-fetch)
+    (uri "https://dev-www.libreoffice.org/src/skia-m103-b301ff025004c9cd82816c86c547588e6c24b466.tar.xz")
+    (sha256
+     (base32 "1navlqbm6ja78whj5p1jwnlg3fmnpqjwh00dmbm4n424gqjad560"))))
+
+(define-public skia-for-libreoffice
+  (package
+    (name "skia-for-libreoffice")
+    (version (package-version libreoffice))
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append
+         "https://download.documentfoundation.org/libreoffice/src/"
+         (version-prefix version 3) "/libreoffice-" version ".tar.xz"))
+       (sha256
+        (base32 "0fyvd4ydh72lmn005h190xa563d4h376pi1fx9lfr5i25qcbpg7z"))))
+    (build-system (package-build-system libreoffice))
+    (arguments
+     (substitute-keyword-arguments (package-arguments libreoffice)
+       ((#:phases phases '%standard-phases)
+        #~(modify-phases #$phases
+            (delete 'include-built-skia)
+            (delete 'bin-and-desktop-install)
+            (add-after 'insert-external-tarballs 'insert-skia-tarball
+              (lambda _
+                (copy-file
+                 #$skia-tarball
+                 (string-append
+                  "external/tarballs/"
+                  "skia-m103-b301ff025004c9cd82816c86c547588e6c24b466.tar.xz"))))
+            (replace 'build
+              (lambda _ (invoke "make" "Library_skia")))
+            (replace 'install
+              (lambda _
+                (with-directory-excursion "instdir/program"
+                  (for-each
+                   (lambda (lib)
+                     (install-file lib (string-append #$output "/lib")))
+                   (find-files "." "\\.so$")))
+                (define* (install-header header)
+                  (let* ((inc (string-append #$output "/include/"))
+                         (ridx (string-rindex header #\/))
+                         (dir (string-append inc (string-take header ridx))))
+                    (install-file header dir)))
+                (with-directory-excursion "workdir/UnpackedTarball"
+                  (for-each install-header (find-files "skia" "\\.h")))))))
+       ((#:configure-flags flags)
+        ;; Else needs llvm gold linker.
+        `(delete "--enable-lto" ,flags))
+       ((#:validate-runpath? _ #f) #f)))
+    (native-inputs (modify-inputs
+                       (append (package-native-inputs libreoffice)
+                               ;; here because of configure step
+                               (package-inputs libreoffice))
+                     (prepend clang-11)
+                     ;; Avoid circular dependency.
+                     (delete "skia-for-libreoffice")))
+    (inputs (list expat fontconfig freetype harfbuzz mesa libwebp zlib))
+    (home-page "https://skia.org/")
+    (synopsis "2D graphics library")
+    (description
+     "Skia is a 2D graphics library for drawing text, geometries, and images.
+It supports:
+@itemize
+@item 3x3 matrices with perspective
+@item antialiasing, transparency, filters
+@item shaders, xfermodes, maskfilters, patheffects
+@item subpixel text
+@end itemize")
+    (license license:bsd-3)))
-- 
2.38.1





Information forwarded to guix-patches <at> gnu.org:
bug#60939; Package guix-patches. (Wed, 18 Jan 2023 18:36:02 GMT) Full text and rfc822 format available.

Message #11 received at 60939 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: 60939 <at> debbugs.gnu.org
Cc: ngraves <at> ngraves.fr
Subject: [PATCH 2/2] gnu: libreoffice: Enable build with skia.
Date: Wed, 18 Jan 2023 19:35:00 +0100
* gnu/packages/libreoffice.scm (libreoffice): Enable build with skia.
* gnu/packages/patches/skia-libreoffice.patch
---
 gnu/packages/libreoffice.scm                | 28 +++++++++++++++++++--
 gnu/packages/patches/skia-libreoffice.patch | 27 ++++++++++++++++++++
 2 files changed, 53 insertions(+), 2 deletions(-)
 create mode 100644 gnu/packages/patches/skia-libreoffice.patch

diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 36d7bc0c66..d92529d8b5 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -925,7 +925,8 @@ (define-public libreoffice
          "https://download.documentfoundation.org/libreoffice/src/"
          (version-prefix version 3) "/libreoffice-" version ".tar.xz"))
        (sha256
-        (base32 "0fyvd4ydh72lmn005h190xa563d4h376pi1fx9lfr5i25qcbpg7z"))))
+        (base32 "0fyvd4ydh72lmn005h190xa563d4h376pi1fx9lfr5i25qcbpg7z"))
+       (patches (search-patches "skia-libreoffice.patch"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      (list
@@ -970,6 +971,29 @@ (define-public libreoffice
                 (("/usr/bin/xdg-open")
                  (search-input-file inputs "/bin/xdg-open")))
               (setenv "CPPFLAGS" "-std=c++17")))
+          (add-before 'configure 'include-built-skia
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let* ((incdir (search-input-directory inputs "include/skia/"))
+                     (outdir (string-drop-right
+                              incdir
+                              (string-length "include/skia/")))
+                     (libdir (string-append outdir "lib")))
+                (substitute* "RepositoryExternal.mk"
+                  ;; Include skia .h files.
+                  (("\\$\\(call gb_UnpackedTarball_get_dir,skia\\)")
+                   incdir)
+                  ;; Use skia as an external library.
+                  (("\\$\\(call gb_LinkTarget_use_libraries,\\$\\(1\\),skia\\)")
+                   (string-append "$(call gb_LinkTarget_add_libs,$(1),"
+                                  "-L" libdir " -lskialo)")))
+                ;; Delete skia library unpack and build steps.
+                (substitute* "external/skia/Module_skia.mk"
+                  (("UnpackedTarball_skia") "")
+                  (("Library_skia") ""))
+                ;; Symlink the library (used in make install).
+                (mkdir-p "instdir/program")
+                (symlink (search-input-file inputs "lib/libskialo.so")
+                         "instdir/program/libskialo.so"))))
           (add-after 'install 'reset-zip-timestamps
             (lambda _
               (for-each (lambda (file)
@@ -1042,7 +1066,6 @@ (define (install-appdata app)
          "--without-java"
          ;; FIXME: Enable once the corresponding inputs are packaged.
          "--disable-coinmp"
-         "--disable-skia"
          ;; This could (Debian does this) be a separate output containing only
          ;; program/libfirebird_sdbclo.so, if there's a way to point to it.
          "--enable-firebird-sdbc"
@@ -1138,6 +1161,7 @@ (define (install-appdata app)
            qrcodegen-cpp
            redland
            sane-backends
+           skia-for-libreoffice
            unixodbc
            unzip
            vigra
diff --git a/gnu/packages/patches/skia-libreoffice.patch b/gnu/packages/patches/skia-libreoffice.patch
new file mode 100644
index 0000000000..1818b8f5d8
--- /dev/null
+++ b/gnu/packages/patches/skia-libreoffice.patch
@@ -0,0 +1,27 @@
+From ea381d2468523a1e7b78a0bcf10cf5af0484bd5b Mon Sep 17 00:00:00 2001
+From: Nicolas Graves <ngraves <at> ngraves.fr>
+Date: Tue, 17 Jan 2023 10:49:56 +0100
+Subject: [PATCH] RepositoryExternal: delete build of skia.
+
+---
+ RepositoryExternal.mk | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
+index ccc92790341e..6f2ea1599f12 100644
+--- a/RepositoryExternal.mk
++++ b/RepositoryExternal.mk
+@@ -136,10 +136,6 @@ $(call gb_LinkTarget_set_include,$(1),\
+ 	$$(INCLUDE) \
+ )
+ $(call gb_LinkTarget_use_libraries,$(1),skia)
+-$(call gb_LinkTarget_add_defs,$(1),\
+-	-DSK_USER_CONFIG_HEADER="<$(BUILDDIR)/config_host/config_skia.h>" \
+-	-DSKIA_DLL \
+-)
+ endef
+ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo,\
+         skia \
+-- 
+2.38.1
+
-- 
2.38.1





Information forwarded to guix-patches <at> gnu.org:
bug#60939; Package guix-patches. (Wed, 18 Jan 2023 21:28:01 GMT) Full text and rfc822 format available.

Message #14 received at 60939 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: 60939 <at> debbugs.gnu.org
Cc: ngraves <at> ngraves.fr
Subject: [PATCH v2 1/2] gnu: Add skia-for-libreoffice.
Date: Wed, 18 Jan 2023 22:27:34 +0100
* gnu/packages/libreoffice.scm (skia-for-libreoffice): New variable.
---
 gnu/packages/libreoffice.scm | 66 ++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index b959470d8f..372b18a24f 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -75,6 +75,7 @@ (define-module (gnu packages libreoffice)
   #:use-module (gnu packages image)
   #:use-module (gnu packages java)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages maths)
@@ -1155,3 +1156,68 @@ (define (install-appdata app)
      '((release-monitoring-url
         . "https://www.libreoffice.org/download/download-libreoffice/")))
     (license license:mpl2.0)))
+
+(define skia-tarball
+  (origin
+    (method url-fetch)
+    (uri "https://dev-www.libreoffice.org/src/skia-m103-b301ff025004c9cd82816c86c547588e6c24b466.tar.xz")
+    (sha256
+     (base32 "1navlqbm6ja78whj5p1jwnlg3fmnpqjwh00dmbm4n424gqjad560"))))
+
+(define-public skia-for-libreoffice
+  (package
+    (inherit libreoffice)
+    (name "skia-for-libreoffice")
+    (arguments
+     (substitute-keyword-arguments (package-arguments libreoffice)
+       ((#:phases phases '%standard-phases)
+        #~(modify-phases #$phases
+            (delete 'include-built-skia)
+            (delete 'bin-and-desktop-install)
+            (add-after 'insert-external-tarballs 'insert-skia-tarball
+              (lambda _
+                (copy-file
+                 #$skia-tarball
+                 (string-append
+                  "external/tarballs/"
+                  "skia-m103-b301ff025004c9cd82816c86c547588e6c24b466.tar.xz"))))
+            (replace 'build
+              (lambda _ (invoke "make" "Library_skia")))
+            (replace 'install
+              (lambda _
+                (with-directory-excursion "instdir/program"
+                  (for-each
+                   (lambda (lib)
+                     (install-file lib (string-append #$output "/lib")))
+                   (find-files "." "\\.so$")))
+                (define* (install-header header)
+                  (let* ((inc (string-append #$output "/include/"))
+                         (ridx (string-rindex header #\/))
+                         (dir (string-append inc (string-take header ridx))))
+                    (install-file header dir)))
+                (with-directory-excursion "workdir/UnpackedTarball"
+                  (for-each install-header (find-files "skia" "\\.h")))))))
+       ((#:configure-flags flags)
+        ;; Else needs llvm gold linker.
+        `(delete "--enable-lto" ,flags))
+       ((#:validate-runpath? _ #f) #f)))
+    (native-inputs (modify-inputs
+                       (append (package-native-inputs libreoffice)
+                               ;; here because of configure step
+                               (package-inputs libreoffice))
+                     (prepend clang-11)
+                     ;; Avoid circular dependency.
+                     (delete "skia-for-libreoffice")))
+    (inputs (list expat fontconfig freetype harfbuzz mesa libwebp zlib))
+    (home-page "https://skia.org/")
+    (synopsis "2D graphics library")
+    (description
+     "Skia is a 2D graphics library for drawing text, geometries, and images.
+It supports:
+@itemize
+@item 3x3 matrices with perspective
+@item antialiasing, transparency, filters
+@item shaders, xfermodes, maskfilters, patheffects
+@item subpixel text
+@end itemize")
+    (license license:bsd-3)))
-- 
2.38.1





Information forwarded to guix-patches <at> gnu.org:
bug#60939; Package guix-patches. (Wed, 18 Jan 2023 21:28:02 GMT) Full text and rfc822 format available.

Message #17 received at 60939 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: 60939 <at> debbugs.gnu.org
Cc: ngraves <at> ngraves.fr
Subject: [PATCH v2 2/2] gnu: libreoffice: Enable build with skia.
Date: Wed, 18 Jan 2023 22:27:35 +0100
* gnu/packages/libreoffice.scm (libreoffice): Enable build with skia.
---
 gnu/packages/libreoffice.scm | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 372b18a24f..72cd17fa09 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -970,6 +970,34 @@ (define-public libreoffice
                 (("/usr/bin/xdg-open")
                  (search-input-file inputs "/bin/xdg-open")))
               (setenv "CPPFLAGS" "-std=c++17")))
+          (add-before 'configure 'include-built-skia
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let* ((incdir (search-input-directory inputs "include/skia/"))
+                     (outdir (string-drop-right
+                              incdir
+                              (string-length "include/skia/")))
+                     (libdir (string-append outdir "lib")))
+                (substitute* "RepositoryExternal.mk"
+                  ;; Delete options that trigger skia build.
+                  (("-DSK_USER_CONFIG_HEADER=\"<\\$\\(BUILDDIR\\)\\/config_host\\/config_skia\\.h>\"")
+                   "")
+                  (("-DSKIA_DLL")
+                   "")
+                  ;; Include skia .h files.
+                  (("\\$\\(call gb_UnpackedTarball_get_dir,skia\\)")
+                   incdir)
+                  ;; Use skia as an external library.
+                  (("\\$\\(call gb_LinkTarget_use_libraries,\\$\\(1\\),skia\\)")
+                   (string-append "$(call gb_LinkTarget_add_libs,$(1),"
+                                  "-L" libdir " -lskialo)")))
+                ;; Delete skia library unpack and build steps.
+                (substitute* "external/skia/Module_skia.mk"
+                  (("UnpackedTarball_skia") "")
+                  (("Library_skia") ""))
+                ;; Symlink the library (used in make install).
+                (mkdir-p "instdir/program")
+                (symlink (search-input-file inputs "lib/libskialo.so")
+                         "instdir/program/libskialo.so"))))
           (add-after 'install 'reset-zip-timestamps
             (lambda _
               (for-each (lambda (file)
@@ -1042,7 +1070,6 @@ (define (install-appdata app)
          "--without-java"
          ;; FIXME: Enable once the corresponding inputs are packaged.
          "--disable-coinmp"
-         "--disable-skia"
          ;; This could (Debian does this) be a separate output containing only
          ;; program/libfirebird_sdbclo.so, if there's a way to point to it.
          "--enable-firebird-sdbc"
@@ -1138,6 +1165,7 @@ (define (install-appdata app)
            qrcodegen-cpp
            redland
            sane-backends
+           skia-for-libreoffice
            unixodbc
            unzip
            vigra
-- 
2.38.1





This bug report was last modified 2 years and 148 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.