summaryrefslogtreecommitdiffstats
path: root/release/doc/share
diff options
context:
space:
mode:
Diffstat (limited to 'release/doc/share')
-rw-r--r--release/doc/share/examples/Makefile.relnotesng61
-rw-r--r--release/doc/share/misc/dev.archlist.txt178
-rw-r--r--release/doc/share/misc/man2hwnotes.pl533
-rw-r--r--release/doc/share/mk/doc.relnotes.mk54
-rw-r--r--release/doc/share/xml/Makefile11
-rw-r--r--release/doc/share/xml/catalog.xml13
-rw-r--r--release/doc/share/xml/errata.xml28
-rw-r--r--release/doc/share/xml/release.ent82
-rw-r--r--release/doc/share/xml/release.xsl106
-rw-r--r--release/doc/share/xml/security.xml28
-rw-r--r--release/doc/share/xml/sponsor.ent55
-rw-r--r--release/doc/share/xml/vendor.ent9
12 files changed, 1158 insertions, 0 deletions
diff --git a/release/doc/share/examples/Makefile.relnotesng b/release/doc/share/examples/Makefile.relnotesng
new file mode 100644
index 0000000..9607e28
--- /dev/null
+++ b/release/doc/share/examples/Makefile.relnotesng
@@ -0,0 +1,61 @@
+# -*- makefile -*-
+#
+# $FreeBSD$
+#
+# Sample makefile for rendering and uploading RELNOTESng files outside
+# the build tree.
+#
+
+ARCHS= amd64 i386 pc98 powerpc sparc64
+MULTITEXTS=
+UNITEXTS= hardware readme relnotes errata
+
+IMAGEDIR= .imagedir
+RHOST= freefall.freebsd.org
+RDIR= public_html/relnotes/CURRENT
+DOCDIR= ./release/doc
+LANG= en_US.ISO8859-1
+
+DOC_PREFIX?= /usr/doc
+CSS_SHEET?= ${DOC_PREFIX}/share/misc/docbook.css
+FORMATS?= html txt pdf
+
+BUILD_OPTIONS+= URLS_ABSOLUTE=YES
+
+all:
+ (cd ${DOCDIR}; ${MAKE} DOC_PREFIX=${DOC_PREFIX} FORMATS="${FORMATS}" ${BUILD_OPTIONS} all)
+
+lint:
+ (cd ${DOCDIR}; ${MAKE} DOC_PREFIX=${DOC_PREFIX} lint)
+
+image: all
+ @echo "#"
+ @echo "# Creating local image"
+ @echo "#"
+ rm -rf ${IMAGEDIR}
+ mkdir ${IMAGEDIR}
+ cp -p ${CSS_SHEET} ${IMAGEDIR}/docbook.css
+ for i in ${ARCHS}; do \
+ for j in ${MULTITEXTS}; do \
+ for k in ${FORMATS}; do \
+ cp -p ${DOCDIR}/${LANG}/$${j}/$${i}/article.$${k} ${IMAGEDIR}/$${j}-$${i}.$${k} ; \
+ done; \
+ done; \
+ done
+ for j in ${UNITEXTS}; do \
+ for k in ${FORMATS}; do \
+ cp -p ${DOCDIR}/${LANG}/$${j}/article.$${k} ${IMAGEDIR}/$${j}.$${k} ; \
+ done; \
+ done
+
+push: image
+ @echo "#"
+ @echo "# Pushing to ${RHOST}"
+ @echo "#"
+# (cd ${IMAGEDIR}; tar -cf - .) | gzip -c -9 | (ssh ${RHOST} "( cd ${RDIR}; gunzip -c | tar -xf -)" )
+ (cd ${IMAGEDIR}; rsync -azuv * ${RHOST}:${RDIR})
+ rm -rf ${IMAGEDIR}
+
+clean:
+ (cd ${DOCDIR}; ${MAKE} DOC_PREFIX=${DOC_PREFIX} FORMATS="${FORMATS}" clean)
+ rm -rf ${IMAGEDIR}
diff --git a/release/doc/share/misc/dev.archlist.txt b/release/doc/share/misc/dev.archlist.txt
new file mode 100644
index 0000000..5f62f48
--- /dev/null
+++ b/release/doc/share/misc/dev.archlist.txt
@@ -0,0 +1,178 @@
+#
+# 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,pc98,amd64
+adw i386,pc98,amd64
+aha i386
+ahb i386
+ahd i386,sparc64,amd64
+aic i386,pc98,amd64
+amd i386,pc98,amd64
+arcmsr i386,amd64
+asr i386
+ath i386,pc98,amd64,sparc64
+aue i386,pc98,amd64,powerpc
+axe i386,pc98,amd64,powerpc
+bce i386,amd64
+bge i386,pc98,sparc64,amd64
+bktr i386,pc98
+bt i386,amd64
+bxe i386,amd64
+cdce i386,pc98,amd64,powerpc
+ciss i386,amd64
+ce i386,pc98
+cm i386
+cnw i386,pc98,amd64
+cp i386,pc98
+ct pc98
+ctau i386
+cue i386,pc98,amd64,powerpc
+cx i386
+cxgb i386,amd64
+de i386,pc98,amd64
+dpt i386,amd64
+ed i386,pc98
+ep i386,pc98,amd64
+esp sparc64
+ex i386,amd64
+fe i386,pc98,amd64
+fwohci i386,sparc64,amd64,powerpc
+hifn i386,pc98,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,pc98,amd64,powerpc
+lge i386,pc98,amd64
+mfi i386,amd64
+mlx i386,amd64
+mly i386,amd64
+msk i386,amd64
+mxge i386,amd64
+my i386,pc98
+ncr i386,pc98,amd64
+ncv i386,pc98
+nfe i386,amd64
+ng_bt3c i386,pc98,amd64
+ng_ubt i386,pc98,amd64
+nsp i386,pc98
+nxge i386,amd64
+oce i386,amd64
+ohci i386,pc98,amd64,powerpc
+oltr i386
+otus i386,amd64
+pcn i386,pc98,amd64
+pst i386
+qlxgb amd64
+qlxgbe amd64
+qlxge amd64
+rc i386
+ral i386,amd64
+rsu i386,amd64
+rue i386,pc98,amd64
+rum i386,amd64
+run i386,amd64
+safe i386,pc98,amd64
+sbp i386,sparc64,amd64
+sfgxe amd64
+sn i386,amd64
+snc pc98
+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,pc98
+ti i386,pc98,amd64,sparc64
+tl i386,pc98,amd64
+trm i386,amd64
+twa i386,amd64
+twe i386,amd64
+tws i386,amd64
+ubsa i386,pc98,amd64
+ubsec i386,pc98,amd64
+ubser i386,pc98,amd64
+ucycom i386,pc98,amd64
+udav i386,pc98,amd64
+uftdi i386,pc98,amd64
+uhci i386,pc98,amd64,powerpc
+ulpt i386,pc98,amd64,powerpc
+umass i386,pc98,amd64,powerpc
+umodem i386,pc98,amd64
+uplcom i386,pc98,amd64
+ural i386,amd64
+urio i386,pc98,amd64,powerpc
+uvisor i386,pc98,amd64
+uvscom i386,pc98,amd64
+vpo i386
+vx i386,pc98,amd64
+vxge i386,amd64
+wb i386,pc98,amd64
+xe i386,amd64
+zyd i386,amd64
diff --git a/release/doc/share/misc/man2hwnotes.pl b/release/doc/share/misc/man2hwnotes.pl
new file mode 100644
index 0000000..a64aae8
--- /dev/null
+++ b/release/doc/share/misc/man2hwnotes.pl
@@ -0,0 +1,533 @@
+#!/usr/bin/perl -w
+# Emacs should use -*- cperl -*- mode
+#
+# Copyright (c) 2003-2006 Simon L. Nielsen <simon@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 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 &amp; since jade seems to
+ # be confused when it is encoded as &#38; inside an entity.
+ $l =~ s/&#38;/&amp;/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/'/&lsquo;/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);
+}
+
+# Create a ulink, if the string contains an URL.
+sub make_ulink {
+ my ($str) = (@_);
+
+ $str =~ s,(http://[^ ]+),<link xmlns=\"http://docbook.org/ns/docbook\" xlink:href="$1"></link>,;
+
+ return $str;
+}
diff --git a/release/doc/share/mk/doc.relnotes.mk b/release/doc/share/mk/doc.relnotes.mk
new file mode 100644
index 0000000..ae8a31f
--- /dev/null
+++ b/release/doc/share/mk/doc.relnotes.mk
@@ -0,0 +1,54 @@
+# $FreeBSD$
+
+DOC_PREFIX?= ${RELN_ROOT}/../../../doc
+
+# XXX
+RELEASETYPE!= grep -o 'release.type "[a-z]*"' ${RELN_ROOT}/share/xml/release.ent | sed 's|[a-z.]* "\([a-z]*\)"|\1|'
+RELEASEURL!= grep -o 'release.url \"[^\"]*\"' ${RELN_ROOT}/share/xml/release.ent | sed 's|[^ ]* "\([^"]*\)"|\1|'
+RELEASEBRANCH!= grep -o 'release.branch "\([^"]*\)"' ${RELN_ROOT}/share/xml/release.ent | sed 's|[^ ]* "\([^"]*\)"|\1|'
+RELEASEMAILLIST!= grep -o 'release.maillist "\([^"]*\)"' ${RELN_ROOT}/share/xml/release.ent | sed 's|[^ ]* "\([^"]*\)"|\1|'
+.if ${RELEASETYPE} == "current"
+PROFILING+= --param profile.attribute "'releasetype'" --param profile.value "'current'"
+.elif ${RELEASETYPE} == "snapshot"
+PROFILING+= --param profile.attribute "'releasetype'" --param profile.value "'snapshot'"
+.elif ${RELEASETYPE} == "release"
+PROFILING+= --param profile.attribute "'releasetype'" --param profile.value "'release'"
+.endif
+XSLTPROCFLAGS+= --param release.url "'${RELEASEURL}'"
+XSLTPROCFLAGS+= --param release.branch "'${RELEASEBRANCH}'"
+XSLTPROCFLAGS+= --param release.maillist "'${RELEASEMAILLIST}'"
+XSLTPROCFLAGS+= --param toc.section.depth "'3'"
+
+# Find the RELNOTESng document catalogs
+EXTRA_CATALOGS+= file://${RELN_ROOT}/${LANGCODE}/share/xml/catalog.xml \
+ file://${RELN_ROOT}/share/xml/catalog.xml
+
+XSLXHTML= http://www.FreeBSD.org/release/XML/share/xml/release.xsl
+
+#
+# Automatic device list generation:
+#
+.if exists(${RELN_ROOT}/../man4)
+MAN4DIR?= ${RELN_ROOT}/../man4
+.elif exists(${RELN_ROOT}/../../man4)
+MAN4DIR?= ${RELN_ROOT}/../../man4
+.else
+MAN4DIR?= ${RELN_ROOT}/../../share/man/man4
+.endif
+MAN4PAGES?= ${MAN4DIR}/*.4 ${MAN4DIR}/man4.*/*.4
+ARCHLIST?= ${RELN_ROOT}/share/misc/dev.archlist.txt
+DEV-AUTODIR= ${RELN_ROOT:S/${.CURDIR}/${.OBJDIR}/}/share/xml
+CLEANFILES+= ${DEV-AUTODIR}/dev-auto.ent
+
+MAN2HWNOTES_CMD=${RELN_ROOT}/share/misc/man2hwnotes.pl
+.if defined(HWNOTES_MI)
+MAN2HWNOTES_FLAGS=
+.else
+MAN2HWNOTES_FLAGS= -c
+.endif
+
+# Dependency that the article makefiles can use to pull in
+# dev-auto.ent.
+${DEV-AUTODIR}/catalog-auto ${DEV-AUTODIR}/dev-auto.ent: ${MAN4PAGES} \
+ ${ARCHLIST} ${MAN2HWNOTES_CMD}
+ cd ${RELN_ROOT}/share/xml && make MAN2HWNOTES_FLAGS=${MAN2HWNOTES_FLAGS} dev-auto.ent
diff --git a/release/doc/share/xml/Makefile b/release/doc/share/xml/Makefile
new file mode 100644
index 0000000..b2c1b6d
--- /dev/null
+++ b/release/doc/share/xml/Makefile
@@ -0,0 +1,11 @@
+# $FreeBSD$
+
+RELN_ROOT?= ${.CURDIR}/../..
+
+.include "${RELN_ROOT}/share/mk/doc.relnotes.mk"
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"
+
+dev-auto.ent: ${MAN4PAGES} ${ARCHLIST} ${MAN2HWNOTES_CMD}
+ ${PERL} ${MAN2HWNOTES_CMD} ${MAN2HWNOTES_FLAGS} -a ${ARCHLIST} -o ${.TARGET} ${MAN4PAGES}
+
+all: dev-auto.ent
diff --git a/release/doc/share/xml/catalog.xml b/release/doc/share/xml/catalog.xml
new file mode 100644
index 0000000..74f8ccd
--- /dev/null
+++ b/release/doc/share/xml/catalog.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- $FreeBSD$ -->
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+ <rewriteSystem systemIdStartString="http://www.FreeBSD.org/release/XML/"
+ rewritePrefix="../../"/>
+ <rewriteURI uriStartString="http://www.FreeBSD.org/release/XML/"
+ rewritePrefix="../../"/>
+
+ <public publicId="-//FreeBSD//ENTITIES Release Specification//EN" uri="release.ent"/>
+ <public publicId="-//FreeBSD//ENTITIES Sponsor Specification//EN" uri="sponsor.ent"/>
+ <public publicId="-//FreeBSD//ENTITIES Vendor Specification//EN" uri="vendor.ent"/>
+ <public publicId="-//FreeBSD//ENTITIES Auto Generated Device Lists//EN" uri="dev-auto.ent"/>
+</catalog>
diff --git a/release/doc/share/xml/errata.xml b/release/doc/share/xml/errata.xml
new file mode 100644
index 0000000..efc21a1
--- /dev/null
+++ b/release/doc/share/xml/errata.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+ The FreeBSD Documentation Project
+
+ $FreeBSD$
+-->
+<informaltable frame="none" pgwide="1">
+ <tgroup cols="3">
+ <colspec colwidth="40%"/>
+ <colspec colwidth="30%"/>
+ <colspec colwidth="30%"/>
+ <thead>
+ <row>
+ <entry>Errata</entry>
+ <entry>Date</entry>
+ <entry>Topic</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><para>No errata notices.</para></entry>
+ <entry><para>&nbsp;</para></entry>
+ <entry><para>&nbsp;</para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
diff --git a/release/doc/share/xml/release.ent b/release/doc/share/xml/release.ent
new file mode 100644
index 0000000..f72b4d0
--- /dev/null
+++ b/release/doc/share/xml/release.ent
@@ -0,0 +1,82 @@
+<!-- -*- sgml -*-
+
+ $FreeBSD$
+
+ OS Release Information -->
+
+<!-- Version of the OS we're describing. This needs to be updated
+ with each new release. -->
+<!ENTITY release.current "11.0-CURRENT">
+
+<!-- The previous version used for comparison in the "What's New"
+ section. For -CURRENT, we might point back to the last
+ branchpoint. -->
+<!ENTITY release.prev "10.0-RELEASE">
+
+<!-- The previous stable release, useful for pointing user's at the
+ release they SHOULD be running if they don't want the bleeding
+ edge. -->
+<!ENTITY release.prev.stable "9.3-RELEASE">
+
+<!-- The next version to be released, usually used for snapshots. -->
+<!ENTITY release.next "11.0-RELEASE">
+
+<!-- The name of this branch. -->
+<!ENTITY release.branch "11-CURRENT">
+
+<!-- The URL for obtaining this version of FreeBSD. -->
+<!ENTITY release.url "https://www.FreeBSD.org/snapshots/">
+
+<!-- The URL for Security Advisories and Errata Notices. -->
+<!ENTITY security.url "https://www.FreeBSD.org/security/advisories">
+
+<!-- The recommended mailing list to track. -->
+<!ENTITY release.maillist "current">
+
+<!-- The type of release (usually this will be either "snapshot"
+ or "release" -->
+<!-- WARNING: Do not forget to also change the release type in
+ doc.relnotes.mk when updating this -->
+<!ENTITY release.type "snapshot">
+<!ENTITY % release.type.current "INCLUDE">
+<!ENTITY % release.type.snapshot "IGNORE">
+<!ENTITY % release.type.release "IGNORE">
+
+<![%release.type.current;[
+<!ENTITY release '&release.current;'>
+]]>
+<![%release.type.snapshot;[
+<!ENTITY release '&release.prev;'>
+]]>
+<![%release.type.release;[
+<!ENTITY release '&release.current;'>
+]]>
+<!ENTITY release ''>
+
+<!-- The manpaths for man page references -->
+<!ENTITY release.man.url "https://www.FreeBSD.org/cgi/man.cgi">
+<!ENTITY release.manpath.xorg "7.5.1">
+<!ENTITY release.manpath.netbsd "5.1">
+<!ENTITY release.manpath.freebsd-ports "Ports">
+<!ENTITY release.manpath.freebsd "10-current">
+
+<!-- Text constants which probably don't need to be changed.-->
+
+<!-- Name of our OS. This is almost certainly going to remain
+ FreeBSD, but we might want to try to do some other formatting or
+ other fancy markup on it in the future. -->
+<!ENTITY os "FreeBSD">
+
+<!-- Architecture names -->
+<!ENTITY arch.amd64 "amd64">
+<!ENTITY arch.arm "arm">
+<!ENTITY arch.arm64 "aarch64">
+<!ENTITY arch.i386 "i386">
+<!ENTITY arch.mips "mips">
+<!ENTITY arch.pc98 "pc98">
+<!ENTITY arch.powerpc "powerpc">
+<!ENTITY arch.powerpc64 "powerpc64">
+<!ENTITY arch.sparc64 "sparc64">
+
+<!-- The marker for MFCs. -->
+<!ENTITY merged "MERGED">
diff --git a/release/doc/share/xml/release.xsl b/release/doc/share/xml/release.xsl
new file mode 100644
index 0000000..f76ae68
--- /dev/null
+++ b/release/doc/share/xml/release.xsl
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>
+<!-- $FreeBSD$ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version='1.0'
+ xmlns="http://www.w3.org/TR/xhtml1/transitional"
+ xmlns:db="http://docbook.org/ns/docbook"
+ exclude-result-prefixes="db">
+
+ <xsl:import href="http://www.FreeBSD.org/XML/share/xml/freebsd-xhtml.xsl"/>
+
+ <xsl:import href="http://www.FreeBSD.org/release/XML/lang/share/xml/release.xsl"/>
+
+ <xsl:param name="release.url"/>
+ <xsl:param name="release.branch"/>
+ <xsl:param name="release.maillist"/>
+
+ <xsl:template name="paragraph">
+ <xsl:param name="class" select="''"/>
+ <xsl:param name="content"/>
+
+ <xsl:variable name="p">
+ <p>
+ <xsl:choose>
+ <xsl:when test="$class != ''">
+ <xsl:call-template name="common.html.attributes">
+ <xsl:with-param name="class" select="$class"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="locale.html.attributes"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="@arch">
+ <xsl:value-of select="concat('[', @arch, ']')"/>
+ <xsl:value-of select='" "'/>
+ </xsl:if>
+ <xsl:copy-of select="$content"/>
+ <xsl:value-of select='" "'/>
+ <xsl:if test="@revision">
+ <xsl:element name="a">
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat('http://svn.freebsd.org/viewvc/base?view=revision&#38;revision=', @revision)"/>
+ </xsl:attribute>
+ <xsl:value-of select="concat('[r', @revision, ']')"/>
+ </xsl:element>
+ </xsl:if>
+ <xsl:if test="@contrib">
+ <xsl:element name="span">
+ <xsl:attribute name="class">
+ <xsl:value-of select="'contrib'"/>
+ </xsl:attribute>
+ <xsl:choose>
+ <xsl:when test="@contrib = 'sponsor'">
+ <xsl:if test="@sponsor != ''">
+ (Sponsored by
+ <xsl:choose>
+ <xsl:when test="@sponsorurl != ''">
+ <xsl:element name="a">
+ <xsl:attribute name="href">
+ <xsl:value-of select="@sponsorurl"/>
+ </xsl:attribute>
+ <xsl:value-of select="concat(@sponsor, ')')"/>
+ </xsl:element>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat(@sponsor, ')')"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="@contrib = 'vendor'">
+ <xsl:if test="@vendor != ''">
+ (Contributed / provided by
+ <xsl:choose>
+ <xsl:when test="@vendorurl != ''">
+ <xsl:element name="a">
+ <xsl:attribute name="href">
+ <xsl:value-of select="@vendorurl"/>
+ </xsl:attribute>
+ <xsl:value-of select="concat(@vendor, ')')"/>
+ </xsl:element>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat(@vendor, ')')"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:element>
+ </xsl:if>
+ </p>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="$html.cleanup != 0">
+ <xsl:call-template name="unwrap.p">
+ <xsl:with-param name="p" select="$p"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="$p"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/release/doc/share/xml/security.xml b/release/doc/share/xml/security.xml
new file mode 100644
index 0000000..74a8cd7
--- /dev/null
+++ b/release/doc/share/xml/security.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+ The FreeBSD Documentation Project
+
+ $FreeBSD$
+-->
+<informaltable frame="none" pgwide="1">
+ <tgroup cols="3">
+ <colspec colwidth="40%"/>
+ <colspec colwidth="30%"/>
+ <colspec colwidth="30%"/>
+ <thead>
+ <row>
+ <entry>Advisory</entry>
+ <entry>Date</entry>
+ <entry>Topic</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><para>No advisories.</para></entry>
+ <entry><para>&nbsp;</para></entry>
+ <entry><para>&nbsp;</para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
diff --git a/release/doc/share/xml/sponsor.ent b/release/doc/share/xml/sponsor.ent
new file mode 100644
index 0000000..a76ef88
--- /dev/null
+++ b/release/doc/share/xml/sponsor.ent
@@ -0,0 +1,55 @@
+<!-- -*- sgml -*-
+
+ $FreeBSD$
+
+ Sponsors of various works.
+
+ Please keep the entity list sorted alphabetically.
+
+-->
+
+<!ENTITY abt "ABT Systems, Ltd.">
+<!ENTITY afrl "AFRL">
+
+<!ENTITY chelsio "Chelsio Communications">
+
+<!ENTITY citrix "Citrix Systems">
+<!ENTITY citrix.rd "Citrix Systems R&amp;D">
+
+<!ENTITY clusterhq "ClusterHQ">
+
+<!ENTITY darpa "DARPA">
+<!ENTITY darpa_afrl "DARPA, AFRL">
+<!ENTITY dell "Dell, Inc.">
+
+<!ENTITY emcisilon "EMC / Isilon Storage Division">
+
+<!ENTITY ff "The&nbsp;&os;&nbsp;Foundation">
+<!ENTITY ff.url "https://www.FreeBSDFoundation.org/">
+
+<!ENTITY gandi "Gandi.net">
+<!ENTITY google "Google">
+
+<!ENTITY juniper "Juniper Networks, Inc.">
+
+<!ENTITY intelcorp "Intel Corporation">
+<!ENTITY ix "iXsystems">
+
+<!ENTITY limelight "Limelight Networks">
+<!ENTITY lsi "LSI">
+
+<!ENTITY msostc "Microsoft Open Source Technology Center">
+<!ENTITY mitail "MIT Computer Science &amp; Artificial Intelligence Laboratory">
+<!ENTITY multiplay "Multiplay">
+
+<!ENTITY netflix "Netflix">
+<!ENTITY netgate "Netgate">
+<!ENTITY nginx "Nginx, Inc.">
+<!ENTITY norse "Norse Corporation">
+
+<!ENTITY sandvine "Sandvine, Inc.">
+<!ENTITY scaleengine "ScaleEngine, Inc.">
+<!ENTITY solarflare "Solarflare Communications, Inc.">
+<!ENTITY spectralogic "Spectra Logic">
+
+<!ENTITY yandex "Yandex LLC">
diff --git a/release/doc/share/xml/vendor.ent b/release/doc/share/xml/vendor.ent
new file mode 100644
index 0000000..75c879b
--- /dev/null
+++ b/release/doc/share/xml/vendor.ent
@@ -0,0 +1,9 @@
+<!-- -*- sgml -*-
+
+ $FreeBSD$
+
+ Vendors and contributors.
+
+ Please keep the entity list sorted alphabetically.
+
+-->
OpenPOWER on IntegriCloud