XML build infrastructure in www and doc tree

Hiroki Sato hrs at FreeBSD.org
Sat Jul 16 16:06:29 UTC 2005


Hi all,

 I would like to commit the attached patch to simplify XML build
 infrastructure in the www and doc tree.  Currently we do not have
 a consistent way to use xsltproc for rendering HTML from XML and
 XSLT document, so Makefile becomes complex and the localized
 directories have to contain duplicate copy of the Makefile which
 includes the build rules themselves unnecessarily.

 Note that I do not intend to switch from using SGML to
 using XML for our documents.  We already use XML as
 databases and so on, so I think some consistency is needed.

 This patch allow to use the following make variables:

---
 XMLDOCS= index

 XSLT.index= index.xsl
 XML.index= index.xml
 TARGET.index= index.html
 PARAMS.index= --params "title" "'Title of the document'"
 SRCS.index= includes.xsl
----

 this example is interpreted as:

 |${TARGET.index}: ${XSLT.index} ${XML.index} ${SRCS.index}
 |    xsltproc -o ${TARGET.index} ${PARAMS.index} ${XSLT.index} ${XML.index}

 The result document (${TARGET.index}) will be added to ${DATA} and
 ${CLEANFILES}.  XMLDOCS can have multiple values and each value is
 used as an ID for the result file.

 Also, XMLDOCS can be specified in the following short form:

---
 XMLDOCS= <id>:<xsl>:<xml>:<target>
---

 for example:

---
 XMLDOCS= index:index.xsl:index.xml:index.html
 PARAMS.index= --params "title" "'Title of the document'"
 SRCS.index= includes.xsl 
---

 is an equivalent of the previous example.  When a parameter
 not specified, the default value is used:

---
 XMLDOCS= index:::index.html
---

 is also equivalent because <id>.xsl and <id>.xml are used
 by default.

 For details, see comments in doc/share/mk/doc.xml.mk.
 www/share/mk/doc.xml.mk is the same file because it is needed
 in ${WEB_ONLY} case.

 Comments?  If you notice a problem with the attached patch,
 please let me know.  Thanks.

-- 
| Hiroki SATO

