From 1ec45faba59660f3c0ce8ea0c19fb3a63b12b069 Mon Sep 17 00:00:00 2001 From: Rich Salz Date: Wed, 15 Jan 2020 14:53:29 -0500 Subject: [PATCH] Use a wrapper for pod2html Remove unused util/process_docs.pl Reviewed-by: Matthias St. Pierre Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/10856) --- Configurations/descrip.mms.tmpl | 7 +- Configurations/unix-Makefile.tmpl | 8 +- Configurations/windows-makefile.tmpl | 5 +- util/mkpod2html.pl | 52 +++++ util/process_docs.pl | 282 --------------------------- 5 files changed, 57 insertions(+), 297 deletions(-) create mode 100755 util/mkpod2html.pl delete mode 100755 util/process_docs.pl diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl index 15fefd2502..5b2936dea0 100644 --- a/Configurations/descrip.mms.tmpl +++ b/Configurations/descrip.mms.tmpl @@ -770,13 +770,10 @@ reconfigure reconf : if ($args{src} =~ /\.html$/) { my $title = basename($args{src}, ".html"); my $pod = $args{generator}->[0]; + my $mkpod2html = sourcefile('util', 'mkpod2html.pl'); return <<"EOF"; $args{src}: $pod - pipe pod2html "--podroot=\$(SRCDIR)/doc" --htmldir=.. - - --podpath=man1:man3:man5:man7 "--infile=$pod" - - "--title=$title" - - | \$(PERL) -pe "s|href=""http://man\\.he\\.net/(man\d/[^""]+)(?:\\.html)?""|href=""../\$1.html|g;" - - > \$\@ + \$(PERL) $mkpod2html -i $pod -o \$\@ -t "$title" -r "\$(SRCDIR)/doc" EOF } elsif (platform->isdef($args{src})) { my $target = platform->def($args{src}); diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 55c1b12573..51ba10f62a 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -1187,10 +1187,7 @@ reconfigure reconf: my $pod = $args{generator}->[0]; return <<"EOF"; $args{src}: $pod - pod2html "--podroot=\$(SRCDIR)/doc" --htmldir=.. \\ - --podpath=man1:man3:man5:man7 --infile=$pod "--title=$title" \\ - | \$(PERL) -pe 's|href="http://man\\.he\\.net/(man\\d/[^"]+)(?:\\.html)?"|href="../\$1.html|g;' \\ - > \$\@ + \$(PERL) \$(SRCDIR)/util/mkpod2html.pl -i "$pod" -o \$\@ -t "$title" -r "\$(SRCDIR)/doc" EOF } elsif ($args{src} =~ /\.(\d)$/) { my $section = $1; @@ -1199,8 +1196,7 @@ EOF return <<"EOF"; $args{src}: $pod pod2man --name=$name --section=$section --center=OpenSSL \\ - --release=\$(VERSION) $pod \\ - > \$\@ + --release=\$(VERSION) $pod >\$\@ EOF } elsif (platform->isdef($args{src})) { my $target = platform->def($args{src}); diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl index 074e8f74c5..afc386daec 100644 --- a/Configurations/windows-makefile.tmpl +++ b/Configurations/windows-makefile.tmpl @@ -587,10 +587,7 @@ reconfigure reconf: my $pod = $args{generator}->[0]; return <<"EOF"; $args{src}: "$pod" - pod2html "--podroot=\$(SRCDIR)/doc" --htmldir=.. \\ - --podpath=man1:man3:man5:man7 "--infile=$pod" "--title=$title" \\ - | \$(PERL) -pe ^"s^|href=\\^"http://man\\.he\\.net/^(man\\d/[^^\\^"]+^)^(?:\.html^)?^"^|href=\\^"../\$\$1.html^|g;^" \\ - > \$\@ + \$(PERL) \$(SRCDIR)/util/mkpod2html.pl -i "$pod" -o \$\@ -t "$title" -r "\$(SRCDIR)/doc" EOF } elsif (platform->isdef($args{src})) { my $target = platform->def($args{src}); diff --git a/util/mkpod2html.pl b/util/mkpod2html.pl new file mode 100755 index 0000000000..9e81d36653 --- /dev/null +++ b/util/mkpod2html.pl @@ -0,0 +1,52 @@ +#! /usr/bin/env perl +# Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. +# +# 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 + +use strict; +use warnings; + +use lib "."; +use Getopt::Std; +use Pod::Html; + +# Options. +our($opt_i); # -i INFILE +our($opt_o); # -o OUTFILE +our($opt_t); # -t TITLE +our($opt_r); # -r PODROOT + +getopts('i:o:t:r:'); +die "-i flag missing" unless $opt_i; +die "-o flag missing" unless $opt_o; +die "-t flag missing" unless $opt_t; +die "-r flag missing" unless $opt_r; + +pod2html + "--infile=$opt_i", + "--outfile=$opt_o", + "--title=$opt_t", + "--podroot=$opt_r", + "--podpath=man1:man3:man5:man7", + "--htmldir=.."; + +# Read in contents. +open F, "<$opt_o" + or die "Can't read $opt_o, $!"; +my $contents = ''; +{ + local $/ = undef; + $contents = ; +} +close F; +unlink $opt_o; + +$contents =~ + s|href="http://man\.he\.net/(man\d/[^"]+)(?:\.html)?"|href="../$1.html|g; +open F, ">$opt_o" + or die "Can't write $opt_o, $!"; +print F $contents; +close F; diff --git a/util/process_docs.pl b/util/process_docs.pl deleted file mode 100755 index a4287c27d7..0000000000 --- a/util/process_docs.pl +++ /dev/null @@ -1,282 +0,0 @@ -#! /usr/bin/env perl -# Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. -# -# 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 - -use strict; -use warnings; - -use File::Spec::Functions; -use File::Basename; -use File::Copy; -use File::Path; -use FindBin; -use lib "$FindBin::Bin/perl"; -use OpenSSL::Glob; -use Getopt::Long; -use Pod::Usage; - -use lib '.'; -use configdata; - -# We know we are in the 'util' directory and that our perl modules are -# in util/perl -use lib catdir(dirname($0), "perl"); -use OpenSSL::Util::Pod; - -my %options = (); -GetOptions(\%options, - 'sourcedir=s@', # Source directories - 'section=i@', # Subdirectories to look through, - # with associated section numbers - 'destdir=s', # Destination directory - #'in=s@', # Explicit files to process (ignores sourcedir) - 'type=s', # The result type, 'man' or 'html' - 'suffix:s', # Suffix to add to the extension. - # Only used with type=man - 'remove', # To remove files rather than writing them - 'dry-run|n', # Only output file names on STDOUT - 'debug|D+', - ); - -unless ($options{section}) { - $options{section} = [ 1, 3, 5, 7 ]; -} -unless ($options{sourcedir}) { - $options{sourcedir} = [ catdir($config{sourcedir}, "doc"), - catdir($config{builddir}, "doc") ]; -} -pod2usage(1) unless ( defined $options{section} - && defined $options{sourcedir} - && defined $options{destdir} - && defined $options{type} - && ($options{type} eq 'man' - || $options{type} eq 'html') ); -pod2usage(1) if ( $options{type} eq 'html' - && defined $options{suffix} ); - -if ($options{debug}) { - print STDERR "DEBUG: options:\n"; - 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" - if defined $options{type}; - print STDERR "DEBUG: --suffix = $options{suffix}\n" - if defined $options{suffix}; - foreach (sort @{$options{section}}) { - print STDERR "DEBUG: --section = $_\n"; - } - print STDERR "DEBUG: --remove = $options{remove}\n" - if defined $options{remove}; - print STDERR "DEBUG: --debug = $options{debug}\n" - if defined $options{debug}; - print STDERR "DEBUG: --dry-run = $options{\"dry-run\"}\n" - if defined $options{"dry-run"}; -} - -my $symlink_exists = eval { symlink("",""); 1 }; - -foreach my $section (sort @{$options{section}}) { - my $subdir = "man$section"; - foreach my $sourcedir (@{$options{sourcedir}}) { - my $podsourcedir = catfile($sourcedir, $subdir); - my $podglob = catfile($podsourcedir, "*.pod"); - - foreach my $podfile (glob $podglob) { - my $podname = basename($podfile, ".pod"); - my $podpath = catfile($podfile); - my %podinfo = extract_pod_info($podpath, - { debug => $options{debug}, - section => $section }); - my @podfiles = grep { $_ ne $podname } @{$podinfo{names}}; - - my $updir = updir(); - my $name = uc $podname; - 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=$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; - my $output_path = catfile($output_dir, $output_file); - - if (! $options{remove}) { - my @output; - print STDERR "DEBUG: Processing, using \"$generate\"\n" - if $options{debug}; - unless ($options{"dry-run"}) { - @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}; - - if (! -d $output_dir) { - print STDERR "DEBUG: Creating directory $output_dir\n" - if $options{debug}; - unless ($options{"dry-run"}) { - mkpath $output_dir - or die "Trying to create directory $output_dir: $!\n"; - } - } - print STDERR "DEBUG: Writing $output_path\n" if $options{debug}; - unless ($options{"dry-run"}) { - open my $output_fh, '>', $output_path - or die "Trying to write to $output_path: $!\n"; - foreach (@output) { - print $output_fh $_; - } - close $output_fh; - } - print STDERR "DEBUG: Done writing $output_path\n" if $options{debug}; - } else { - print STDERR "DEBUG: Removing $output_path\n" if $options{debug}; - unless ($options{"dry-run"}) { - while (unlink $output_path) {} - } - } - print "$output_path\n"; - - foreach (@podfiles) { - my $link_file = $_ . $suffix; - my $link_path = catfile($output_dir, $link_file); - if (! $options{remove}) { - if ($symlink_exists) { - print STDERR "DEBUG: Linking $link_path -> $output_file\n" - if $options{debug}; - unless ($options{"dry-run"}) { - symlink $output_file, $link_path; - } - } else { - print STDERR "DEBUG: Copying $output_path to link_path\n" - if $options{debug}; - unless ($options{"dry-run"}) { - copy $output_path, $link_path; - } - } - } else { - print STDERR "DEBUG: Removing $link_path\n" if $options{debug}; - unless ($options{"dry-run"}) { - while (unlink $link_path) {} - } - } - print "$link_path -> $output_path\n"; - } - } - } -} - -__END__ - -=pod - -=head1 NAME - -process_docs.pl - A script to process OpenSSL docs - -=head1 SYNOPSIS - -B -[B<--sourcedir>=I] -B<--destdir>=I -B<--type>=B|B -[B<--suffix>=I] -[B<--remove>] -[B<--dry-run>|B<-n>] -[B<--debug>|B<-D>] - -=head1 DESCRIPTION - -This script looks for .pod files in the subdirectories 'apps', 'crypto' -and 'ssl' under the given source directory. - -The OpenSSL configuration data file F I reside in -the current directory, I perl must have the directory it resides in -in its inclusion array. For the latter variant, a call like this would -work: - - perl -I../foo util/process_docs.pl {options ...} - -=head1 OPTIONS - -=over 4 - -=item B<--sourcedir>=I - -Top directory where the source files are found. - -=item B<--destdir>=I - -Top directory where the resulting files should end up - -=item B<--type>=B|B - -Type of output to produce. Currently supported are man pages and HTML files. - -=item B<--suffix>=I - -A suffix added to the extension. Only valid with B<--type>=B - -=item B<--remove> - -Instead of writing the files, remove them. - -=item B<--dry-run>|B<-n> - -Do not perform any file writing, directory creation or file removal. - -=item B<--debug>|B<-D> - -Print extra debugging output. - -=back - -=head1 COPYRIGHT - -Copyright 2013-2018 The OpenSSL Project Authors. All Rights Reserved. - -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 - -=cut -- 2.34.1