1PORTNAME=	vuxml
2PORTVERSION=	1.1
3PORTREVISION=	6
4CATEGORIES=	security textproc
5MASTER_SITES=	http://www.vuxml.org/dtd/vuxml-1/
6DISTFILES=	vuxml-10.dtd  vuxml-model-10.mod \
7		vuxml-11.dtd  vuxml-model-11.mod \
8		xml1.dcl catalog catalog.xml
9DIST_SUBDIR=	vuxml
10
11MAINTAINER=	ports@MidnightBSD.org
12COMMENT=	Vulnerability and eXposure Markup Language DTD
13WWW=		https://vuxml.freebsd.org/
14
15LICENSE=	bsd2
16
17RUN_DEPENDS=	xmlcatmgr:textproc/xmlcatmgr \
18		xsltproc:textproc/libxslt \
19		${LOCALBASE}/share/xml/dtd/xhtml-modularization/VERSION:textproc/xhtml-modularization \
20		${LOCALBASE}/share/xml/dtd/xhtml-basic/xhtml-basic10.dtd:textproc/xhtml-basic
21
22USES=		python:run
23
24NO_BUILD=	YES
25WRKSRC=		${WRKDIR}
26PLIST_SUB=	XMLCAT_RM="${XMLCAT_RM}" XMLCAT_ADD="${XMLCAT_ADD}" \
27		SGMLCAT_RM="${SGMLCAT_RM}" SGMLCAT_ADD="${SGMLCAT_ADD}" \
28		dir_DTD="${dir_DTD}"
29
30.include <bsd.port.pre.mk>
31
32dir_DTD=	share/xml/dtd/vuxml
33
34XMLCATMGR=	${LOCALBASE}/bin/xmlcatmgr
35SGMLCAT=	${PREFIX}/share/sgml/catalog.ports
36XMLCAT=		${PREFIX}/share/xml/catalog.ports
37
38XMLCAT_ADD=	${XMLCATMGR} -c ${XMLCAT} add nextCatalog \
39		    ${PREFIX}/${dir_DTD}/catalog.xml
40XMLCAT_RM=	${XMLCATMGR} -c ${XMLCAT} remove nextCatalog \
41		    ${PREFIX}/${dir_DTD}/catalog.xml
42SGMLCAT_ADD=	${XMLCATMGR} -sc ${SGMLCAT} add CATALOG \
43		    ${PREFIX}/${dir_DTD}/catalog
44SGMLCAT_RM=	${XMLCATMGR} -sc ${SGMLCAT} remove CATALOG \
45		    ${PREFIX}/${dir_DTD}/catalog
46
47CATALOG_PORTS_SGML=	${PREFIX}/share/sgml/catalog.ports
48CATALOG_PORTS_XML=	${PREFIX}/share/xml/catalog.ports
49
50VUXML_FILE?=	${PKGDIR}/vuln.xml
51VUXML_FLAT_FILE?=	${PKGDIR}/vuln-flat.xml
52_YEAR!=	date +%Y
53VUXML_CURRENT_FILE?=	${PKGDIR}/vuln/${_YEAR}.xml
54
55.if defined(MAGUS)
56NO_TEST=	yes
57.endif
58
59post-clean:
60	-${RM} "${VUXML_FILE}.tidy"
61	-${RM} "${VUXML_FLAT_FILE}"
62
63do-extract:
64	@${RM} -rf ${WRKDIR}
65	@${MKDIR} ${WRKDIR}
66.for f in ${DISTFILES}
67	${CP} ${_DISTDIR}/${f} ${WRKDIR}/${f}
68.endfor
69
70do-install:
71	@${MKDIR} ${PREFIX}/${dir_DTD}
72.for f in ${DISTFILES}
73	${INSTALL_DATA} ${WRKSRC}/${f} ${PREFIX}/${dir_DTD}/${f}
74.endfor
75
76do-test:
77	@${MKDIR} ${WRKDIR}/test
78	@${CP} -R ${.CURDIR}/vuln.xml ${.CURDIR}/vuln ${WRKDIR}/test
79	@cd ${.CURDIR} && make validate PKGDIR=${WRKDIR}/test
80
81${VUXML_FLAT_FILE}: ${VUXML_FILE} vuln/*.xml
82	xmllint -noent ${.ALLSRC:[1]} > ${.TARGET}
83
84validate: tidy
85	@${SH} ${FILESDIR}/validate.sh "${VUXML_FLAT_FILE}"
86	@${ECHO_MSG} Checking if tidy differs...
87	@if ${DIFF} -u "${VUXML_FLAT_FILE}" "${VUXML_FILE}.tidy"; \
88	then \
89		${ECHO_MSG} ... seems okay; \
90		${RM} "${VUXML_FILE}.tidy"; \
91	else \
92		return 1; \
93	fi
94	@${ECHO_MSG} Checking for space/tab...
95	@unexpand "${VUXML_FLAT_FILE}" | ${SED} -E 's,[[:space:]]*$$,,g' > "${VUXML_FILE}.unexpanded"
96	@if ${DIFF} -u "${VUXML_FLAT_FILE}" "${VUXML_FILE}.unexpanded"; \
97	then \
98		${ECHO_MSG} ... seems okay; \
99		${RM} "${VUXML_FILE}.unexpanded"; \
100	else \
101		${ECHO_MSG} ... see above; \
102		${ECHO_CMD} Consider using ${VUXML_FILE}.unexpanded for final commit; \
103		return 1; \
104	fi
105	${PYTHON_CMD} ${FILESDIR}/extra-validation.py ${VUXML_FLAT_FILE}
106
107tidy: ${VUXML_FLAT_FILE}
108	@if [ ! -e ${LOCALBASE}/share/xml/dtd/vuxml/catalog.xml ]; \
109	then \
110		echo "Please install the VuXML port prior to running make validate/tidy."; \
111		exit 1; \
112	fi
113	${SH} ${FILESDIR}/tidy.sh "${FILESDIR}/tidy.xsl" "${VUXML_FLAT_FILE}" > "${VUXML_FILE}.tidy"
114
115newentry:
116	@${SH} ${FILESDIR}/newentry.sh "${VUXML_CURRENT_FILE}" "CVE_ID=${CVE_ID}" "SA_ID=${SA_ID}"
117
118.if defined(VID) && !empty(VID)
119html: work/${VID}.html
120work/${VID}.html: ${FILESDIR}/html.xsl ${FILESDIR}/common.css ${VUXML_FILE}
121	${MKDIR} work
122	xsltproc --stringparam vid "${VID}" \
123	    --output ${.TARGET} \
124	    ${FILESDIR}/html.xsl ${VUXML_FILE}
125	${INSTALL_DATA} ${FILESDIR}/common.css work
126.endif
127
128.include <bsd.port.post.mk>
129