diff --git a/share/mk/doc.xml.mk b/share/mk/doc.xml.mk
index 29ebfab85f..bc782d0119 100644
--- a/share/mk/doc.xml.mk
+++ b/share/mk/doc.xml.mk
@@ -1,328 +1,361 @@
# doc.xml.mk
-# $FreeBSD: www/share/mk/doc.xml.mk,v 1.4 2005/10/04 17:18:41 hrs Exp $
+# $FreeBSD: www/share/mk/doc.xml.mk,v 1.5 2006/07/11 12:59:40 hrs Exp $
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.xml \
file://${WEB_PREFIX}/share/sgml/catalog-common.xml \
file://${LOCALBASE}/share/xml/catalog
# Variables used in DEPENDSET
-_DEPENDSET.all= wwwstd transtable mirrors usergroups \
+_DEPENDSET.all= wwwstd transtable mirrors usergroups commercial \
news press events navigation advisories notices
# DEPENDSET: wwwstd .........................................................
_DEPENDSET.wwwstd= ${XML_INCLUDES}
-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
+_XML_INCLIST= libcommon.l10n.xsl \
+ libcommon.xsl \
+ navibar.l10n.ent \
+ navibar.ent
+.for F in ${_INCLIST}
+.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/${F})
+XML_INCLUDES+= ${F}
+.endif
+.if exists(${WEB_PREFIX}/share/sgml/${F})
+XML_INCLUDES+= ${F}
+.endif
+.endfor
# 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= ${DOC_PREFIX}/${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} "^ $@.sort
${ECHO} "" >> $@.sort
env -i ${AWK} '/@sortkey@/ {sub(/@sortkey@/, ++line); print;}' < $@.sort.tmp >> $@.sort
${ECHO} '' >> $@.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
.if ${LANGCODE} != .
CLEANFILES+= ${XML_MIRRORS}
CLEANFILES+= ${XML_MIRRORS}.sort
CLEANFILES+= ${XML_MIRRORS}.sort.tmp
.endif
# DEPENDSET: usergroups ......................................................
_DEPENDSET.usergroups= ${XML_USERGROUPS} ${XML_USERGROUPS_LOCAL} \
${XSL_USERGROUPS_MASTER} ${XSL_USERGROUPS} \
${XML_INCLUDES}
_PARAMS.usergroups= --param usergroups.xml "'${XML_USERGROUPS}'" \
--param usergroups-local.xml "'${XML_USERGROUPS_LOCAL}'"
XML_USERGROUPS= ${WEB_PREFIX}/share/sgml/usergroups.xml
.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/usergroups.xml)
XML_USERGROUPS_LOCAL= ${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/usergroups.xml
.else
XML_USERGROUPS_LOCAL= ${WEB_PREFIX}/share/sgml/usergroups.xml
.endif
XSL_USERGROUPS_MASTER= ${WEB_PREFIX}/share/sgml/templates.usergroups.xsl
.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/templates.usergroups.xsl)
XSL_USERGROUPS= ${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/templates.usergroups.xsl
.else
XSL_USERGROUPS= ${WEB_PREFIX}/share/sgml/templates.usergroups.xsl
.endif
# DEPENDSET: news ............................................................
_DEPENDSET.news= ${XML_NEWS_NEWS_MASTER} ${XML_NEWS_NEWS} \
- ${XML_NEWS_INCLUDES_MASTER} ${XML_NEWS_INCLUDES} \
+ ${XSL_NEWS_NEWSFLASH} \
+ ${XSL_NEWS_NEWS_RDF} \
${XML_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
+XML_NEWS_NEWS_MASTER= ${WEB_PREFIX}/share/sgml/news.xml
+.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/news.xml)
+XML_NEWS_NEWS= ${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/news.xml
+.else
+XML_NEWS_NEWS= ${WEB_PREFIX}/share/sgml/news.xml
+.endif
+
+XSL_NEWS_NEWSFLASH= ${WEB_PREFIX}/share/sgml/templates.newsflash.xsl
+XSL_NEWS_NEWSFLASH_OLD= ${WEB_PREFIX}/share/sgml/templates.oldnewsflash.xsl
+XSL_NEWS_NEWS_RDF= ${WEB_PREFIX}/share/sgml/templates.news-rdf.xsl
# DEPENDSET: press ..........................................................
_DEPENDSET.press= ${XML_NEWS_PRESS_MASTER} ${XML_NEWS_PRESS} \
- ${XML_NEWS_INCLUDES_MASTER} ${XML_NEWS_INCLUDES} \
+ ${XSL_NEWS_PRESS} \
${XML_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
+XML_NEWS_PRESS_MASTER= ${WEB_PREFIX}/share/sgml/press.xml
+.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/press.xml)
+XML_NEWS_PRESS= ${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/press.xml
+.else
+XML_NEWS_PRESS= ${WEB_PREFIX}/share/sgml/press.xml
+.endif
+XSL_NEWS_PRESS= ${WEB_PREFIX}/share/sgml/templates.press.xsl
+XSL_NEWS_PRESS_OLD= ${WEB_PREFIX}/share/sgml/templates.oldpress.xsl
# DEPENDSET: events ..........................................................
_DEPENDSET.events= ${XML_EVENTS_EVENTS_MASTER} ${XML_EVENTS_EVENTS} \
- ${XML_EVENTS_CURDATE} ${XML_INCLUDES}
+ ${XSL_EVENTS} \
+ ${XSL_EVENTS_ICS} \
+ ${XML_INCLUDES}
_PARAMS.events= --param events.xml-master "'${XML_EVENTS_EVENTS_MASTER}'" \
- --param events.xml "'${XML_EVENTS_EVENTS}'" \
- --param curdate.xml "'${XML_EVENTS_CURDATE}'"
-XML_EVENTS_EVENTS_MASTER=${WEB_PREFIX}/en/events/events.xml
-.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/events/events.xml)
-XML_EVENTS_EVENTS= ${WEB_PREFIX}/${WWW_LANGCODE}/events/events.xml
+ --param events.xml "'${XML_EVENTS_EVENTS}'"
+XML_EVENTS_EVENTS_MASTER=${WEB_PREFIX}/share/sgml/events.xml
+.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/events.xml)
+XML_EVENTS_EVENTS= ${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/events.xml
.else
XML_EVENTS_EVENTS= ${XML_EVENTS_EVENTS_MASTER}
.endif
-XML_EVENTS_CURDATE= ${WEB_PREFIX}/en/events/curdate.xml
+XSL_EVENTS= ${WEB_PREFIX}/share/sgml/templates.events.xsl
+XSL_EVENTS_ICS= ${WEB_PREFIX}/share/sgml/templates.events2ics.xsl
-DATE?= /bin/date
-TR?= /usr/bin/tr
-
-${XML_EVENTS_CURDATE}:
- @${ECHO} "Generating ${.TARGET}"
- @${ECHO_CMD} '' > ${.TARGET}
- @${ECHO_CMD} '' >> ${.TARGET}
- @${ECHO_CMD} -n ' ' >> ${.TARGET}
- @${DATE} +%Y | ${TR} -d "\n" >> ${.TARGET}
- @${ECHO_CMD} '' >> ${.TARGET}
- @${ECHO_CMD} -n ' ' >> ${.TARGET}
- @${DATE} +%m | ${TR} -d "\n" >> ${.TARGET}
- @${ECHO_CMD} '' >> ${.TARGET}
- @${ECHO_CMD} -n ' ' >> ${.TARGET}
- @${DATE} +%d | ${TR} -d "\n" >> ${.TARGET}
- @${ECHO_CMD} '' >> ${.TARGET}
- @${ECHO_CMD} '' >> ${.TARGET}
+# DEPENDSET: commercial ........................................................
+_DEPENDSET.commercial= ${XML_COMMERCIAL_CONSULT} \
+ ${XML_COMMERCIAL_HARDWARE} \
+ ${XML_COMMERCIAL_ISP} \
+ ${XML_COMMERCIAL_MISC} \
+ ${XML_COMMERCIAL_SOFTWARE} \
+ ${XSL_ENTRIES} \
+ ${XML_INCLUDES}
+_PARAMS.commercial=
+XML_COMMERCIAL_CONSULT= ${WEB_PREFIX}/share/sgml/commercial.consult.xml
+XML_COMMERCIAL_HARDWARE=${WEB_PREFIX}/share/sgml/commercial.hardware.xml
+XML_COMMERCIAL_ISP= ${WEB_PREFIX}/share/sgml/commercial.isp.xml
+XML_COMMERCIAL_MISC= ${WEB_PREFIX}/share/sgml/commercial.misc.xml
+XML_COMMERCIAL_SOFTWARE=${WEB_PREFIX}/share/sgml/commercial.software.xml
-CLEANFILES+= ${XML_EVENTS_CURDATE}
+XSL_ENTRIES= ${WEB_PREFIX}/share/sgml/templates.entries.xsl
# DEPENDSET: navigation .....................................................
_DEPENDSET.navigation= ${XML_NAVIGATION} ${XML_INCLUDES}
_PARAMS.navigation= --param navigation.xml "'${XML_NAVIGATION}'"
XML_NAVIGATION= ${WEB_PREFIX}/${WWW_LANGCODE}/navigation.xml
# DEPENDSET: advisories .....................................................
_DEPENDSET.advisories= ${XML_ADVISORIES} ${XML_INCLUDES}
_PARAMS.advisories= --param advisories.xml "'${XML_ADVISORIES}'"
XML_ADVISORIES= ${WEB_PREFIX}/share/sgml/advisories.xml
# DEPENDSET: notices ........................................................
_DEPENDSET.notices= ${XML_NOTICES} ${XML_INCLUDES}
_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}. described below
# can be specified in a short form like the following:
# "docid:stylesheet:xml:target".
#
# TARGET.: (ex. TARGET.doc1= doc1.html)
# The target filename. This is optional and .html is defined
# by default.
#
# XSLT.: (ex. XSLT.doc1= doc1.xsl)
# Filename of the XSLT stylesheet. This is optional and .xsl is
# defined by default. The following keywords are interpreted specially:
#
# `xsl' - .xsl
#
# XSLT.DEFAULT:
# The default filename or keyword of XSLT stylesheet.
# When XSLT. and one in the quadruplet are not specified,
# this value is used.
#
# XML.: (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 s.
#
# SRCS.: (ex. SRCS.doc1= includes.xsl)
# Dependencies. SRCS.DEFAULT is dependencies for all s.
#
# DEPENDSET.: (ex. DEPENDSET.doc1= mirror)
# Depencencies predefined as keywords listed in ${_DEPENDSET.all}.
# DEPENDSET.DEFAULT is DEPENDSET for all s.
#
# PARAMS.: (ex. PARAMS.doc1= --params "foo" "'textproc/foo'")
# Parameters passed to xsltproc(1).
#
# XSLTPROCOPTS.: (ex. XSLTPROCOPTS.doc1= --nonet)
# Parameters passed to xsltproc(1).
#
# NO_DATA.
# The ${TARGET.} file will not be listed in $DATA if defined.
# NO_DATA.DEFAULT is the setting for all s.
#
# NO_TIDY.
# The ${TARGET.} file will not be processed by tidy if defined.
# NO_TIDY.DEFAULT is the setting for all s.
#
XSLTPROC_ENV+= SGML_CATALOG_FILES=
XSLTPROC_ENV+= XML_CATALOG_FILES="${XML_CATALOG_FILES}"
XSLTPROCOPTS= ${XSLTPROCFLAGS}
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
+XMLLINTOPTS= ${XMLLINTFLAGS}
+XMLLINTOPTS+= --xinclude --valid --noout
+.if defined(XML_CATALOG_FILES) && !empty(XML_CATALOG_FILES)
+XMLLINTOPTS+= --nonet --catalogs
+.endif
+XMLLINT= env ${XSLTPROC_ENV} ${PREFIX}/bin/xmllint
+
.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.${_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
+
+VALIDATE_DOCS+= VALIDATE.${_ID}
+VALIDATE.${_ID}:
+ @${ECHO} "==>[xmllint] ${XML.${_ID}}"
+ -@${XMLLINT} ${XMLLINTOPTS} ${XML.${_ID}} 2>&1 \
+ | ${SED} -e 's/^/ | /'
+. endfor
.endfor
-.endfor
+
+lint: ${VALIDATE_DOCS}
diff --git a/share/mk/web.site.mk b/share/mk/web.site.mk
index 0d1d460fe9..eeecaf0be4 100644
--- a/share/mk/web.site.mk
+++ b/share/mk/web.site.mk
@@ -1,382 +1,382 @@
# bsd.web.mk
-# $FreeBSD: www/share/mk/web.site.mk,v 1.72 2006/02/25 23:19:40 hrs Exp $
+# $FreeBSD: www/share/mk/web.site.mk,v 1.73 2006/05/13 03:27:22 simon Exp $
#
# Build and install a web site.
#
# Basic targets:
#
# all (default) -- performs batch mode processing necessary
# install -- installs everything
# clean -- remove anything generated by processing
#
.if exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
.endif
WEBDIR?= ${.CURDIR:T}
CGIDIR?= ${.CURDIR:T}
DESTDIR?= ${HOME}/public_html
WEBOWN?= ${USER}
WEBGRP?= www
WEBMODE?= 664
CGIOWN?= ${USER}
CGIGRP?= www
CGIMODE?= 775
BUNZIP2?= /usr/bin/bunzip2
CP?= /bin/cp
CVS?= /usr/bin/cvs
ECHO_CMD?= echo
FETCH?= /usr/bin/fetch
FIND?= /usr/bin/find
SETENV?= /usr/bin/env
LN?= /bin/ln
MKDIR?= /bin/mkdir
MV?= /bin/mv
PERL?= /usr/bin/perl5
.if !exists(${PERL}) && exists(/usr/local/bin/perl5)
PERL= /usr/local/bin/perl5
.endif
RM?= /bin/rm
SED?= /usr/bin/sed
SH?= /bin/sh
SORT?= /usr/bin/sort
TOUCH?= /usr/bin/touch
TRUE?= /usr/bin/true
LOCALBASE?= /usr/local
PREFIX?= ${LOCALBASE}
.if exists(${PREFIX}/bin/sgmlnorm) && !defined(OPENJADE)
SGMLNORM?= ${PREFIX}/bin/sgmlnorm
.else
SGMLNORM?= ${PREFIX}/bin/osgmlnorm
.endif
-CATALOG?= ${PREFIX}/share/sgml/html/catalog
-SGMLNORMOPTS?= -d ${SGMLNORMFLAGS} -c ${CATALOG} -D ${.CURDIR}
+SGMLNORMOPTS?= -d ${SGMLNORMFLAGS} ${CATALOG:S,^,-c ,} -D ${.CURDIR}
XSLTPROC?= ${PREFIX}/bin/xsltproc
XSLTPROCOPTS?= ${XSLTPROCFLAGS}
XMLLINT?= ${PREFIX}/bin/xmllint
XMLLINTOPTS?= ${XMLLINTFLAGS}
TIDY?= ${PREFIX}/bin/tidy
.if defined(TIDY_VERBOSE)
_TIDYLOGFILE= tidyerr.${.TARGET}
CLEANFILES+= tidyerr.*
.else
_TIDYLOGFILE= /dev/null
.endif
TIDYOPTS?= -wrap 90 -m -raw -preserve -f ${_TIDYLOGFILE} -asxml ${TIDYFLAGS}
HTML2TXT?= ${PREFIX}/bin/w3m
HTML2TXTOPTS?= -dump ${HTML2TXTFLAGS}
ISPELL?= ispell
ISPELLOPTS?= -l -p /usr/share/dict/freebsd ${ISPELLFLAGS}
WEBCHECK?= ${PREFIX}/bin/webcheck
WEBCHECKOPTS?= -ab ${WEBCHECKFLAGS}
WEBCHECKDIR?= /webcheck
WEBCHECKINSTALLDIR?= ${DESTDIR}${WEBCHECKDIR}
.if !defined(WEBCHECKURL)
WEBCHECKURL!= ${ECHO_CMD} http://www.FreeBSD.org/${WEBBASE:S/data//}/${WEBDIR:S/data//}/ | ${SED} -E "s%/+%/%g"
.endif
#
# Install dirs derived from the above.
#
DOCINSTALLDIR= ${DESTDIR}${WEBBASE}/${WEBDIR}
CGIINSTALLDIR= ${DESTDIR}${WEBBASE}/${CGIDIR}
#
# The orphan list contains sources specified in DOCS that there
# is no transform rule for. We start out with all of them, and
# each rule below removes the ones it knows about. If any are
# left over at the end, the user is warned about them and build
# breaks.
#
ORPHANS:= ${DOCS}
#
# Tell install(1) to always copy file being installed.
#
COPY= -C
#
# Where the ports live, if CVS isn't used (ie. NOPORTSCVS is defined)
#
PORTSBASE?= /usr
#
# URL where INDEX can be found (define NOPORTSNET to disable)
#
INDEXURI?= http://www.FreeBSD.org/ports/INDEX-6
#
# Instruct bsd.subdir.mk to NOT to process SUBDIR directive. It is not
# necessary since web.site.mk does it using own rules.
#
NO_SUBDIR= YES
#
# for dependency
#
.if !defined(WITHOUT_DOC)
#
# When WITHOUT_DOC is not defined, we use doc.common.mk.
#
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\
build without the doc/ module.
.endif
.else # !defined(WITHOUT_DOC)
#
# When WITHOUT_DOC is defined, we should not use files in doc/ module at all.
#
.if !defined(WWW_LANGCODE) || empty(WWW_LANGCODE)
_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)
+_INCLIST= navibar.ent \
+ navibar.l10n.ent
_SGML_INCLUDES= ${SGML_INCLUDES}
-_SGML_INCLUDES+=${WEB_PREFIX}/${WWW_LANGCODE}/includes.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/${WWW_LANGCODE}/includes.navabout.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/${WWW_LANGCODE}/includes.navcommunity.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/${WWW_LANGCODE}/includes.navdevelopers.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/${WWW_LANGCODE}/includes.navdocs.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/${WWW_LANGCODE}/includes.navdownload.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/${WWW_LANGCODE}/includes.navsupport.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.header.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.navabout.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.navcommunity.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.navdevelopers.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.navdocs.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.navdownload.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.navsupport.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.misc.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.release.sgml
-_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/includes.sgml
+
+.for F in ${_INCLIST}
+.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/${F})
+_SGML_INCLUDES+=${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/${F}
+.endif
+.if exists(${WEB_PREFIX}/share/sgml/${F})
+_SGML_INCLUDES+=${WEB_PREFIX}/share/sgml/${F}
+.endif
+.endfor
+
+CATALOG?= ${PREFIX}/share/sgml/html/catalog \
+ ${PREFIX}/share/sgml/catalog
+.if exists(${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/catalog)
+CATALOG+= ${WEB_PREFIX}/${WWW_LANGCODE}/share/sgml/catalog
+.endif
+CATALOG+= ${WEB_PREFIX}/share/sgml/catalog
##################################################################
# Transformation rules
###
# file.sgml --> file.html
#
# Runs file.sgml through spam to validate and expand some entity
# references are expanded. file.html is added to the list of
# things to install.
.SUFFIXES: .sgml .html
.if defined(REVCHECK)
PREHTML?= ${WEB_PREFIX}/ja/prehtml
CANONPREFIX0!= cd ${WEB_PREFIX}; ${ECHO_CMD} $${PWD};
CANONPREFIX= ${PWD:S/^${CANONPREFIX0}//:S/^\///}
LOCALTOP!= ${ECHO_CMD} ${CANONPREFIX} | \
${PERL} -pe 's@[^/]+@..@g; $$_.="/." if($$_ eq".."); s@^\.\./@@;'
DIR_IN_LOCAL!= ${ECHO_CMD} ${CANONPREFIX} | ${PERL} -pe 's@^[^/]+/?@@;'
PREHTMLOPTS?= -revcheck "${LOCALTOP}" "${DIR_IN_LOCAL}" ${PREHTMLFLAGS}
.else
DATESUBST?= 's///'
# Force override base to point to http://www.FreeBSD.org/. Note: This
# is used for http://security.FreeBSD.org/ .
.if WITH_WWW_FREEBSD_ORG_BASE
BASESUBST?= -e 's///'
.endif
PREHTML?= ${SED} -e ${DATESUBST} ${BASESUBST}
.endif
GENDOCS+= ${DOCS:M*.sgml:S/.sgml$/.html/g}
ORPHANS:= ${ORPHANS:N*.sgml}
.sgml.html: ${_SGML_INCLUDES}
${PREHTML} ${PREHTMLOPTS} ${.IMPSRC} | \
${SETENV} SGML_CATALOG_FILES= \
${SGMLNORM} ${SGMLNORMOPTS} > ${.TARGET} || \
(${RM} -f ${.TARGET} && false)
.if !defined(NO_TIDY)
-${TIDY} ${TIDYOPTS} ${.TARGET}
.endif
##################################################################
# Special Targets
#
# Spellcheck all generated documents in the current directory.
#
spellcheck:
.for _entry in ${GENDOCS}
@echo "Spellcheck ${_entry}"
@${HTML2TXT} ${HTML2TXTOPTS} ${.OBJDIR}/${_entry} | ${ISPELL} ${ISPELLOPTS}
.endfor
#
# Check installed page's hypertext references. Checking is done relatively
# to ${.CURDIR} value, i.e. calling 'make webcheck' in www/ru/java
# directory will force checking all URLs at http://www.FreeBSD.org/ru/java/
#
# NOTE: webcheck's output always stored to ${DESTDIR}/webcheck directory.
#
webcheck:
@[ -d ${WEBCHECKINSTALLDIR} ] || ${MKDIR} ${WEBCHECKINSTALLDIR}
${WEBCHECK} ${WEBCHECKOPTS} -o ${WEBCHECKINSTALLDIR} ${WEBCHECKURL}
#
# Check if all directories and files in current directory are listed in
# Makefile as processing source. If anything not listed is found, then
# user is warned about (it can be forgotten file or directory).
#
.if make(checkmissing)
# skip printing '===> ...' while processing SUBDIRs
ECHODIR= ${TRUE}
# detect relative ${.CURDIR}
_CURDIR!= realpath ${.CURDIR}
_PFXDIR!= realpath ${WEB_PREFIX}
CDIR= ${_CURDIR:S/${_PFXDIR}\///}
# populate missing directories list based on $SUBDIR
_DIREXCL= ! -name CVS
.for entry in ${SUBDIR}
_DIREXCL+= ! -name ${entry}
.endfor
MISSDIRS!= ${FIND} ./ -type d ${_DIREXCL} -maxdepth 1 | ${SED} "s%./%%g"
# populate missing files list based on $DOCS, $DATA and $CGI
_FILEEXCL= ! -name Makefile\* ! -name includes.\*
.for entry in ${DOCS} ${DATA} ${CGI}
_FILEEXCL+= ! -name ${entry}
.endfor
MISSFILES!= ${FIND} ./ -type f ${_FILEEXCL} -maxdepth 1 | ${SED} "s%./%%g"
checkmissing: _PROGSUBDIR
.if !empty(MISSDIRS)
@${ECHO_CMD} "===> ${CDIR}"
@${ECHO_CMD} "Directories not listed in SUBDIR:"
.for entry in ${MISSDIRS}
@${ECHO_CMD} " >>> ${entry}"
.endfor
.endif
.if !empty(MISSFILES)
@${ECHO_CMD} "===> ${CDIR}"
@${ECHO_CMD} "Files not listed in DOCS/DATA/CGI:"
.for entry in ${MISSFILES}
@${ECHO_CMD} " >>> ${entry} "
.endfor
.endif
.endif
##################################################################
# Main Targets
#
# If no target is specified, .MAIN is made.
#
.MAIN: all
#
# Build most everything.
#
all: ${COOKIE} orphans ${GENDOCS} ${DATA} ${CGI} _PROGSUBDIR
#
# Warn about anything in DOCS that has no suffix translation rule.
#
.if !empty(ORPHANS)
orphans:
@${ECHO} Warning! I don\'t know what to do with: ${ORPHANS}; \
exit 1
.else
orphans:
.endif
#
# Clean things up.
#
.if !target(clean)
clean: _PROGSUBDIR
${RM} -f Errs errs mklog ${GENDOCS} ${CLEANFILES}
.endif
#
# Install targets: before, real, and after.
#
.if !target(install)
.if !target(beforeinstall)
beforeinstall:
.endif
.if !target(afterinstall)
afterinstall:
.endif
INSTALL_WEB?= \
${INSTALL} ${COPY} ${INSTALLFLAGS} \
-o ${WEBOWN} -g ${WEBGRP} -m ${WEBMODE}
INSTALL_CGI?= \
${INSTALL} ${COPY} ${INSTALLFLAGS} \
-o ${CGIOWN} -g ${CGIGRP} -m ${CGIMODE}
_ALLINSTALL+= ${GENDOCS} ${DATA}
realinstall: ${COOKIE} ${_ALLINSTALL} ${CGI} _PROGSUBDIR
.if !empty(_ALLINSTALL)
@${MKDIR} -p ${DOCINSTALLDIR}
.for entry in ${_ALLINSTALL}
.if exists(${.CURDIR}/${entry})
${INSTALL_WEB} ${.CURDIR}/${entry} ${DOCINSTALLDIR}
.else
${INSTALL_WEB} ${entry} ${DOCINSTALLDIR}
.endif
.endfor
.if defined(INDEXLINK) && !empty(INDEXLINK)
cd ${DOCINSTALLDIR}; ${LN} -fs ${INDEXLINK} index.html
.endif
.endif
.if defined(CGI) && !empty(CGI)
@${MKDIR} -p ${CGIINSTALLDIR}
.for entry in ${CGI}
${INSTALL_CGI} ${.CURDIR}/${entry} ${CGIINSTALLDIR}
.endfor
.endif
# Set up install dependencies so they happen in the correct order.
install: afterinstall
afterinstall: realinstall2
realinstall: beforeinstall
realinstall2: realinstall
.endif
#
# This recursively calls make in subdirectories.
#
_PROGSUBDIR: .USE
.if defined(SUBDIR) && !empty(SUBDIR)
.for entry in ${SUBDIR}
@${ECHODIR} "===> ${DIRPRFX}${entry}"
@cd ${.CURDIR}/${entry}; \
${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} \
DIRPRFX=${DIRPRFX}${entry}/
.endfor
.endif
.include
#
# Process 'make obj' recursively (should be declared *after* inclusion
# of bsd.obj.mk)
#
obj: _PROGSUBDIR
# THE END