# bsd.web.mk # $NetBSD: web.site.mk,v 1.14 2004/02/28 04:42:15 grant Exp $ # FreeBSD: www/share/mk/web.site.mk,v 1.43 2002/08/07 03:17:10 trhodes 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 # LANG?= en .if exists(${.CURDIR}/../Makefile.inc) .include "${.CURDIR}/../Makefile.inc" .endif # include settings from /etc/mk.conf first .include LOCALBASE?= /usr/pkg PREFIX?= ${LOCALBASE} .if defined(PKG_SYSCONFDIR.xmlcatmgr) XML_CATALOG_FILES= ${PKG_SYSCONFDIR.xmlcatmgr}/xml/catalog .elif defined(PKG_SYSCONFBASE) XML_CATALOG_FILES= ${PKG_SYSCONFBASE}/xml/catalog .else XML_CATALOG_FILES= ${LOCALBASE}/etc/xml/catalog .endif WEBDIR?= ${.CURDIR:T} CGIDIR?= ${.CURDIR:T} DESTDIR?= ${HOME}/public_html WEBOWN?= ${USER} WEBGRP?= www WEBMODE?= 664 CGIOWN?= ${USER} CGIGRP?= www CGIMODE?= 775 CP?= /bin/cp CVS?= /usr/bin/cvs ECHO?= echo SETENV?= /usr/bin/env LN?= /bin/ln MKDIR?= /bin/mkdir MV?= /bin/mv PERL?= ${PREFIX}/bin/perl RM?= /bin/rm SED?= /usr/bin/sed SH?= /bin/sh SORT?= /usr/bin/sort TOUCH?= /usr/bin/touch HTML2TXT?= ${PREFIX}/bin/lynx HTML2TXTOPTS?= -force_html -dump -nolist ${HTML2TXTFLAGS} ISPELL?= ispell ISPELLOPTS?= -l -p ${WEB_PREFIX}/en/share/dict/words ${ISPELLFLAGS} # Handle old .LIST files. .if exists(${WEB_PREFIX}/${LANG}/list2html.pl) LIST2HTML?= ${PERL} ${WEB_PREFIX}/${LANG}/list2html.pl .else LIST2HTML?= ${PERL} ${WEB_PREFIX}/list2html.pl .endif LIST2HTMLOPTS?= -d .if defined(LISTCOLLECTION) LIST2HTMLOPTS+= -c ${LISTCOLLECTION} .endif # Our customization files. .if exists(${WEB_PREFIX}/share/xsl/netbsd-webpage-${LANG}.xsl) XSLFILE?= ${WEB_PREFIX}/share/xsl/netbsd-webpage-${LANG}.xsl .else XSLFILE?= ${WEB_PREFIX}/share/xsl/netbsd-webpage.xsl .endif LAYOUTFILE= ${WEB_PREFIX}/autolayout.xml XMLDEPS+= ${XSLFILE} ${LAYOUTFILE} # Definitions for the XSLT processor. They heavily depend on xsltproc, so # making them tunable is not a good idea. XSLTPROC_ENV+= SGML_CATALOG_FILES= XSLTPROC_ENV+= XML_CATALOG_FILES=${XML_CATALOG_FILES} XSLTPROC_ARGS+= --stringparam LOCALBASE ${LOCALBASE} XSLTPROC_ARGS+= --stringparam WEB_PREFIX ${WEB_PREFIX} XSLTPROC_ARGS+= --stringparam autolayout-file ${LAYOUTFILE} .if !empty(XML_CATALOG_FILES) XSLTPROC_ARGS+= --nonet --catalogs .endif XSLTPROC= env ${XSLTPROC_ENV} ${PREFIX}/bin/xsltproc ${XSLTPROC_ARGS} # # 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. # ORPHANS:= ${DOCS} COPY= -C ################################################################## # Transformation rules ### # file.xml --> file.html # # Generate HTML from Docbook Website XML .SUFFIXES: .xml .html .txt GENDOCS+= ${DOCS:M*.html:S/.html$/.txt/g} GENDOCS+= ${DOCS:M*.xml:S/.xml$/.html/g} ORPHANS:= ${ORPHANS:N*.xml} .xml.html: ${XMLDEPS} @${ECHO} "[xsltproc] ${.IMPSRC} -> ${.TARGET}" @${XSLTPROC} -o ${.TARGET} ${XSLFILE} ${.IMPSRC} .html.txt: @${ECHO} "[html2txt] ${.IMPSRC} -> ${.TARGET}" @${HTML2TXT} ${HTML2TXTOPTS} ${.IMPSRC} > ${.TARGET} ### # file.list --> file.html # # Generate HTML from old LIST format files .SUFFIXES: .data .list .html GENDOCS+= ${LISTDOCS:M*.html:S/.html$/.txt/g} GENDOCS+= ${LISTDOCS:M*.list:S/.list$/.html/g} ORPHANS:= ${ORPHANS:N*.list} .list.html: @${ECHO} "[list2html] ${.IMPSRC} -> ${.TARGET}" @${LIST2HTML} ${LIST2HTMLOPTS} ${.IMPSRC} ${.TARGET} ################################################################## # Targets # # If no target is specified, .MAIN is made # .MAIN: all # # Build most everything # all: pre-all ${COOKIE} orphans ${GENDOCS} ${DATA} ${LOCAL} ${CGI} _PROGSUBDIR # # Make sure autolayout.xml is up-to-date first # pre-all: ${WEB_PREFIX}/autolayout.xml .if ${WEB_PREFIX} == "." autolayout.xml: ${WEB_PREFIX}/layout.xml .endif ${WEB_PREFIX}/autolayout.xml: ${WEB_PREFIX}/layout.xml .if ${WEB_PREFIX} == "." @${ECHO} "[xsltproc] layout.xml -> autolayout.xml" @${XSLTPROC} -o ${.TARGET} \ ${LOCALBASE}/share/xml/website/xsl/autolayout.xsl \ ${WEB_PREFIX}/layout.xml .else @${ECHO} "Warning! layout.xml has changed. The whole website needs to be rebuilt." @false .endif spellcheck: .for _entry in ${GENDOCS} @echo "Spellcheck ${_entry}" @${HTML2TXT} ${HTML2TXTOPTS} ${.CURDIR}/${_entry} | ${ISPELL} ${ISPELLOPTS} .endfor # # Warn about anything in DOCS that has no translation # .if !empty(ORPHANS) orphans: @${ECHO} "Warning! I don't know what to do with: ${ORPHANS}" .else orphans: .endif # # Clean things up # .if !target(clean) clean: _PROGSUBDIR .if defined(DIRS_TO_CLEAN) && !empty(DIRS_TO_CLEAN) .for dir in ${DIRS_TO_CLEAN} cd ${.CURDIR}/${dir}; ${MAKE} clean .endfor .endif ${RM} -f Errs errs mklog ${GENDOCS} ${LOCAL} ${CLEANFILES} .endif # # Really clean things up # .if !target(cleandir) cleandir: clean _PROGSUBDIR ${RM} -f ${.CURDIR}/tags .depend cd ${.CURDIR}; ${RM} -rf obj .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} ${LOCAL} 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 .if defined(DOCSUBDIR) && !empty(DOCSUBDIR) .for entry in ${DOCSUBDIR} @${MKDIR} -p ${DOCINSTALLDIR}/${entry} .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. # #SUBDIR+=${DOCSUBDIR} _PROGSUBDIR: .USE .if defined(SUBDIR) && !empty(SUBDIR) .for entry in ${SUBDIR} @${ECHO} "===> ${DIRPRFX}${entry}" @cd ${.CURDIR}/${entry}; \ ${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} \ DIRPRFX=${DIRPRFX}${entry}/ .endfor .endif .if defined(DOCSUBDIR) && !empty(DOCSUBDIR) .for entry in ${DOCSUBDIR} @${ECHO} "===> ${DIRPRFX}${entry}" @if [ \( "${WEBDIR}" = "data" -a "${entry}" = "handbook" \) -o "${entry}" = "docproj-primer" ]; then \ cd ${.CURDIR}/${entry}; \ ${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} \ DIRPRFX=${DIRPRFX}${entry}/ ${PARAMS} \ FORMATS="txt html html-split"; \ elif [ "${WEBDIR}" = "data/ja" -a "${entry}" = "handbook" ]; then \ cd ${.CURDIR}/${entry}; \ ${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} \ DIRPRFX=${DIRPRFX}${entry}/ ${PARAMS} \ FORMATS="html html-split"; \ else \ cd ${.CURDIR}/${entry}; \ ${MAKE} ${.TARGET:S/realinstall/install/:S/.depend/depend/} \ DIRPRFX=${DIRPRFX}${entry}/ ${PARAMS}; \ fi .endfor .endif # # cruft for generating linuxdoc stuff # .if defined (DOCSUBDIR) && !empty(DOCSUBDIR) FORMATS?= "html ps latin1 ascii" PARAMS= DESTDIR=${DESTDIR} DOCDIR=${WEBBASE}/${WEBDIR} PARAMS+= DOCOWN=${WEBOWN} DOCGRP=${WEBGRP} PARAMS+= FORMATS=${FORMATS} COPY="${COPY}" PARAMS+= SGMLOPTS="${SGMLOPTS}" .endif .include # THE END