summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkira Yokosawa <akiyks@gmail.com>2024-01-05 18:47:31 +0900
committerPaul E. McKenney <paulmck@kernel.org>2024-01-07 13:36:29 -0800
commit27da59e6ac577975e16c10ab2ca53e65a7501bdd (patch)
treeb8eb493e7d40b9d588ce32f78ef82cce9811d075
parent1ea46c6d43475fbdf97404dec28a58036d505bc3 (diff)
downloadperfbook-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--Makefile25
1 files changed, 20 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 424a166c..f869862c 100644
--- a/Makefile
+++ b/Makefile
@@ -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)