gnu: Add weasyprint.

Now includs the patch file missed in
73f0ed8dbf.

* gnu/packages/pdf.scm (weasyprint): New variable.
* gnu/packages/patches/weasyprint-library-paths.patch: New file.
* gnu/local.mk: Add it.
This commit is contained in:
Hartmut Goebel 2019-09-30 21:09:49 +02:00
parent 221012ec2d
commit 77e0cebcad
No known key found for this signature in database
GPG key ID: 634A8DFFD3F631DF
3 changed files with 120 additions and 0 deletions

View file

@ -1420,6 +1420,7 @@ dist_patch_DATA = \
%D%/packages/patches/wavpack-CVE-2018-6767.patch \
%D%/packages/patches/wavpack-CVE-2018-7253.patch \
%D%/packages/patches/wavpack-CVE-2018-7254.patch \
%D%/packages/patches/weasyprint-library-paths.patch \
%D%/packages/patches/wicd-bitrate-none-fix.patch \
%D%/packages/patches/wicd-get-selected-profile-fix.patch \
%D%/packages/patches/wicd-urwid-1.3.patch \

View file

@ -0,0 +1,38 @@
diff --git a/weasyprint/fonts.py b/weasyprint/fonts.py
index 377716c1..2016e01c 100644
--- a/weasyprint/fonts.py
+++ b/weasyprint/fonts.py
@@ -48,11 +48,8 @@ else:
# with OSError: dlopen() failed to load a library: cairo / cairo-2
# So let's hope we find the same file as cairo already did ;)
# Same applies to pangocairo requiring pangoft2
- fontconfig = dlopen(ffi, 'fontconfig', 'libfontconfig',
- 'libfontconfig-1.dll',
- 'libfontconfig.so.1', 'libfontconfig-1.dylib')
- pangoft2 = dlopen(ffi, 'pangoft2-1.0', 'libpangoft2-1.0-0',
- 'libpangoft2-1.0.so', 'libpangoft2-1.0.dylib')
+ fontconfig = dlopen(ffi, '@fontconfig@')
+ pangoft2 = dlopen(ffi, '@pangoft2@')
ffi.cdef('''
// FontConfig
diff --git a/weasyprint/text.py b/weasyprint/text.py
index 035074e9..08e40395 100644
--- a/weasyprint/text.py
+++ b/weasyprint/text.py
@@ -243,12 +243,9 @@ def dlopen(ffi, *names):
return ffi.dlopen(names[0]) # pragma: no cover
-gobject = dlopen(ffi, 'gobject-2.0', 'libgobject-2.0-0', 'libgobject-2.0.so',
- 'libgobject-2.0.dylib')
-pango = dlopen(ffi, 'pango-1.0', 'libpango-1.0-0', 'libpango-1.0.so',
- 'libpango-1.0.dylib')
-pangocairo = dlopen(ffi, 'pangocairo-1.0', 'libpangocairo-1.0-0',
- 'libpangocairo-1.0.so', 'libpangocairo-1.0.dylib')
+gobject = dlopen(ffi, '@gobject@')
+pango = dlopen(ffi, '@pango@')
+pangocairo = dlopen(ffi, '@pangocairo@')
gobject.g_type_init()

View file

@ -16,6 +16,7 @@
;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2019 Ben Sturmfels <ben@sturm.com.au>
;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -66,6 +67,7 @@ (define-module (gnu packages pdf)
#:use-module (gnu packages imagemagick)
#:use-module (gnu packages javascript)
#:use-module (gnu packages lesstif)
#:use-module (gnu packages libffi)
#:use-module (gnu packages linux)
#:use-module (gnu packages lua)
#:use-module (gnu packages pcre)
@ -73,6 +75,8 @@ (define-module (gnu packages pdf)
#:use-module (gnu packages photo)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages python-check)
#:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages qt)
#:use-module (gnu packages sdl)
@ -1200,3 +1204,80 @@ (define-public stapler
@item displaying the mapping between logical and physical page numbers
@end itemize")
(license license:bsd-3)))
(define-public weasyprint
(package
(name "weasyprint")
(version "50")
(source
(origin
(method url-fetch)
(uri (pypi-uri "WeasyPrint" version))
(sha256
(base32 "0invs96zvmcr6wh5klj52jrcnr9qg150v9wpmbhcsf3vv1d1hbcw"))
(patches (search-patches "weasyprint-library-paths.patch"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-library-paths
(lambda* (#:key inputs #:allow-other-keys)
(let ((fontconfig (assoc-ref inputs "fontconfig"))
(glib (assoc-ref inputs "glib"))
(pango (assoc-ref inputs "pango"))
(pangoft2 (assoc-ref inputs "pangoft2")))
(substitute* "weasyprint/fonts.py"
(("@fontconfig@")
(string-append fontconfig "/lib/libfontconfig.so"))
(("@pangoft2@")
(string-append pango "/lib/libpangoft2-1.0.so")))
(substitute* "weasyprint/text.py"
(("@gobject@")
(string-append glib "/lib/libgobject-2.0.so"))
(("@pango@")
(string-append pango "/lib/libpango-1.0.so"))
(("@pangocairo@")
(string-append pango "/lib/libpangocairo-1.0.so"))))))
(add-after 'unpack 'remove-pytest-options
(lambda _
(substitute* "setup.cfg"
;; flake8 and isort syntax checks fail, which is not our
;; business
(("addopts = --flake8 --isort") ""))))
(replace 'check
(lambda _
;; run pytest, excluding one failing test
(invoke "pytest" "-k" "not test_flex_column_wrap_reverse"))))))
(inputs
`(("fontconfig" ,fontconfig)
("glib" ,glib)
("pango" ,pango)))
(propagated-inputs
`(("gdk-pixbuf" ,gdk-pixbuf)
("python-cairocffi" ,python-cairocffi)
("python-cairosvg" ,python-cairosvg)
("python-cffi" ,python-cffi)
("python-cssselect2" ,python-cssselect2)
("python-html5lib" ,python-html5lib)
("python-pyphen" ,python-pyphen)
("python-tinycss2" ,python-tinycss2)))
(native-inputs
`(("python-pytest-cov" ,python-pytest-cov)
("python-pytest-runner" ,python-pytest-runner)))
(home-page "https://weasyprint.org/")
(synopsis "Document factory for creating PDF files from HTML")
(description "WeasyPrint helps web developers to create PDF documents. It
turns simple HTML pages into gorgeous statistical reports, invoices, tickets,
etc.
From a technical point of view, WeasyPrint is a visual rendering engine for
HTML and CSS that can export to PDF and PNG. It aims to support web standards
for printing.
It is based on various libraries but not on a full rendering engine like
WebKit or Gecko. The CSS layout engine is written in Python, designed for
pagination, and meant to be easy to hack on. Weasyprint can also be used as a
python library.
Keywords: html2pdf, htmltopdf")
(license license:bsd-3)))