-------------- next part --------------
Index: www/share/mk/doc.xml.mk
===================================================================
RCS file: www/share/mk/doc.xml.mk
diff -N www/share/mk/doc.xml.mk
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ www/share/mk/doc.xml.mk	16 Jul 2005 15:18:40 -0000
@@ -0,0 +1,274 @@
+# doc.xml.mk
+# $FreeBSD$
+
+XML_CATALOG_FILES=	file://${DOC_PREFIX}/${LANGCODE}/share/sgml/catalog.xml \
+			file://${DOC_PREFIX}/share/sgml/catalog.xml \
+			file://${DOC_PREFIX}/share/sgml/catalog-common.xml \
+			file://${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/catalog.xml \
+			file://${WEB_PREFIX}/share/sgml/catalog-common.xml \
+			file://${LOCALBASE}/share/xml/catalog
+
+XML_INCLUDES=	${WEB_PREFIX}/${WWW_LANGCODE}/includes.xsl \
+		${WEB_PREFIX}/share/sgml/includes.header.xsl \
+		${WEB_PREFIX}/share/sgml/includes.misc.xsl \
+		${WEB_PREFIX}/share/sgml/includes.release.xsl \
+		${WEB_PREFIX}/share/sgml/includes.xsl
+
+# Variables used in DEPENDSET
+
+_DEPENDSET.all=	transtable mirrors usergroups \
+		news press navigation advisories notices
+
+# DEPENDSET: transtable  ......................................................
+_DEPENDSET.transtable=	${XML_TRANSTABLE} ${XSL_TRANSTABLE} \
+			${XSL_TRANSTABLE_MASTER} ${XSL_TRANSTABLE_COMMON}
+_PARAMS.transtable=	--param transtable.xml "'${XML_TRANSTABLE}'"
+XSL_TRANSTABLE_MASTER=	${DOC_PREFIX}/share/sgml/transtable-master.xsl
+XSL_TRANSTABLE_COMMON=	${DOC_PREFIX}/share/sgml/transtable-common.xsl
+
+.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable-local.xsl)
+XSL_TRANSTABLE=		${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable-local.xsl
+.else
+XSL_TRANSTABLE=		${DOC_PREFIX}/share/sgml/transtable-local.xsl
+.endif
+
+.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable.xml)
+XML_TRANSTABLE=		${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable.xml
+.else
+XML_TRANSTABLE=		${DOC_PREFIX}/share/sgml/transtable.xml
+.endif
+
+# DEPENDSET: mirrors .....................................................
+_DEPENDSET.mirrors=	${XSL_MIRRORS} ${XML_MIRRORS}
+_PARAMS.mirrors=	--param mirrors.xml "'${XML_MIRRORS}'"
+XML_MIRRORS_MASTER=	${DOC_PREFIX}/share/sgml/mirrors.xml
+XML_MIRRORS=		${.OBJDIR}/${DOC_PREFIX:S,^${.CURDIR}/,,}/${LANGCODE}/share/sgml/mirrors.xml
+XSL_MIRRORS_MASTER=	${DOC_PREFIX}/share/sgml/mirrors-master.xsl
+.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/mirrors-local.xsl)
+XSL_MIRRORS=		${DOC_PREFIX}/${LANGCODE}/share/sgml/mirrors-local.xsl
+.else
+XSL_MIRRORS=		${DOC_PREFIX}/share/sgml/mirrors-local.xsl
+.endif
+${XSL_MIRRORS}: ${XSL_MIRRORS_MASTER} \
+		${XSL_TRANSTABLE_COMMON}
+
+${XML_MIRRORS}: ${XML_MIRRORS_MASTER} \
+		${XSL_TRANSTABLE} ${XSL_TRANSTABLE_MASTER} ${XSL_TRANSTABLE_COMMON}
+	${MKDIR} -p ${@:H}
+	${XSLTPROC} ${XSLTPROCOPTS} \
+		--param 'transtable.xml' "'${XML_TRANSTABLE}'" \
+		--param 'transtable-target-element' "'country'" \
+		--param 'transtable-word-group' "'country'" \
+		--param 'transtable-mode' "'sortkey'" \
+		${XSL_TRANSTABLE} ${XML_MIRRORS_MASTER} \
+		| env -i LANG="${LANGCODE}" ${SORT} -f > $@.sort.tmp
+	env -i ${GREP} "^<?xml" < $@.sort.tmp > $@.sort
+	${ECHO} "<sortkeys>" >> $@.sort
+	env -i ${AWK} '/@sortkey@/ {sub(/@sortkey@/, ++line); print;}' < $@.sort.tmp >> $@.sort
+	${ECHO} '</sortkeys>' >> $@.sort
+	${XSLTPROC} ${XSLTPROCOPTS} -o $@ \
+		--param 'transtable.xml' "'${XML_TRANSTABLE}'" \
+		--param 'transtable-target-element' "'country'" \
+		--param 'transtable-word-group' "'country'" \
+		--param 'transtable-sortkey.xml' "'$@.sort'" \
+		${XSL_TRANSTABLE} ${XML_MIRRORS_MASTER}
+	${RM} -f $@.sort $@.sort.tmp
+CLEANFILES+=	${XML_MIRRORS}
+CLEANFILES+=	${XML_MIRRORS}.sort
+CLEANFILES+=	${XML_MIRRORS}.sort.tmp
+
+# DEPENDSET: usergroups ......................................................
+_DEPENDSET.usergroups=	${XML_USERGROUPS} ${XSL_USERGROUPS}
+XML_USERGROUPS=	${WEB_PREFIX}/share/sgml/usergroups.xml
+XSL_USERGROUPS=	${WEB_PREFIX}/share/sgml/templates.usergroups.xsl
+
+# DEPENDSET: news ............................................................
+_DEPENDSET.news=	${XML_NEWS_NEWS_MASTER} ${XML_NEWS_NEWS} \
+			${XML_NEWS_INCLUDES_MASTER} ${XML_NEWS_INCLUDES}
+_PARAMS.news=		--param news.project.xml-master "'${XML_NEWS_NEWS_MASTER}'" \
+			--param news.project.xml "'${XML_NEWS_NEWS}'"
+XML_NEWS_INCLUDES_MASTER=${WEB_PREFIX}/en/news/includes.xsl
+XML_NEWS_INCLUDES=	${WEB_PREFIX}/${WWW_LANGCODE}/news/includes.xsl
+XML_NEWS_NEWS_MASTER=	${WEB_PREFIX}/en/news/news.xml
+XML_NEWS_NEWS=		${WEB_PREFIX}/${WWW_LANGCODE}/news/news.xml
+
+# DEPENDSET: press  ..........................................................
+_DEPENDSET.press=	${XML_NEWS_PRESS_MASTER} ${XML_NEWS_PRESS} \
+			${XML_NEWS_INCLUDES_MASTER} ${XML_NEWS_INCLUDES}
+_PARAMS.press=		--param news.press.xml-master "'${XML_NEWS_PRESS_MASTER}'" \
+			--param news.press.xml "'${XML_NEWS_PRESS}'"
+XML_NEWS_INCLUDES_MASTER=${WEB_PREFIX}/en/news/includes.xsl
+XML_NEWS_INCLUDES=	${WEB_PREFIX}/${WWW_LANGCODE}/news/includes.xsl
+XML_NEWS_PRESS_MASTER=	${WEB_PREFIX}/en/news/press.xml
+XML_NEWS_PRESS=		${WEB_PREFIX}/${WWW_LANGCODE}/news/press.xml
+
+# DEPENDSET: navigation  .....................................................
+_DEPENDSET.navigation=	${XML_NAVIGATION}
+_PARAMS.navigation=	--param navigation.xml "'${XML_NAVIGATION}'"
+XML_NAVIGATION=		${WEB_PREFIX}/${WWW_LANGCODE}/navigation.xml
+
+# DEPENDSET: advisories  .....................................................
+_DEPENDSET.advisories=	${XML_ADVISORIES}
+_PARAMS.advisories=	--param advisories.xml "'${XML_ADVISORIES}'"
+XML_ADVISORIES=		${WEB_PREFIX}/share/sgml/advisories.xml
+
+# DEPENDSET: notices  ........................................................
+_DEPENDSET.notices=	${XML_NOTICES}
+_PARAMS.notices=	--param notices.xml "'${XML_NOTICES}'"
+XML_NOTICES=		${WEB_PREFIX}/share/sgml/notices.xml
+
+# ---
+# .xml -> .html rendering rule
+#
+# The following variables are available:
+#
+# XMLDOCS: (ex. XMLDOCS= doc1 doc2 doc3)
+#   Target document identifier, which is usually the same as the
+#   base part of the filenames.  {XSLT,XML,TARGET}.<id> described below
+#   can be specified in a short form like the following:
+#   "docid:stylesheet:xml:target".
+#
+# TARGET.<id>: (ex. TARGET.doc1= doc1.html)
+#   The target filename.  This is optional and <id>.html is defined
+#   by default.
+#
+# XSLT.<id>: (ex. XSLT.doc1= doc1.xsl)
+#   Filename of the XSLT stylesheet.  This is optional and <id>.xsl is
+#   defined by default.  The following keywords are interpreted specially:
+#
+#    `xsl'             - <id>.xsl
+#
+# XSLT.DEFAULT:
+#   The default filename or keyword of XSLT stylesheet.
+#   When XSLT.<id> and one in the quadruplet are not specified,
+#   this value is used.
+#
+# XML.<id>: (ex. XML.doc1= doc1.xml data.xml)
+#   Filename of the XML document.  This is optional and /dev/null is
+#   defined by default.  XML.DEFAULT is XML document for all <id>s.
+#
+# SRCS.<id>: (ex. SRCS.doc1= includes.xsl)
+#   Dependencies.  SRCS.DEFAULT is dependencies for all <id>s.
+#
+# DEPENDSET.<id>: (ex. DEPENDSET.doc1= mirror)
+#   Depencencies predefined as keywords listed in ${_DEPENDSET.all}.
+#   DEPENDSET.DEFAULT is DEPENDSET for all <id>s.
+#
+# PARAMS.<id>: (ex. PARAMS.doc1= --params "foo" "'textproc/foo'")
+#   Parameters passed to xsltproc(1).
+#
+# XSLTPROCOPTS.<id>: (ex. XSLTPROCOPTS.doc1= --nonet)
+#   Parameters passed to xsltproc(1).
+#
+# NO_DATA.<id>
+#   The ${TARGET.<id>} file will not be listed in $DATA if defined.
+#   NO_DATA.DEFAULT is the setting for all <id>s.
+#
+# NO_TIDY.<id>
+#   The ${TARGET.<id>} file will not be processed by tidy if defined.
+#   NO_TIDY.DEFAULT is the setting for all <id>s.
+#
+XSLTPROC_ENV+=	SGML_CATALOG_FILES=
+XSLTPROC_ENV+=	XML_CATALOG_FILES="${XML_CATALOG_FILES}"
+
+XSLTPROCOPTS=	${XSLTPROC_ARGS}
+XSLTPROCOPTS+=	--xinclude
+XSLTPROCOPTS+=	--stringparam LOCALBASE ${LOCALBASE}
+XSLTPROCOPTS+=	--stringparam WEB_PREFIX ${WEB_PREFIX}
+.if defined(XML_CATALOG_FILES) && !empty(XML_CATALOG_FILES)
+XSLTPROCOPTS+=	--nonet --catalogs
+.endif
+XSLTPROC=	env ${XSLTPROC_ENV} ${LOCALBASE}/bin/xsltproc
+
+.for D in ${XMLDOCS}
+# parse "docid:xslt:xml:target".
+# XXX: ${__ID} is used because ${A}=B does not work except
+#      for the iterate variable in the .for statement.
+__ID=${D:C,:.*$,,}
+
+.for _ID in ${__ID}
+_tmpD=	${D:M*\:*}
+.if !empty(_tmpD)
+XSLT.${_ID}=	${D:C,^[^:]*,,:M*\:*:C,^:,,:C,:.*$,,}
+XML.${_ID}=	${D:C,^[^:]*,,:M*\:*:C,^:,,:C,^[^:]*,,:M*\:*:C,^:,,:C,:.*$,,}
+TARGET.${_ID}=	${D:C,^[^:]*,,:M*\:*:C,^:,,:C,^[^:]*,,:M*\:*:C,^:,,:C,^[^:]*,,:M*\:*:C,^:,,:C,:.*$,,}
+.endif
+
+# Use default value if parameter not specified.
+.if !defined(XSLT.${_ID}) || empty(XSLT.${_ID})
+.if defined(XSLT.DEFAULT)
+XSLT.${_ID}=	${XSLT.DEFAULT}
+.else
+XSLT.${_ID}=	${_ID}.xsl
+.endif
+.endif
+.if !defined(XML.${_ID}) || empty(XML.${_ID})
+.if defined(XML.DEFAULT)
+XML.${_ID}=	${XML.DEFAULT}
+.else
+XML.${_ID}=	${_ID}.xml
+.endif
+.endif
+.if !defined(TARGET.${_ID}) || empty(TARGET.${_ID})
+TARGET.${_ID}=	${_ID}.html
+.endif
+.if !defined(DEPENDSET.${_ID}) || empty(DEPENDSET.${_ID})
+.if defined(DEPENDSET.DEFAULT)
+DEPENDSET.${_ID}=	${DEPENDSET.DEFAULT}
+.else
+DEPENDSET.${_ID}=
+.endif
+.endif
+.if !defined(NO_TIDY.${_ID}) || empty(NO_TIDY.${_ID})
+.if defined(NO_TIDY.DEFAULT)
+NO_TIDY.${_ID}=	${NO_TIDY.DEFAULT}
+.else
+NO_TIDY.${_ID}=
+.endif
+.endif
+.if !defined(NO_DATA.${_ID}) || empty(NO_DATA.${_ID})
+.if defined(NO_DATA.DEFAULT)
+NO_DATA.${_ID}=	${NO_DATA.DEFAULT}
+.else
+NO_DATA.${_ID}=
+.endif
+.endif
+
+XSLTPROCOPTS.${_ID}?=	${XSLTPROCOPTS}
+GENDOCS+=	${TARGET.${_ID}}
+SRCS+=		${TARGET.${_ID}}
+.if !defined(NO_DATA.${_ID}) || empty(NO_DATA.${_ID})
+DATA+=		${TARGET.${_ID}}
+.endif
+CLEANFILES+=	${TARGET.${_ID}}
+
+.if ${XSLT.${_ID}} == xsl
+XSLT.${_ID}=	${_ID}.xsl
+DEPENDS.${_ID}+=	${XSLT.${_ID}}
+.elif ${XSLT.${_ID}:Mhttp\://*} != ""
+DEPENDS.${_ID}+=	${XSLT.${_ID}}
+.else
+DEPENDS.${_ID}+=	${XSLT.${_ID}}
+.endif
+
+.for S in ${_DEPENDSET.all}
+. if ${DEPENDSET.${_ID}:M${S}} != ""
+DEPENDS.${_ID}+=${_DEPENDSET.${S}}
+PARAMS.${_ID}+=	${_PARAMS.${S}}
+. endif
+.endfor
+
+.for S in ${SRCS.DEFAULT} ${SRCS.${_ID}}
+DEPENDS.${_ID}+=	${S}
+.endfor
+${TARGET.${_ID}}: ${XML_INCLUDES} ${XML.${_ID}} ${DEPENDS.${_ID}}
+	${XSLTPROC} ${XSLTPROCOPTS.${_ID}} \
+		-o ${.TARGET} ${PARAMS.${_ID}} \
+		${XSLT.${_ID}} ${XML.${_ID}}
+. if !defined(NO_TIDY) || empty(NO_TIDY)
+.  if !defined(NO_TIDY.${_ID}) || empty(NO_TIDY.${_ID})
+	-${TIDY} ${TIDYOPTS} ${.TARGET}
+.  endif
+. endif
+.endfor
+.endfor
Index: www/share/mk/web.site.mk
===================================================================
RCS file: /home/ncvs/www/share/mk/web.site.mk,v
retrieving revision 1.65
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.65 web.site.mk
--- www/share/mk/web.site.mk	1 Mar 2005 23:04:59 -0000	1.65
+++ www/share/mk/web.site.mk	16 Jul 2005 14:24:58 -0000
@@ -61,6 +61,9 @@
 XSLTPROC?=	${PREFIX}/bin/xsltproc
 XSLTPROCOPTS?=	${XSLTPROCFLAGS}
 
+XMLLINT?=	${PREFIX}/bin/xmllint
+XMLLINTOPTS?=	${XMLLINTFLAGS}
+
 TIDY?=		${PREFIX}/bin/tidy
 .if defined(TIDY_VERBOSE)
 _TIDYLOGFILE=	tidyerr.${.TARGET}
@@ -129,6 +132,7 @@
 DOC_PREFIX?=	${WEB_PREFIX}/../doc
 .if exists(${DOC_PREFIX}/share/mk/doc.common.mk)
 .include "${DOC_PREFIX}/share/mk/doc.common.mk"
+.include "${DOC_PREFIX}/share/mk/doc.xml.mk"
 .else
 .error	${DOC_PREFIX}/share/mk/doc.common.mk not found.\
 	Define $$WITHOUT_DOC and $$WEB_ONLY for performing a partial\
@@ -142,28 +146,10 @@
 _WEB_PREFIX!=			realpath ${WEB_PREFIX}
 WWW_LANGCODE:=			${.CURDIR:S,^${_WEB_PREFIX}/,,:C,^([^/]+)/.*,\1,}
 .undef _WEB_PREFIX
+.include "${WEB_PREFIX}/share/mk/doc.xml.mk"
 .endif
 .endif # !defined(WITHOUT_DOC)
 
-XML_ADVISORIES?=		${WEB_PREFIX}/share/sgml/advisories.xml
-XML_NOTICES?=			${WEB_PREFIX}/share/sgml/notices.xml
-
-XML_NEWS_NEWS_MASTER=		${WEB_PREFIX}/en/news/news.xml
-XML_NEWS_NEWS=			${WEB_PREFIX}/${WWW_LANGCODE}/news/news.xml
-XML_NEWS_PRESS_MASTER=		${WEB_PREFIX}/en/news/press.xml
-XML_NEWS_PRESS=			${WEB_PREFIX}/${WWW_LANGCODE}/news/press.xml
-XML_NEWS_INCLUDES_MASTER=	${WEB_PREFIX}/en/news/includes.xsl
-XML_NEWS_INCLUDES=		${WEB_PREFIX}/${WWW_LANGCODE}/news/includes.xsl
-
-XML_NAVIGATION=			${WEB_PREFIX}/${WWW_LANGCODE}/navigation.xml
-
-XML_INCLUDES=	${WEB_PREFIX}/${WWW_LANGCODE}/includes.xsl
-XML_INCLUDES+=	${WEB_PREFIX}/share/sgml/includes.header.xsl
-XML_INCLUDES+=	${WEB_PREFIX}/share/sgml/includes.misc.xsl
-XML_INCLUDES+=	${WEB_PREFIX}/share/sgml/includes.release.xsl
-XML_INCLUDES+=	${WEB_PREFIX}/share/sgml/transtable-common.xsl
-XML_INCLUDES+=	${WEB_PREFIX}/share/sgml/includes.xsl
-
 SGML_INCLUDES=	${WEB_PREFIX}/${WWW_LANGCODE}/includes.sgml
 SGML_INCLUDES+=	${WEB_PREFIX}/share/sgml/includes.header.sgml
 SGML_INCLUDES+=	${WEB_PREFIX}/share/sgml/includes.misc.sgml
Index: www/en/Makefile
===================================================================
RCS file: /home/ncvs/www/en/Makefile,v
retrieving revision 1.123
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.123 Makefile
--- www/en/Makefile	16 Jul 2005 09:58:16 -0000	1.123
+++ www/en/Makefile	16 Jul 2005 14:12:37 -0000
@@ -23,6 +23,14 @@
 DOCS+= where.sgml 
 DOCS+= y2kbug.sgml 
 
+XMLDOCS=	index:xsl:${XML_NEWS_NEWS}:
+DEPENDSET.index=transtable mirrors news press \
+		navigation advisories notices
+
+XMLDOCS+=	usergroups:${XSL_USERGROUPS}:${XML_USERGROUPS}:
+DEPENDSET.usergroups=transtable usergroups
+PARAMS.usergroups=	--param pagename "'FreeBSD User Groups'"
+
 # These will be directly installed.
 
 DATA=	favicon.ico
@@ -82,42 +90,4 @@
 
 WEBDIR?=	data
 
-# these files are generated by using separate rules.
-DATA+=		index.html usergroups.html
-CLEANFILES+=	index.html usergroups.html
-
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
-
-index.html: index.xsl ${XML_INCLUDES}\
-		${XML_NEWS_INCLUDES} \
-		${XML_NEWS_NEWS} ${XML_NEWS_NEWS_MASTER} \
-		${XML_NEWS_PRESS} ${XML_NEWS_PRESS_MASTER} \
-		${XML_MIRRORS} ${XML_TRANSTABLE} \
-		${XML_ADVISORIES} ${XML_NOTICES} \
-		${XML_NAVIGATION}
-	${XSLTPROC} ${XSLTPROCOPTS} \
-		-o $@ \
-		--param advisories.xml "'${XML_ADVISORIES}'" \
-		--param mirrors.xml "'${XML_MIRRORS}'" \
-		--param navigation.xml "'${XML_NAVIGATION}'" \
-		--param news.press.xml-master "'${XML_NEWS_PRESS_MASTER}'" \
-		--param news.press.xml "'${XML_NEWS_PRESS}'" \
-		--param news.project.xml-master "'${XML_NEWS_NEWS_MASTER}'" \
-		--param news.project.xml "'${XML_NEWS_NEWS}'" \
-		--param notices.xml "'${XML_NOTICES}'" \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/index.xsl ${XML_NEWS_NEWS}
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
-
-usergroups.html: ${XML_INCLUDES} ${XML_TRANSTABLE} \
-		${XSL_USERGROUPS} ${XML_USERGROUPS}
-	${XSLTPROC} ${XSLTPROCOPTS} \
-		-o $@ \
-		--param pagename "'FreeBSD User Groups'" \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${XSL_USERGROUPS} ${XML_USERGROUPS}
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
Index: www/en/commercial/Makefile
===================================================================
RCS file: /home/ncvs/www/en/commercial/Makefile,v
retrieving revision 1.16
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.16 Makefile
--- www/en/commercial/Makefile	5 May 2004 07:56:31 -0000	1.16
+++ www/en/commercial/Makefile	16 Jul 2005 15:12:01 -0000
@@ -7,88 +7,37 @@
 .include "../Makefile.inc"
 .endif
 
-DOCS=   commercial.sgml
-
-DATA=	consult.html
-DATA+=	consult_bycat.html
-DATA+=  hardware.html
-DATA+=  isp.html
-DATA+=  misc.html
-DATA+=  software.html
-DATA+=  software_bycat.html
-
-CLEANFILES=  commercial.html
-CLEANFILES+= consult.html
-CLEANFILES+= consult_bycat.html
-CLEANFILES+= hardware.html
-CLEANFILES+= isp.html
-CLEANFILES+= misc.html
-CLEANFILES+= software.html
-CLEANFILES+= software_bycat.html
+DOCS=	commercial.sgml
 
-INDEXLINK= commercial.html
+INDEXLINK=	commercial.html
 
-XMLLINT?= /usr/local/bin/xmllint # Part of textproc/libxml2.
+SRCS.DEFAULT=	../includes.xsl
+XSLT.DEFAULT=	entries.xsl
 
-consult.html: entries.xsl consult.xml ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param pagename "'Consulting Services'" \
-		${.CURDIR}/entries.xsl ${.CURDIR}/consult.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS=	consult
+PARAMS.consult=	--param pagename "'Consulting Services'"
 
-consult_bycat.html: consult_bycat.xsl consult.xml ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		${.CURDIR}/consult_bycat.xsl ${.CURDIR}/consult.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	consult_bycat::consult.xml:
 
-hardware.html: entries.xsl hardware.xml ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param pagename "'Hardware Vendors'" \
-		${.CURDIR}/entries.xsl ${.CURDIR}/hardware.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	hardware
+PARAMS.hardware= --param pagename "'Hardware Vendors'"
 
-isp.html: entries.xsl isp.xml ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param pagename "'Internet Service Providers'" \
-		${.CURDIR}/entries.xsl ${.CURDIR}/isp.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	isp
+PARAMS.isp=	--param pagename "'Internet Service Providers'"
 
-misc.html: entries.xsl misc.xml ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param pagename "'Miscellaneous Vendors'" \
-		${.CURDIR}/entries.xsl ${.CURDIR}/misc.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	misc
+PARAMS.misc=	--param pagename "'Miscellaneous Vendors'"
 
-software.html: entries.xsl software.xml ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param pagename "'Software Vendors'" \
-		${.CURDIR}/entries.xsl ${.CURDIR}/software.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	software
+PARAMS.software=--param pagename "'Software Vendors'"
 
-software_bycat.html: soft_bycat.xsl software.xml ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		${.CURDIR}/soft_bycat.xsl ${.CURDIR}/software.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	software_bycat:soft_bycat.xsl:software.xml:
 
 lint:
-	${XMLLINT} --valid -o /dev/null ${.CURDIR}/consult.xml
-	${XMLLINT} --valid -o /dev/null ${.CURDIR}/hardware.xml
-	${XMLLINT} --valid -o /dev/null ${.CURDIR}/isp.xml
-	${XMLLINT} --valid -o /dev/null ${.CURDIR}/misc.xml
-	${XMLLINT} --valid -o /dev/null ${.CURDIR}/software.xml
+	${XMLLINT} ${XMLLINTOPTS} --valid -o /dev/null ${.CURDIR}/consult.xml
+	${XMLLINT} ${XMLLINTOPTS} --valid -o /dev/null ${.CURDIR}/hardware.xml
+	${XMLLINT} ${XMLLINTOPTS} --valid -o /dev/null ${.CURDIR}/isp.xml
+	${XMLLINT} ${XMLLINTOPTS} --valid -o /dev/null ${.CURDIR}/misc.xml
+	${XMLLINT} ${XMLLINTOPTS} --valid -o /dev/null ${.CURDIR}/software.xml
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/events/Makefile
===================================================================
RCS file: /home/ncvs/www/en/events/Makefile,v
retrieving revision 1.7
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.7 Makefile
--- www/en/events/Makefile	6 Apr 2004 11:36:12 -0000	1.7
+++ www/en/events/Makefile	16 Jul 2005 14:26:54 -0000
@@ -11,9 +11,7 @@
 SUBDIR+= 2003
 
 DATA=	events.css
-DATA+=	events.html
 
-CLEANFILES+= events.html
 CLEANFILES+= curdate.xml
 
 INDEXLINK= events.html
@@ -22,15 +20,11 @@
 TR?=	/usr/bin/tr
 XMLLINT?= /usr/local/bin/xmllint # Part of textproc/libxml2.
 
-events.html: events.xsl events.xml ../includes.xsl curdate.xml
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		${.CURDIR}/events.xsl ${.CURDIR}/events.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS=	events
+SRCS.events=	../includes.xsl curdate.xml
 
 lint:
-	${XMLLINT} --valid -o /dev/null ${.CURDIR}/events.xml
+	${XMLLINT} ${XMLLINTOPTS} --valid -o /dev/null ${.CURDIR}/events.xml
 
 .if !make(install)
 .PHONY:	curdate.xml
Index: www/en/gnome/Makefile
===================================================================
RCS file: /home/ncvs/www/en/gnome/Makefile,v
retrieving revision 1.20
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.20 Makefile
--- www/en/gnome/Makefile	25 Nov 2004 04:29:18 -0000	1.20
+++ www/en/gnome/Makefile	16 Jul 2005 15:14:06 -0000
@@ -13,31 +13,16 @@
 DOCS=	screenshots.sgml
 DOCS+=	contact.sgml
 
-DATA=	index.html newsflash.html news.rdf gnome_upgrade.sh gnomelogalyzer.sh
-
-CLEANFILES=	index.html
-CLEANFILES+=	newsflash.html
-CLEANFILES+=	news.rdf
+DATA=	gnome_upgrade.sh
+DATA+=	gnomelogalyzer.sh
 
-index.html! index.xsl news.xml includes.xsl ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS:N-nonet} -o index.html \
-		${.CURDIR}/index.xsl ${.CURDIR}/news.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} index.html
-.endif
+SRCS.DEFAULT=	includes.xsl
+XML.DEFAULT=	news.xml
 
