#! /usr/bin/perl # $OpenBSD: check-manpages,v 1.4 2004/11/13 11:49:48 espie Exp $ # # Copyright (c) 2004 Marc Espie # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # check all manpages in existing packages use OpenBSD::PackageLocator; use OpenBSD::PackageInfo; use OpenBSD::PackingList; use OpenBSD::Ustar; use File::Temp; print "Scanning packages\n"; print "-----------------\n"; if (@ARGV==0) { @ARGV=(<*.tgz>); } my $extract_dir = File::Temp::tempdir("manpages.XXXXXXXXXXXX", DIR => '.'); print "Extracting all documentation into $extract_dir\n"; my %mandirs=(); for my $pkgname (@ARGV) { print STDERR "$pkgname\n"; my $true_package = OpenBSD::PackageLocator->find($pkgname); next unless $true_package; my $dir = $true_package->info(); my $plist = OpenBSD::PackingList->fromfile($dir.CONTENTS); for my $item (@{$plist->{items}}) { next unless $item->IsFile(); my $n = $item->fullname(); if ($n =~ m,/man/(?:man.*?|cat.*?)/,) { my $file; do { $file = $true_package->next(); } while ($file->{name} ne $item->{name}); $file->{name} = $n; $n =~ m,^(.*/man)/(?:man.*?|cat.?)/,; $mandirs{"$extract_dir$1"} = 1; $file->{cwd} = $item->cwd(); $file->{destdir} = $extract_dir; eval { $file->create(); }; } } $true_package->close(); } print STDERR "Running makewhatis in ", join(' ', keys(%mandirs)), "\n"; system("/usr/libexec/makewhatis -p ".join(' ', keys(%mandirs)));