[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
?