-news.rdf: rss.xsl news.xml includes.xsl ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o news.rdf \
-		${.CURDIR}/rss.xsl ${.CURDIR}/news.xml
-.if !defined(NO_TIDY)
-	-${TIDY} -xml -wrap 0 ${TIDYOPTS} news.rdf
-.endif
+XMLDOCS=	index
+XSLTPROCOPTS.index=	${XSLTPROCOPTS:N--nonet}
 
-newsflash.html: newsflash.xsl news.xml includes.xsl ../includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		${.CURDIR}/newsflash.xsl ${.CURDIR}/news.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	newsflash
+XMLDOCS+=	news:rss.xsl::news.rdf
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/news/Makefile
===================================================================
RCS file: /home/ncvs/www/en/news/Makefile,v
retrieving revision 1.41
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.41 Makefile
--- www/en/news/Makefile	19 Apr 2005 21:19:03 -0000	1.41
+++ www/en/news/Makefile	16 Jul 2005 15:15:23 -0000
@@ -24,6 +24,13 @@
 
 INDEXLINK= news.html
 
+SRCS.DEFAULT=		includes.xsl
+DEPENDSET.DEFAULT=	transtable news
+
+XMLDOCS=	newsflash::news.xml:
+XMLDOCS+=	news-rdf::news.xml:news.rdf
+XMLDOCS+=	press
+
 SUBDIR= 	1993
 SUBDIR+= 	1996
 SUBDIR+= 	1997
