summaryrefslogtreecommitdiff
path: root/net/lavinmq/Makefile
blob: d27d57820c3c63b9a766a8e4f3440c4968d97bb7 (plain) (blame)
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>