svn commit: r51264 - in head: en_US.ISO8859-1/htdocs/releases/12.0R en_US.ISO8859-1/htdocs/releases/12.0R/errata en_US.ISO8859-1/htdocs/releases/12.0R/hardware en_US.ISO8859-1/htdocs/releases/12.0R...

Glen Barber gjb at FreeBSD.org
Thu Dec 7 19:58:49 UTC 2017


Author: gjb
Date: Thu Dec  7 19:58:47 2017
New Revision: 51264
URL: https://svnweb.freebsd.org/changeset/doc/51264

Log:
  Update the 12.0R release documentation following the recent move
  from the base repository with changes provided by hrs@, and further
  tweaks from myself.
  
  Of note:
  - Consolidate duplicated logic throughout the Makefiles and shared
    logic, and move files to more sane locations where they may be
    shared by other parts of the build tools.
  - Update location of several entity files.
  - In the top-level Makefile, only include the hardware page if the
    MAN4PAGES knob is set.  This is done to prevent build failures on
    the website until the webupdate script and wrapper are updated,
    which will require some more thought. [1]
  
  This fixes the 'reldoc' target in release/Makefile in head, found
  to be broken a few days ago.
  
  [1] Changes from myself.
  
  Patch provided by:	hrs
  Sponsored by:	The FreeBSD Foundation

Added:
  head/en_US.ISO8859-1/htdocs/releases/12.0R/Makefile.inc   (contents, props changed)
  head/share/misc/dev.archlist.txt   (contents, props changed)
  head/share/misc/man2hwnotes.pl   (contents, props changed)
Deleted:
  head/en_US.ISO8859-1/htdocs/share/misc/
Modified:
  head/en_US.ISO8859-1/htdocs/releases/12.0R/Makefile
  head/en_US.ISO8859-1/htdocs/releases/12.0R/errata/Makefile
  head/en_US.ISO8859-1/htdocs/releases/12.0R/hardware/Makefile
  head/en_US.ISO8859-1/htdocs/releases/12.0R/hardware/hardware.xml
  head/en_US.ISO8859-1/htdocs/releases/12.0R/readme/Makefile
  head/en_US.ISO8859-1/htdocs/releases/12.0R/relnotes/Makefile

Modified: head/en_US.ISO8859-1/htdocs/releases/12.0R/Makefile
==============================================================================
--- head/en_US.ISO8859-1/htdocs/releases/12.0R/Makefile	Thu Dec  7 19:55:12 2017	(r51263)
+++ head/en_US.ISO8859-1/htdocs/releases/12.0R/Makefile	Thu Dec  7 19:58:47 2017	(r51264)
@@ -19,6 +19,12 @@ DOCS=	index.xml \
 
 DATA=	docbook.css
 
+SUBDIR=	errata readme relnotes
+
+.if defined(MAN4DIR) && !empty(MAN4DIR)
+SUBDIR+=	hardware
+.endif
+
 # PGP-signed checksums
 
 _BIGIRON?=	amd64 \
@@ -53,65 +59,6 @@ _ARM?=		BANANAPI \
 . for _A in ${_ARM}
 #DATA+=		CHECKSUM.${CHECKSUM}-${THISRELEASE}-arm-armv6-${_A}.asc
 . endfor
-.endfor
-
-_hardware?=	hardware
-
-# The path used on build-web is 'src/share/man/man4'.
-.if !defined(MAN4DIR) || empty(MAN4DIR)
-. if exists(${DOC_PREFIX}/../src/share/man/man4)
-MAN4DIR=	${DOC_PREFIX}/../src/share/man/man4
-. elif exists(${DOC_PREFIX}/../share/man/man4)
-MAN4DIR=	${DOC_PREFIX}/../share/man/man4
-. elif exists(${DOC_PREFIX}/../man/man4)
-MAN4DIR=	${DOC_PREFIX}/../man/man4
-. elif exists(${DOC_PREFIX}/../man4)
-MAN4DIR=	${DOC_PREFIX}/../man4
-. else
-.  warning "MAN4DIR not found.  Unable to build hardware.html"
-_hardware=	# empty
-. endif
-.endif
-
-D=		errata
-D+=		${_hardware}
-D+=		readme
-D+=		relnotes
-
-MAN4PAGES?=	${MAN4DIR}/*.4 ${MAN4DIR}/man4.*/*.4
-ARCHLIST?=	${.CURDIR}/../../share/misc/dev.archlist.txt
-CLEANFILES+=	dev-auto.ent \
-		index.html \
-		schedule.html
-
-MAN2HWNOTES_CMD=${.CURDIR}/../../share/misc/man2hwnotes.pl
-.if defined(HWNOTES_MI)
-MAN2HWNOTES_FLAGS=
-.else
-MAN2HWNOTES_FLAGS=	-c
-.endif
-
-dev-auto.ent:
-	${PERL} ${MAN2HWNOTES_CMD} ${MAN2HWNOTES_FLAGS} -a ${ARCHLIST} -o ${.TARGET}.tmp ${MAN4PAGES}
-	${MV} ${.TARGET}.tmp ${.TARGET}
-
-.if make(clean)
-beforeclean:
-SUBDIR+=	${D}
-.include "${DOC_PREFIX}/share/mk/doc.subdir.mk"
-.endif
-
-beforeinstall:
-.for _SD in ${D}
-. if (${_SD:Mhardware} != "")
-	${MAKE} -B -C ${.CURDIR} dev-auto.ent
-. endif
-	${MAKE} -C ${_SD} DOCINSTALLDIR=${DOCINSTALLDIR} all
-.endfor
-
-afterinstall:
-.for _SD in ${D}
-	${MAKE} -C ${_SD} DOCINSTALLDIR=${DOCINSTALLDIR} install
 .endfor
 
 .include "${DOC_PREFIX}/share/mk/web.site.mk"