@@ -35,35 +42,4 @@
 SUBDIR+= 	2003
 SUBDIR+=	status
 
-DATA=		newsflash.html news.rdf press.html
-CLEANFILES+=	newsflash.html news.rdf press.html
-
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
-
-newsflash.html: newsflash.xsl news.xml\
-			includes.xsl ${XML_INCLUDES}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param "news.project.xml-master" "'${XML_NEWS_NEWS_MASTER}'" \
-		--param "news.project.xml" "'${XML_NEWS_NEWS}'" \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/newsflash.xsl ${.CURDIR}/news.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
-
-news.rdf: news-rdf.xsl news.xml\
-		includes.xsl ${XML_INCLUDES}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/news-rdf.xsl ${.CURDIR}/news.xml
-
-press.html: press.xsl press.xml\
-		includes.xsl ${XML_INCLUDES}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param "news.press.xml-master" "'${XML_NEWS_PRESS_MASTER}'" \
-		--param "news.press.xml" "'${XML_NEWS_PRESS}'" \
-		--param "transtable.xml" "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/press.xsl ${.CURDIR}/press.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
Index: www/en/news/1998/Makefile
===================================================================
RCS file: /home/ncvs/www/en/news/1998/Makefile,v
retrieving revision 1.3
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.3 Makefile
--- www/en/news/1998/Makefile	7 Apr 2004 11:41:47 -0000	1.3
+++ www/en/news/1998/Makefile	16 Jul 2005 14:40:14 -0000
@@ -9,16 +9,8 @@
 
 DOCS=	index.sgml
 
-DATA=		press.html
-CLEANFILES+=	press.html
-
-press.html: ../oldpress.xsl press.xml\
-			../includes.xsl ../../includes.xsl ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldpress.xsl ${.CURDIR}/press.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS=	press:../oldpress.xsl::
+SRCS.press=	../includes.xsl
+DEPENDSET.press=	transtable
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/news/1999/Makefile
===================================================================
RCS file: /home/ncvs/www/en/news/1999/Makefile,v
retrieving revision 1.3
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.3 Makefile
--- www/en/news/1999/Makefile	7 Apr 2004 11:41:47 -0000	1.3
+++ www/en/news/1999/Makefile	16 Jul 2005 14:41:37 -0000
@@ -9,17 +9,8 @@
 
 DOCS=	index.sgml
 
-DATA=		press.html
-CLEANFILES+=	press.html
-
-press.html: ../oldpress.xsl press.xml\
-			../includes.xsl ../../includes.xsl ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldpress.xsl ${.CURDIR}/press.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
-
+XMLDOCS=	press:../oldpress.xsl::
+SRCS.press=	../includes.xsl
+DEPENDSET.press=	transtable
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/news/2000/Makefile
===================================================================
RCS file: /home/ncvs/www/en/news/2000/Makefile,v
retrieving revision 1.3
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.3 Makefile
--- www/en/news/2000/Makefile	7 Apr 2004 11:41:47 -0000	1.3
+++ www/en/news/2000/Makefile	16 Jul 2005 14:41:53 -0000
@@ -9,16 +9,8 @@
 
 DOCS=	index.sgml
 
