diff options
author | Akira Yokosawa <akiyks@gmail.com> | 2024-01-05 18:47:31 +0900 |
---|---|---|
committer | Paul E. McKenney <paulmck@kernel.org> | 2024-01-07 13:36:29 -0800 |
commit | 27da59e6ac577975e16c10ab2ca53e65a7501bdd (patch) | |
tree | b8eb493e7d40b9d588ce32f78ef82cce9811d075 | |
parent | 1ea46c6d43475fbdf97404dec28a58036d505bc3 (diff) | |
download | perfbook-27da59e6ac577975e16c10ab2ca53e65a7501bdd.tar.gz |
Makefile: Add rules to use rsvg-convert for SVG --> PDF conversion
Recently, Inkscape has had a number of stability issues in both of
its GUI- and CLI- modes. We have experienced crashes of CLI-mode
Inkscape caused by a change in glib, which can been resolved
by an update in the GTK3 library now released in GTK 3.24.39.
Commit f307e19f2be0 ("Prevent inkscape from interacting with desktop
manager") was an ugly hack for mitigating such crashes.
There is an alternative converter called rsvg-convert.
It is a light-weight CLI-only converter.
Up until Ubuntu 20.04 LTS, rsvg-convert's coverage of SVG features
was not good enough for some of the figures in perfbook drawn by
using Inkscape.
rsvg-convert has improved since, and version 2.52.5, which is the
version on Ubuntu 22.04 LTS, and later versions do fairly good jobs
in this respect.
So let's use rsvg-convert when it is available.
For Ubuntu and Debian, rsvg-convert belongs to the librsvg2-bin
package. For Fedora, it is provided in the librsvg2-tools package.
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
-rw-r--r-- | Makefile | 25 |
1 files changed, 20 insertions, 5 deletions
@@ -103,6 +103,8 @@ PDFTARGETS_OF_EPSOTHER := $(filter-out $(PDFTARGETS_OF_EPSORIG) $(PDFTARGETS_OF_ BIBSOURCES := bib/*.bib alphapf.bst # required commands +SED ?= sed + LATEX_CMD := $(shell $(WHICH) $(LATEX) 2>/dev/null) DOT := $(shell $(WHICH) dot 2>/dev/null) FIG2EPS := $(shell $(WHICH) fig2eps 2>/dev/null) @@ -111,6 +113,13 @@ INKSCAPE := $(shell $(WHICH) inkscape 2>/dev/null) ifdef INKSCAPE INKSCAPE_ONE := $(shell inkscape --version 2>/dev/null | grep -c "Inkscape 1") endif +# rsvg-convert is preferred to inkscape in SVG --> PDF conversion +RSVG_CONVERT := $(shell $(WHICH) rsvg-convert 2>/dev/null) +ifdef RSVG_CONVERT + SVG_PDF_CONVERTER = (rsvg-convert) +else + SVG_PDF_CONVERTER = (inkscape) +endif LATEXPAND := $(shell $(WHICH) latexpand 2>/dev/null) QPDF := $(shell $(WHICH) qpdf 2>/dev/null) @@ -455,12 +464,14 @@ ISOLATE_INKSCAPE ?= XDG_RUNTIME_DIR=na DBUS_SESSION_BUS_ADDRESS=na $(PDFTARGETS_OF_SVG): $(FIXSVGFONTS) $(PDFTARGETS_OF_SVG): %.pdf: %.svg - @echo "$< --> $(suffix $@)" + @echo "$< --> $(suffix $@) $(SVG_PDF_CONVERTER)" ifeq ($(STEELFONT),0) $(error "Steel City Comic" font not found. See #1 in FAQ.txt) endif -ifndef INKSCAPE - $(error $< --> $@ inkscape not found. Please install it) +ifndef RSVG_CONVERT + ifndef INKSCAPE + $(error $< --> $@ inkscape nor rsvg-convert not found. Please install either one) + endif endif ifeq ($(STEELFONTID),0) @sh $(FIXSVGFONTS) < $< | sed -e 's/Steel City Comic/Test/g' > $<i @@ -483,10 +494,14 @@ ifeq ($(RECOMMEND_LIBERATIONMONO),1) $(info Nice-to-have font family 'Liberation Mono' not found. See #9 in FAQ-BUILD.txt) endif -ifeq ($(INKSCAPE_ONE),0) - @inkscape --export-pdf=$@ $<i > /dev/null 2>&1 +ifdef RSVG_CONVERT + @cat $<i | rsvg-convert --format=pdf > $@ else + ifeq ($(INKSCAPE_ONE),0) + @inkscape --export-pdf=$@ $<i > /dev/null 2>&1 + else @$(ISOLATE_INKSCAPE) inkscape -o $@ $<i > /dev/null 2>&1 + endif endif @rm -f $<i ifeq ($(chkpagegroup),on) |