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
|
PORTNAME= lavinmq
DISTVERSIONPREFIX= v
DISTVERSION= 2.3.0
CATEGORIES= net
# JavaScripts
MASTER_SITES+= https://github.com/chartjs/Chart.js/releases/download/v4.0.1/:chartjs \
https://github.com/cloudamqp/amqp-client.js/releases/download/v3.1.1/:amqpclient \
https://moment.github.io/luxon/es6/:luxon \
https://cdn.jsdelivr.net/npm/chartjs-adapter-luxon@1.3.1/dist/:chartjsadapter \
https://unpkg.com/@stoplight/elements@8.2.0/:elements \
https://raw.githubusercontent.com/eclipse-paho/paho.mqtt.javascript/master/src/:paho
DISTFILES+= chart.js-4.0.1.tgz:chartjs \
amqp-websocket-client.mjs:amqpclient \
amqp-websocket-client.mjs.map:amqpclient \
luxon.js:luxon \
chartjs-adapter-luxon.esm.js:chartjsadapter \
web-components.min.js:elements \
styles.min.css:elements \
paho-mqtt.js:paho
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} \
84codes-lz4.cr-${_LZ4}_GH0.tar.gz \
84codes-systemd.cr-v2.0.0_GH0.tar.gz \
cloudamqp-amq-protocol.cr-v1.1.15_GH0.tar.gz \
cloudamqp-amqp-client.cr-v1.3.1_GH0.tar.gz \
84codes-mqtt-protocol.cr-${_MQTT}_GH0.tar.gz \
chart.js-${_CHARTJS}.tgz
# Crystal library versions
_LZ4= 96d714f7593c66ca7425872fd26c7b1286806d3d
_MQTT= d01a1210ed7adfed9aa5cd055f1788a45d9c4d52
# JavaScript library versions
_CHARTJS= 4.0.1
_ELEMENTS= 8.2.0
_AMQP_CLIENT= 3.1.1
_CHARTJS_ADAPTER= 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
USES= pkgconfig ssl:build
USE_GITHUB= yes
GH_ACCOUNT= cloudamqp
GH_TUPLE= 84codes:lz4.cr:${_LZ4}:a/deps/lz4.cr \
84codes:systemd.cr:v2.0.0:systemd/deps/systemd.cr \
cloudamqp:amq-protocol.cr:v1.1.15:proto/deps/amq-protocol.cr \
cloudamqp:amqp-client.cr:v1.3.1:client/deps/amqp-client.cr \
84codes:mqtt-protocol.cr:${_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 \
--static
.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
# 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 AMQP WebSocket client files
${CP} ${DISTDIR}/amqp-websocket-client.mjs ${WRKSRC}/static/js/lib/
${CP} ${DISTDIR}/amqp-websocket-client.mjs.map ${WRKSRC}/static/js/lib/
# 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
# copy paho MQTT
${CP} ${DISTDIR}/paho-mqtt.js ${WRKSRC}/static/js/lib/
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>
|