-DATA=		press.html
-CLEANFILES+=	press.html
-
-press.html: ../oldpress.xsl press.xml\
-			../includes.xsl ../../includes.xsl ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldpress.xsl ${.CURDIR}/press.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS=	press:../oldpress.xsl::
+SRCS.press=	../includes.xsl
+DEPENDSET.press=	transtable
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/news/2001/Makefile
===================================================================
RCS file: /home/ncvs/www/en/news/2001/Makefile,v
retrieving revision 1.4
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.4 Makefile
--- www/en/news/2001/Makefile	31 Dec 2004 07:24:04 -0000	1.4
+++ www/en/news/2001/Makefile	16 Jul 2005 14:43:06 -0000
@@ -7,25 +7,15 @@
 .include "../Makefile.inc"
 .endif
 
-DATA=		index.html press.html
-CLEANFILES+=	index.html press.html
+DATA=		index.html
+CLEANFILES+=	index.html
 
-index.html: ../oldnewsflash.xsl news.xml \
-		${XML_INCLUDES} ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldnewsflash.xsl ${.CURDIR}/news.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS=	index:../oldpress.xsl:news.xml:
+SRCS.index=	../includes.xsl
+DEPENDSET.index=	transtable
 
-press.html: ../oldpress.xsl press.xml\
-			../includes.xsl ../../includes.xsl ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldpress.xsl ${.CURDIR}/press.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	press:../oldpress.xsl::
+SRCS.press=	../includes.xsl
+DEPENDSET.press=	transtable
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/news/2002/Makefile
===================================================================
RCS file: /home/ncvs/www/en/news/2002/Makefile,v
retrieving revision 1.4
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.4 Makefile
--- www/en/news/2002/Makefile	31 Dec 2004 07:24:04 -0000	1.4
+++ www/en/news/2002/Makefile	16 Jul 2005 14:43:29 -0000
@@ -7,25 +7,12 @@
 .include "../Makefile.inc"
 .endif
 
-DATA=		index.html press.html
-CLEANFILES+=	index.html press.html
-
-index.html: ../oldnewsflash.xsl news.xml \
-		${XML_INCLUDES} ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldnewsflash.xsl ${.CURDIR}/news.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS=	index:../oldpress.xsl:news.xml:
+SRCS.index=	../includes.xsl
+DEPENDSET.index=	transtable
 
-press.html: ../oldpress.xsl press.xml \
-		${XML_INCLUDES} ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldpress.xsl ${.CURDIR}/press.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	press:../oldpress.xsl::
+SRCS.press=	../includes.xsl
+DEPENDSET.press=	transtable
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/news/2003/Makefile
===================================================================
RCS file: /home/ncvs/www/en/news/2003/Makefile,v
retrieving revision 1.1
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.1 Makefile
--- www/en/news/2003/Makefile	19 Apr 2005 21:19:03 -0000	1.1
+++ www/en/news/2003/Makefile	16 Jul 2005 14:43:43 -0000
@@ -7,25 +7,12 @@
 .include "../Makefile.inc"
 .endif
 
-DATA=		index.html press.html
-CLEANFILES+=	index.html press.html
-
-index.html: ../oldnewsflash.xsl news.xml \
-		${XML_INCLUDES} ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldnewsflash.xsl ${.CURDIR}/news.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS=	index:../oldpress.xsl:news.xml:
+SRCS.index=	../includes.xsl
+DEPENDSET.index=	transtable
 
-press.html: ../oldpress.xsl press.xml \
-		${XML_INCLUDES} ${XML_TRANSTABLE}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param transtable.xml "'${XML_TRANSTABLE}'" \
-		${.CURDIR}/../oldpress.xsl ${.CURDIR}/press.xml
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS+=	press:../oldpress.xsl::
+SRCS.press=	../includes.xsl
+DEPENDSET.press=	transtable
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/news/status/Makefile
===================================================================
RCS file: /home/ncvs/www/en/news/status/Makefile,v
retrieving revision 1.27
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.27 Makefile
--- www/en/news/status/Makefile	21 Apr 2005 17:55:46 -0000	1.27
+++ www/en/news/status/Makefile	16 Jul 2005 14:47:28 -0000
@@ -7,41 +7,33 @@
 .include "../Makefile.inc"
 .endif
 
-.SUFFIXES:	.xml .html
-
 DOCS=	status.sgml
 
-DATA=	report-june-2001.html
-DATA+=	report-july-2001.html
-DATA+=	report-august-2001.html
-DATA+=	report-september-2001.html
-DATA+=	report-november-2001.html
-DATA+=	report-dec-2001-jan-2002.html
-DATA+=	report-feb-2002-apr-2002.html
-DATA+=	report-may-2002-june-2002.html
-DATA+=	report-july-2002-aug-2002.html
-DATA+=	report-sept-2002-oct-2002.html
-DATA+=	report-nov-2002-dec-2002.html
-DATA+=  report-jan-2003-feb-2003.html
-DATA+=	report-mar-2003-sep-2003.html
-DATA+=  report-oct-2003-dec-2003.html
-DATA+=  report-jan-2004-feb-2004.html
-DATA+=	report-mar-2004-apr-2004.html
-DATA+=	report-may-2004-june-2004.html
-DATA+=	report-july-2004-dec-2004.html
-DATA+=	report-jan-2005-mar-2005.html
-
-# Install a sample <project> entry.
-DATA+=	report-sample.xml
+XMLDOCS=	report-june-2001
+XMLDOCS+=	report-july-2001
+XMLDOCS+=	report-august-2001
+XMLDOCS+=	report-september-2001
+XMLDOCS+=	report-november-2001
+XMLDOCS+=	report-dec-2001-jan-2002
+XMLDOCS+=	report-feb-2002-apr-2002
+XMLDOCS+=	report-may-2002-june-2002
+XMLDOCS+=	report-july-2002-aug-2002
+XMLDOCS+=	report-sept-2002-oct-2002
+XMLDOCS+=	report-nov-2002-dec-2002
+XMLDOCS+=	report-jan-2003-feb-2003
+XMLDOCS+=	report-mar-2003-sep-2003
+XMLDOCS+=	report-oct-2003-dec-2003
+XMLDOCS+=	report-jan-2004-feb-2004
+XMLDOCS+=	report-mar-2004-apr-2004
+XMLDOCS+=	report-may-2004-june-2004
+XMLDOCS+=	report-july-2004-dec-2004
+XMLDOCS+=	report-jan-2005-mar-2005
 
-CLEANFILES+=	${DATA:M*.html}
+XSLT.DEFAULT=	report.xsl
+SRCS.DEFAULT=	includes.xsl
 
-.xml.html:	report.xsl includes.xsl
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		${.CURDIR}/report.xsl ${.IMPSRC}
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+# Install a sample <project> entry.
+DATA=		report-sample.xml
 
 INDEXLINK=	status.html
 
Index: www/en/platforms/ia64/Makefile
===================================================================
RCS file: /home/ncvs/www/en/platforms/ia64/Makefile,v
retrieving revision 1.5
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.5 Makefile
--- www/en/platforms/ia64/Makefile	25 May 2005 03:33:45 -0000	1.5
+++ www/en/platforms/ia64/Makefile	16 Jul 2005 14:51:09 -0000
@@ -10,16 +10,7 @@
 DOCS=	machines.sgml refs.sgml
 DATA=	i2inside.png mckinley-die.png merced-die.png montecito-die.png
 
-_GEN=	index.html todo.html
-
-DATA+=	${_GEN}
-CLEANFILES+= ${_GEN}
-
-.SUFFIXES: .xsl .html
-.xsl.html: news.xml
-	${XSLTPROC} ${XSLTPROCOPTS:N-nonet} -o ${.TARGET} ${.ALLSRC}
-.if !defined(NO_TIDY)
-	-${TIDY} ${TIDYOPTS} ${.TARGET}
-.endif
+XMLDOCS=	index::news.xml:
+XMLDOCS+=	todo::news.xml:
 
 .include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: www/en/security/Makefile
===================================================================
RCS file: /home/ncvs/www/en/security/Makefile,v
retrieving revision 1.13
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.13 Makefile
--- www/en/security/Makefile	25 May 2004 01:19:50 -0000	1.13
+++ www/en/security/Makefile	16 Jul 2005 15:17:07 -0000
@@ -11,18 +11,16 @@
 DOCS+=	security.sgml
 
 INDEXLINK=	security.html
-DATA+=		advisories.rdf
-CLEANFILES+=	advisories.html.inc advisories.rdf
-
-.include "${WEB_PREFIX}/share/mk/web.site.mk"
 
 security.html: advisories.html.inc advisories.rdf
 