Added: head/en_US.ISO8859-1/htdocs/releases/12.0R/Makefile.inc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/en_US.ISO8859-1/htdocs/releases/12.0R/Makefile.inc	Thu Dec  7 19:58:47 2017	(r51264)
@@ -0,0 +1,12 @@
+# $FreeBSD$
+.if !defined(_HTDOCS_RELEASES_12_0R_INC)
+_HTDOCS_RELEASES_12_0R_INC=1
+DOC_PREFIX?=	${.CURDIR}/../../../../..
+WEBDIR?=	/data/releases/12.0R
+.if defined(DESTDIR)
+DESTDIR:=	${DESTDIR}/${WEBDIR}
+.else
+DESTDIR=	${HOME}/public_html/${WEBDIR}
+.endif
+DOCBOOK_DEPS_DISABLE=	YES
+.endif

Modified: head/en_US.ISO8859-1/htdocs/releases/12.0R/errata/Makefile
==============================================================================
--- head/en_US.ISO8859-1/htdocs/releases/12.0R/errata/Makefile	Thu Dec  7 19:55:12 2017	(r51263)
+++ head/en_US.ISO8859-1/htdocs/releases/12.0R/errata/Makefile	Thu Dec  7 19:58:47 2017	(r51264)
@@ -1,34 +1,12 @@
 # $FreeBSD$
 
-.if exists(../Makefile.conf)
-.include "../Makefile.conf"
-.endif
 .if exists(../Makefile.inc)
 .include "../Makefile.inc"
 .endif
 
-DOC_PREFIX?=	${.CURDIR}/../../../../..
-RELN_ROOT?=	${.CURDIR}/..
-
 DOC?=			errata
-FORMATS?=		html
+FORMATS?=		html txt
 INSTALL_COMPRESSED?=	gz
 INSTALL_ONLY_COMPRESSED=
-
-JADEFLAGS+=		-V %generate-article-toc%
-
-SRCS?=			errata.xml
-
-DATA+=			${DOC}.html
-
-CLEANFILES+=		${DOC}.html \
-			${DOC}.txt \
-			catalog-cwd.xml \
-			autogen.ent \
-			${DOC}.parsed.*
-
-install: ${DOC}.html
-	mkdir -p ${DOCINSTALLDIR}
-	${INSTALL_DOCS} ${DATA} ${DOCINSTALLDIR}
 
 .include "${DOC_PREFIX}/share/mk/doc.project.mk"

Modified: head/en_US.ISO8859-1/htdocs/releases/12.0R/hardware/Makefile
==============================================================================
--- head/en_US.ISO8859-1/htdocs/releases/12.0R/hardware/Makefile	Thu Dec  7 19:55:12 2017	(r51263)
+++ head/en_US.ISO8859-1/htdocs/releases/12.0R/hardware/Makefile	Thu Dec  7 19:58:47 2017	(r51264)
@@ -1,34 +1,32 @@
 # $FreeBSD$
 
-.if exists(../Makefile.conf)
-.include "../Makefile.conf"
-.endif
 .if exists(../Makefile.inc)
 .include "../Makefile.inc"
 .endif
 
-DOC_PREFIX?=	${.CURDIR}/../../../../..
-RELN_ROOT?=	${.CURDIR}/..
+# The path used on build-web is 'src/share/man/man4'.
+.if make(all) && (!defined(MAN4DIR) || empty(MAN4DIR) || !exists(${MAN4DIR}))
+. warning "MAN4DIR not found.  Unable to build hardware.html"
+.endif
 
-JADEFLAGS+=		-V %generate-article-toc%
+MAN4PAGES?=	${MAN4DIR}/*.4 ${MAN4DIR}/man4.*/*.4
+ARCHLIST?=	${DOC_PREFIX}/share/misc/dev.archlist.txt
 
-DOC?=			hardware
+MAN2HWNOTES_CMD=${DOC_PREFIX}/share/misc/man2hwnotes.pl
+.if defined(HWNOTES_MI)
+MAN2HWNOTES_FLAGS=
+.else
+MAN2HWNOTES_FLAGS=	-c
+.endif
+
+DOC=			hardware
 FORMATS?=		html
 INSTALL_COMPRESSED?=	gz
 INSTALL_ONLY_COMPRESSED=
 
