Generate images for docs by using meson build system
Started by Nazir Bilal Yavuz21 days ago1 messages
Hi,
Daniel pinged me off-list about that we do not have a way to generate
images for docs by using the meson build system, attached fixes that.
In addition to that, I think we might want to update README for ditaa
since its URL is pointing to the wrong version. I created another
thread for this [1]/messages/by-id/CAN55FZ2O-23xERF2NYcvv9DM_1c9T16y6mi3vyP=O1iuXS0ASA@mail.gmail.com.
[1]: /messages/by-id/CAN55FZ2O-23xERF2NYcvv9DM_1c9T16y6mi3vyP=O1iuXS0ASA@mail.gmail.com
--
Regards,
Nazir Bilal Yavuz
Microsoft
Attachments:
v1-0001-meson-Generate-images-for-docs-by-using-meson.patchtext/x-patch; charset=US-ASCII; name=v1-0001-meson-Generate-images-for-docs-by-using-meson.patchDownload
From 9999c1dca65526e17ad1ac2f99bb1e0a33b9c1ce Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Mon, 22 Dec 2025 14:10:54 +0300
Subject: [PATCH v1] meson: Generate images for docs by using meson
There was no way to generate images for docs by using meson build
system. So, add a way to do that by adding a `images` target to the
meson build. Images can be generated by using `meson compile images`
command now.
Reported-by: Daniel Gustafsson <daniel@yesql.se>
---
doc/src/sgml/images/meson.build | 61 +++++++++++++++++++++++++++++++++
doc/src/sgml/meson.build | 2 ++
meson.build | 2 ++
3 files changed, 65 insertions(+)
create mode 100644 doc/src/sgml/images/meson.build
diff --git a/doc/src/sgml/images/meson.build b/doc/src/sgml/images/meson.build
new file mode 100644
index 00000000000..8e601e877a5
--- /dev/null
+++ b/doc/src/sgml/images/meson.build
@@ -0,0 +1,61 @@
+# doc/src/sgml/images/meson.build
+#
+# see README in this directory about image handling
+
+if not xsltproc_bin.found() or not dot.found() or not ditaa.found()
+ subdir_done()
+endif
+
+image_targets = []
+
+fixup_svg_xsl = files('fixup-svg.xsl')
+
+all_files = [
+ 'genetic-algorithm.gv',
+ 'gin.gv',
+ 'pagelayout.txt',
+ 'temporal-entities.txt',
+ 'temporal-references.txt',
+]
+
+foreach file : all_files
+
+ str_split = file.split('.')
+ actual_file_name = str_split[0]
+ extension = str_split[1]
+ cur_file = files(file)
+ tmp_name = '@0@.svg.tmp'.format(file)
+ output_name = '@0@.svg'.format(actual_file_name)
+
+ command = []
+ if extension == 'gv'
+ command = [dot, '-T', 'svg', '-o', '@OUTPUT@', '@INPUT@']
+ elif extension == 'txt'
+ command = [ditaa, '-E', '-S', '--svg', '@INPUT@', '@OUTPUT@']
+ else
+ error('Unknown extension: ".@0@" while generating images'.format(extension))
+ endif
+
+ svg_tmp = custom_target(tmp_name,
+ input: cur_file,
+ output: tmp_name,
+ command: command,
+ )
+
+ current_svg = custom_target(output_name,
+ input: svg_tmp,
+ output: output_name,
+ command: [xsltproc_bin,
+ '--nonet',
+ # Use --novalid to avoid loading SVG DTD if a file specifies it, since
+ # it might not be available locally, and we don't need it.
+ '--novalid',
+ '-o', '@OUTPUT@',
+ fixup_svg_xsl,
+ '@INPUT@']
+ )
+
+ image_targets += current_svg
+endforeach
+
+alias_target('images', image_targets)
diff --git a/doc/src/sgml/meson.build b/doc/src/sgml/meson.build
index 6ae192eac68..6852ac7e57c 100644
--- a/doc/src/sgml/meson.build
+++ b/doc/src/sgml/meson.build
@@ -1,5 +1,7 @@
# Copyright (c) 2022-2025, PostgreSQL Global Development Group
+subdir('images')
+
docs = []
installdocs = []
alldocs = []
diff --git a/meson.build b/meson.build
index d7c5193d4ce..34b748c8f35 100644
--- a/meson.build
+++ b/meson.build
@@ -351,6 +351,8 @@ cp = find_program('cp', required: false, native: true)
xmllint_bin = find_program(get_option('XMLLINT'), native: true, required: false)
xsltproc_bin = find_program(get_option('XSLTPROC'), native: true, required: false)
nm = find_program('nm', required: false, native: true)
+ditaa = find_program('ditaa', native: true, required: false)
+dot = find_program('dot', native: true, required: false)
bison_flags = []
if bison.found()
--
2.47.3