1# $OpenBSD: Makefile.inc,v 1.29 2020/07/30 21:32:19 schwarze Exp $ 2 3.include "Makefile.sub" 4 5# --- programs --- 6 7DIFF = diff -au 8MAN ?= man 9MANDOC ?= mandoc 10MOPTS ?= -mandoc 11 12# --- lists of targets --- 13 14SKIP_ASCII ?= 15SKIP_TMAN ?= 16SKIP_MARKDOWN ?= 17 18_ASCIIFILES = 19_ASCIIDIFFS = 20_MANFILES = 21_MANDIFFS = 22.for t in ${REGRESS_TARGETS} 23. if empty(SKIP_ASCII:MALL) && empty(SKIP_ASCII:M${t}) 24_ASCIIFILES += ${t}.mandoc_ascii 25_ASCIIDIFFS += ${t}.diff_ascii 26. if empty(SKIP_TMAN:MALL) && empty(SKIP_TMAN:M${t}) 27_MANFILES += ${t}.in_man ${t}.mandoc_man 28_MANDIFFS += ${t}.diff_man 29. endif 30. endif 31. if empty(SKIP_MARKDOWN:MALL) && empty(SKIP_MARKDOWN:M${t}) 32_MARKDOWNFILES += ${t}.mandoc_markdown 33_MARKDOWNDIFFS += ${t}.diff_markdown 34. endif 35.endfor 36 37_TAGFILES = ${TAG_TARGETS:C/$/.mandoc_tag/} 38_TAGDIFFS = ${TAG_TARGETS:C/$/.diff_tag/} 39 40_UTF8FILES = ${UTF8_TARGETS:C/$/.mandoc_utf8/} 41_UTF8DIFFS = ${UTF8_TARGETS:C/$/.diff_utf8/} 42 43_HTMLFILES = ${HTML_TARGETS:C/$/.mandoc_html/} 44_HTMLDIFFS = ${HTML_TARGETS:C/$/.diff_html/} 45 46_LINTFILES = ${LINT_TARGETS:C/$/.mandoc_lint/} 47_LINTDIFFS = ${LINT_TARGETS:C/$/.diff_lint/} 48 49_HTMLVALS = ${REGRESS_TARGETS:C/$/.validate_html/} 50 51# --- convenience targets --- 52 53# Note that bsd.regress.mk automatically adds REGRESS_TARGETS to all. 54all: clean 55 56ascii: ascii-clean ${_ASCIIDIFFS} ${_TAGDIFFS} 57 58utf8: utf8-clean ${_UTF8DIFFS} 59 60html: html-clean ${_HTMLDIFFS} 61 62markdown: markdown-clean ${_MARKDOWNDIFFS} 63 64tman: tman-clean ${_MANDIFFS} 65 66lint: lint-clean ${_LINTDIFFS} 67 68htmlval: ${_HTMLVALS} 69 70# --- suffix rules --- 71 72.SUFFIXES: .diff_ascii .diff_html .diff_lint \ 73 .diff_man .diff_markdown .diff_tag .diff_utf8 \ 74 .in .in_man \ 75 .mandoc_ascii .mandoc_html .mandoc_lint \ 76 .mandoc_man .mandoc_markdown .mandoc_tag .mandoc_utf8 \ 77 .out_ascii .out_lint .out_utf8 78 79.in.mandoc_ascii: 80 ${MANDOC} ${MOPTS} -Ios=OpenBSD -Tascii ${.IMPSRC} > ${.TARGET} 81 82.mandoc_ascii.diff_ascii: 83 ${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_ascii$/out_ascii/} ${.IMPSRC} 84 85.in.mandoc_tag: 86 ${MAN} -l ${MOPTS} -Ios=OpenBSD -Tascii \ 87 -O outfilename=${.TARGET:S/tag$/ascii/},tagfilename=${.TARGET} \ 88 ${.IMPSRC} 89 90.mandoc_tag.diff_tag: 91 ${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_tag$/out_tag/} ${.IMPSRC} 92 ${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_tag$/out_ascii/} \ 93 ${.IMPSRC:S/mandoc_tag$/mandoc_ascii/} 94 95.in.mandoc_utf8: 96 ${MANDOC} ${MOPTS} -Ios=OpenBSD -Tutf8 ${.IMPSRC} > ${.TARGET} 97 98.mandoc_utf8.diff_utf8: 99 ${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_utf8$/out_utf8/} ${.IMPSRC} 100 101.in.mandoc_html: 102 ${MANDOC} ${MOPTS} -Thtml ${.IMPSRC} | \ 103 sed -n '/BEGINTEST/,/ENDTEST/p' | sed '1d;$$d' > ${.TARGET} 104 105.mandoc_html.diff_html: 106 ${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_html$/out_html/} ${.IMPSRC} 107 108.in.mandoc_markdown: 109 ${MANDOC} ${MOPTS} -Ios=OpenBSD -Tmarkdown ${.IMPSRC} > ${.TARGET} 110 111.mandoc_markdown.diff_markdown: 112 ${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_markdown$/out_markdown/} \ 113 ${.IMPSRC} 114 115.in.in_man: 116 ${MANDOC} ${MOPTS} -Ios=OpenBSD -Tman ${.IMPSRC} > ${.TARGET} 117 118.in_man.mandoc_man: 119 ${MANDOC} -man -Tascii -Omdoc ${.IMPSRC} > ${.TARGET} 120 121.in.mandoc_lint: 122 -${MANDOC} ${MOPTS} -Ios=OpenBSD -Tlint -Wall ${.IMPSRC} 2>&1 | \ 123 sed -E 's/^mandoc: \/[^:]+\//mandoc: /' > ${.TARGET} 124 125.mandoc_lint.diff_lint: 126 ${DIFF} ${.CURDIR}/${.IMPSRC:S/mandoc_lint$/out_lint/} ${.IMPSRC} 127 128# --- single-file targets --- 129 130.for t in ${REGRESS_TARGETS} 131. if empty(SKIP_ASCII:MALL) && empty(SKIP_ASCII:M${t}) 132. if empty(SKIP_TMAN:MALL) && empty(SKIP_TMAN:M${t}) 133${t}.diff_man: ${t}.mandoc_man 134 ${DIFF} ${.CURDIR}/${t}.out_ascii ${.ALLSRC} 135. else 136${t}.diff_man: 137. endif 138. if empty(TAG_TARGETS:M${t}) 139${t}: ${t}.diff_ascii ${t}.diff_man 140. else 141${t}: ${t}.diff_tag ${t}.diff_man 142. endif 143. else 144${t}: 145. endif 146${t}.validate_html: ${t}.in 147 -${MANDOC} ${MOPTS} -Thtml ${.ALLSRC} | validate 148.endfor 149 150.for t in ${TAG_TARGETS} 151${t}: ${t}.diff_tag 152.endfor 153 154.for t in ${UTF8_TARGETS} 155${t}: ${t}.diff_utf8 156.endfor 157 158.for t in ${HTML_TARGETS} 159${t}: ${t}.diff_html 160.endfor 161 162.for t in ${REGRESS_TARGETS} 163. if empty(SKIP_MARKDOWN:MALL) && empty(SKIP_MARKDOWN:M${t}) 164${t}: ${t}.diff_markdown 165. endif 166.endfor 167 168.for t in ${LINT_TARGETS} 169${t}: ${t}.diff_lint 170.endfor 171 172# --- phony targets --- 173 174clean: ${_CLEAN_TARGETS} 175 176ascii-clean: 177.if !empty(_ASCIIFILES) 178 rm -f ${_ASCIIFILES} ${_TAGFILES} 179.endif 180 181utf8-clean: 182.if !empty(_UTF8FILES) 183 rm -f ${_UTF8FILES} 184.endif 185 186html-clean: 187.if !empty(_HTMLFILES) 188 rm -f ${_HTMLFILES} 189.endif 190 191markdown-clean: 192.if !empty(_MARKDOWNFILES) 193 rm -f ${_MARKDOWNFILES} 194.endif 195 196tman-clean: 197.if !empty(_MANFILES) 198 rm -f ${_MANFILES} 199.endif 200 201lint-clean: 202.if !empty(_LINTFILES) 203 rm -f ${_LINTFILES} 204.endif 205 206.PHONY: ${_ASCIIDIFFS} ${_TAGDIFFS} ${_UTF8DIFFS} ${_HTMLDIFFS} \ 207 ${_MARKDOWNDIFFS} ${_MANDIFFS} ${_LINTDIFFS} ${_HTMLVALS} 208 209 210# ---------------------------------------------------------------------- 211# development targets, may affect version-controlled files 212# ---------------------------------------------------------------------- 213 214# --- the groff program --- 215 216GROFF = /usr/local/bin/groff ${GOPTS} -mtty-char ${MOPTS} -Wall -P-c 217 218# --- the list of targets --- 219 220SKIP_GROFF_ASCII += ${SKIP_GROFF} 221SKIP_GROFF_UTF8 += ${SKIP_GROFF} 222 223_OUTFILES = 224_HTMLOUTFILES = 225_MARKDOWNOUTFILES = 226_LINTOUTFILES = 227.for t in ${REGRESS_TARGETS} 228. if empty(SKIP_GROFF_ASCII:M${t}) && \ 229 empty(SKIP_ASCII:M${t}) && empty(SKIP_ASCII:MALL) 230_OUTFILES += ${t}.out_ascii 231. endif 232.endfor 233 234.for t in ${UTF8_TARGETS} 235. if empty(SKIP_GROFF_UTF8:M${t}) 236_OUTFILES += ${t}.out_utf8 237. endif 238.endfor 239 240.for t in ${HTML_TARGETS} 241_HTMLOUTFILES += ${t}.out_html 242.endfor 243 244.for t in ${REGRESS_TARGETS} 245. if empty(SKIP_MARKDOWN:MALL) && empty(SKIP_MARKDOWN:M${t}) 246_MARKDOWNOUTFILES += ${t}.out_markdown 247. endif 248.endfor 249 250.for t in ${LINT_TARGETS} 251_LINTOUTFILES += ${t}.out_lint 252.endfor 253 254# --- the convenience targets --- 255 256groff: obj-check ${_OUTFILES} 257 258html-out: obj-check ${_HTMLOUTFILES} 259 260markdown-out: obj-check ${_MARKDOWNOUTFILES} 261 262lint-out: obj-check ${_LINTOUTFILES} 263 264# --- single-file targets --- 265 266.for t in ${REGRESS_TARGETS} 267. if empty(SKIP_ASCII:M${t}) && empty(SKIP_ASCII:MALL) 268. if empty(SKIP_GROFF_ASCII:M${t}) 269${t}.out_ascii: ${t}.in 270 ${GROFF} -Tascii ${.ALLSRC} > ${.TARGET} 271. else 272.PHONY: ${t}.out_ascii 273${t}.out_ascii: 274 @echo "TODO: groff disabled for: ${.TARGET}" 275. endif 276. endif 277.endfor 278 279.for t in ${UTF8_TARGETS} 280. if empty(SKIP_GROFF_UTF8:M${t}) 281${t}.out_utf8: ${t}.in 282 ${GROFF} -Tutf8 ${.ALLSRC} > ${.TARGET} 283. else 284.PHONY: ${t}.out_utf8 285${t}.out_utf8: 286 @echo "TODO: groff disabled for: ${.TARGET}" 287. endif 288.endfor 289 290.for t in ${HTML_TARGETS} 291${t}.out_html: ${t}.in 292 ${MANDOC} ${MOPTS} -Thtml ${.ALLSRC} | \ 293 sed -n '/BEGINTEST/,/ENDTEST/p' | sed '1d;$$d' > ${.TARGET} 294.endfor 295 296.for t in ${REGRESS_TARGETS} 297. if empty(SKIP_MARKDOWN:MALL) && empty(SKIP_MARKDOWN:M${t}) 298${t}.out_markdown: ${t}.in 299 ${MANDOC} ${MOPTS} -Ios=OpenBSD -Tmarkdown ${.ALLSRC} > ${.TARGET} 300. endif 301.endfor 302 303.for t in ${LINT_TARGETS} 304${t}.out_lint: ${t}.in 305 -${MANDOC} ${MOPTS} -Ios=OpenBSD -Tlint -Wall ${.ALLSRC} \ 306 > ${.TARGET} 2>&1 307.endfor 308 309# --- phony targets --- 310 311groff-clean: obj-check 312.if !empty(_OUTFILES) 313 rm -f ${_OUTFILES} 314.endif 315 316html-out-clean: obj-check 317.if !empty(_HTMLOUTFILES) 318 rm -f ${_HTMLOUTFILES} 319.endif 320 321markdown-out-clean: obj-check 322.if !empty(_MARKDOWNOUTFILES) 323 rm -f ${_MARKDOWNOUTFILES} 324.endif 325 326lint-out-clean: obj-check 327.if !empty(_LINTOUTFILES) 328 rm -f ${_LINTOUTFILES} 329.endif 330 331obj-clean: 332 rm -rf ${.CURDIR}/obj/* 333 rm -f ${.CURDIR}/obj 334 cd ${.CURDIR} && ${MAKE} clean 335 336obj-check: 337 @test ! -e ${.CURDIR}/obj || \ 338 (echo '*** obj exists, run make obj-clean first'; false) 339