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-head
mailing list