-advisories.html.inc: mkindex.xsl ${XML_ADVISORIES} ${XML_INCLUDES}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param "advisories.xml" "'${XML_ADVISORIES}'" \
-		${.CURDIR}/mkindex.xsl ${XML_ADVISORIES}
-advisories.rdf: security-rdf.xsl ${XML_ADVISORIES} ${XML_INCLUDES}
-	${XSLTPROC} ${XSLTPROCOPTS} -o ${.TARGET} \
-		--param "advisories.xml" "'${XML_ADVISORIES}'" \
-		${.CURDIR}/security-rdf.xsl ${XML_ADVISORIES}
+DEPENDSET.DEFAULT=	advisories
+XML.DEFAULT=		${XML_ADVISORIES}
+
+XMLDOCS=	advisories:mkindex.xsl::advisories.html.inc
+NO_DATA.advisories=	yes
+NO_TIDY.advisories=	yes
+
+XMLDOCS+=	advisories-rdf:security-rdf.xsl::advisories.rdf
+
+.include "${WEB_PREFIX}/share/mk/web.site.mk"
Index: doc/share/mk/doc.common.mk
===================================================================
RCS file: /home/ncvs/doc/share/mk/doc.common.mk,v
retrieving revision 1.14
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.14 doc.common.mk
--- doc/share/mk/doc.common.mk	16 Jul 2005 09:58:33 -0000	1.14
+++ doc/share/mk/doc.common.mk	16 Jul 2005 10:47:36 -0000
@@ -113,67 +113,6 @@
 URL_RELPREFIX_ENT=	freebsd.urls.relprefix.${_URL_RELPREFIX_LEVEL}
 .endif
 
