Files
2026-10-04 04:07:15 +00:00

167 lines
5.5 KiB
Makefile

PORTNAME= lavinmq
DISTVERSIONPREFIX= v
DISTVERSION= 2.9.2
CATEGORIES= net
# JavaScripts
MASTER_SITES+= https://github.com/chartjs/Chart.js/releases/download/v${_CHARTJS}/:chartjs \
https://moment.github.io/luxon/es6/:luxon \
https://cdn.jsdelivr.net/npm/chartjs-adapter-luxon@${_LUXON_JS}/dist/:chartjsadapter \
https://unpkg.com/@stoplight/elements@${_ELEMENTS}/:elements
DISTFILES+= chart.js-${_CHARTJS}.tgz:chartjs \
luxon.js:luxon \
chartjs-adapter-luxon.esm.js:chartjsadapter \
web-components.min.js:elements \
styles.min.css:elements
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} \
84codes-lz4.cr-${_LZ4}_GH0.tar.gz \
84codes-systemd.cr-v${_SYSTEMD}_GH0.tar.gz \
cloudamqp-amq-protocol.cr-v${_AMQP_PROTO}_GH0.tar.gz \
cloudamqp-amqp-client.cr-v${_AMQP_CLIENT}_GH0.tar.gz \
84codes-mqtt-protocol.cr-v${_MQTT}_GH0.tar.gz \
chart.js-${_CHARTJS}.tgz
# Crystal library versions
_AMQP_CLIENT= 1.3.3
_AMQP_PROTO= 1.3.1
_LZ4= 0015e74e0ed0f6bb15de9c25c25034ad4bc7f636
_MQTT= 0.3.0
_SYSTEMD= 3.0.1
# JavaScript library versions
_CHARTJS= 4.0.1
_ELEMENTS= 8.2.0
_LUXON_JS= 1.3.1
MAINTAINER= dch@FreeBSD.org
COMMENT= Next-generation AMQP 0.9.1 based message broker
WWW= https://www.lavinmq.com/
LICENSE= APACHE20
BUILD_DEPENDS= crystal:lang/crystal \
help2man:misc/help2man \
shards:devel/shards
LIB_DEPENDS= liblz4.so:archivers/liblz4 \
libpcre2-8.so:devel/pcre2
USES= pkgconfig ssl:build
USE_GITHUB= yes
GH_ACCOUNT= cloudamqp
GH_TUPLE= 84codes:lz4.cr:${_LZ4}:a/deps/lz4.cr \
84codes:systemd.cr:v${_SYSTEMD}:systemd/deps/systemd.cr \
cloudamqp:amq-protocol.cr:v${_AMQP_PROTO}:proto/deps/amq-protocol.cr \
cloudamqp:amqp-client.cr:v${_AMQP_CLIENT}:client/deps/amqp-client.cr \
84codes:mqtt-protocol.cr:v${_MQTT}:mqtt/deps/mqtt-protocol.cr
USE_RC_SUBR= lavinmq
USERS= lavinmq
GROUPS= lavinmq
PORTDOCS= CHANGELOG.md NOTICE README.md SECURITY.md
OPTIONS_DEFINE= DOCS
SHARDS_ENV= --time --verbose --production --release --no-color --stats \
-Dgc_none -Dpreview_mt -Dexecution_context
.include <bsd.port.options.mk>
.if ${SSL_DEFAULT:Mopenssl} || ${SSL_DEFAULT:Mopenssl3*}
BROKEN= fails to compile: undefined symbol: EVP_MD_size
.endif
post-extract:
# force shards to use local paths, not git repos, for dependencies
@${RM} ${WRKSRC}/shard.lock
@${REINPLACE_CMD} -E \
-e 's,github: .*/,path: deps/,' \
-e '/branch:/d' \
-e '/version: .>1/d' \
${WRKSRC}/shard.yml \
${WRKSRC}/deps/*/shard.yml
# switch config example into hier(5) compliance
@${REINPLACE_CMD} -E \
-e 's,/etc/,${PREFIX}/etc/,' \
-e 's,/lib/,/db/,' \
-e 's,/tmp/lavinmq-http.sock,/var/run/lavinmq/http.sock,' \
-e 's,/tmp/lavinmq.sock,/var/run/lavinmq/amqp.sock,' \
${WRKSRC}/extras/lavinmq.ini
@${ECHO} "control_unix_path = /var/run/lavinmq/lavinmqctl.sock" \
>> ${WRKSRC}/extras/lavinmq.ini
# fix compiled-in defaults for FreeBSD hier(7) paths
@${REINPLACE_CMD} \
-e 's,/var/lib/lavinmq,/var/db/lavinmq,' \
${WRKSRC}/src/lavinmq/config/options.cr
@${REINPLACE_CMD} \
-e 's,/tmp/lavinmqctl.sock,/var/run/lavinmq/lavinmqctl.sock,' \
${WRKSRC}/src/lavinmq/http/constants.cr
@${REINPLACE_CMD} \
-e 's,/etc/lavinmq,${PREFIX}/etc/lavinmq,' \
${WRKSRC}/src/lavinmq/config.cr
# setup javaScript directories
${MKDIR} ${WRKSRC}/static/js/lib \
${WRKSRC}/static/js/lib/chunks
# extract Chart.js files from tarball
${TAR} -xOf ${DISTDIR}/chart.js-${_CHARTJS}.tgz package/dist/chart.js \
> ${WRKSRC}/static/js/lib/chart.js
${TAR} -xOf ${DISTDIR}/chart.js-${_CHARTJS}.tgz package/dist/chunks/helpers.segment.js \
> ${WRKSRC}/static/js/lib/chunks/helpers.segment.js
# copy luxon and Chart.js adapter
${CP} ${DISTDIR}/luxon.js ${WRKSRC}/static/js/lib/
${CP} ${DISTDIR}/chartjs-adapter-luxon.esm.js ${WRKSRC}/static/js/lib/
${SED} -i '' \
-e "s|\(import { _adapters } from\).*|\1 './chart.js'|; s|\(import { DateTime } from\).*|\1 './luxon.js'|" \
${WRKSRC}/static/js/lib/chartjs-adapter-luxon.esm.js
# copy stoplight Elements files
${CP} ${DISTDIR}/web-components.min.js ${WRKSRC}/static/js/lib/elements-${_ELEMENTS}.js
${CP} ${DISTDIR}/styles.min.css ${WRKSRC}/static/js/lib/elements-${_ELEMENTS}.css
pre-build:
# render .shtml views into static .html (baked into binary at compile time)
.for v in 401 404 channel channels connection connections consumers \
exchange exchanges federation login logs nodes operator-policies \
overview policies queue queues shovels stream unacked user users \
vhost vhosts
${WRKSRC}/views/render.sh ${WRKSRC}/views/${v}.shtml \
"${DISTVERSION}" > ${WRKSRC}/static/${v}.html
.endfor
do-build:
${MKDIR} ${WRKDIR}/man1
(cd ${WRKSRC} && \
${LOCALBASE}/bin/shards lock ${SHARDS_ENV} && \
${LOCALBASE}/bin/shards build ${SHARDS_ENV})
help2man -Nn "fast and advanced message queue server" ${WRKSRC}/bin/lavinmq \
-o ${WRKDIR}/man1/lavinmq.1
help2man -Nn "control utility for lavinmq server" ${WRKSRC}/bin/lavinmqctl \
-o ${WRKDIR}/man1/lavinmqctl.1
help2man -Nn "performance testing tool for amqp servers" ${WRKSRC}/bin/lavinmqperf \
-o ${WRKDIR}/man1/lavinmqperf.1
do-install:
${MKDIR} ${STAGEDIR}${ETCDIR} \
${STAGEDIR}/var/db/lavinmq \
${STAGEDIR}/var/log/lavinmq \
${STAGEDIR}${PREFIX}/share/man/man1
${INSTALL_DATA} ${WRKSRC}/extras/lavinmq.ini \
${STAGEDIR}${ETCDIR}/lavinmq.ini.sample
.for f in lavinmq lavinmqctl lavinmqperf
${INSTALL_PROGRAM} ${WRKSRC}/bin/${f} \
${STAGEDIR}${PREFIX}/bin
${INSTALL_MAN} ${WRKDIR}/man1/${f}.1 \
${STAGEDIR}${PREFIX}/share/man/man1/
.endfor
do-install-DOCS-on:
${MKDIR} ${STAGEDIR}${DOCSDIR}
.for f in ${PORTDOCS}
${INSTALL_DATA} ${WRKSRC}/${f} \
${STAGEDIR}${DOCSDIR}
.endfor
.include <bsd.port.mk>