-SRCS?=			hardware.xml
-
-DATA+=			${DOC}.html
-
-CLEANFILES+=		${DOC}.html \
-			${DOC}.txt \
-			catalog-cwd.xml \
-			autogen.ent \
-			${DOC}.parsed.*
-
-install: ${DOC}.html
-	mkdir -p ${DOCINSTALLDIR}
-	${INSTALL_DOCS} ${DATA} ${DOCINSTALLDIR}
+hardware.parsed.xml: dev-auto.ent
+dev-auto.ent:
+	${PERL} ${MAN2HWNOTES_CMD} ${MAN2HWNOTES_FLAGS} -a ${ARCHLIST} -o ${.TARGET} ${MAN4PAGES} || (rm -f ${.TARGET})
+CLEANFILES+=	dev-auto.ent
 
 .include "${DOC_PREFIX}/share/mk/doc.project.mk"

Modified: head/en_US.ISO8859-1/htdocs/releases/12.0R/hardware/hardware.xml
==============================================================================
--- head/en_US.ISO8859-1/htdocs/releases/12.0R/hardware/hardware.xml	Thu Dec  7 19:55:12 2017	(r51263)
+++ head/en_US.ISO8859-1/htdocs/releases/12.0R/hardware/hardware.xml	Thu Dec  7 19:58:47 2017	(r51264)
@@ -1,16 +1,19 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
-"../../../../../share/xml/freebsd50.dtd" [
-<!ENTITY % release PUBLIC "-//FreeBSD//ENTITIES Release Specification//EN" "../share/xml/release.ent">
+    "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd" [
+<!ENTITY % release PUBLIC "-//FreeBSD//ENTITIES Release Specification//EN"
+    "../share/xml/release.ent">
  %release;
-<!ENTITY % sponsor PUBLIC "-//FreeBSD//ENTITIES Sponsor Specification//EN" "../share/xml/sponsor.ent">
+<!ENTITY % sponsor PUBLIC "-//FreeBSD//ENTITIES Sponsor Specification//EN"
+    "../share/xml/sponsor.ent">
  %sponsor;
-<!ENTITY % vendor PUBLIC "-//FreeBSD//ENTITIES Vendor Specification//EN" "../share/xml/vendor.ent">
+<!ENTITY % vendor PUBLIC "-//FreeBSD//ENTITIES Vendor Specification//EN"
+    "../share/xml/vendor.ent">
  %vendor;
 <!ENTITY security SYSTEM "../share/xml/security.xml">
 <!ENTITY errata SYSTEM "../share/xml/errata.xml">
-<!-- <!ENTITY % devauto PUBLIC "-//FreeBSD//ENTITIES Auto Generated Device Lists//EN" "../share/xml/dev-auto.ent"> -->
-<!ENTITY % devauto PUBLIC "-//FreeBSD//ENTITIES Auto Generated Device Lists//EN" "../dev-auto.ent">
+<!ENTITY % devauto PUBLIC "-//FreeBSD//ENTITIES Auto Generated Device Lists//EN"
+    "http://www.FreeBSD.org/XML/cwd/dev-auto.ent">
 %devauto;
 ]>
 <article xmlns="http://docbook.org/ns/docbook"

Modified: head/en_US.ISO8859-1/htdocs/releases/12.0R/readme/Makefile
==============================================================================
--- head/en_US.ISO8859-1/htdocs/releases/12.0R/readme/Makefile	Thu Dec  7 19:55:12 2017	(r51263)
+++ head/en_US.ISO8859-1/htdocs/releases/12.0R/readme/Makefile	Thu Dec  7 19:58:47 2017	(r51264)
@@ -1,34 +1,12 @@
 # $FreeBSD$
 
-.if exists(../Makefile.conf)
-.include "../Makefile.conf"
-.endif
 .if exists(../Makefile.inc)
 .include "../Makefile.inc"
 .endif
 
-DOC_PREFIX?=	${.CURDIR}/../../../../..
-RELN_ROOT?=	${.CURDIR}/..
-
 DOC=			readme
-FORMATS?=		html
+FORMATS?=		html txt
 INSTALL_COMPRESSED?=	gz
 INSTALL_ONLY_COMPRESSED=
-
-JADEFLAGS+=		-V %generate-article-toc%
-
-SRCS?=			readme.xml
-
-DATA+=			${DOC}.html
-
-CLEANFILES+=		${DOC}.html \
-			${DOC}.txt \
-			catalog-cwd.xml \
-			autogen.ent \
-			${DOC}.parsed.*
-
-install: ${DOC}.html
-	mkdir -p ${DOCINSTALLDIR}
-	${INSTALL_DOCS} ${DATA} ${DOCINSTALLDIR}
 
 .include "${DOC_PREFIX}/share/mk/doc.project.mk"

Modified: head/en_US.ISO8859-1/htdocs/releases/12.0R/relnotes/Makefile
==============================================================================
--- head/en_US.ISO8859-1/htdocs/releases/12.0R/relnotes/Makefile	Thu Dec  7 19:55:12 2017	(r51263)
+++ head/en_US.ISO8859-1/htdocs/releases/12.0R/relnotes/Makefile	Thu Dec  7 19:58:47 2017	(r51264)
@@ -1,34 +1,12 @@
 # $FreeBSD$
 
-.if exists(../Makefile.conf)
-.include "../Makefile.conf"
-.endif
 .if exists(../Makefile.inc)
 .include "../Makefile.inc"
 .endif
 
-DOC_PREFIX?=	${.CURDIR}/../../../../..
-RELN_ROOT?=	${.CURDIR}/..
-
 DOC=			relnotes
-FORMATS?=		html
+FORMATS?=		html txt
 INSTALL_COMPRESSED?=	gz
 INSTALL_ONLY_COMPRESSED=
-
-JADEFLAGS+=		-V %generate-article-toc%
-
-SRCS?=			relnotes.xml
-
-DATA+=			${DOC}.html
-
-CLEANFILES+=		${DOC}.html \
-			${DOC}.txt \
-			catalog-cwd.xml \
-			autogen.ent \
-			${DOC}.parsed.*
-
-install: ${DOC}.html
-	mkdir -p ${DOCINSTALLDIR}
-	${INSTALL_DOCS} ${DATA} ${DOCINSTALLDIR}
 
 .include "${DOC_PREFIX}/share/mk/doc.project.mk"

Added: head/share/misc/dev.archlist.txt
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/share/misc/dev.archlist.txt	Thu Dec  7 19:58:47 2017	(r51264)
@@ -0,0 +1,176 @@
+#
+# Copyright (c) 2004-2006 The FreeBSD Project
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+#
+# This file is used by man2hwnotes.pl to set which drivers are usable
+# on which architectures.
+#
+# Format:
+#
+# Empty lines, and lines beginning with "#" are ignored.
+# <Driver name><tab><arch>[,<arch>...]
+#
+aac	i386,amd64
+adv	i386,amd64
+adw	i386,amd64
+aha	i386
+ahb	i386
+ahd	i386,sparc64,amd64
+aic	i386,amd64
+amd	i386,amd64
+arcmsr	i386,amd64
+asr	i386
+ath	i386,amd64,sparc64
+aue	i386,amd64,powerpc
+axe	i386,amd64,powerpc
+bce	i386,amd64
+bge	i386,sparc64,amd64
+bktr	i386
+bt	i386,amd64
+bxe	i386,amd64
+cdce	i386,amd64,powerpc
+ciss	i386,amd64
+ce	i386
+cm	i386
+cnw	i386,amd64
+cp	i386
+ctau	i386
+cue	i386,amd64,powerpc
+cx	i386
+cxgb	i386,amd64
+de	i386,amd64
+dpt	i386,amd64
+ed	i386
+ep	i386,amd64
+esp	sparc64
+ex	i386,amd64
+fe	i386,amd64
+fwohci	i386,sparc64,amd64,powerpc
+hifn	i386,amd64
+hpt27xx	i386,amd64
+hptiop	i386,amd64
+hptmv	i386,amd64
+hptrr	i386,amd64
+ida	i386
+ie	i386
+iir	i386,amd64
+ips	i386,amd64
+isci	i386,amd64
+ixgb	i386,amd64
+kue	i386,amd64,powerpc
+lge	i386,amd64
+mfi	i386,amd64
+mlx	i386,amd64
+mly	i386,amd64
+msk	i386,amd64
+mxge	i386,amd64
+my	i386
+ncr	i386,amd64
+ncv	i386
+nfe	i386,amd64
+ng_bt3c	i386,amd64
+ng_ubt	i386,amd64
+nsp	i386
+nxge	i386,amd64
+oce	i386,amd64
+ohci	i386,amd64,powerpc
+oltr	i386
+otus	i386,amd64
+pcn	i386,amd64
+pst	i386
+qlxgb	amd64
+qlxgbe	amd64
+qlxge	amd64
+rc	i386
+ral	i386,amd64
+rsu	i386,amd64
+rue	i386,amd64
+rum	i386,amd64
+run	i386,amd64
+safe	i386,amd64
+sbp	i386,sparc64,amd64
+sfgxe	amd64
+sn	i386,amd64
+snd_ad1816	i386,amd64
+snd_als4000	i386
+snd_atiixp	i386,amd64
+snd_audiocs	sparc64
+snd_cmi	i386,amd64
+snd_cs4281	i386,amd64
+snd_csa	i386,amd64
+snd_ds1	i386,amd64
+snd_emu10k1	i386,amd64
+snd_emu10kx	i386,amd64
+snd_envy24	i386,amd64
+snd_envy24ht	i386,amd64
+snd_es137x	i386,sparc64,amd64
+snd_ess	i386,amd64
+snd_fm801	i386,amd64
+snd_gusc	i386,amd64
+snd_hda	i386,amd64
+snd_hdspe	i386,amd64
+snd_ich	i386,amd64
+snd_maestro	i386,amd64
+snd_maestro3	i386,amd64
+snd_mss	i386
+snd_neomagic	i386,amd64
+snd_sbc	i386,amd64
+snd_solo	i386,amd64
+snd_spicds	i386,amd64
+snd_t4dwave	i386,amd64,sparc64
+snd_via8233	i386,amd64
+snd_via82c686	i386,amd64
+snd_vibes	i386,amd64
+stg	i386
+ti	i386,amd64,sparc64
+tl	i386,amd64
+trm	i386,amd64
+twa	i386,amd64
+twe	i386,amd64
+tws	i386,amd64
+ubsa	i386,amd64
+ubsec	i386,amd64
+ubser	i386,amd64
+ucycom	i386,amd64
+udav	i386,amd64
+uftdi	i386,amd64
+uhci	i386,amd64,powerpc
+ulpt	i386,amd64,powerpc
+umass	i386,amd64,powerpc
+umodem	i386,amd64
+uplcom	i386,amd64
+ural	i386,amd64
+urio	i386,amd64,powerpc
+uvisor	i386,amd64
+uvscom	i386,amd64
+vpo	i386
+vx	i386,amd64
+vxge	i386,amd64
+wb	i386,amd64
+xe	i386,amd64
+zyd	i386,amd64

Added: head/share/misc/man2hwnotes.pl
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/share/misc/man2hwnotes.pl	Thu Dec  7 19:58:47 2017	(r51264)
@@ -0,0 +1,534 @@
+#!/usr/local/bin/perl -w
+# Emacs should use -*- cperl -*- mode
+#
+# Copyright (c) 2003-2006 Simon L. Nielsen <simon at FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# Parse the list of supported hardware out of section 4 manual pages
+# and output it on stdout as SGML/DocBook entities.
+
+# The script will look for the following line in the manual page:
+# .Sh HARDWARE
+# and make an entity of the content until the line containing:
+# .Sh
+#
+# For Lists only the first line will be printed.  If there are
+# arguments to the .It command, only the argument will be printed.
+
+# Usage:
+# man2hwnotes.pl [-cl] [-d 0-6] [-a <archlist file>] [-o <outputfile>]
+#                <manualpage> [<manualpage> ...]
+
+use strict;
+#use warnings;
+use Getopt::Std;
+use Digest::MD5 qw(md5_hex);
+
+# Section from manual page to extract
+my $hwlist_sect = "HARDWARE";
+
+# Override default archtecture list for some devices:
+my $archlist_file = "dev.archlist.txt";
+my %archlist;
+
+# Globals
+my $compat_mode = 0; # Enable compat for old Hardware Notes style
+my $debuglevel = 0;
+my $only_list_out = 0; # Should only lists be generated in the output?
+my @out_lines; # Single lines
+my @out_dev;   # Device entities
+
+# Getopt
+my %options = ();
+if (!getopts("a:cd:lo:",\%options)) {
+    die("$!: Invalid command line arguments in ", __LINE__, "\n");
+}
+
+if (defined($options{c})) {
+    $compat_mode = 1;
+}
+if (defined($options{d})) {
+    $debuglevel = $options{d};
+}
+if (defined($options{a})) {
+    $archlist_file = $options{a};
+}
+if (defined($options{l})) {
+    $only_list_out = 1;
+}
+
+my $outputfile = $options{o};
+
+if ($debuglevel > 0) {
+    # Don't do output buffering in debug mode.
+    $| = 1;
+}
+
+load_archlist($archlist_file);
+
+if (defined($outputfile)) {
+    open(OLDOUT, ">&STDOUT") || die("$!: Could not open STDOUT in ", __LINE__, ".\n");
+    open(STDOUT, ">$outputfile") || die("$!: Could not open $outputfile in ", __LINE__, ".\n");
+}
+
+print <<EOT;
+<!--
+ These are automatically generated device lists for FreeBSD hardware notes.
+-->
+EOT
+
+if ($only_list_out) {
+    # Print the default device preamble entities
+    print "<!ENTITY hwlist.preamble.pre 'The'>\n";
+    print "<!ENTITY hwlist.preamble.post 'driver supports:'>\n";
+}
+
+foreach my $page (@ARGV) {
+    if ($page !~ m/\.4$/) {
+        dlog(2, "Skipped $page (not *.4)");
+        next;
+    }
+    dlog(2, "Parsing $page");
+    parse($page);
+
+    if (@out_lines) {
+        print join("\n", @out_lines), "\n";
+    }
+    if (@out_dev) {
+        print join("\n", @out_dev), "\n";
+    }
+
+    @out_lines = ();
+    @out_dev = ();
+}
+
+if (defined($outputfile)) {
+    open(STDOUT, ">&OLDOUT") || die("$!: Could not open STDOUT in ", __LINE__, ".\n");
+    close(OLDOUT) || die("$!: Could not close OLDOUT in ", __LINE__, ".\n");
+}
+
+sub normalize (@) {
+    my @lines = @_;
+
+    foreach my $l (@lines) {
+        $l =~ s/\\&//g;
+        $l =~ s:([\x21-\x2f\x5b-\x60\x7b-\x7f]):sprintf("&\#\%d;", ord($1)):eg;
+        # Make sure ampersand is encoded as & since jade seems to
+        # be confused when it is encoded as & inside an entity.
+        $l =~ s/&/&/g;
+    }
+    return (wantarray) ? @lines : join "", @lines;
+}
+
+sub parse {
+    my ($manpage) = @_;
+
+    my $cur_mansection;
+    my $found_hwlist = 0;
+    my %mdocvars;
+    $mdocvars{isin_hwlist} = 0;
+    $mdocvars{isin_list} = 0;
+    $mdocvars{first_para} = 1;
+    $mdocvars{parabuf} = "";
+    $mdocvars{listtype} = "";
+    $mdocvars{it_nr} = 0;
+
+    open(MANPAGE, "$manpage") || die("$!: Could not open $manpage in ", __LINE__, ".\n");
+    while(<MANPAGE>) {
+	chomp;
+	my $line = $_;
+
+	dlog(5, "Read '$line'");
+
+	# Find commands
+	if (s/^\.(.*)$/$1/) {
+	    my $cmd = $1;
+
+	    # Detect, and ignore, comment lines
+	    if (s/^\\"(.*)$/$1/) {
+		next;
+	    }
+
+	    $cmd =~ s/^([^ ]+).*$/$1/;
+
+	    if (/^Nm "?(\w+)"?/ && !defined($mdocvars{Nm})) {
+		dlog(3, "Setting Nm to $1");
+		$mdocvars{Nm} = $1;
+		# "_" cannot be used for an entity name.
+		$mdocvars{EntNm} = $1;
+		$mdocvars{EntNm} =~ s,_,.,g;
+
+	    } elsif (/^Nm$/) {
+		if (defined($mdocvars{Nm}) && $mdocvars{Nm} ne "") {
+		    parabuf_addline(\%mdocvars, "&man.".$mdocvars{EntNm}.".$cur_mansection;");
+		} else {
+		    dlog(2, "Warning: Bad Nm call in $manpage");
+		}
+
+	    } elsif (/^Sh (.+)$/) {
+		dlog(4, "Setting section to $1");
+		my $cur_section = $1;
+
+		flush_out(\%mdocvars);
+
+		if ($cur_section =~ /^${hwlist_sect}$/) {
+		    dlog(2, "Found the device section ${hwlist_sect}");
+		    $mdocvars{isin_hwlist} = 1;
+		    $found_hwlist = 1;
+		    add_sgmltag(\%mdocvars, "<!ENTITY hwlist.".$mdocvars{cur_manname}." '");
+		    if ($only_list_out) {
+			add_sgmltag("<para xmlns=\"http://docbook.org/ns/docbook\">&hwlist.preamble.pre; " .
+				    "&man.".$mdocvars{EntNm}.".$cur_mansection; " .
+				    "&hwlist.preamble.post;</para>");
+		    }
+		} elsif ($mdocvars{isin_hwlist}) {
+		    dlog(2, "Found a HWLIST STOP key!");
+		    add_sgmltag(\%mdocvars, "'>");
+		    $mdocvars{isin_hwlist} = 0;
+		}
+		if ($mdocvars{isin_list}) {
+		    dlog(1, "Warning: Still in list, but just entered new " .
+			 "section.  This is probably due to missing .El; " .
+			 "check manual page for errors.");
+		    # If we try to recover from this we will probably
+		    # just end with bad SGML output and it really
+		    # should be fixed in the manual page so we don't
+		    # even try to "fix" this.
+		}
+
+
+	    } elsif (/^Dt ([^ ]+) ([^ ]+)/) {
+		dlog(4, "Setting mansection to $2");
+		$mdocvars{cur_manname} = lc($1);
+		$cur_mansection = $2;
+
+		# "_" cannot be used for an entity name.
+		$mdocvars{cur_manname} =~ s,_,.,g;
+
+	    } elsif (/^It ?(.*)$/) {
+		my $txt = $1;
+
+		$mdocvars{it_nr}++;
+
+		# Flush last item
+		if ($mdocvars{parabuf} ne "") {
+		    add_listitem(\%mdocvars);
+		}
+
+		# Remove quotes, if any.
+		$txt =~ s/"(.*)"/$1/;
+
+		if ($mdocvars{listtype} eq "column") {
+		    # Ignore first item when it is likely to be a
+		    # header.
+		    if ($mdocvars{it_nr} == 1 && $txt =~ m/^(Em|Sy) /) {
+			dlog(2, "Skipping header line in column list");
+			next;
+		    }
+		    # Only extract the first column.
+		    $txt =~ s/ Ta /\t/g;
+		    $txt =~ s/([^\t]+)\t.*/$1/;
+		}
+
+		# Remove Li commands
+		$txt =~ s/^Li //g;
+
+		parabuf_addline(\%mdocvars, normalize($txt));
+	    } elsif (/^Bl/) {
+		$mdocvars{isin_list} = 1;
+		flush_out(\%mdocvars);
+		add_sgmltag(\%mdocvars, "<itemizedlist xmlns=\"http://docbook.org/ns/docbook\">");
+
+		if (/-tag/) {
+		    $mdocvars{listtype} = "tag";
+		    # YACK! Hack for ata(4)
+		    if ($mdocvars{Nm} eq "ata") {
+			$mdocvars{listtype} = "tagHACK";
+		    }
+		} elsif (/-bullet/) {
+		    $mdocvars{listtype} = "bullet";
+		} elsif (/-column/) {
+		    $mdocvars{listtype} = "column";
+		} else {
+		    $mdocvars{listtype} = "unknown";
+		}
+		dlog(2, "Listtype set to $mdocvars{listtype}");
+	    } elsif (/^El/) {
+		if ($mdocvars{parabuf} ne "") {
+		    add_listitem(\%mdocvars);
+		}
+
+		add_sgmltag(\%mdocvars, "</itemizedlist>");
+		$mdocvars{isin_list} = 0;
+	    } elsif (/^Tn (.+)$/) {
+		# For now we print TradeName text as regular text.
+		my ($txt, $punct_str) = split_punct_chars($1);
+
+		parabuf_addline(\%mdocvars, normalize($txt . $punct_str));
+	    } elsif (/^Xr ([^ ]+) (.+)$/) {
+		my ($xr_sect, $punct_str) = split_punct_chars($2);
+		my $txt;
+
+		# We need to check if the manual page exist to avoid
+		# breaking the doc build just because of a broken
+		# reference.
+		#$txt = "&man.$1.$xr_sect;$punct_str";
+		$txt = "$1($xr_sect)$punct_str";
+		parabuf_addline(\%mdocvars, normalize($txt));
+	    } elsif (/^Dq (.+)$/) {
+		my ($txt, $punct_str) = split_punct_chars($1);
+
+		parabuf_addline(\%mdocvars,
+				normalize("<quote xmlns=\"http://docbook.org/ns/docbook\">$txt</quote>$punct_str"));
+	    } elsif (/^Sx (.+)$/) {
+		if ($mdocvars{isin_hwlist}) {
+		    dlog(1, "Warning: Reference to another section in the " .
+			 "$hwlist_sect section in " . $mdocvars{Nm} .
+			 "(${cur_mansection})");
+		}
+		parabuf_addline(\%mdocvars, normalize($1));
+	    } elsif (/^Pa (.+)$/) {
+		my ($txt, $punct_str) = split_punct_chars($1);
+
+		$txt = make_ulink($txt) . $punct_str;
+		parabuf_addline(\%mdocvars, normalize($txt));
+	    } elsif (/^Pp/) {
+		dlog(3, "Got Pp command - forcing new para");
+		flush_out(\%mdocvars);
+	    } elsif (/^Fx (.+)/) {
+		dlog(3, "Got Fx command");
+		parabuf_addline(\%mdocvars, "FreeBSD $1");
+	    } elsif (/^Fx/) {
+		dlog(3, "Got Fx command");
+		parabuf_addline(\%mdocvars, "FreeBSD");
+	    } elsif (/^Em (.+)$/) {
+		my ($txt, $punct_str) = split_punct_chars($1);
+
+		parabuf_addline(\%mdocvars,
+				normalize("<emphasis xmlns=\"http://docbook.org/ns/docbook\">$txt</emphasis>$punct_str"));
+	    } else {
+		# Ignore all other commands.
+		dlog(3, "Ignoring unknown command $cmd");
+	    }
+	} else {
+	    # This is then regular text
+	    parabuf_addline(\%mdocvars, normalize($_));
+	}
+    }
+    close(MANPAGE) || die("$!: Could not close $manpage in ", __LINE__, ".\n");
+    if (! $found_hwlist) {
+	dlog(2, "Hardware list not found in $manpage");
+    }
+}
+
+sub dlog {
+    my ($level, $txt) = @_;
+
+    if ($level <= $debuglevel) {
+	print STDERR "$level: $txt\n";
+    }
+}
+
+# Output a SGML tag.
+sub add_sgmltag {
+    my ($mdocvars, $txt) = (@_);
+
+    # We only care about the HW list for now.
+    if (${$mdocvars}{isin_hwlist}) {
+	push(@out_dev, $txt);
+    }
+}
+
+# Add a text entity, and return the used entity name.
+sub add_txt_ent {
+    my ($itemtxt) = (@_);
+    my ($entity_name);
+
+    # Convert mdoc(7) minus
+    $itemtxt =~ s/\\-/-/g;
+
+    $itemtxt =~ s/'/‘/g;
+
+    $entity_name = "hwlist." . md5_hex($itemtxt);
+    dlog(4, "Adding '$itemtxt' as entity $entity_name");
+    push(@out_lines, "<!ENTITY $entity_name '$itemtxt'>");
+
+    return ($entity_name);
+}
+sub flush_out {
+    my ($mdocvars) = (@_);
+    my ($entity_name, $out);
+    my $para_arch = "";
+
+    if (!${$mdocvars}{isin_hwlist} || ${$mdocvars}{parabuf} eq "") {
+	return;
+    }
+
+    $entity_name = add_txt_ent(${$mdocvars}{parabuf});
+    ${$mdocvars}{parabuf} = "";
+    if(defined($archlist{${$mdocvars}{Nm}})) {
+	if ($compat_mode) {
+	    $para_arch = ' arch="' . $archlist{${$mdocvars}{Nm}} . '"';
+	} else {
+	    $para_arch = '[' . $archlist{${$mdocvars}{Nm}} . '] ';
+	}
+    }
+    if ($compat_mode) {
+	$out = "<para xmlns=\"http://docbook.org/ns/docbook\"".$para_arch.">&".$entity_name.";</para>";
+    } else {
+	if (${$mdocvars}{first_para}) {
+	    $out = "<para xmlns=\"http://docbook.org/ns/docbook\">".$para_arch."&".$entity_name.";</para>";
+	} else {
+	    $out = "<para xmlns=\"http://docbook.org/ns/docbook\">&".$entity_name.";</para>";
+	}
+	${$mdocvars}{first_para} = 0;
+    }
+
+    dlog(4, "Flushing parabuf");
+    add_sgmltag($mdocvars, $out);
+}
+
+# Add a new list item from the "parabuf".
+sub add_listitem {
+    my ($mdocvars) = (@_);
+    my ($listitem, $entity_name);
+    my $para_arch = "";
+
+    $entity_name = add_txt_ent(${$mdocvars}{parabuf});
+    ${$mdocvars}{parabuf} = "";
+
+    if ($compat_mode) {
+	if(defined($archlist{${$mdocvars}{Nm}})) {
+	    $para_arch = ' arch="' . $archlist{${$mdocvars}{Nm}} . '"';
+	}
+    }
+    $listitem = "<listitem><para".$para_arch.">&".$entity_name.";</para></listitem>";
+    dlog(4, "Adding '$listitem' to out_dev");
+    push(@out_dev, $listitem);
+
+}
+
+# Add a line to the "paragraph buffer"
+sub parabuf_addline {
+    my $mdocvars = shift;
+    my ($txt) = (@_);
+
+    dlog(5, "Now in parabuf_addline for '$txt'");
+
+    # We only care about the HW list for now.
+    if (!${$mdocvars}{isin_hwlist}) {
+	dlog(6, "Exiting parabuf_addline due to: !\${\$mdocvars}{isin_hwlist}");
+	return;
+    }
+    if ($txt eq "") {
+	dlog(6, "Exiting parabuf_addline due to: \$txt eq \"\"");
+	return;
+    }
+
+    if ($only_list_out && !${$mdocvars}{isin_list}) {
+	dlog(6, "Exiting parabuf_addline due to: ".
+	     "\$only_list_out && !\${\$mdocvars}{isin_list}");
+	return;
+    }
+
+    # We only add the first line for "tag" lists
+    if (${$mdocvars}{parabuf} ne "" && ${$mdocvars}{isin_list} &&
+	${$mdocvars}{listtype} eq "tag") {
+	dlog(6, "Exiting parabuf_addline due to: ".
+	     "\${\$mdocvars}{parabuf} ne \"\" && \${\$mdocvars}{isin_list} && ".
+	     "\${\$mdocvars}{listtype} eq \"tag\"");
+	return;
+    }
+
+    if (${$mdocvars}{parabuf} ne "") {
+	${$mdocvars}{parabuf} .= " ";
+    }
+
+    dlog(4, "Adding '$txt' to parabuf");
+
+    ${$mdocvars}{parabuf} .= $txt;
+}
+
+sub load_archlist {
+    my ($file) = (@_);
+
+    my $lineno = 0;
+
+    dlog(2, "Parsing archlist $file");
+
+    open(FILE, "$file") || die("$!: Could not open archlist $file in ", __LINE__, ".\n");
+    while(<FILE>) {
+	chomp;
+	$lineno++;
+
+	if (/^#/ || $_ eq "") {
+	    next;
+	}
+
+	if (/(\w+)\t([\w,]+)/) {
+	    dlog(4, "For driver $1 setting arch to $2");
+	    $archlist{$1} = $2;
+	} else {
+	    dlog(1, "Warning: Could not parse archlist line $lineno");
+	}
+    }
+
+    close(FILE);
+}
+
+# Check if a character is a mdoc(7) punctuation character.
+sub is_punct_char {
+    my ($str) = (@_);
+
+    return (length($str) == 1 && $str =~ /[\.,:;()\[\]\?!]/);
+}
+
+# Split out the punctuation characters of a mdoc(7) line.
+sub split_punct_chars {
+    my ($str) = (@_);
+    my (@stritems, $stritem, $punct_str);
+
+    $punct_str = "";
+    @stritems = split(/ /, $str);
+
+    while (defined($stritem = $stritems[$#stritems]) &&
+	   is_punct_char($stritem)) {
+	$punct_str = $stritem . $punct_str;
+	pop(@stritems);
+    }
+
+    return (join(' ', @stritems), $punct_str);
+}

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-doc-all mailing list