1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
PORTNAME= publisher
DISTVERSIONPREFIX= v
DISTVERSION= 5.6.0
CATEGORIES= print
MAINTAINER= misterd@renderdata.pro
COMMENT= Non-interactive layout engine and typesetting system ${${FLAVOR}_COMMENT}
WWW= https://www.speedata.de/
LICENSE= AGPLv3
LICENSE_FILE= ${WRKSRC}/COPYING
# Go does not support -buildmode=c-shared on freebsd/arm64 (only on
# freebsd/amd64). See internal/platform/supported.go in the Go source.
# When Go gains arm64 support, the application could also be refactored
# upstream to avoid c-shared entirely.
ONLY_FOR_ARCHS= amd64
ONLY_FOR_ARCHS_REASON= requires Go -buildmode=c-shared, not supported on this architecture
RUN_DEPENDS= luahbtex:print/tex-luatex
# Flavors: default (community) and pro
FLAVORS= default pro
FLAVOR?= ${FLAVORS:[1]}
pro_PKGNAMESUFFIX= -pro
default_COMMENT= (community)
pro_COMMENT= (pro)
USES= go:modules,no_targets lua:53,build,run
USE_GITHUB= yes
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: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 \
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 \
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 \
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-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.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
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
# Paths compiled into sp binary at build time (final install paths, no STAGEDIR)
SP_LIBDIR= ${PREFIX}/lib/speedata-publisher
SP_SHAREDIR= ${PREFIX}/share/speedata-publisher
SP_SWDIR= ${SP_SHAREDIR}/sw
# pro flavor: pass -X main.pro=yes at link time
.if ${FLAVOR} == pro
SP_LDFLAGS_PRO= -X main.pro=yes
.else
SP_LDFLAGS_PRO=
.endif
# ldflags for sp binary: compile install paths and version into the binary.
# Set before bsd.port.mk includes go.mk so go.mk's default -ldflags=-s is skipped.
GO_BUILDFLAGS+= -ldflags="-X main.dest=custom \
-X main.version=${DISTVERSION} \
-X main.libdir=${SP_LIBDIR} \
-X main.srcdir=${SP_SWDIR} \
${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.
(cd ${WRKSRC}/src/go; \
${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${GO_ENV} \
GOMAXPROCS=${MAKE_JOBS_NUMBER} GOPROXY=off \
${GO_CMD} build \
-buildmode=c-shared \
-mod=vendor \
-v -trimpath \
-buildvcs=false \
-ldflags=${STRIP} \
-o ${WRKDIR}/libsplib.so \
speedatapublisher/splib)
# luaglue.so -- C glue library
(cd ${WRKSRC}/src/c; \
${CC} ${CFLAGS} ${CPPFLAGS} -I${LUA_INCDIR} ${LDFLAGS} \
-fPIC -shared \
-Wl,-soname,luaglue.so \
-o ${WRKDIR}/luaglue.so \
luaglue.c)
# sp binary -- dest=custom compiles paths in at link time (via GO_BUILDFLAGS)
(cd ${WRKSRC}/src/go; \
${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${GO_ENV} \
GOMAXPROCS=${MAKE_JOBS_NUMBER} GOPROXY=off \
${GO_CMD} build ${GO_BUILDFLAGS} \
-o ${WRKDIR}/sp \
speedatapublisher/sp/sp)
do-install:
# 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 ${WRKDIR}/luaglue.so \
${STAGEDIR}${SP_LIBDIR}
# Schema files
${MKDIR} ${STAGEDIR}${SP_SHAREDIR}/schema
${INSTALL_DATA} \
${WRKSRC}/schema/catalog-schema-*.xml \
${WRKSRC}/schema/layoutschema-*.* \
${STAGEDIR}${SP_SHAREDIR}/schema
# Runtime resource files (sw/)
(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}${PREFIX}/etc/speedata
${ECHO_CMD} "jardir = ${JAVAJARDIR}" > \
${STAGEDIR}${PREFIX}/etc/speedata/publisher.cfg.sample
.include <bsd.port.mk>
|