git: 789b3f87a90d - main - print/publisher: Update 5.4.3 => 5.6.0
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 20 Jul 2026 08:43:42 UTC
The branch main has been updated by vvd:
URL: https://cgit.FreeBSD.org/ports/commit/?id=789b3f87a90d073612cec8fa198aeddc8796d9eb
commit 789b3f87a90d073612cec8fa198aeddc8796d9eb
Author: Mister D <misterd@renderdata.pro>
AuthorDate: 2026-07-20 08:25:16 +0000
Commit: Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2026-07-20 08:43:13 +0000
print/publisher: Update 5.4.3 => 5.6.0
News:
https://github.com/speedata/publisher/blob/v5.6.0/News.md
Commit log:
https://github.com/speedata/publisher/compare/v5.4.3...v5.6.0
Improve port:
- Fix COMMENT.
- Fix warnings from portclippy.
- Use SP_LIBDIR in USE_LDCONFIG instead of a literal path.
- Replace "RM lib" with "EXTRACT_AFTER_ARGS=--exclude lib".
- Merge INSTALL_LIBs, INSTALL_DATAs, COPYTREE_SHAREs.
- Samplify "etc/speedata/publisher.cfg.sample".
PR: 296714
Sponsored by: UNIS Labs
Co-authored-by: Vladimir Druzenko <vvd@FreeBSD.org>
---
print/publisher/Makefile | 145 ++++++++++--------------
print/publisher/distinfo | 42 +++----
print/publisher/files/modules.txt | 74 ++-----------
print/publisher/files/patch-src_go_sp_sp_sp.go | 48 ++++++++
print/publisher/modules.txt | 147 +++++++++++++++++++------
print/publisher/pkg-help | 17 ++-
print/publisher/pkg-plist | 18 ++-
7 files changed, 273 insertions(+), 218 deletions(-)
diff --git a/print/publisher/Makefile b/print/publisher/Makefile
index 995a6ed3ccb2..f762dfd2f927 100644
--- a/print/publisher/Makefile
+++ b/print/publisher/Makefile
@@ -1,11 +1,10 @@
PORTNAME= publisher
DISTVERSIONPREFIX= v
-DISTVERSION= 5.4.3
-PORTREVISION= 1
+DISTVERSION= 5.6.0
CATEGORIES= print
MAINTAINER= misterd@renderdata.pro
-COMMENT= Non-interactive layout engine and typesetting system ${${FLAVOR}_COMMENT}}
+COMMENT= Non-interactive layout engine and typesetting system ${${FLAVOR}_COMMENT}
WWW= https://www.speedata.de/
LICENSE= AGPLv3
@@ -34,72 +33,41 @@ GH_ACCOUNT= speedata
GH_TUPLE= \
Masterminds:semver:v1.5.0:masterminds_semver/src/go/vendor/github.com/Masterminds/semver \
PuerkitoBio:goquery:v1.9.1:puerkitobio_goquery/src/go/vendor/github.com/PuerkitoBio/goquery \
- alecthomas:chroma:v0.10.0:alecthomas_chroma/src/go/vendor/github.com/alecthomas/chroma \
alecthomas:chroma:v2.13.0:alecthomas_chroma_v2/src/go/vendor/github.com/alecthomas/chroma/v2 \
andybalholm:cascadia:v1.3.2:andybalholm_cascadia/src/go/vendor/github.com/andybalholm/cascadia \
- cjoudrey:gluahttp:25003d9adfa9:cjoudrey_gluahttp/src/go/vendor/github.com/cjoudrey/gluahttp \
dlclark:regexp2:v1.11.0:dlclark_regexp2/src/go/vendor/github.com/dlclark/regexp2 \
fsnotify:fsnotify:v1.7.0:fsnotify_fsnotify/src/go/vendor/github.com/fsnotify/fsnotify \
gammazero:deque:v0.2.1:gammazero_deque/src/go/vendor/github.com/gammazero/deque \
gammazero:workerpool:v1.1.3:gammazero_workerpool/src/go/vendor/github.com/gammazero/workerpool \
- go-yaml:yaml:v3.0.1:go_yaml_yaml/src/go/vendor/gopkg.in/yaml.v3 \
- gofrs:uuid:v4.4.0:gofrs_uuid/src/go/vendor/github.com/gofrs/uuid \
- golang:image:v0.18.0:golang_image/src/go/vendor/golang.org/x/image \
- golang:net:v0.35.0:golang_net/src/go/vendor/golang.org/x/net \
- golang:sys:v0.30.0:golang_sys/src/go/vendor/golang.org/x/sys \
- golang:text:v0.22.0:golang_text/src/go/vendor/golang.org/x/text \
+ golang:image:v0.39.0:golang_image/src/go/vendor/golang.org/x/image \
+ golang:net:v0.53.0:golang_net/src/go/vendor/golang.org/x/net \
+ golang:sys:v0.43.0:golang_sys/src/go/vendor/golang.org/x/sys \
+ golang:text:v0.36.0:golang_text/src/go/vendor/golang.org/x/text \
google:btree:v1.1.2:google_btree/src/go/vendor/github.com/google/btree \
gorilla:mux:v1.8.1:gorilla_mux/src/go/vendor/github.com/gorilla/mux \
gregjones:httpcache:901d90724c79:gregjones_httpcache/src/go/vendor/github.com/gregjones/httpcache \
inconshreveable:mousetrap:v1.1.0:inconshreveable_mousetrap/src/go/vendor/github.com/inconshreveable/mousetrap \
peterbourgon:diskv:v2.0.1:peterbourgon_diskv/src/go/vendor/github.com/peterbourgon/diskv \
- russross:blackfriday:v1.6.0:russross_blackfriday/src/go/vendor/github.com/russross/blackfriday \
speedata:bild:dd063a632b14:speedata_bild/src/go/vendor/github.com/speedata/bild \
speedata:config:3a3f44982ec4:speedata_config/src/go/vendor/github.com/speedata/config \
speedata:css:68d469dc62c4:speedata_css_scanner/src/go/vendor/github.com/speedata/css \
- speedata:go-epub:v0.5.5:speedata_go_epub/src/go/vendor/github.com/speedata/go-epub \
+ speedata:go-lua:v0.1.8:speedata_go_lua/src/go/vendor/github.com/speedata/go-lua \
speedata:goxlsx:v1.0.2:speedata_goxlsx/src/go/vendor/github.com/speedata/goxlsx \
speedata:hotfolder:5f743a840a92:speedata_hotfolder/src/go/vendor/github.com/speedata/hotfolder \
- speedata:optionparser:v1.1.1:speedata_optionparser/src/go/vendor/github.com/speedata/optionparser \
+ speedata:optionparser:v1.2.1:speedata_optionparser/src/go/vendor/github.com/speedata/optionparser \
yuin:goldmark-highlighting:37449abec8cc:yuin_goldmark_highlighting_v2/src/go/vendor/github.com/yuin/goldmark-highlighting/v2 \
- yuin:goldmark:v1.7.1:yuin_goldmark/src/go/vendor/github.com/yuin/goldmark \
- yuin:gopher-lua:v1.1.1:yuin_gopher_lua/src/go/vendor/github.com/yuin/gopher-lua
+ yuin:goldmark:v1.7.1:yuin_goldmark/src/go/vendor/github.com/yuin/goldmark
-USE_LDCONFIG= ${PREFIX}/lib/speedata-publisher
-
-CONFLICTS_INSTALL= publisher-devel
-
-# Optional Java helper tools (Saxon for XSLT, Jing for RNG validation,
-# Trang for schema conversion). Default ON; turn OFF to manage JARs
-# manually (see pkg-message).
-OPTIONS_DEFINE= JAVA_TOOLS
-OPTIONS_DEFAULT= JAVA_TOOLS
-OPTIONS_SUB= yes
-JAVA_TOOLS_DESC= XSLT/RNG support via Saxon, Jing, Trang
-
-JAVA_TOOLS_RUN_DEPENDS= saxon-he>0:textproc/saxon-he \
- jing>0:textproc/jing \
- trang>0:textproc/trang
+USE_LDCONFIG= ${SP_LIBDIR}
# JAR location for JAVA_TOOLS option (matches what textproc/saxon-he etc. install).
# Not using USES=java so we set this ourselves.
JAVAJARDIR= ${LOCALBASE}/share/java/classes
-# Append Lua include path to CGO_CFLAGS so GO_ENV picks it up
-# (don't override CGO_CFLAGS inline; GO_ENV already sets it).
-CGO_CFLAGS+= -I${LUA_INCDIR}
-
# Paths compiled into sp binary at build time (final install paths, no STAGEDIR)
SP_LIBDIR= ${PREFIX}/lib/speedata-publisher
-SP_SWDIR= ${PREFIX}/share/speedata-publisher/sw
SP_SHAREDIR= ${PREFIX}/share/speedata-publisher
-
-# Pre-generated vendor/modules.txt (see files/modules.txt).
-# Required because Go 1.21+ needs modules.txt in vendor/, and GH_TUPLE
-# extraction does not produce it. Generated on host with: go mod vendor
-post-extract:
- ${CP} ${FILESDIR}/modules.txt ${WRKSRC}/src/go/vendor/modules.txt
- ${RM} -r ${WRKSRC}/lib
+SP_SWDIR= ${SP_SHAREDIR}/sw
# pro flavor: pass -X main.pro=yes at link time
.if ${FLAVOR} == pro
@@ -117,6 +85,32 @@ GO_BUILDFLAGS+= -ldflags="-X main.dest=custom \
${SP_LDFLAGS_PRO} \
${STRIP}"
+# Append Lua include path to CGO_CFLAGS so GO_ENV picks it up
+# (don't override CGO_CFLAGS inline; GO_ENV already sets it).
+CGO_CFLAGS+= -I${LUA_INCDIR}
+
+CONFLICTS_INSTALL= publisher-devel
+
+EXTRACT_AFTER_ARGS= --exclude lib \
+ --no-same-owner --no-same-permissions
+
+# Optional Java helper tools (Saxon for XSLT, Jing for RNG validation,
+# Trang for schema conversion). Default ON; turn OFF to manage JARs
+# manually (see pkg-help).
+OPTIONS_DEFINE= JAVA_TOOLS
+OPTIONS_DEFAULT= JAVA_TOOLS
+OPTIONS_SUB= yes
+JAVA_TOOLS_DESC= XSLT/RNG support via Saxon, Jing, Trang
+JAVA_TOOLS_RUN_DEPENDS= saxon-he>0:textproc/saxon-he \
+ jing>0:textproc/jing \
+ trang>0:textproc/trang
+
+# Pre-generated vendor/modules.txt (see files/modules.txt).
+# Required because Go 1.21+ needs modules.txt in vendor/, and GH_TUPLE
+# extraction does not produce it. Generated on host with: go mod vendor
+post-extract:
+ ${CP} ${FILESDIR}/modules.txt ${WRKSRC}/src/go/vendor/modules.txt
+
do-build:
# libsplib.so -- Go shared library (c-shared mode, CGO uses Lua headers via CGO_CFLAGS)
# Does not use GO_BUILDFLAGS because that contains sp-specific ldflags.
@@ -149,59 +143,34 @@ do-build:
speedatapublisher/sp/sp)
do-install:
- # sp binary
- ${INSTALL_PROGRAM} ${WRKDIR}/sp ${STAGEDIR}${PREFIX}/bin/sp
-
- # sdluatex symlink to luahbtex (provided by print/tex-luatex at runtime).
- # RLN cannot be used because the target is in a different package and
- # does not exist in our stage dir.
- ${LN} -sf ${LOCALBASE}/bin/luahbtex ${STAGEDIR}${PREFIX}/bin/sdluatex
+ # sp binary. 5.6.0+ has fallback logic in getExecutablePath() via the
+ # backported patch: sp searches for sdluatex first, then luahbtex.
+ # FreeBSD only ships luahbtex, so no symlink is needed.
+ ${INSTALL_PROGRAM} ${WRKDIR}/sp ${STAGEDIR}${PREFIX}/bin
# Shared libraries -> ${PREFIX}/lib/speedata-publisher/
${MKDIR} ${STAGEDIR}${SP_LIBDIR}
- ${INSTALL_LIB} ${WRKDIR}/libsplib.so ${STAGEDIR}${SP_LIBDIR}/libsplib.so
- ${INSTALL_LIB} ${WRKDIR}/luaglue.so ${STAGEDIR}${SP_LIBDIR}/luaglue.so
+ ${INSTALL_LIB} ${WRKDIR}/libsplib.so ${WRKDIR}/luaglue.so \
+ ${STAGEDIR}${SP_LIBDIR}
# Schema files
${MKDIR} ${STAGEDIR}${SP_SHAREDIR}/schema
- ${INSTALL_DATA} ${WRKSRC}/schema/catalog-schema-de.xml \
- ${STAGEDIR}${SP_SHAREDIR}/schema/
- ${INSTALL_DATA} ${WRKSRC}/schema/catalog-schema-en.xml \
- ${STAGEDIR}${SP_SHAREDIR}/schema/
- ${INSTALL_DATA} ${WRKSRC}/schema/layoutschema-de.rng \
- ${STAGEDIR}${SP_SHAREDIR}/schema/
- ${INSTALL_DATA} ${WRKSRC}/schema/layoutschema-de.xsd \
- ${STAGEDIR}${SP_SHAREDIR}/schema/
- ${INSTALL_DATA} ${WRKSRC}/schema/layoutschema-en.rng \
- ${STAGEDIR}${SP_SHAREDIR}/schema/
- ${INSTALL_DATA} ${WRKSRC}/schema/layoutschema-en.xsd \
- ${STAGEDIR}${SP_SHAREDIR}/schema/
+ ${INSTALL_DATA} \
+ ${WRKSRC}/schema/catalog-schema-*.xml \
+ ${WRKSRC}/schema/layoutschema-*.* \
+ ${STAGEDIR}${SP_SHAREDIR}/schema
# Runtime resource files (sw/)
- ${MKDIR} ${STAGEDIR}${SP_SWDIR}
- (cd ${WRKSRC}/src && ${COPYTREE_SHARE} lua ${STAGEDIR}${SP_SWDIR})
- (cd ${WRKSRC}/src && ${COPYTREE_SHARE} tex ${STAGEDIR}${SP_SWDIR})
- (cd ${WRKSRC}/src && ${COPYTREE_SHARE} metapost ${STAGEDIR}${SP_SWDIR})
- (cd ${WRKSRC}/src && ${COPYTREE_SHARE} hyphenation ${STAGEDIR}${SP_SWDIR})
- (cd ${WRKSRC}/src && ${COPYTREE_SHARE} colorprofiles ${STAGEDIR}${SP_SWDIR})
- (cd ${WRKSRC} && ${COPYTREE_SHARE} fonts ${STAGEDIR}${SP_SWDIR})
- (cd ${WRKSRC} && ${COPYTREE_SHARE} img ${STAGEDIR}${SP_SWDIR})
-
-# JAVA_TOOLS option: link FreeBSD-provided JARs into the publisher's
-# expected paths. sp expects saxon-he-12.9.jar; FreeBSD ships 12.8 which
-# is API-compatible (confirmed with upstream). When saxon-he port bumps
-# to 12.9 (or later), update the saxon-he line below.
+ (cd ${WRKSRC}/src && \
+ ${COPYTREE_SHARE} "colorprofiles hyphenation lua metapost tex" \
+ ${STAGEDIR}${SP_SWDIR})
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} "fonts img" ${STAGEDIR}${SP_SWDIR})
+
+# JAVA_TOOLS option: install a sample config that points sp at the FreeBSD
+# JAR location. Requires Publisher 5.5.24+. No symlinks, no version pin.
post-install-JAVA_TOOLS-on:
- ${MKDIR} ${STAGEDIR}${SP_LIBDIR}/lib
- ${LN} -sf ${JAVAJARDIR}/saxon-he-12.8.jar \
- ${STAGEDIR}${SP_LIBDIR}/saxon-he-12.9.jar
- ${LN} -sf ${JAVAJARDIR}/jing.jar \
- ${STAGEDIR}${SP_LIBDIR}/jing.jar
- ${LN} -sf ${JAVAJARDIR}/trang.jar \
- ${STAGEDIR}${SP_LIBDIR}/trang.jar
- ${LN} -sf ${JAVAJARDIR}/xmlresolver-5.3.3.jar \
- ${STAGEDIR}${SP_LIBDIR}/lib/xmlresolver-5.3.3.jar
- ${LN} -sf ${JAVAJARDIR}/xmlresolver-5.3.3-data.jar \
- ${STAGEDIR}${SP_LIBDIR}/lib/xmlresolver-5.3.3-data.jar
+ ${MKDIR} ${STAGEDIR}${PREFIX}/etc/speedata
+ ${ECHO_CMD} "jardir = ${JAVAJARDIR}" > \
+ ${STAGEDIR}${PREFIX}/etc/speedata/publisher.cfg.sample
.include <bsd.port.mk>
diff --git a/print/publisher/distinfo b/print/publisher/distinfo
index 01b3193cd3d8..907e81a8b6cc 100644
--- a/print/publisher/distinfo
+++ b/print/publisher/distinfo
@@ -1,18 +1,14 @@
-TIMESTAMP = 1780084357
-SHA256 (speedata-publisher-v5.4.3_GH0.tar.gz) = 05c32499c2609fdc1c07850c4684ff57e68ec9b0ab092ea53f3df4ce057173d7
-SIZE (speedata-publisher-v5.4.3_GH0.tar.gz) = 27881246
+TIMESTAMP = 1783698335
+SHA256 (speedata-publisher-v5.6.0_GH0.tar.gz) = a4ef2deba447d50fcc01df3226c91b7a98c2c2ecc79dbf1d186c76f625fed935
+SIZE (speedata-publisher-v5.6.0_GH0.tar.gz) = 27058143
SHA256 (Masterminds-semver-v1.5.0_GH0.tar.gz) = c9140eddfb03dc862f826e7761561260b9a840afa7519cc0919e89a43b5be5ba
SIZE (Masterminds-semver-v1.5.0_GH0.tar.gz) = 21188
SHA256 (PuerkitoBio-goquery-v1.9.1_GH0.tar.gz) = ad303bf30070c34fa0f05d2701b7bd024642e0183708a96ed0d2b837b21f4d1a
SIZE (PuerkitoBio-goquery-v1.9.1_GH0.tar.gz) = 107417
-SHA256 (alecthomas-chroma-v0.10.0_GH0.tar.gz) = 98a517ae99f48e3b54d5c8cd7473d5c544f51bee7a4be17f5175736fce37da56
-SIZE (alecthomas-chroma-v0.10.0_GH0.tar.gz) = 798272
SHA256 (alecthomas-chroma-v2.13.0_GH0.tar.gz) = f3538d9db5df0d0325f3eaab7e3d465a6ec9ad6067051863ac52241f070824a0
SIZE (alecthomas-chroma-v2.13.0_GH0.tar.gz) = 1032348
SHA256 (andybalholm-cascadia-v1.3.2_GH0.tar.gz) = f30ebb75a9f43a30478c870dd6e372ac7ef64549f621eceb3b13fd91bfde80cb
SIZE (andybalholm-cascadia-v1.3.2_GH0.tar.gz) = 35370
-SHA256 (cjoudrey-gluahttp-25003d9adfa9_GH0.tar.gz) = 0d52a91e3a759424b1c9c7291945a35eb23b5eb0382640b286d5063d35cbbfa1
-SIZE (cjoudrey-gluahttp-25003d9adfa9_GH0.tar.gz) = 6771
SHA256 (dlclark-regexp2-v1.11.0_GH0.tar.gz) = c380209bd67b67859014f9bfd155aec4bfc4beb65f4a6aec37683b80186b18f7
SIZE (dlclark-regexp2-v1.11.0_GH0.tar.gz) = 212532
SHA256 (fsnotify-fsnotify-v1.7.0_GH0.tar.gz) = ca8175ba6bd3d0cc992200c2f44acabec05367575dc0478c5902971fe7453f35
@@ -21,18 +17,14 @@ SHA256 (gammazero-deque-v0.2.1_GH0.tar.gz) = 3d10140363eba10646b965386221167842c
SIZE (gammazero-deque-v0.2.1_GH0.tar.gz) = 10170
SHA256 (gammazero-workerpool-v1.1.3_GH0.tar.gz) = b9d11203a8e544c67471fbba86dcb5243634d8cac2d7610650cb68a3546c7e63
SIZE (gammazero-workerpool-v1.1.3_GH0.tar.gz) = 12951
-SHA256 (go-yaml-yaml-v3.0.1_GH0.tar.gz) = cf05411540d3e6ef8f1fd88434b34f94cedaceb540329031d80e23b74540c4e5
-SIZE (go-yaml-yaml-v3.0.1_GH0.tar.gz) = 91173
-SHA256 (gofrs-uuid-v4.4.0_GH0.tar.gz) = 10dd2b8e4c99e4975f11b29ec2e4d48f0bf3574e89541f81d4cd228cffa3057c
-SIZE (gofrs-uuid-v4.4.0_GH0.tar.gz) = 23668
-SHA256 (golang-image-v0.18.0_GH0.tar.gz) = dd23e3256a92667d201fd031a44294e4d54812e0f6fc69365da3bb4fcf3c730d
-SIZE (golang-image-v0.18.0_GH0.tar.gz) = 5103909
-SHA256 (golang-net-v0.35.0_GH0.tar.gz) = 6a09895ea551a07f69fb17d8be418cdb96cc3b6338888deb1d7b0b22ed00021e
-SIZE (golang-net-v0.35.0_GH0.tar.gz) = 1500897
-SHA256 (golang-sys-v0.30.0_GH0.tar.gz) = 3e54dfe262f4f09341622679101c0f10935028cc945f78a97f898b2416edb1f0
-SIZE (golang-sys-v0.30.0_GH0.tar.gz) = 1523069
-SHA256 (golang-text-v0.22.0_GH0.tar.gz) = ac8bdce0477effd5a830345979626745e5e5bcb81d1a77c8029b0e8b3d621089
-SIZE (golang-text-v0.22.0_GH0.tar.gz) = 8970985
+SHA256 (golang-image-v0.39.0_GH0.tar.gz) = ab04677a73a91745a2bf7f08e32104adaccda9987511897e6258c09b96d2f911
+SIZE (golang-image-v0.39.0_GH0.tar.gz) = 5120844
+SHA256 (golang-net-v0.53.0_GH0.tar.gz) = dde4377de949f539eb137ec1ff2bf2e15f4063f9e20427616e5fbcbc8b45c231
+SIZE (golang-net-v0.53.0_GH0.tar.gz) = 1561839
+SHA256 (golang-sys-v0.43.0_GH0.tar.gz) = 180ea0b92c2392afe123273fa0d650eb376a23aa5befed795601341adb64e5a0
+SIZE (golang-sys-v0.43.0_GH0.tar.gz) = 1538751
+SHA256 (golang-text-v0.36.0_GH0.tar.gz) = e4afcc00931e641196193b149ff9130a29aabd72cab620721dd6d84698a7d5fe
+SIZE (golang-text-v0.36.0_GH0.tar.gz) = 6772591
SHA256 (google-btree-v1.1.2_GH0.tar.gz) = b8722a430b40035f04001ca62bb858abe931a781f76bd37d6a3e1bb23273ba2d
SIZE (google-btree-v1.1.2_GH0.tar.gz) = 19771
SHA256 (gorilla-mux-v1.8.1_GH0.tar.gz) = c2a09e78d1886abb2d291b472eba3ac9185acb35234c1f5616669664ba893d6d
@@ -43,25 +35,21 @@ SHA256 (inconshreveable-mousetrap-v1.1.0_GH0.tar.gz) = ab23e7c5cbf42564eb0190ee0
SIZE (inconshreveable-mousetrap-v1.1.0_GH0.tar.gz) = 5338
SHA256 (peterbourgon-diskv-v2.0.1_GH0.tar.gz) = e3b15d57dfe5b4aacf506d256c595b95523c51756459aae04579d35c85bad184
SIZE (peterbourgon-diskv-v2.0.1_GH0.tar.gz) = 16077
-SHA256 (russross-blackfriday-v1.6.0_GH0.tar.gz) = 3c92006c3ff14cdeacc7edd992acb487749e7234dbc6f95e8fb8abfaf60cdc49
-SIZE (russross-blackfriday-v1.6.0_GH0.tar.gz) = 75794
SHA256 (speedata-bild-dd063a632b14_GH0.tar.gz) = 585082b73fe2e25d45d804dedbffae7d1757f45f0a65259f5d1f20749dc25a8f
SIZE (speedata-bild-dd063a632b14_GH0.tar.gz) = 3998419
SHA256 (speedata-config-3a3f44982ec4_GH0.tar.gz) = 558a20825de8de484cf3cfaa07d420746d8ec3d6d2d864922060f997f324cf6f
SIZE (speedata-config-3a3f44982ec4_GH0.tar.gz) = 14090
SHA256 (speedata-css-68d469dc62c4_GH0.tar.gz) = 4a93a680c75651cf1288f6f7fa8028e3feab0b91a56528d9a1cf1bb8894d9dc6
SIZE (speedata-css-68d469dc62c4_GH0.tar.gz) = 13462
-SHA256 (speedata-go-epub-v0.5.5_GH0.tar.gz) = 6f0767ffbf5016ca44efde44849314f32454ed0aed556cc59b2bcef641bec27f
-SIZE (speedata-go-epub-v0.5.5_GH0.tar.gz) = 25895
+SHA256 (speedata-go-lua-v0.1.8_GH0.tar.gz) = a2ecfd0383c3de5e605c56e13940a3ecce30116b5fcadc81ebdb7a4380d90ea6
+SIZE (speedata-go-lua-v0.1.8_GH0.tar.gz) = 645299
SHA256 (speedata-goxlsx-v1.0.2_GH0.tar.gz) = 289e1568abc198ea6316e3109bcb5a557bcd7b61bcff332a42cdc338d7c5807c
SIZE (speedata-goxlsx-v1.0.2_GH0.tar.gz) = 67107
SHA256 (speedata-hotfolder-5f743a840a92_GH0.tar.gz) = a9178fe99f0c164f21a6cf96f5cb9d3ecc15e1bb0d33f8c8fccde3360e6c9d2f
SIZE (speedata-hotfolder-5f743a840a92_GH0.tar.gz) = 1380
-SHA256 (speedata-optionparser-v1.1.1_GH0.tar.gz) = ea3fb4c4d50140bf8ee9948dea44f89477bf8b8295c896f1ce2ebd343173ccb0
-SIZE (speedata-optionparser-v1.1.1_GH0.tar.gz) = 9754
+SHA256 (speedata-optionparser-v1.2.1_GH0.tar.gz) = 640e58d4e4193ce3e7d31b9611f0fb80ee70961321fe1978a8fb01978e24c7b6
+SIZE (speedata-optionparser-v1.2.1_GH0.tar.gz) = 13203
SHA256 (yuin-goldmark-highlighting-37449abec8cc_GH0.tar.gz) = 9f49d339602c96284cc6b2dc51641fe37efe2346326f0b9755705aa6f20e6bf2
SIZE (yuin-goldmark-highlighting-37449abec8cc_GH0.tar.gz) = 10298
SHA256 (yuin-goldmark-v1.7.1_GH0.tar.gz) = e1159c456d6d5c8fdfeb61534aa23ef6f4108bbf74a21016199debfdde82590a
SIZE (yuin-goldmark-v1.7.1_GH0.tar.gz) = 252103
-SHA256 (yuin-gopher-lua-v1.1.1_GH0.tar.gz) = 9e706d96c11314a4b3e2034eb10726e48cc7e7e7e31d4765a675f901ee6a9a7e
-SIZE (yuin-gopher-lua-v1.1.1_GH0.tar.gz) = 170691
diff --git a/print/publisher/files/modules.txt b/print/publisher/files/modules.txt
index 5d7ea10f95f7..645500096bbf 100644
--- a/print/publisher/files/modules.txt
+++ b/print/publisher/files/modules.txt
@@ -4,39 +4,6 @@ github.com/Masterminds/semver
# github.com/PuerkitoBio/goquery v1.9.1
## explicit; go 1.18
github.com/PuerkitoBio/goquery
-# github.com/alecthomas/chroma v0.10.0
-## explicit; go 1.13
-github.com/alecthomas/chroma
-github.com/alecthomas/chroma/formatters/html
-github.com/alecthomas/chroma/lexers
-github.com/alecthomas/chroma/lexers/a
-github.com/alecthomas/chroma/lexers/b
-github.com/alecthomas/chroma/lexers/c
-github.com/alecthomas/chroma/lexers/circular
-github.com/alecthomas/chroma/lexers/d
-github.com/alecthomas/chroma/lexers/e
-github.com/alecthomas/chroma/lexers/f
-github.com/alecthomas/chroma/lexers/g
-github.com/alecthomas/chroma/lexers/h
-github.com/alecthomas/chroma/lexers/i
-github.com/alecthomas/chroma/lexers/internal
-github.com/alecthomas/chroma/lexers/j
-github.com/alecthomas/chroma/lexers/k
-github.com/alecthomas/chroma/lexers/l
-github.com/alecthomas/chroma/lexers/m
-github.com/alecthomas/chroma/lexers/n
-github.com/alecthomas/chroma/lexers/o
-github.com/alecthomas/chroma/lexers/p
-github.com/alecthomas/chroma/lexers/q
-github.com/alecthomas/chroma/lexers/r
-github.com/alecthomas/chroma/lexers/s
-github.com/alecthomas/chroma/lexers/t
-github.com/alecthomas/chroma/lexers/v
-github.com/alecthomas/chroma/lexers/w
-github.com/alecthomas/chroma/lexers/x
-github.com/alecthomas/chroma/lexers/y
-github.com/alecthomas/chroma/lexers/z
-github.com/alecthomas/chroma/styles
# github.com/alecthomas/chroma/v2 v2.13.0
## explicit; go 1.19
github.com/alecthomas/chroma/v2
@@ -46,9 +13,6 @@ github.com/alecthomas/chroma/v2/styles
# github.com/andybalholm/cascadia v1.3.2
## explicit; go 1.16
github.com/andybalholm/cascadia
-# github.com/cjoudrey/gluahttp v0.0.0-20201111170219-25003d9adfa9
-## explicit
-github.com/cjoudrey/gluahttp
# github.com/dlclark/regexp2 v1.11.0
## explicit; go 1.13
github.com/dlclark/regexp2
@@ -62,9 +26,6 @@ github.com/gammazero/deque
# github.com/gammazero/workerpool v1.1.3
## explicit; go 1.18
github.com/gammazero/workerpool
-# github.com/gofrs/uuid v4.4.0+incompatible
-## explicit
-github.com/gofrs/uuid
# github.com/google/btree v1.1.2
## explicit; go 1.18
github.com/google/btree
@@ -81,9 +42,6 @@ github.com/inconshreveable/mousetrap
# github.com/peterbourgon/diskv v2.0.1+incompatible
## explicit
github.com/peterbourgon/diskv
-# github.com/russross/blackfriday v1.6.0
-## explicit; go 1.13
-github.com/russross/blackfriday
# github.com/speedata/bild v0.0.0-20240628091728-dd063a632b14
## explicit; go 1.21
github.com/speedata/bild/clone
@@ -97,16 +55,16 @@ github.com/speedata/config
# github.com/speedata/css/scanner v0.0.0-20250825095519-68d469dc62c4
## explicit; go 1.14
github.com/speedata/css/scanner
-# github.com/speedata/go-epub v0.5.5
-## explicit
-github.com/speedata/go-epub
+# github.com/speedata/go-lua v0.1.8
+## explicit; go 1.22
+github.com/speedata/go-lua
# github.com/speedata/goxlsx v1.0.2
## explicit
github.com/speedata/goxlsx
# github.com/speedata/hotfolder v0.0.0-20181204121114-5f743a840a92
## explicit
github.com/speedata/hotfolder
-# github.com/speedata/optionparser v1.1.1
+# github.com/speedata/optionparser v1.2.1
## explicit; go 1.17
github.com/speedata/optionparser
# github.com/yuin/goldmark v1.7.1
@@ -123,26 +81,20 @@ github.com/yuin/goldmark/util
# github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
## explicit; go 1.13
github.com/yuin/goldmark-highlighting/v2
-# github.com/yuin/gopher-lua v1.1.1
-## explicit; go 1.17
-github.com/yuin/gopher-lua
-github.com/yuin/gopher-lua/ast
-github.com/yuin/gopher-lua/parse
-github.com/yuin/gopher-lua/pm
-# golang.org/x/image v0.18.0
-## explicit; go 1.18
+# golang.org/x/image v0.39.0
+## explicit; go 1.25.0
golang.org/x/image/bmp
-# golang.org/x/net v0.35.0
-## explicit; go 1.18
+# golang.org/x/net v0.53.0
+## explicit; go 1.25.0
golang.org/x/net/html
golang.org/x/net/html/atom
golang.org/x/net/html/charset
-# golang.org/x/sys v0.30.0
-## explicit; go 1.18
+# golang.org/x/sys v0.43.0
+## explicit; go 1.25.0
golang.org/x/sys/unix
golang.org/x/sys/windows
-# golang.org/x/text v0.22.0
-## explicit; go 1.18
+# golang.org/x/text v0.36.0
+## explicit; go 1.25.0
golang.org/x/text/encoding
golang.org/x/text/encoding/charmap
golang.org/x/text/encoding/htmlindex
@@ -160,5 +112,3 @@ golang.org/x/text/internal/utf8internal
golang.org/x/text/language
golang.org/x/text/runes
golang.org/x/text/transform
-# gopkg.in/yaml.v3 v3.0.1
-## explicit
diff --git a/print/publisher/files/patch-src_go_sp_sp_sp.go b/print/publisher/files/patch-src_go_sp_sp_sp.go
new file mode 100644
index 000000000000..c6086b603e33
--- /dev/null
+++ b/print/publisher/files/patch-src_go_sp_sp_sp.go
@@ -0,0 +1,48 @@
+--- src/go/sp/sp/sp.go.orig 2026-06-03 15:31:18 UTC
++++ src/go/sp/sp/sp.go
+@@ -512,32 +512,27 @@ func prependXML(arg string) {
+ }
+
+ // Return the full path to the TeX executable. It is called sdluatex(.exe) and
+-// can be overridden by the 'luatex' option. It panics if the TeX binary cannot
+-// be found.
++// can be overridden by the 'luatex' option. As a fallback, luahbtex(.exe) is
++// also accepted. It panics if no TeX binary can be found.
+ func getExecutablePath() string {
+- // 1 check the installdir/bin for sdluatex(.exe)
+- // 2 panic!
+ if luatex := getOption("luatex"); luatex != "" {
+ return luatex
+ }
+- executableName := "sdluatex" + exeSuffix
+- var p string
+
+- // 1 check the installdir/bin for sdluatex(.exe)
+- p = filepath.Join(installdir, "bin", executableName)
+- fi, _ := os.Stat(p)
+- if fi != nil {
+- return p
+- }
++ for _, name := range []string{"sdluatex", "luahbtex"} {
++ executableName := name + exeSuffix
+
+- // 2 look in the PATH
+- executableName, err := exec.LookPath("sdluatex" + exeSuffix)
+- if err == nil {
+- return executableName
++ p := filepath.Join(installdir, "bin", executableName)
++ if fi, _ := os.Stat(p); fi != nil {
++ return p
++ }
++
++ if p, err := exec.LookPath(executableName); err == nil {
++ return p
++ }
+ }
+
+- // 3 panic!
+- log.Fatal("Can't find sdluatex binary")
++ log.Fatal("Can't find sdluatex or luahbtex binary")
+ return ""
+ }
+
diff --git a/print/publisher/modules.txt b/print/publisher/modules.txt
index f01a417829df..645500096bbf 100644
--- a/print/publisher/modules.txt
+++ b/print/publisher/modules.txt
@@ -1,33 +1,114 @@
-GH_TUPLE= \
- Masterminds:semver:v1.5.0:masterminds_semver/src/go/vendor/github.com/Masterminds/semver \
- PuerkitoBio:goquery:v1.9.1:puerkitobio_goquery/src/go/vendor/github.com/PuerkitoBio/goquery \
- alecthomas:chroma:v0.10.0:alecthomas_chroma/src/go/vendor/github.com/alecthomas/chroma \
- alecthomas:chroma:v2.13.0:alecthomas_chroma_v2/src/go/vendor/github.com/alecthomas/chroma/v2 \
- andybalholm:cascadia:v1.3.2:andybalholm_cascadia/src/go/vendor/github.com/andybalholm/cascadia \
- cjoudrey:gluahttp:25003d9adfa9:cjoudrey_gluahttp/src/go/vendor/github.com/cjoudrey/gluahttp \
- dlclark:regexp2:v1.11.0:dlclark_regexp2/src/go/vendor/github.com/dlclark/regexp2 \
- fsnotify:fsnotify:v1.7.0:fsnotify_fsnotify/src/go/vendor/github.com/fsnotify/fsnotify \
- gammazero:deque:v0.2.1:gammazero_deque/src/go/vendor/github.com/gammazero/deque \
- gammazero:workerpool:v1.1.3:gammazero_workerpool/src/go/vendor/github.com/gammazero/workerpool \
- go-yaml:yaml:v3.0.1:go_yaml_yaml/src/go/vendor/gopkg.in/yaml.v3 \
- gofrs:uuid:v4.4.0:gofrs_uuid/src/go/vendor/github.com/gofrs/uuid \
- golang:image:v0.18.0:golang_image/src/go/vendor/golang.org/x/image \
- golang:net:v0.35.0:golang_net/src/go/vendor/golang.org/x/net \
- golang:sys:v0.30.0:golang_sys/src/go/vendor/golang.org/x/sys \
- golang:text:v0.22.0:golang_text/src/go/vendor/golang.org/x/text \
- google:btree:v1.1.2:google_btree/src/go/vendor/github.com/google/btree \
- gorilla:mux:v1.8.1:gorilla_mux/src/go/vendor/github.com/gorilla/mux \
- gregjones:httpcache:901d90724c79:gregjones_httpcache/src/go/vendor/github.com/gregjones/httpcache \
- inconshreveable:mousetrap:v1.1.0:inconshreveable_mousetrap/src/go/vendor/github.com/inconshreveable/mousetrap \
- peterbourgon:diskv:v2.0.1:peterbourgon_diskv/src/go/vendor/github.com/peterbourgon/diskv \
- russross:blackfriday:v1.6.0:russross_blackfriday/src/go/vendor/github.com/russross/blackfriday \
- speedata:bild:dd063a632b14:speedata_bild/src/go/vendor/github.com/speedata/bild \
- speedata:config:3a3f44982ec4:speedata_config/src/go/vendor/github.com/speedata/config \
- speedata:css:68d469dc62c4:speedata_css_scanner/src/go/vendor/github.com/speedata/css \
- speedata:go-epub:v0.5.5:speedata_go_epub/src/go/vendor/github.com/speedata/go-epub \
- speedata:goxlsx:v1.0.2:speedata_goxlsx/src/go/vendor/github.com/speedata/goxlsx \
- speedata:hotfolder:5f743a840a92:speedata_hotfolder/src/go/vendor/github.com/speedata/hotfolder \
- speedata:optionparser:v1.1.1:speedata_optionparser/src/go/vendor/github.com/speedata/optionparser \
- yuin:goldmark-highlighting:37449abec8cc:yuin_goldmark_highlighting_v2/src/go/vendor/github.com/yuin/goldmark-highlighting/v2 \
- yuin:goldmark:v1.7.1:yuin_goldmark/src/go/vendor/github.com/yuin/goldmark \
- yuin:gopher-lua:v1.1.1:yuin_gopher_lua/src/go/vendor/github.com/yuin/gopher-lua
+# github.com/Masterminds/semver v1.5.0
+## explicit
+github.com/Masterminds/semver
+# github.com/PuerkitoBio/goquery v1.9.1
+## explicit; go 1.18
+github.com/PuerkitoBio/goquery
+# github.com/alecthomas/chroma/v2 v2.13.0
+## explicit; go 1.19
+github.com/alecthomas/chroma/v2
+github.com/alecthomas/chroma/v2/formatters/html
+github.com/alecthomas/chroma/v2/lexers
+github.com/alecthomas/chroma/v2/styles
+# github.com/andybalholm/cascadia v1.3.2
+## explicit; go 1.16
+github.com/andybalholm/cascadia
+# github.com/dlclark/regexp2 v1.11.0
+## explicit; go 1.13
+github.com/dlclark/regexp2
+github.com/dlclark/regexp2/syntax
+# github.com/fsnotify/fsnotify v1.7.0
+## explicit; go 1.17
+github.com/fsnotify/fsnotify
+# github.com/gammazero/deque v0.2.1
+## explicit; go 1.18
+github.com/gammazero/deque
+# github.com/gammazero/workerpool v1.1.3
+## explicit; go 1.18
+github.com/gammazero/workerpool
+# github.com/google/btree v1.1.2
+## explicit; go 1.18
+github.com/google/btree
+# github.com/gorilla/mux v1.8.1
+## explicit; go 1.20
+github.com/gorilla/mux
+# github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79
+## explicit
+github.com/gregjones/httpcache
+github.com/gregjones/httpcache/diskcache
+# github.com/inconshreveable/mousetrap v1.1.0
+## explicit; go 1.18
+github.com/inconshreveable/mousetrap
+# github.com/peterbourgon/diskv v2.0.1+incompatible
+## explicit
+github.com/peterbourgon/diskv
+# github.com/speedata/bild v0.0.0-20240628091728-dd063a632b14
+## explicit; go 1.21
+github.com/speedata/bild/clone
+github.com/speedata/bild/imgio
+github.com/speedata/bild/math/f64
+github.com/speedata/bild/parallel
+github.com/speedata/bild/transform
+# github.com/speedata/config v0.0.0-20181203093101-3a3f44982ec4
+## explicit
+github.com/speedata/config
+# github.com/speedata/css/scanner v0.0.0-20250825095519-68d469dc62c4
+## explicit; go 1.14
+github.com/speedata/css/scanner
+# github.com/speedata/go-lua v0.1.8
+## explicit; go 1.22
+github.com/speedata/go-lua
+# github.com/speedata/goxlsx v1.0.2
+## explicit
+github.com/speedata/goxlsx
+# github.com/speedata/hotfolder v0.0.0-20181204121114-5f743a840a92
+## explicit
+github.com/speedata/hotfolder
+# github.com/speedata/optionparser v1.2.1
+## explicit; go 1.17
+github.com/speedata/optionparser
+# github.com/yuin/goldmark v1.7.1
+## explicit; go 1.19
+github.com/yuin/goldmark
+github.com/yuin/goldmark/ast
+github.com/yuin/goldmark/extension
+github.com/yuin/goldmark/extension/ast
+github.com/yuin/goldmark/parser
+github.com/yuin/goldmark/renderer
+github.com/yuin/goldmark/renderer/html
+github.com/yuin/goldmark/text
+github.com/yuin/goldmark/util
+# github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
+## explicit; go 1.13
+github.com/yuin/goldmark-highlighting/v2
+# golang.org/x/image v0.39.0
+## explicit; go 1.25.0
+golang.org/x/image/bmp
+# golang.org/x/net v0.53.0
+## explicit; go 1.25.0
+golang.org/x/net/html
+golang.org/x/net/html/atom
+golang.org/x/net/html/charset
+# golang.org/x/sys v0.43.0
+## explicit; go 1.25.0
+golang.org/x/sys/unix
+golang.org/x/sys/windows
+# golang.org/x/text v0.36.0
+## explicit; go 1.25.0
+golang.org/x/text/encoding
+golang.org/x/text/encoding/charmap
+golang.org/x/text/encoding/htmlindex
+golang.org/x/text/encoding/internal
+golang.org/x/text/encoding/internal/identifier
+golang.org/x/text/encoding/japanese
+golang.org/x/text/encoding/korean
+golang.org/x/text/encoding/simplifiedchinese
+golang.org/x/text/encoding/traditionalchinese
+golang.org/x/text/encoding/unicode
+golang.org/x/text/internal/language
+golang.org/x/text/internal/language/compact
+golang.org/x/text/internal/tag
+golang.org/x/text/internal/utf8internal
+golang.org/x/text/language
+golang.org/x/text/runes
+golang.org/x/text/transform
diff --git a/print/publisher/pkg-help b/print/publisher/pkg-help
index 1d38b98aa7ed..98068b12f29f 100644
--- a/print/publisher/pkg-help
+++ b/print/publisher/pkg-help
@@ -2,8 +2,7 @@ JAVA_TOOLS option
-----------------
By selection the JAVA_TOOLS option, the following ports are installed
-as runtime dependencies and their JAR files are
-symlinked into /usr/local/lib/speedata-publisher:
+as runtime dependencies:
textproc/saxon-he (XSLT/XPath/XQuery, also provides xmlresolver)
textproc/jing (RELAX NG validator)
@@ -11,6 +10,20 @@ symlinked into /usr/local/lib/speedata-publisher:
A Java runtime (openjdk25) is pulled in transitively.
+XSLT/RNG support (Saxon, Jing, Trang) is enabled via a config file.
+This port installs /usr/local/etc/speedata/publisher.cfg.sample. To
+activate it, copy it into place:
+
+ cp /usr/local/etc/speedata/publisher.cfg.sample \
+ /usr/local/etc/speedata/publisher.cfg
+
+The config points sp at ${JAVAJARDIR} where FreeBSD's saxon-he, jing,
+and trang install their JAR files. No symlinks or manual JAR management
+is required.
+
+To override globally, edit /usr/local/etc/speedata/publisher.cfg.
+To override per-user, create ~/.publisher.cfg.
+
To build without these dependencies (for example to use the upstream
JARs at specific versions, or to skip the Java toolchain entirely):
diff --git a/print/publisher/pkg-plist b/print/publisher/pkg-plist
index 8f52ee2467fe..79c0c1796212 100644
--- a/print/publisher/pkg-plist
+++ b/print/publisher/pkg-plist
@@ -1,12 +1,7 @@
-bin/sdluatex
bin/sp
-%%JAVA_TOOLS%%lib/speedata-publisher/jing.jar
-%%JAVA_TOOLS%%lib/speedata-publisher/lib/xmlresolver-5.3.3-data.jar
-%%JAVA_TOOLS%%lib/speedata-publisher/lib/xmlresolver-5.3.3.jar
+@sample etc/speedata/publisher.cfg.sample
lib/speedata-publisher/libsplib.so
lib/speedata-publisher/luaglue.so
-%%JAVA_TOOLS%%lib/speedata-publisher/saxon-he-12.9.jar
-%%JAVA_TOOLS%%lib/speedata-publisher/trang.jar
share/speedata-publisher/schema/catalog-schema-de.xml
share/speedata-publisher/schema/catalog-schema-en.xml
share/speedata-publisher/schema/layoutschema-de.rng
@@ -103,18 +98,29 @@ share/speedata-publisher/sw/lua/luxor.lua
share/speedata-publisher/sw/lua/lxpath.lua
share/speedata-publisher/sw/lua/par.lua
share/speedata-publisher/sw/lua/publisher.lua
+share/speedata-publisher/sw/lua/publisher/attributes.lua
share/speedata-publisher/sw/lua/publisher/colors.lua
share/speedata-publisher/sw/lua/publisher/commands.lua
+share/speedata-publisher/sw/lua/publisher/dispatch.lua
+share/speedata-publisher/sw/lua/publisher/drawing.lua
+share/speedata-publisher/sw/lua/publisher/fontfamilies.lua
share/speedata-publisher/sw/lua/publisher/fonts.lua
share/speedata-publisher/sw/lua/publisher/grid.lua
+share/speedata-publisher/sw/lua/publisher/images.lua
+share/speedata-publisher/sw/lua/publisher/language.lua
share/speedata-publisher/sw/lua/publisher/layout_functions.lua
share/speedata-publisher/sw/lua/publisher/layout_functions_lxpath.lua
share/speedata-publisher/sw/lua/publisher/links.lua
share/speedata-publisher/sw/lua/publisher/metadata.lua
share/speedata-publisher/sw/lua/publisher/metapost.lua
+share/speedata-publisher/sw/lua/publisher/nodes.lua
share/speedata-publisher/sw/lua/publisher/page.lua
+share/speedata-publisher/sw/lua/publisher/pages.lua
share/speedata-publisher/sw/lua/publisher/spinit.lua
+share/speedata-publisher/sw/lua/publisher/structure_tree.lua
share/speedata-publisher/sw/lua/publisher/tabular.lua
+share/speedata-publisher/sw/lua/publisher/utilities.lua
+share/speedata-publisher/sw/lua/publisher/xml_helpers.lua
share/speedata-publisher/sw/lua/sampler.lua
share/speedata-publisher/sw/lua/sdini.lua
share/speedata-publisher/sw/lua/sdscripts.lua