#!/usr/bin/env bash inc_makerules=true tree_maker() { # walk through file tree and issue Make rules according to file type input="$(realpath "$1")" output="$(realpath "$2")" cat <.xhtml ending) # Note: \$(sort ...) is used to remove duplicates HTML_SRC_BASES := \$(sort \$(basename \$(basename \$(HTML_SRC_FILES)))) # All directories containing .xhtml source files HTML_SRC_DIRS := \$(sort \$(dir \$(HTML_SRC_BASES))) # The same as above, but moved to the output directory HTML_DST_BASES := \$(patsubst \$(INPUTDIR)/%,\$(OUTPUTDIR)/%,\$(HTML_SRC_BASES)) # List of ..html files to build HTML_DST_FILES := \$(foreach base,\$(HTML_DST_BASES),\$(foreach lang,\$(LANGUAGES),\$(base).\$(lang).html)) # .xmllist file used to build a html file XMLLIST_DEP = \$(wildcard \$(INPUTDIR)/\$(dir \$*).\$(notdir \$*).xmllist) # .xsl file used to build a html file XSL_DEP = \$(firstword \$(wildcard \$(INPUTDIR)/\$*.xsl) \$(INPUTDIR)/\$(dir \$*).default.xsl) all: \$(HTML_DST_FILES) EOF for lang in ${languages}; do cat < "\$@" EOF done cat <.html symlinks to create INDEX_DST_LINKS := \$(foreach base,\$(INDEX_DST_DIRS),\$(foreach lang,\$(LANGUAGES),\$(base)index.\$(lang).html)) all: \$(INDEX_DST_LINKS) EOF for lang in ${languages}; do cat <.html to file.html. # ----------------------------------------------------------------------------- # List of .html. symlinks to create HTML_DST_LINKS := \$(foreach base,\$(HTML_DST_BASES) \$(addsuffix index,\$(INDEX_DST_DIRS)),\$(foreach lang,\$(LANGUAGES),\$(base).html.\$(lang))) all: \$(HTML_DST_LINKS) EOF for lang in ${languages}; do cat <.rss files to build RSS_DST_FILES := \$(foreach base,\$(RSS_DST_BASES),\$(foreach lang,\$(LANGUAGES),\$(base).\$(lang).rss)) all: \$(RSS_DST_FILES) EOF for lang in ${languages}; do cat < "\$@" EOF done cat <.ics files to build ICS_DST_FILES := \$(foreach base,\$(ICS_DST_BASES),\$(foreach lang,\$(LANGUAGES),\$(base).\$(lang).ics)) all: \$(ICS_DST_FILES) EOF for lang in ${languages}; do cat < "\$@" EOF done cat <\$(STATUSDIR)/manifest) \$(foreach filename,\$(ALL_DST),\$(file >>\$(STATUSDIR)/manifest,\$(filename))) sort "\$(STATUSDIR)/manifest" > "\$(STATUSDIR)/manifest.sorted" find -L "\$(OUTPUTDIR)" -type f -path "\$(STATUSDIR)" -prune \\ | sort \\ | diff - "\$(STATUSDIR)/manifest.sorted" \\ | sed -rn 's;^< ;;p' \\ | while read file; do echo "* Deleting \$\${file}"; rm "\$\${file}"; done # ----------------------------------------------------------------------------- EOF }