#
# Copyright (c) 2001-2015 Hypertriton, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistribution of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistribution in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Process a set of HTML source files (m4 + xsltproc). ${HTML} targets can be
# .css, .html (single page) and .html.var (multiple languages / charsets).
#
M4?= m4
M4FLAGS?=
XSLTPROC?= xsltproc
XSLTPROCFLAGS?= --nonet
PERL?= perl
ICONV?= iconv
BASEDIR?= ${TOP}/m4
XSLDIR?= ${TOP}/xsl
TEMPLATE?= simple
LANGUAGES?= en fr
CHARSETS?= utf8 iso8859-1
DEF_LANGUAGE?= en
XSL?= ${XSLDIR}/ml.xsl
MKDEPS= build.www.mk build.subdir.mk build.common.mk hstrip.pl
CLEANFILES?=
HTMLDIR?= none
HTML?=
HTML_EXTRA?=
CSS?=
CSS_TEMPLATE?=style
HTML_OVERWRITE?=No
HTML_INSTSOURCE?=Yes
MINIFIER?= cat
MINIFIERFLAGS?=
MINIFIERFLAGSCSS?=
DTD?=
#DTD?=
all: ${HTML} ${CSS} all-subdir
clean: clean-www clean-subdir
cleandir: clean-www cleandir-www clean-subdir cleandir-subdir
install: install-www install-subdir
deinstall: deinstall-subdir
regress: regress-subdir
depend: depend-www depend-subdir
.SUFFIXES: .html.var .html .htm .jpg .jpeg .png .gif .m4 .css .css-in
.css-in.css: ${BASEDIR}/${CSS_TEMPLATE}.m4
@cp -f $< ${BASEDIR}/base.css
@echo -n "$@:"
${M4} ${M4FLAGS} -D__BASE_DIR=${BASEDIR} -D__FILE=$@ \
-D__LANG=$$LANG ${BASEDIR}/${CSS_TEMPLATE}.m4 | \
${MINIFIER} ${MINIFIERFLAGSCSS} > $@
@rm -f ${BASEDIR}/base.css
.htm.html: ${BASEDIR}/${TEMPLATE}.m4
@cp -f $< ${BASEDIR}/base.htm
@echo "${M4} $< | ${XSLTPROC} > $@"
@export OUT=".$@.tmp"; \
${M4} ${M4FLAGS} -D__BASE_DIR=${BASEDIR} -D__FILE=$@ \
-D__TEMPLATE=${TEMPLATE} -D__LANG=${DEF_LANGUAGE} \
${BASEDIR}/${TEMPLATE}.m4 | \
${MINIFIER} ${MINIFIERFLAGS} > "$$OUT"; \
echo '${DTD}' > $@; \
${XSLTPROC} ${XSLTPROCFLAGS} --html --stringparam lang ${DEF_LANGUAGE} ${XSL} \
"$$OUT" 2>/dev/null | ${MINIFIER} ${MINIFIERFLAGS} >> $@ 2>/dev/null; \
rm -f "$$OUT" ${BASEDIR}/base.htm
.htm.html.var: ${BASEDIR}/${TEMPLATE}.m4
@for CHARSET in ${CHARSETS}; do \
if [ ! -e "$$CHARSET" ]; then mkdir $$CHARSET; fi; \
done
@cp -f $< ${BASEDIR}/base.htm
@export BASE="`echo $@ | sed s/\.var//`"; \
echo -n "$$BASE:"; \
echo > $@; \
for LANG in ${LANGUAGES}; do \
export OUT=".$BASE.$$LANG.tmp"; \
echo -n " $$LANG"; \
${M4} ${M4FLAGS} -D__BASE_DIR=${BASEDIR} -D__FILE=$$BASE \
-D__TEMPLATE=${TEMPLATE} -D__LANG=$$LANG \
${BASEDIR}/${TEMPLATE}.m4 | ${MINIFIER} ${MINIFIERFLAGS} > $$OUT; \
echo '${DTD}' > utf8/$$BASE.$$LANG; \
${XSLTPROC} --html ${XSLTPROCFLAGS} --stringparam lang $$LANG ${XSL} \
$$OUT 2>/dev/null | ${MINIFIER} ${MINIFIERFLAGS} >> utf8/$$BASE.$$LANG; \
cp -f utf8/$$BASE.$$LANG $$BASE.$$LANG; \
rm -f $$OUT; \
cat utf8/$$BASE.$$LANG | \
sed s/charset=UTF-8/charset=ISO-8859-1/ | \
${ICONV} -f UTF-8 -t ISO-8859-1 > iso8859-1/$$BASE.$$LANG; \
echo "Content-Type: text/html; charset=UTF-8" >> $@; \
echo "Content-Language: $$LANG" >> $@; \
echo "URI: utf8/$$BASE.$$LANG" >> $@; \
echo "" >> $@; \
echo "Content-Type: text/html; charset=ISO-8859-1" >> $@; \
echo "Content-Language: $$LANG" >> $@; \
echo "URI: iso8859-1/$$BASE.$$LANG" >> $@; \
echo "" >> $@; \
done; \
rm -f ${BASEDIR}/base.htm; \
echo "."
clean-www:
@echo -n "Clean:"
@for F in ${HTML}; do \
if [ "`echo $$F | sed s/\.var//`" != "$$F" ]; then \
export BASE="`echo $$F | sed s/\.var//`"; \
echo -n " $$BASE"; \
for LANG in ${LANGUAGES}; do \
for CHARSET in ${CHARSETS}; do \
rm -f $$CHARSET/$$BASE.$$LANG; \
done; \
rm -f $$BASE.$$LANG; \
done; \
rm -f $$F; \
else \
echo -n " $$F"; \
fi; \
done
@if [ "${CLEANFILES}" != "" ]; then \
echo " ${CLEANFILES}"; \
rm -f ${CLEANFILES}; \
fi
@echo "."
cleandir-www:
echo -n >.depend
install-www-makefile:
@export OUT=.Makefile.out; \
echo "# Generated by install on `date`" > $$OUT; \
echo "TOP=." >> $$OUT; \
echo "HTMLDIR=none" >> $$OUT; \
echo "BASEDIR=m4" >> $$OUT; \
echo "XSLDIR=xsl" >> $$OUT; \
echo "HTML=${HTML}" >> $$OUT; \
echo "CSS=${CSS}" >> $$OUT; \
echo "XSL=${XSL}" >> $$OUT; \
echo "XSLTPROC=${XSLTPROC}" >> $$OUT; \
echo "XSLTPROCFLAGS=${XSLTPROCFLAGS}" >> $$OUT; \
echo "M4=${M4}" >> $$OUT; \
echo "PERL=${PERL}" >> $$OUT; \
echo "ICONV=${ICONV}" >> $$OUT; \
echo "MINIFIER=${MINIFIER}" >> $$OUT; \
echo "MINIFIERFLAGS=${MINIFIERFLAGS}" >> $$OUT; \
echo "MINIFIERFLAGSCSS=${MINIFIERFLAGSCSS}" >> $$OUT; \
echo "TEMPLATE=${TEMPLATE}" >> $$OUT; \
echo "CSS_TEMPLATE=${CSS_TEMPLATE}" >> $$OUT; \
echo "LANGUAGES=${LANGUAGES}" >> $$OUT; \
echo "CHARSETS=${CHARSETS}" >> $$OUT; \
echo "DEF_LANGUAGE=${DEF_LANGUAGE}" >> $$OUT; \
echo "include mk/build.www.mk" >> $$OUT; \
echo "${INSTALL_DATA} $$OUT ${HTMLDIR}/Makefile"; \
${SUDO} ${INSTALL_DATA} $$OUT ${DESTDIR}${HTMLDIR}/Makefile; \
rm -f $$OUT
install-www-source:
@if [ -e "${DESTDIR}${HTMLDIR}/$$SRCFILE" \
-a "${HTML_OVERWRITE}" = "" ]; then \
echo "${HTMLDIR}/$$SRCFILE exists; preserving"; \
else \
echo "${INSTALL_DATA} $$SRCFILE ${HTMLDIR}"; \
${SUDO} ${INSTALL_DATA} $$SRCFILE ${DESTDIR}${HTMLDIR}; \
fi
@if [ -e "${DESTDIR}${HTMLDIR}/Makefile" \
-a "${HTML_OVERWRITE}" = "" ]; then \
echo "${HTMLDIR}/Makefile exists; preserving"; \
else
${MAKE} install-www-makefile; \
fi
install-www-base:
@if [ ! -d "${DESTDIR}${HTMLDIR}/mk" ]; then \
echo "${INSTALL_DATA_DIR} ${HTMLDIR}/mk"; \
${SUDO} ${INSTALL_DATA_DIR} ${DESTDIR}${HTMLDIR}/mk; \
fi
@for MK in ${MKDEPS}; do \
echo "${INSTALL_DATA} ${TOP}/mk/$$MK ${HTMLDIR}/mk"; \
${SUDO} ${INSTALL_DATA} ${TOP}/mk/$$MK ${DESTDIR}${HTMLDIR}/mk; \
done
@if [ ! -d "${DESTDIR}${HTMLDIR}/xsl" ]; then \
echo "${INSTALL_DATA_DIR} ${HTMLDIR}/xsl"; \
${SUDO} ${INSTALL_DATA_DIR} ${DESTDIR}${HTMLDIR}/xsl; \
fi
@for XSL in ${XSL}; do \
if [ -e "${DESTDIR}${HTMLDIR}/xsl/$$XSL" \
-a "${HTML_OVERWRITE}" = "" ]; then \
echo "xsl/$$XSL: exists; preserving"; \
else \
echo "${INSTALL_DATA} $$XSL ${HTMLDIR}/xsl"; \
${SUDO} ${INSTALL_DATA} $$XSL ${DESTDIR}${HTMLDIR}/xsl; \
fi; \
done
@if [ ! -d "${DESTDIR}${HTMLDIR}/m4" ]; then \
echo "${INSTALL_DATA_DIR} ${HTMLDIR}/m4"; \
${SUDO} ${INSTALL_DATA_DIR} ${DESTDIR}${HTMLDIR}/m4; \
fi
@(cd ${BASEDIR}; for M4IN in `ls -1 *.m4`; do \
if [ -e "${DESTDIR}${HTMLDIR}/m4/$$M4IN" \
-a "${HTML_OVERWRITE}" = "" ]; then \
echo "m4/$$M4IN: exists; preserving"; \
else \
echo "${INSTALL_DATA} $$M4IN ${HTMLDIR}/m4"; \
${SUDO} ${INSTALL_DATA} $$M4IN ${DESTDIR}${HTMLDIR}/m4; \
fi; \
done)
install-www:
@if [ "${HTMLDIR}" = "none" ]; then \
exit 0; \
fi
@for CHARSET in ${CHARSETS}; do \
echo "${INSTALL_DATA_DIR} ${HTMLDIR}/$$CHARSET"; \
${SUDO} ${INSTALL_DATA_DIR} ${DESTDIR}${HTMLDIR}/$$CHARSET; \
done
@if [ ! -d "${DESTDIR}${HTMLDIR}" ]; then \
echo "${INSTALL_DATA_DIR} ${HTMLDIR}"; \
${SUDO} ${INSTALL_DATA_DIR} ${DESTDIR}${HTMLDIR}; \
fi
@if [ "${HTML_INSTSOURCE}" = "Yes" ]; then \
${MAKE} install-www-base; \
fi
@for F in ${HTML_EXTRA}; do \
echo "${INSTALL_DATA} $$F ${HTMLDIR}"; \
${SUDO} ${INSTALL_DATA} $$F ${DESTDIR}${HTMLDIR}; \
done
@for F in ${HTML}; do \
export BASE="`echo $$F | sed s/\.var//`"; \
if [ "${HTML_INSTSOURCE}" = "Yes" ]; then \
${MAKE} install-www-source \
SRCFILE="`echo $$BASE |sed s,.html$$,.htm,`"; \
fi; \
if [ -e "${DESTDIR}${HTMLDIR}/$$F" \
-a "${HTML_OVERWRITE}" = "" ]; then \
echo "$$F exists; preserving"; \
else \
echo "${INSTALL_DATA} $$F ${HTMLDIR}"; \
${SUDO} ${INSTALL_DATA} $$F ${DESTDIR}${HTMLDIR}; \
fi; \
for LANG in ${LANGUAGES}; do \
if [ -e "${DESTDIR}${HTMLDIR}/$$BASE.$$LANG" \
-a "${HTML_OVERWRITE}" = "" ]; then \
echo "$$BASE.$$LANG exists; preserving"; \
else \
echo "${INSTALL_DATA} $$BASE.$$LANG ${HTMLDIR}"; \
${SUDO} ${INSTALL_DATA} $$BASE.$$LANG ${DESTDIR}${HTMLDIR}; \
fi; \
for CHARSET in ${CHARSETS}; do \
if [ -e "$$CHARSET/$$BASE.$$LANG" ]; then \
if [ -e "${DESTDIR}${HTMLDIR}/$$CHARSET/$$BASE.$$LANG" \
-a "${HTML_OVERWRITE}" = "" ]; then \
echo "$$CHARSET/$$BASE.$$LANG exists; preserving"; \
else \
echo "${INSTALL_DATA} $$CHARSET/$$BASE.$$LANG ${HTMLDIR}/$$CHARSET"; \
${SUDO} ${INSTALL_DATA} $$CHARSET/$$BASE.$$LANG ${DESTDIR}${HTMLDIR}/$$CHARSET; \
fi; \
fi; \
done; \
done; \
done
depend-www:
@files="${HTML}"; \
if [ "$$files" != "" -a "$$files" != "none" ]; then \
echo "${PERL} ${TOP}/mk/gen-wwwdepend.pl $$files"; \
env M4=${M4} BASEDIR=${BASEDIR} TEMPLATE=${TEMPLATE} \
CSS_TEMPLATE=${CSS_TEMPLATE} \
${PERL} ${TOP}/mk/gen-wwwdepend.pl $$files > .depend; \
fi
.PHONY: install deinstall clean cleandir regress depend depend-www clean-www
.PHONY: install-www install-www-makefile install-www-source install-www-base
.PHONY: cleandir-www
include ${TOP}/mk/build.common.mk
include ${TOP}/mk/build.subdir.mk
include .depend