openafs/doc/xml/AdminRef/generate-xml.pl
Michael Meffie 6ff968264f doc: Sort man page entries in AdminRef
The AdminRef is a collection of OpenAFS man pages in a single document.
Unfortunately, the man pages are not listed in any particular order, but
rather just the order found by reading the unsorted directory entries.

Change the generate-xml script so the man pages are in sorted order in
the generated AdminRef document.  Instead of writing the man page
references after processing each page, save each entry in a list, and
then sort the list after all the pages have been processed.

Also, check the exit code of the pod2refentry script so errors are not
ignored while generating the AdminRef document.

Change-Id: I624485e4efd1fb0c08642b379a12c946f5793336
Reviewed-on: https://gerrit.openafs.org/15827
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
2024-09-12 12:45:29 -04:00

48 lines
1.2 KiB
Perl
Executable File

#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if $running_under_some_shell;
@sections = ('1', '5', '8');
$TOP_SRCDIR = shift @ARGV;
$doc_man_pages = sprintf "%s/../doc/man-pages", $TOP_SRCDIR;
open(ENTITIES, ">entities.dtd") || die;
foreach $section (@sections) {
printf "generating section %s...\n", $section;
my @entities = ();
mkdir(sprintf "sect%d", $section);
opendir($DIR, sprintf "%s/pod%d", $doc_man_pages, $section) || die;
while ($podfile = readdir($DIR)) {
next unless $podfile =~ /\.pod$/;
($xmlfile = $podfile) =~ s/\.pod$/.xml/;
($entity = $xmlfile) =~ s/\.xml$//;
printf "pod2refentry < %s > %s\n", $podfile, $xmlfile;
my $rc = system(sprintf "./pod2refentry --section=%d < %s/pod%d/%s > sect%d/%s",
$section, $doc_man_pages, $section, $podfile, $section, $xmlfile);
if ($rc != 0) {
die "Failed to generate sect${section}/${xmlfile}: $rc\n";
}
printf ENTITIES "<!ENTITY %s%s SYSTEM \"sect%d/%s\">\n",
$entity, $section, $section, $xmlfile;
push(@entities, $entity);
}
closedir($DIR);
open(SECT, sprintf ">sect%d.xml", $section) || die;
foreach $entity (sort(@entities)) {
printf SECT "&%s%s;\n", $entity, $section;
}
close(SECT);
}
close(ENTITIES);