[PATCH] Add skia-for-libreoffice.

  • Open
  • quality assurance status badge
Details
One participant
  • Nicolas Graves
Owner
unassigned
Submitted by
Nicolas Graves
Severity
normal
N
N
Nicolas Graves wrote on 18 Jan 2023 19:24
(address . guix-patches@gnu.org)(address . efraim@flashner.co.il)
87pmbblmz5.fsf@ngraves.fr
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
N
N
Nicolas Graves wrote on 18 Jan 2023 19:34
[PATCH 1/2] gnu: Add skia-for-libreoffice.
(address . 60939@debbugs.gnu.org)(address . ngraves@ngraves.fr)
20230118183500.20593-1-ngraves@ngraves.fr
* gnu/packages/libreoffice.scm (skia-for-libreoffice): New variable.
---
gnu/packages/libreoffice.scm | 76 ++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)

Toggle diff (93 lines)
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
N
N
Nicolas Graves wrote on 18 Jan 2023 19:35
[PATCH 2/2] gnu: libreoffice: Enable build with skia.
(address . 60939@debbugs.gnu.org)(address . ngraves@ngraves.fr)
20230118183500.20593-2-ngraves@ngraves.fr
* 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

Toggle diff (95 lines)
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@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
N
N
Nicolas Graves wrote on 18 Jan 2023 22:27
[PATCH v2 1/2] gnu: Add skia-for-libreoffice.
(address . 60939@debbugs.gnu.org)(address . ngraves@ngraves.fr)
20230118212735.27131-1-ngraves@ngraves.fr
* gnu/packages/libreoffice.scm (skia-for-libreoffice): New variable.
---
gnu/packages/libreoffice.scm | 66 ++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)

Toggle diff (83 lines)
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
N
N
Nicolas Graves wrote on 18 Jan 2023 22:27
[PATCH v2 2/2] gnu: libreoffice: Enable build with skia.
(address . 60939@debbugs.gnu.org)(address . ngraves@ngraves.fr)
20230118212735.27131-2-ngraves@ngraves.fr
* gnu/packages/libreoffice.scm (libreoffice): Enable build with skia.
---
gnu/packages/libreoffice.scm | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)

Toggle diff (57 lines)
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
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 60939@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 60939
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch