## HAT TRICK -*- tab-width: 8; -*- # (C) 2022 C. Duckworth UPLOAD_TARGET = hetzner:/var/www/acdw.casa/ SITE_TITLE = acdw.casa INPUT = src ASSET = asset BUILD = build HTAWK = ./ht.awk HTSH = ./ht.sh HTMK = ht.mk HT = ${HTAWK} ${HTSH} ${HTMK} INCLUDES = _head.htm _foot.htm T = .tmp TMK = $T/mk TPG = $T/ps PTMPL = tmpl.page.htm PTMPC = \ $$(title) \ $$(body) PTMPR = \ $$hb: $$ht ${INCLUDES} ; \ ${HTAWK} < '$$ht' | \ env HTTMP='$T' HTENV='$T/\$$<.env' HTOUT='\$$@' HTBOD='\$$<.bod.txt' \ ${HTSH} '${PTMPL}' > '\$$@' ITMPL = tmpl.index.htm ITMPC = \ ${SITE_TITLE} \ ITMPR = \ index.html: ${ITMPL} _index.htm ${INCLUDES} $$(cat ${TPG}); \ env HTTMP='$T' HTOUT='\$$@' \ ${HTSH} "${ITMPL}" < /dev/null > '\$$@' RTMPL = tmpl.feed.xml RTMPR = \ feed.xml: ${RTMPL} index.html $$(cat ${TPG}); \ env HTTMP='$T' HTOUT='\$$@' \ ${HTSH} "${RTMPL}" < /dev/null > '\$$@' TMPL = ${PTMPL} ${ITMPL} ${RTMPL} BUILD_INPUTS = ${INPUT}/* ${ASSET}/* ${TMPL} ${HT} RSYNCEXCLUDE = \ "*.ht" \ "*.sh" \ "*.htm" \ "*.mk" \ "*.awk" \ "*.bod.txt" \ "tmpl.*" \ "tmp/" \ "tw.txt" RSYNCEXCLUDEFILE = ${BUILD}/.rsync-exclude RSYNC = rsync -auvz --exclude-from="${RSYNCEXCLUDEFILE}" --delete #################### ${BUILD}: ${BUILD_INPUTS} @mkdir -p ${BUILD} cp -a ${BUILD_INPUTS} $@ ${MAKE} -C $@ -f ${HTMK} build ${HTMK}: Makefile ${INPUT}/*.ht $T @printf '%s' 'Generating "$@"...' @: > '$@' @: > '${TPG}' @for ht in $$(find ${INPUT} -type f -name '*.ht'); do \ ht="$$(echo "$$ht" | sed 's#${INPUT}/##')"; \ hb="$${ht}ml"; \ printf '%s ' "$$hb" >> "${TPG}"; \ printf '%s\n' "${PTMPR}"; \ done >> '$@' @printf '%s\n' "${ITMPR}" >> '$@' @printf '%s\n' "${RTMPR}" >> '$@' @printf "build: $$(cat ${TPG}) index.html feed.xml" >> '$@' @printf '%s\n' 'done' $T: ; mkdir -p "$@" ${PTMPL}: ; printf '${PTMPC}' > '$@' ${ITMPL}: ; printf '${ITMPC}' > '$@' .PHONY: clean clean-build nuke clean: ; -rm -rf ${BUILD} ${HTMK} $T nuke: clean ; -rm ${TMPL} ${RSYNCEXCLUDEFILE}: ${BUILD} printf '%s\n' ${RSYNCEXCLUDE} > '$@' .PHONY: publish publish: build ${RSYNCEXCLUDEFILE} ${RSYNC} ${BUILD}/* '${UPLOAD_TARGET}'