-# ------------------------------------------------------------------------
-#
-# mirrors.xml dependency.
-#
-
-XML_MIRRORS_MASTER=	${DOC_PREFIX}/share/sgml/mirrors.xml
-XML_MIRRORS=		${.OBJDIR}/${DOC_PREFIX:S,^${.CURDIR}/,,}/${LANGCODE}/share/sgml/mirrors.xml
-
-XSL_MIRRORS_MASTER=	${DOC_PREFIX}/share/sgml/mirrors-master.xsl
-
-.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/mirrors-local.xsl)
-XSL_MIRRORS=		${DOC_PREFIX}/${LANGCODE}/share/sgml/mirrors-local.xsl
-.else
-XSL_MIRRORS=		${DOC_PREFIX}/share/sgml/mirrors-local.xsl
-.endif
-
-XSL_TRANSTABLE_MASTER=	${DOC_PREFIX}/share/sgml/transtable-master.xsl
-XSL_TRANSTABLE_COMMON=	${DOC_PREFIX}/share/sgml/transtable-common.xsl
-
-.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable-local.xsl)
-XSL_TRANSTABLE=		${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable-local.xsl
-.else
-XSL_TRANSTABLE=		${DOC_PREFIX}/share/sgml/transtable-local.xsl
-.endif
-
-.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable.xml)
-XML_TRANSTABLE=		${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable.xml
-.else
-XML_TRANSTABLE=		${DOC_PREFIX}/share/sgml/transtable.xml
-.endif
-
-${XSL_MIRRORS}: ${XSL_MIRRORS_MASTER} ${XSL_TRANSTABLE_COMMON}
-
-${XML_MIRRORS}: ${XML_MIRRORS_MASTER} ${XSL_TRANSTABLE} ${XSL_TRANSTABLE_MASTER} ${XSL_TRANSTABLE_COMMON}
-	${MKDIR} -p ${@:H}
-	${XSLTPROC} ${XSLTPROCOPTS} \
-	    --param 'transtable.xml' "'${XML_TRANSTABLE}'" \
-	    --param 'transtable-target-element' "'country'" \
-	    --param 'transtable-word-group' "'country'" \
-	    --param 'transtable-mode' "'sortkey'" \
-	    ${XSL_TRANSTABLE} ${XML_MIRRORS_MASTER} \
-	  | env -i LANG="${LANGCODE}" ${SORT} -f > $@.sort.tmp
-	env -i ${GREP} "^<?xml" < $@.sort.tmp > $@.sort
-	${ECHO} "<sortkeys>" >> $@.sort
-	env -i ${AWK} '/@sortkey@/ {sub(/@sortkey@/, ++line); print;}' < $@.sort.tmp >> $@.sort
-	${ECHO} '</sortkeys>' >> $@.sort
-	${XSLTPROC} ${XSLTPROCOPTS} -o $@ \
-	    --param 'transtable.xml' "'${XML_TRANSTABLE}'" \
-	    --param 'transtable-target-element' "'country'" \
-	    --param 'transtable-word-group' "'country'" \
-	    --param 'transtable-sortkey.xml' "'$@.sort'" \
-	    ${XSL_TRANSTABLE} ${XML_MIRRORS_MASTER}
-	${RM} -f $@.sort $@.sort.tmp
-
-CLEANFILES+= ${XML_MIRRORS}
-CLEANFILES+= ${XML_MIRRORS}.sort
-CLEANFILES+= ${XML_MIRRORS}.sort.tmp
-
-XML_USERGROUPS=	${WEB_PREFIX}/share/sgml/usergroups.xml
-XSL_USERGROUPS=	${WEB_PREFIX}/share/sgml/templates.usergroups.xsl
-
 #
 # when URLS_ABSOLUTE is specified, make
 # %freebsd.urls.absolute; "INCLUDE".
Index: doc/share/mk/doc.project.mk
===================================================================
RCS file: /home/ncvs/doc/share/mk/doc.project.mk,v
retrieving revision 1.26
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.26 doc.project.mk
--- doc/share/mk/doc.project.mk	20 Feb 2005 17:14:25 -0000	1.26
+++ doc/share/mk/doc.project.mk	16 Jul 2005 10:53:19 -0000
@@ -130,6 +130,9 @@
 # Ownership information.
 .include "doc.install.mk"
 
+# XML specific configuration
+.include "doc.xml.mk"
+
 # Format-specific configuration
 .if defined(DOC)
 .if ${DOCFORMAT} == "docbook"
Index: doc/share/mk/doc.xml.mk
===================================================================
RCS file: doc/share/mk/doc.xml.mk
diff -N doc/share/mk/doc.xml.mk
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ doc/share/mk/doc.xml.mk	16 Jul 2005 15:09:08 -0000
@@ -0,0 +1,274 @@
+# doc.xml.mk
+# $FreeBSD$
+
+XML_CATALOG_FILES=	file://${DOC_PREFIX}/${LANGCODE}/share/sgml/catalog.xml \
+			file://${DOC_PREFIX}/share/sgml/catalog.xml \
+			file://${DOC_PREFIX}/share/sgml/catalog-common.xml \
+			file://${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/catalog.xml \
+			file://${WEB_PREFIX}/share/sgml/catalog-common.xml \
+			file://${LOCALBASE}/share/xml/catalog
+
+XML_INCLUDES=	${WEB_PREFIX}/${WWW_LANGCODE}/includes.xsl \
+		${WEB_PREFIX}/share/sgml/includes.header.xsl \
+		${WEB_PREFIX}/share/sgml/includes.misc.xsl \
+		${WEB_PREFIX}/share/sgml/includes.release.xsl \
+		${WEB_PREFIX}/share/sgml/includes.xsl
+
+# Variables used in DEPENDSET
+
+_DEPENDSET.all=	transtable mirrors usergroups \
+		news press navigation advisories notices
+
+# DEPENDSET: transtable  ......................................................
+_DEPENDSET.transtable=	${XML_TRANSTABLE} ${XSL_TRANSTABLE} \
+			${XSL_TRANSTABLE_MASTER} ${XSL_TRANSTABLE_COMMON}
+_PARAMS.transtable=	--param transtable.xml "'${XML_TRANSTABLE}'"
+XSL_TRANSTABLE_MASTER=	${DOC_PREFIX}/share/sgml/transtable-master.xsl
+XSL_TRANSTABLE_COMMON=	${DOC_PREFIX}/share/sgml/transtable-common.xsl
+
+.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable-local.xsl)
+XSL_TRANSTABLE=		${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable-local.xsl
+.else
+XSL_TRANSTABLE=		${DOC_PREFIX}/share/sgml/transtable-local.xsl
+.endif
+
+.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable.xml)
+XML_TRANSTABLE=		${DOC_PREFIX}/${LANGCODE}/share/sgml/transtable.xml
+.else
+XML_TRANSTABLE=		${DOC_PREFIX}/share/sgml/transtable.xml
+.endif
+
+# DEPENDSET: mirrors .....................................................
+_DEPENDSET.mirrors=	${XSL_MIRRORS} ${XML_MIRRORS}
+_PARAMS.mirrors=	--param mirrors.xml "'${XML_MIRRORS}'"
+XML_MIRRORS_MASTER=	${DOC_PREFIX}/share/sgml/mirrors.xml
+XML_MIRRORS=		${.OBJDIR}/${DOC_PREFIX:S,^${.CURDIR}/,,}/${LANGCODE}/share/sgml/mirrors.xml
+XSL_MIRRORS_MASTER=	${DOC_PREFIX}/share/sgml/mirrors-master.xsl
+.if exists(${DOC_PREFIX}/${LANGCODE}/share/sgml/mirrors-local.xsl)
+XSL_MIRRORS=		${DOC_PREFIX}/${LANGCODE}/share/sgml/mirrors-local.xsl
+.else
+XSL_MIRRORS=		${DOC_PREFIX}/share/sgml/mirrors-local.xsl
+.endif
+${XSL_MIRRORS}: ${XSL_MIRRORS_MASTER} \
+		${XSL_TRANSTABLE_COMMON}
+
+${XML_MIRRORS}: ${XML_MIRRORS_MASTER} \
+		${XSL_TRANSTABLE} ${XSL_TRANSTABLE_MASTER} ${XSL_TRANSTABLE_COMMON}
+	${MKDIR} -p ${@:H}
+	${XSLTPROC} ${XSLTPROCOPTS} \
+		--param 'transtable.xml' "'${XML_TRANSTABLE}'" \
+		--param 'transtable-target-element' "'country'" \
+		--param 'transtable-word-group' "'country'" \
+		--param 'transtable-mode' "'sortkey'" \
+		${XSL_TRANSTABLE} ${XML_MIRRORS_MASTER} \
+		| env -i LANG="${LANGCODE}" ${SORT} -f > $@.sort.tmp
+	env -i ${GREP} "^<?xml" < $@.sort.tmp > $@.sort
+	${ECHO} "<sortkeys>" >> $@.sort
+	env -i ${AWK} '/@sortkey@/ {sub(/@sortkey@/, ++line); print;}' < $@.sort.tmp >> $@.sort
+	${ECHO} '</sortkeys>' >> $@.sort
+	${XSLTPROC} ${XSLTPROCOPTS} -o $@ \
+		--param 'transtable.xml' "'${XML_TRANSTABLE}'" \
+		--param 'transtable-target-element' "'country'" \
+		--param 'transtable-word-group' "'country'" \
+		--param 'transtable-sortkey.xml' "'$@.sort'" \
+		${XSL_TRANSTABLE} ${XML_MIRRORS_MASTER}
+	${RM} -f $@.sort $@.sort.tmp
+CLEANFILES+=	${XML_MIRRORS}
+CLEANFILES+=	${XML_MIRRORS}.sort
+CLEANFILES+=	${XML_MIRRORS}.sort.tmp
+
+# DEPENDSET: usergroups ......................................................
+_DEPENDSET.usergroups=	${XML_USERGROUPS} ${XSL_USERGROUPS}
+XML_USERGROUPS=	${WEB_PREFIX}/share/sgml/usergroups.xml
+XSL_USERGROUPS=	${WEB_PREFIX}/share/sgml/templates.usergroups.xsl
+
+# DEPENDSET: news ............................................................
+_DEPENDSET.news=	${XML_NEWS_NEWS_MASTER} ${XML_NEWS_NEWS} \
+			${XML_NEWS_INCLUDES_MASTER} ${XML_NEWS_INCLUDES}
+_PARAMS.news=		--param news.project.xml-master "'${XML_NEWS_NEWS_MASTER}'" \
+			--param news.project.xml "'${XML_NEWS_NEWS}'"
+XML_NEWS_INCLUDES_MASTER=${WEB_PREFIX}/en/news/includes.xsl
+XML_NEWS_INCLUDES=	${WEB_PREFIX}/${WWW_LANGCODE}/news/includes.xsl
+XML_NEWS_NEWS_MASTER=	${WEB_PREFIX}/en/news/news.xml
+XML_NEWS_NEWS=		${WEB_PREFIX}/${WWW_LANGCODE}/news/news.xml
+
+# DEPENDSET: press  ..........................................................
+_DEPENDSET.press=	${XML_NEWS_PRESS_MASTER} ${XML_NEWS_PRESS} \
+			${XML_NEWS_INCLUDES_MASTER} ${XML_NEWS_INCLUDES}
+_PARAMS.press=		--param news.press.xml-master "'${XML_NEWS_PRESS_MASTER}'" \
+			--param news.press.xml "'${XML_NEWS_PRESS}'"
+XML_NEWS_INCLUDES_MASTER=${WEB_PREFIX}/en/news/includes.xsl
+XML_NEWS_INCLUDES=	${WEB_PREFIX}/${WWW_LANGCODE}/news/includes.xsl
+XML_NEWS_PRESS_MASTER=	${WEB_PREFIX}/en/news/press.xml
+XML_NEWS_PRESS=		${WEB_PREFIX}/${WWW_LANGCODE}/news/press.xml
+
+# DEPENDSET: navigation  .....................................................
+_DEPENDSET.navigation=	${XML_NAVIGATION}
+_PARAMS.navigation=	--param navigation.xml "'${XML_NAVIGATION}'"
+XML_NAVIGATION=		${WEB_PREFIX}/${WWW_LANGCODE}/navigation.xml
+
+# DEPENDSET: advisories  .....................................................
+_DEPENDSET.advisories=	${XML_ADVISORIES}
+_PARAMS.advisories=	--param advisories.xml "'${XML_ADVISORIES}'"
+XML_ADVISORIES=		${WEB_PREFIX}/share/sgml/advisories.xml
+
+# DEPENDSET: notices  ........................................................
+_DEPENDSET.notices=	${XML_NOTICES}
+_PARAMS.notices=	--param notices.xml "'${XML_NOTICES}'"
+XML_NOTICES=		${WEB_PREFIX}/share/sgml/notices.xml
+
+# ---
+# .xml -> .html rendering rule
+#
+# The following variables are available:
+#
+# XMLDOCS: (ex. XMLDOCS= doc1 doc2 doc3)
+#   Target document identifier, which is usually the same as the
+#   base part of the filenames.  {XSLT,XML,TARGET}.<id> described below
+#   can be specified in a short form like the following:
+#   "docid:stylesheet:xml:target".
+#
+# TARGET.<id>: (ex. TARGET.doc1= doc1.html)
+#   The target filename.  This is optional and <id>.html is defined
+#   by default.
+#
+# XSLT.<id>: (ex. XSLT.doc1= doc1.xsl)
+#   Filename of the XSLT stylesheet.  This is optional and <id>.xsl is
+#   defined by default.  The following keywords are interpreted specially:
+#
+#    `xsl'             - <id>.xsl
+#
+# XSLT.DEFAULT:
+#   The default filename or keyword of XSLT stylesheet.
+#   When XSLT.<id> and one in the quadruplet are not specified,
+#   this value is used.
+#
+# XML.<id>: (ex. XML.doc1= doc1.xml data.xml)
+#   Filename of the XML document.  This is optional and /dev/null is
+#   defined by default.  XML.DEFAULT is XML document for all <id>s.
+#
+# SRCS.<id>: (ex. SRCS.doc1= includes.xsl)
+#   Dependencies.  SRCS.DEFAULT is dependencies for all <id>s.
+#
+# DEPENDSET.<id>: (ex. DEPENDSET.doc1= mirror)
+#   Depencencies predefined as keywords listed in ${_DEPENDSET.all}.
+#   DEPENDSET.DEFAULT is DEPENDSET for all <id>s.
+#
+# PARAMS.<id>: (ex. PARAMS.doc1= --params "foo" "'textproc/foo'")
+#   Parameters passed to xsltproc(1).
+#
+# XSLTPROCOPTS.<id>: (ex. XSLTPROCOPTS.doc1= --nonet)
+#   Parameters passed to xsltproc(1).
+#
+# NO_DATA.<id>
+#   The ${TARGET.<id>} file will not be listed in $DATA if defined.
+#   NO_DATA.DEFAULT is the setting for all <id>s.
+#
+# NO_TIDY.<id>
+#   The ${TARGET.<id>} file will not be processed by tidy if defined.
+#   NO_TIDY.DEFAULT is the setting for all <id>s.
+#
+XSLTPROC_ENV+=	SGML_CATALOG_FILES=
+XSLTPROC_ENV+=	XML_CATALOG_FILES="${XML_CATALOG_FILES}"
+
+XSLTPROCOPTS=	${XSLTPROC_ARGS}
+XSLTPROCOPTS+=	--xinclude
+XSLTPROCOPTS+=	--stringparam LOCALBASE ${LOCALBASE}
+XSLTPROCOPTS+=	--stringparam WEB_PREFIX ${WEB_PREFIX}
+.if defined(XML_CATALOG_FILES) && !empty(XML_CATALOG_FILES)
+XSLTPROCOPTS+=	--nonet --catalogs
+.endif
+XSLTPROC=	env ${XSLTPROC_ENV} ${LOCALBASE}/bin/xsltproc
+
+.for D in ${XMLDOCS}
+# parse "docid:xslt:xml:target".
+# XXX: ${__ID} is used because ${A}=B does not work except
+#      for the iterate variable in the .for statement.
+__ID=${D:C,:.*$,,}
+
+.for _ID in ${__ID}
+_tmpD=	${D:M*\:*}
+.if !empty(_tmpD)
+XSLT.${_ID}=	${D:C,^[^:]*,,:M*\:*:C,^:,,:C,:.*$,,}
+XML.${_ID}=	${D:C,^[^:]*,,:M*\:*:C,^:,,:C,^[^:]*,,:M*\:*:C,^:,,:C,:.*$,,}
+TARGET.${_ID}=	${D:C,^[^:]*,,:M*\:*:C,^:,,:C,^[^:]*,,:M*\:*:C,^:,,:C,^[^:]*,,:M*\:*:C,^:,,:C,:.*$,,}
+.endif
+
+# Use default value if parameter not specified.
+.if !defined(XSLT.${_ID}) || empty(XSLT.${_ID})
+.if defined(XSLT.DEFAULT)
+XSLT.${_ID}=	${XSLT.DEFAULT}
+.else
+XSLT.${_ID}=	${_ID}.xsl
+.endif
+.endif
+.if !defined(XML.${_ID}) || empty(XML.${_ID})
+.if defined(XML.DEFAULT)
+XML.${_ID}=	${XML.DEFAULT}
+.else
+XML.${_ID}=	${_ID}.xml
+.endif
+.endif
+.if !defined(TARGET.${_ID}) || empty(TARGET.${_ID})
+TARGET.${_ID}=	${_ID}.html
+.endif
+.if !defined(DEPENDSET.${_ID}) || empty(DEPENDSET.${_ID})
+.if defined(DEPENDSET.DEFAULT)
+DEPENDSET.${_ID}=	${DEPENDSET.DEFAULT}
+.else
+DEPENDSET.${_ID}=
+.endif
+.endif
+.if !defined(NO_TIDY.${_ID}) || empty(NO_TIDY.${_ID})
+.if defined(NO_TIDY.DEFAULT)
+NO_TIDY.${_ID}=	${NO_TIDY.DEFAULT}
+.else
+NO_TIDY.${_ID}=
+.endif
+.endif
+.if !defined(NO_DATA.${_ID}) || empty(NO_DATA.${_ID})
+.if defined(NO_DATA.DEFAULT)
+NO_DATA.${_ID}=	${NO_DATA.DEFAULT}
+.else
+NO_DATA.${_ID}=
+.endif
+.endif
+
+XSLTPROCOPTS.${_ID}?=	${XSLTPROCOPTS}
+GENDOCS+=	${TARGET.${_ID}}
+SRCS+=		${TARGET.${_ID}}
+.if !defined(NO_DATA.${_ID}) || empty(NO_DATA.${_ID})
+DATA+=		${TARGET.${_ID}}
+.endif
+CLEANFILES+=	${TARGET.${_ID}}
+
+.if ${XSLT.${_ID}} == xsl
+XSLT.${_ID}=	${_ID}.xsl
+DEPENDS.${_ID}+=	${XSLT.${_ID}}
+.elif ${XSLT.${_ID}:Mhttp\://*} != ""
+DEPENDS.${_ID}+=	${XSLT.${_ID}}
+.else
+DEPENDS.${_ID}+=	${XSLT.${_ID}}
+.endif
+
+.for S in ${_DEPENDSET.all}
+. if ${DEPENDSET.${_ID}:M${S}} != ""
+DEPENDS.${_ID}+=${_DEPENDSET.${S}}
+PARAMS.${_ID}+=	${_PARAMS.${S}}
+. endif
+.endfor
+
+.for S in ${SRCS.DEFAULT} ${SRCS.${_ID}}
+DEPENDS.${_ID}+=	${S}
+.endfor
+${TARGET.${_ID}}: ${XML_INCLUDES} ${XML.${_ID}} ${DEPENDS.${_ID}}
+	${XSLTPROC} ${XSLTPROCOPTS.${_ID}} \
+		-o ${.TARGET} ${PARAMS.${_ID}} \
+		${XSLT.${_ID}} ${XML.${_ID}}
+. if !defined(NO_TIDY) || empty(NO_TIDY)
+.  if !defined(NO_TIDY.${_ID}) || empty(NO_TIDY.${_ID})
+	-${TIDY} ${TIDYOPTS} ${.TARGET}
+.  endif
+. endif
+.endfor
+.endfor
Index: doc/en_US.ISO8859-1/books/handbook/Makefile
===================================================================
RCS file: /home/ncvs/doc/en_US.ISO8859-1/books/handbook/Makefile,v
retrieving revision 1.91
diff -d -u -I\$FreeBSD:.*\$ -I\$NetBSD:.*\$ -I\$OpenBSD:.*\$ -I\$DragonFly:.*\$ -I\$Id:.*\$ -I\$Translation:.*\$ -I\$hrs:.*\$ -r1.91 Makefile
--- doc/en_US.ISO8859-1/books/handbook/Makefile	5 Dec 2004 00:14:18 -0000	1.91
+++ doc/en_US.ISO8859-1/books/handbook/Makefile	16 Jul 2005 15:05:53 -0000
@@ -217,41 +217,47 @@
 JADEFLAGS+=	-V withpgpkeys
 .endif
 
-.for p in ftp cvsup
-SRCS+= mirrors.sgml.${p}.inc
-CLEANFILES+= mirrors.sgml.${p}.inc
-CLEANFILES+= mirrors.sgml.${p}.inc.tmp
-.endfor
-
-SRCS+= eresources.sgml.www.inc
-CLEANFILES+= eresources.sgml.www.inc
-CLEANFILES+= eresources.sgml.www.inc.tmp
-
 URL_RELPREFIX?=	../../../..
 DOC_PREFIX?=	${.CURDIR}/../../..
 
+#
+# rules generating lists of mirror site from XML database.
+#
+XMLDOCS=	mirrors-ftp:::mirrors.sgml.ftp.inc.tmp \
+		mirrors-cvsup:::mirrors.sgml.cvsup.inc.tmp \
+		eresources:::eresources.sgml.www.inc.tmp
+DEPENDSET.DEFAULT=	transtable mirror
+XSLT.DEFAULT=		${XSL_MIRRORS}
+XML.DEFAULT=		${XML_MIRRORS}
+NO_TIDY.DEFAULT=	yes
+
+PARAMS.mirrors-ftp+=	--param 'type' "'ftp'" \
+			--param 'proto' "'ftp'" \
+			--param 'target' "'handbook/mirrors/chapter.sgml'"
+PARAMS.mirrors-cvsup+=	--param 'type' "'cvsup'" \
+			--param 'proto' "'cvsup'" \
+			--param 'target' "'handbook/mirrors/chapter.sgml'"
+PARAMS.eresources+=	--param 'type' "'www'" \
+			--param 'proto' "'http'" \
+			--param 'target' "'handbook/eresources/chapter.sgml'"
+
+SRCS+=		mirrors.sgml.ftp.inc \
+		mirrors.sgml.cvsup.inc \
+		eresources.sgml.www.inc
+CLEANFILES+=	mirrors.sgml.ftp.inc \
+		mirrors.sgml.cvsup.inc \
+		eresources.sgml.www.inc
+
 .include "${DOC_PREFIX}/share/mk/doc.project.mk"
 
 .for p in ftp cvsup
-mirrors.sgml.${p}.inc: ${XML_MIRRORS} ${XSL_MIRRORS}
-	${XSLTPROC} ${XSLTPROCOPTS} \
-	    -o $@.tmp \
-	    --param 'type' "'$p'" \
-	    --param 'proto' "'$p'" \
-	    --param 'target' "'handbook/mirrors/chapter.sgml'" \
-	    ${XSL_MIRRORS} ${XML_MIRRORS}
+mirrors.sgml.${p}.inc: mirrors.sgml.${p}.inc.tmp
 	${SED} -e 's,<\([^ >]*\)\([^>]*\)/>,<\1\2></\1>,;s,</anchor>,,'\
 	    < $@.tmp > $@ || (${RM} -f $@ && false)
 	${RM} -f $@.tmp
 .endfor
 
-eresources.sgml.www.inc: ${XML_MIRRORS} ${XSL_MIRRORS}
-	${XSLTPROC} ${XSLTPROCOPTS} \
-	    -o $@.tmp \
-	    --param 'type' "'www'" \
-	    --param 'proto' "'http'" \
-	    --param 'target' "'handbook/eresources/chapter.sgml'" \
-	    ${XSL_MIRRORS} ${XML_MIRRORS}
+eresources.sgml.www.inc: eresources.sgml.www.inc.tmp
 	${SED} -e 's,<\([^ >]*\)\([^>]*\)/>,<\1\2></\1>,;s,</anchor>,,'\
 	    < $@.tmp > $@ || (${RM} -f $@ && false)
 	${RM} -f $@.tmp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-doc/attachments/20050717/a12369ed/attachment.sig>


More information about the freebsd-doc mailing list