aboutsummaryrefslogtreecommitdiff
path: root/security/caldera-ot/Makefile
blob: b25ab15b982a075eed387a6cb906c36db0794ad9 (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
PORTNAME=	caldera-ot
DISTVERSION=	4.2.0
PORTREVISION=	7
CATEGORIES=	security python

MAINTAINER=	acm@FreeBSD.org
COMMENT=	caldera OT plugin and capabilities
WWW=		https://github.com/mitre/caldera-ot

LICENSE=	APACHE20
LICENSE_FILE=	${WRKSRC}/LICENSE

BUILD_DEPENDS=	bacnet-stack>0:devel/bacnet-stack \
		cmake:devel/cmake-core \
		nuitka3:devel/nuitka \
		argtable3>0:devel/argtable3 \
		libiec61850>0:devel/libiec61850 \
		${PYTHON_PKGNAMEPREFIX}aiohttp>0:www/py-aiohttp@${PY_FLAVOR} \
		${PYTHON_PKGNAMEPREFIX}pymodbus>0:comms/py-pymodbus@${PY_FLAVOR} \
		${PYTHON_PKGNAMEPREFIX}pyserial>0:comms/py-pyserial@${PY_FLAVOR} \
		${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR} \
		${PYTHON_PKGNAMEPREFIX}pnio-dcp>0:devel/py-pnio-dcp@${PY_FLAVOR}
RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}aiohttp>0:www/py-aiohttp@${PY_FLAVOR} \
		${PYTHON_PKGNAMEPREFIX}pymodbus>0:comms/py-pymodbus@${PY_FLAVOR} \
		${PYTHON_PKGNAMEPREFIX}pyserial>0:comms/py-pyserial@${PY_FLAVOR} \
		${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR} \
		${PYTHON_PKGNAMEPREFIX}pnio-dcp>0:devel/py-pnio-dcp@${PY_FLAVOR} \
		caldera4>=4.2.0:security/caldera4

USE_GITHUB=	yes
GH_ACCOUNT=	mitre
GH_PROJECT=	${PORTNAME}
GH_TAGNAME=	6c6b971d96de121da33f27aa6f80806835346b23
GH_TUPLE=	mitre:bacnet:745432c:bacnet/bacnet \
		mitre:dnp3:01e3748:dnp3/dnp3 \
		mitre:modbus:e47e259:modbus/modbus \
		mitre:iec61850:a72e2c1:iec61850/iec61850 \
		mitre:profinet:7e62daa:profinet/profinet

USES=		compiler:c++11-lang dos2unix python

DOS2UNIX_REGEX= .*\.([yml])
CALDERA_USER=	caldera
CALDERA_GROUP=	caldera
USERS=		${CALDERA_USER}
GROUPS=		${CALDERA_GROUP}

WWWDIR=		${PREFIX}/www/caldera

SUB_FILES=	pkg-message
SUB_LIST=	WWWDIR=${WWWDIR}

post-extract:
	${RM} -R ${WRKSRC}/.github
	cd ${WRKSRC} && ${RM} -f .coveragerc .dockerignore .eslintrc.js .flake8 \
		.git* .pre* .stylelintrc.json Dockerfile

post-patch:
	${REINPLACE_CMD} -i "" -e 's|.sync|.tcp|g' ${WRKSRC}/modbus/src/src/modbus/client.py
	cd ${WRKSRC} && \
		${FIND} . -type f -name "*.orig" -exec ${RM} "{}" \;

do-build:
	@${MKDIR} ${WRKDIR}/modbus_cli-build
	@${MKDIR} ${WRKDIR}/profinet-build
	@${MKDIR} ${WRKDIR}/iec61850-build
	@${CP} ${WRKSRC}/profinet/src/dcp_utility.py ${WRKDIR}/profinet-build/dcp_utility.py
	cd ${WRKSRC}/bacnet/src/bacnet-stack/apps && \
		${CC} readprop/main.c -I${LOCALBASE}/include -L${LOCALBASE}/lib \
			-lbacnet-stack -o ${WRKSRC}/bacnet/payloads/bacrp-freebsd
	cd ${WRKSRC}/bacnet/src/bacnet-stack/apps && \
		${CC} readprop/main.c -I${LOCALBASE}/include -L${LOCALBASE}/lib \
			-lbacnet-stack -o ${WRKSRC}/bacnet/payloads/bacwp-freebsd
	cd ${WRKDIR}/iec61850-build && \
		cmake ${WRKSRC}/iec61850/src/ -DLOCALBASE=${LOCALBASE} -DBUILD_SYSTEM=ON && \
			cmake --build .
	cd ${WRKSRC}/modbus/src/src && \
		${LOCALBASE}/bin/nuitka3 --standalone --onefile \
		--output-filename=modbus_cli_freebsd --output-dir=${WRKDIR}/modbus_cli-build modbus_cli.py
	cd ${WRKDIR}/profinet-build && \
		${LOCALBASE}/bin/nuitka3 --standalone --onefile \
		--output-filename=dcp_utility_freebsd --output-dir=${WRKDIR}/profinet-build dcp_utility.py

do-install:
	@${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/bacnet
	@${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/dnp3
	@${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/modbus
	@${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/iec61850
	@${MKDIR} ${STAGEDIR}${WWWDIR}/plugins/profinet
	@cd ${WRKSRC}/bacnet && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/bacnet
	@cd ${WRKSRC}/dnp3 && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/dnp3
	@cd ${WRKSRC}/modbus && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/modbus
	@cd ${WRKSRC}/iec61850 && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/iec61850
	@cd ${WRKSRC}/profinet && ${COPYTREE_SHARE} . ${STAGEDIR}/${WWWDIR}/plugins/profinet
	${INSTALL_PROGRAM} ${WRKDIR}/modbus_cli-build/modbus_cli_freebsd \
		${STAGEDIR}/${WWWDIR}/plugins/modbus/payloads/modbus_cli_freebsd
	${INSTALL_PROGRAM} ${WRKDIR}/iec61850-build/bin/iec61850_actions \
		${STAGEDIR}/${WWWDIR}/plugins/iec61850/payloads/iec61850_actions_freebsd
	${INSTALL_PROGRAM} ${WRKDIR}/profinet-build/dcp_utility_freebsd \
                ${STAGEDIR}/${WWWDIR}/plugins/profinet/payloads/dcp_utility_freebsd

post-install:
	${STRIP_CMD} ${STAGEDIR}/${WWWDIR}/plugins/bacnet/payloads/bacwp-freebsd
	${STRIP_CMD} ${STAGEDIR}/${WWWDIR}/plugins/bacnet/payloads/bacrp-freebsd

.include <bsd.port.mk>