297 lines
8.6 KiB
Perl
297 lines
8.6 KiB
Perl
#!/usr/pkg/bin/perl
|
|
#
|
|
# $NetBSD: MAKEDEV2manpage.pl,v 1.10 2002/01/12 22:05:33 enami Exp $
|
|
#
|
|
# Copyright (c) 1999
|
|
# Hubert Feyrer <hubertf@netbsd.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.
|
|
# 3. All advertising materials mentioning features or use of this software
|
|
# must display the following acknowledgement:
|
|
# This product includes software developed by Hubert Feyrer for
|
|
# the NetBSD Project.
|
|
# 4. Neither the name of the University nor the names of its contributors
|
|
# may be used to endorse or promote products derived from this software
|
|
# without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
|
#
|
|
#
|
|
###########################################################################
|
|
#
|
|
# Convert src/etc/etc.${ARCH}/MAKEDEV and
|
|
# src/share/man/man8/MAKEDEV.8.template to
|
|
# src/share/man/man8/man8.${ARCH}/MAKEDEV.8, replacing
|
|
# - @@@SPECIAL@@@ with all targets in the first section (all, std, ...)
|
|
# - @@@DEVICES@@@ with the remaining targets
|
|
# - @@@DATE@@@ with the date from the previous version, if found
|
|
# - @@@ARCH@@@ with the architecture name
|
|
#
|
|
|
|
$_lastline = "";
|
|
|
|
###########################################################################
|
|
# return 1 logical device-line
|
|
sub read1line
|
|
{
|
|
local($h, $l);
|
|
|
|
if ($_lastline ne "") {
|
|
$h = $_lastline;
|
|
} else {
|
|
$h = <MAKEDEV>;
|
|
}
|
|
|
|
# Skip empty lines
|
|
while ($h =~ /^#\s*$/) {
|
|
$h = <MAKEDEV>;
|
|
}
|
|
|
|
if ($h =~ /^#\s/) {
|
|
if ($h =~ /^# /) {
|
|
# Not a device/other target
|
|
$_lastline = "";
|
|
$l = $h;
|
|
} else {
|
|
# Continuation line (?)
|
|
chomp($l = $h);
|
|
$h = <MAKEDEV>;
|
|
while ($h =~ m/^#\t\s/) {
|
|
$h =~ s/^#\t\s/ /;
|
|
$l .= $h;
|
|
$h = <MAKEDEV>;
|
|
}
|
|
$_lastline = $h;
|
|
}
|
|
} else {
|
|
$_lastline = "";
|
|
$l = $h;
|
|
}
|
|
|
|
return $l;
|
|
}
|
|
|
|
###########################################################################
|
|
# handle @@@SPECIAL@@@
|
|
sub do_special
|
|
{
|
|
print MANPAGE ".Bl -tag -width 01234567 -compact\n";
|
|
|
|
while (<MAKEDEV>) {
|
|
last if /^#.*Device.*Valid.*argument/;
|
|
}
|
|
|
|
$l=read1line();
|
|
while($l =~ /^#\t/) {
|
|
$l =~ s/#\s+//;
|
|
|
|
($target, @line) = split(/\s+/, $l);
|
|
$l = join(" ", @line);
|
|
|
|
$l =~ s/"([^"]*)"/``$1''/g; # "..." -> ``...''
|
|
$l =~ s/\s*(MAKEDEV(.local)?)\s*/\n.Pa $1\n/g;
|
|
$l =~ s/^(.)/\u$1/; # uppercase first word
|
|
print MANPAGE ".It Ar $target\n";
|
|
print MANPAGE "$l\n";
|
|
|
|
$l = read1line();
|
|
}
|
|
$_lastline = $l; # unread
|
|
|
|
print MANPAGE ".El\n";
|
|
}
|
|
|
|
###########################################################################
|
|
# handle @@@DEVICES@@@
|
|
sub do_devices
|
|
{
|
|
print MANPAGE ".Bl -tag -width 01\n";
|
|
|
|
$l = read1line();
|
|
do {
|
|
$l =~ s/#\s+//;
|
|
if ($l =~ /[^\s]:$/) {
|
|
$l =~ s/(.)$/ \1/;
|
|
}
|
|
print MANPAGE ".It $l"; # Print section heading
|
|
|
|
$l = read1line();
|
|
print MANPAGE ". Bl -tag -width 0123456789 -compact\n";
|
|
while($l =~ /^#\t/) {
|
|
$l =~ s/#\s+//;
|
|
|
|
($target, @line) = split(/\s+/, $l);
|
|
$target =~ s/\*/#/;
|
|
$l = join(" ", @line);
|
|
|
|
$l =~ s/"([^"]*)"/``$1''/g; # "..." -> ``...''
|
|
$l =~ s/\s*(MAKEDEV(.local)?)\s*/\n.Pa $1\n/g;
|
|
$l =~ s/^(.)/\u$1/; # uppercase first word
|
|
|
|
$l =~ s/\(XXX[^)]*\)//;
|
|
$l =~ s/\s*$//;
|
|
|
|
# add manpage, if available
|
|
($page) = ($target=~/([a-zA-Z]+)/);
|
|
$page = "fdc" if $target eq "fd#";
|
|
if ( -f "../man4/$page.4" or -f "../man4/man4.${arch}/$page.4" ) {
|
|
$l =~ s/\s+$//;
|
|
if ($l =~ /see/) {
|
|
# already a manpage there, e.g. scsictl(8)
|
|
$l .= ", ";
|
|
} else {
|
|
$l .= ", see ";
|
|
}
|
|
$l .= "$page(4)";
|
|
}
|
|
|
|
# Add .Xr \&foo 4 - ampersand to work around manpages that are
|
|
# *roff commands at the same time
|
|
while ($l =~ s/\s*(\w+)\((\d)\)(.*)/\n.Xr \\&\1 \2 \3/g){$l =~ s/[ \t]+$//g;}
|
|
|
|
print MANPAGE ". It Ar $target\n";
|
|
print MANPAGE "$l\n";
|
|
|
|
$l = read1line();
|
|
}
|
|
print MANPAGE ". El\n";
|
|
} while ($l =~ /# /);
|
|
|
|
print MANPAGE ".El\n";
|
|
}
|
|
|
|
###########################################################################
|
|
sub doarch
|
|
{
|
|
local($arch) = @_;
|
|
|
|
return "no MAKEDEV file found"
|
|
if ! -f "../../../etc/etc.${arch}/MAKEDEV";
|
|
return "no MAKEDEV.8.template"
|
|
if ! -f "MAKEDEV.8.template";
|
|
|
|
rename("man8.${arch}/MAKEDEV.8", "man8.${arch}/MAKEDEV.8.old");
|
|
|
|
# find out current RCS ID
|
|
$RCSID="\$NetBSD\$";
|
|
open(OLD, "man8.${arch}/MAKEDEV.8.old");
|
|
while(<OLD>) {
|
|
if (/(\$NetBSD.*\$)/) {
|
|
$RCSID = "$1";
|
|
}
|
|
}
|
|
close(OLD);
|
|
|
|
open(MANPAGE, ">man8.${arch}/MAKEDEV.8") or die;
|
|
print MANPAGE ".\\\" *** ------------------------------------------------------------------\n";
|
|
print MANPAGE ".\\\" *** This file was generated automatically\n";
|
|
print MANPAGE ".\\\" *** from src/etc/etc.${arch}/MAKEDEV and\n";
|
|
print MANPAGE ".\\\" *** src/share/man/man8/MAKEDEV.8.template\n";
|
|
print MANPAGE ".\\\" ***\n";
|
|
print MANPAGE ".\\\" *** DO NOT EDIT - any changes will be lost!!!\n";
|
|
print MANPAGE ".\\\" *** ------------------------------------------------------------------\n";
|
|
print MANPAGE ".\\\"\n";
|
|
|
|
open(MAKEDEV, "../../../etc/etc.${arch}/MAKEDEV") or die;
|
|
|
|
open(TEMPLATE, "MAKEDEV.8.template") or die;
|
|
while(<TEMPLATE>) {
|
|
if (/\@\@\@.*\@\@\@/) {
|
|
if (/^\@\@\@SPECIAL\@\@\@$/) {
|
|
print MANPAGE ".\\\" $_";
|
|
do_special();
|
|
} elsif (/^\@\@\@DEVICES\@\@\@$/) {
|
|
print MANPAGE ".\\\" $_";
|
|
do_devices();
|
|
} elsif (/\@\@\@ARCH\@\@\@/) {
|
|
s/\@\@\@ARCH\@\@\@/${arch}/g;
|
|
print MANPAGE "$_";
|
|
} elsif (/\@\@\@DATE\@\@\@/) {
|
|
my $mydate;
|
|
$mydate=`grep ^.Dd man8.${arch}/MAKEDEV.8.old 2>/dev/null`;
|
|
if ($mydate) {
|
|
print MANPAGE $mydate;
|
|
} else {
|
|
print MANPAGE "$_";
|
|
print "Date not found in previous version, or previous".
|
|
" version not found.\nPlease replace".
|
|
" \@\@\@DATE\@\@\@ in man8.${arch}/MAKEDEV.8 with".
|
|
" a real date.\n";
|
|
}
|
|
}
|
|
} elsif (/(\$NetBSD.*\$)/) {
|
|
$id=$1;
|
|
$id=~s/\$/\\\$/g;
|
|
s/$id/$RCSID/;
|
|
print MANPAGE "$_";
|
|
} else {
|
|
print MANPAGE "$_";
|
|
}
|
|
}
|
|
close(TEMPLATE);
|
|
close(MANPAGE);
|
|
|
|
$rc=system("cmp >/dev/null 2>&1 'man8.${arch}/MAKEDEV.8.old' 'man8.${arch}/MAKEDEV.8'");
|
|
|
|
if ($rc) {
|
|
unlink("man8.${arch}/MAKEDEV.8.old");
|
|
return "updated";
|
|
} else {
|
|
unlink("man8.${arch}/MAKEDEV.8");
|
|
rename("man8.${arch}/MAKEDEV.8.old", "man8.${arch}/MAKEDEV.8");
|
|
return "unchanged";
|
|
}
|
|
}
|
|
|
|
###########################################################################
|
|
###########################################################################
|
|
###
|
|
### M A I N
|
|
###
|
|
###########################################################################
|
|
###########################################################################
|
|
# cd /usr/src/share/man/man8
|
|
chomp($pwd=`pwd`);
|
|
die "Run this in .../src/share/man/man8 !\n"
|
|
if ($pwd !~ m:share/man/man8: );
|
|
|
|
if ($#ARGV >= 0) {
|
|
@archs = @ARGV;
|
|
|
|
} else {
|
|
|
|
# Determine available archs by looking for man8.*
|
|
opendir(D, ".") || die;
|
|
while ($d=readdir(D)) {
|
|
if ($d =~ /man8\.(.*)$/) {
|
|
push(@archs, $1);
|
|
}
|
|
}
|
|
closedir(d);
|
|
}
|
|
|
|
#DEBUG ONLY# @archs=("alpha");
|
|
|
|
# Handle each arch's manpage
|
|
foreach $arch ( sort @archs ) {
|
|
$rc = doarch($arch);
|
|
printf("%-20s $rc\n", "$arch:");
|
|
}
|