#! /usr/bin/env perl
-# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+# Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
#
-# Licensed under the OpenSSL license (the "License"). You may not use
+# Licensed under the Apache License 2.0 (the "License"). You may not use
# this file except in compliance with the License. You can obtain a copy
# in the file LICENSE in the source distribution or at
# https://www.openssl.org/source/license.html
my %options = ();
GetOptions(\%options,
- 'sourcedir=s', # Source directory
+ 'sourcedir=s@', # Source directories
'section=i@', # Subdirectories to look through,
# with associated section numbers
'destdir=s', # Destination directory
$options{section} = [ 1, 3, 5, 7 ];
}
unless ($options{sourcedir}) {
- $options{sourcedir} = catdir($config{sourcedir}, "doc");
+ $options{sourcedir} = [ catdir($config{sourcedir}, "doc"),
+ catdir($config{builddir}, "doc") ];
}
pod2usage(1) unless ( defined $options{section}
&& defined $options{sourcedir}
if ($options{debug}) {
print STDERR "DEBUG: options:\n";
- print STDERR "DEBUG: --sourcedir = $options{sourcedir}\n"
- if defined $options{sourcedir};
+ foreach (sort @{$options{sourcedir}}) {
+ print STDERR "DEBUG: --sourcedir = $_\n";
+ }
print STDERR "DEBUG: --destdir = $options{destdir}\n"
if defined $options{destdir};
print STDERR "DEBUG: --type = $options{type}\n"
foreach my $section (sort @{$options{section}}) {
my $subdir = "man$section";
- my $podsourcedir = catfile($options{sourcedir}, $subdir);
- my $podglob = catfile($podsourcedir, "*.pod");
+ my @podsourcedirs = map { catfile($_, $subdir); } @{$options{sourcedir}};
+ my @podglobs = map { catfile($_, "*.pod"); } @podsourcedirs;
- foreach my $podfile (glob $podglob) {
+ foreach my $podfile (map { glob $_ } @podglobs) {
my $podname = basename($podfile, ".pod");
my $podpath = catfile($podfile);
my %podinfo = extract_pod_info($podpath,
my $suffix = { man => ".$podinfo{section}".($options{suffix} // ""),
html => ".html" } -> {$options{type}};
my $generate = { man => "pod2man --name=$name --section=$podinfo{section} --center=OpenSSL --release=$config{version} \"$podpath\"",
- html => "pod2html \"--podroot=$options{sourcedir}\" --htmldir=$updir --podpath=man1:man3:man5:man7 \"--infile=$podpath\" \"--title=$podname\""
+ html => "pod2html \"--podroot=$options{sourcedir}\" --htmldir=$updir --podpath=man1:man3:man5:man7 \"--infile=$podpath\" \"--title=$podname\" --quiet"
} -> {$options{type}};
my $output_dir = catdir($options{destdir}, "man$podinfo{section}");
my $output_file = $podname . $suffix;
@output = `$generate`;
map { s|href="http://man\.he\.net/(man\d/[^"]+)(?:\.html)?"|href="../$1.html"|g; } @output
if $options{type} eq "html";
+ if ($options{type} eq "man") {
+ # Because some *roff parsers are more strict than others,
+ # multiple lines in the NAME section must be merged into
+ # one.
+ my $in_name = 0;
+ my $name_line = "";
+ my @newoutput = ();
+ foreach (@output) {
+ if ($in_name) {
+ if (/^\.SH "/) {
+ $in_name = 0;
+ push @newoutput, $name_line."\n";
+ } else {
+ chomp (my $x = $_);
+ $name_line .= " " if $name_line;
+ $name_line .= $x;
+ next;
+ }
+ }
+ if (/^\.SH +"NAME" *$/) {
+ $in_name = 1;
+ }
+ push @newoutput, $_;
+ }
+ @output = @newoutput;
+ }
}
print STDERR "DEBUG: Done processing\n" if $options{debug};
=head1 COPYRIGHT
-Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2018 The OpenSSL Project Authors. All Rights Reserved.
-Licensed under the OpenSSL license (the "License"). You may not use
+Licensed under the Apache License 2.0 (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
in the file LICENSE in the source distribution or at
https://www.openssl.org/source/license.html