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