1b8851fccSafresh1# Build instructions for podlators. 2b8851fccSafresh1# 3b8851fccSafresh1# We need to use ExtUtils::MakeMaker since this module is part of Perl core, 4b8851fccSafresh1# which only supports that build method, and because it is a dependency of 5b8851fccSafresh1# other build systems like Module::Build. 6b8851fccSafresh1# 7*e0680481Safresh1# Copyright 1999-2001, 2008, 2010, 2012, 2014-2016, 2018-2019, 2022 8b8851fccSafresh1# Russ Allbery <rra@cpan.org> 9b8851fccSafresh1# 10b8851fccSafresh1# This program is free software; you may redistribute it and/or modify it 11b8851fccSafresh1# under the same terms as Perl itself. 12b46d8ef2Safresh1# 13b46d8ef2Safresh1# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl 14b8851fccSafresh1 1556d68f1eSafresh1use 5.008; 16b8851fccSafresh1use strict; 17b8851fccSafresh1use warnings; 18b8851fccSafresh1 19b8851fccSafresh1use Config; 20b8851fccSafresh1use ExtUtils::MakeMaker; 21b8851fccSafresh1use File::Spec; 22b8851fccSafresh1 23b46d8ef2Safresh1# Determine the version of the distribution so that we can construct the 24b46d8ef2Safresh1# provides metadata that unfortunately ExtUtils::MakeMaker does not build. 25b46d8ef2Safresh1# This is a very simple $VERSION parser, since it only has to handle the 26b46d8ef2Safresh1# syntax Pod::Man uses. 27b46d8ef2Safresh1# 28b46d8ef2Safresh1# Returns: Distribution version as a string 29b46d8ef2Safresh1sub dist_version { 30b46d8ef2Safresh1 open(my $fh, '<', File::Spec->catfile('lib', 'Pod', 'Man.pm')) 31b46d8ef2Safresh1 or die "$0: cannot open lib/Pod/Man.pm: $!\n"; 32b46d8ef2Safresh1 while (defined(my $line = <$fh>)) { 33*e0680481Safresh1 if ($line =~ m{ \A (?:our \s+)? \$VERSION \s+ = \s+ '([^\']+)' }xms) { 34b46d8ef2Safresh1 close($fh) or die "$0: cannot close lib/Pod/Man.pm\n"; 35b46d8ef2Safresh1 return $1; 36b46d8ef2Safresh1 } 37b46d8ef2Safresh1 } 38b46d8ef2Safresh1 close($fh) or die "$0: cannot close lib/Pod/Man.pm\n"; 39b46d8ef2Safresh1 die "$0: cannot find version in lib/Pod/Man.pm\n"; 40b46d8ef2Safresh1} 41b46d8ef2Safresh1 42b8851fccSafresh1# Generate full paths for scripts distributed in the bin directory. Appends 43b8851fccSafresh1# the .com extension to scripts on VMS, unless they already have the .PL 44b8851fccSafresh1# extension. 45b8851fccSafresh1# 46b8851fccSafresh1# @scripts - List of script names 47b8851fccSafresh1# 48b8851fccSafresh1# Returns: (Array) List of relative paths from top of distribution 49b8851fccSafresh1# (Scalar) Space-separated relative paths from top of distribution 50b8851fccSafresh1sub scripts { 51b8851fccSafresh1 my (@scripts) = @_; 52b8851fccSafresh1 my @paths = map { File::Spec->catfile('scripts', $_) } @scripts; 53b8851fccSafresh1 if ($^O eq 'VMS') { 54b8851fccSafresh1 @paths = map { m{ [.] PL \z }xms ? $_ : $_ . '.com' } @paths; 55b8851fccSafresh1 } 56b8851fccSafresh1 return wantarray ? @paths : join(q{ }, @paths); 57b8851fccSafresh1} 58b8851fccSafresh1 59b8851fccSafresh1# Generate an association between a source file and a destination man page for 60b8851fccSafresh1# non-module man pages. ExtUtils::MakeMaker only really understands how to 61b8851fccSafresh1# generate man pages for modules, so we need to help it for the script man 62b8851fccSafresh1# pages and (particularly) the perlpodstyle man page. 63b8851fccSafresh1# 64b8851fccSafresh1# $directory - Directory containing the file 65b8851fccSafresh1# $file - File containing POD in that directory 66b8851fccSafresh1# 67b8851fccSafresh1# Returns: The path to the file with POD and the output man page, as a pair 68b8851fccSafresh1sub man1pod { 69b8851fccSafresh1 my ($directory, $file) = @_; 70b8851fccSafresh1 71b8851fccSafresh1 # Build the base name of the file by stripping any *.pod or *.PL suffix. 72b8851fccSafresh1 my $basename = $file; 73b8851fccSafresh1 $basename =~ s{ [.] (?: pod | PL ) \z }{}xms; 74b8851fccSafresh1 75b8851fccSafresh1 # Determine the output file name for the generated man page. 76b8851fccSafresh1 my $outname = $basename . q{.} . $Config{man1ext}; 77b8851fccSafresh1 my $outpath = File::Spec->catfile(qw(blib man1), $outname); 78b8851fccSafresh1 return (File::Spec->catfile($directory, $file), $outpath); 79b8851fccSafresh1} 80b8851fccSafresh1 81b8851fccSafresh1# The hash of all the metadata. This will be modified before WriteMakefile to 82b8851fccSafresh1# remove keys not supported by the local version of ExtUtils::MakeMaker. 83b46d8ef2Safresh1my $dist_version = dist_version(); 84b8851fccSafresh1my %metadata = ( 85*e0680481Safresh1 #<<< 86b8851fccSafresh1 NAME => 'Pod', 87b8851fccSafresh1 DISTNAME => 'podlators', 88b8851fccSafresh1 ABSTRACT => 'Convert POD data to various other formats', 89b8851fccSafresh1 AUTHOR => 'Russ Allbery <rra@cpan.org>', 90b8851fccSafresh1 LICENSE => 'perl_5', 91b8851fccSafresh1 EXE_FILES => [scripts('pod2text', 'pod2man')], 92b8851fccSafresh1 VERSION_FROM => 'lib/Pod/Man.pm', 93*e0680481Safresh1 MIN_PERL_VERSION => '5.010', 94*e0680481Safresh1 #>>> 95b8851fccSafresh1 96b8851fccSafresh1 # Use *.PL files to generate the driver scripts so that we get the correct 97b8851fccSafresh1 # invocation of Perl on non-UNIX platforms. 98b8851fccSafresh1 PL_FILES => { 99b8851fccSafresh1 scripts('pod2man.PL', 'pod2man'), scripts('pod2text.PL', 'pod2text'), 100b8851fccSafresh1 }, 101b8851fccSafresh1 102b8851fccSafresh1 # Override the files that generate section 1 man pages. 103b8851fccSafresh1 MAN1PODS => { 104b8851fccSafresh1 man1pod('scripts', 'pod2man.PL'), 105b8851fccSafresh1 man1pod('scripts', 'pod2text.PL'), 106b8851fccSafresh1 107b8851fccSafresh1 # Perl core uses a separate copy in the top-level pod directory. 108b8851fccSafresh1 ($ENV{PERL_CORE} ? () : man1pod('pod', 'perlpodstyle.pod')), 109b8851fccSafresh1 }, 110b8851fccSafresh1 111b8851fccSafresh1 # Clean some additional files. 112b8851fccSafresh1 clean => { FILES => File::Spec->catdir('t', 'tmp') }, 113b8851fccSafresh1 realclean => { FILES => scalar(scripts('pod2text', 'pod2man')) }, 114b8851fccSafresh1 115b8851fccSafresh1 # Dependencies on other modules. 116*e0680481Safresh1 PREREQ_PM => { 'Pod::Simple' => 3.26 }, 117b8851fccSafresh1 118b8851fccSafresh1 # Older versions of ExtUtils::MakeMaker don't pick up nested test 119b8851fccSafresh1 # directories by default. 120b8851fccSafresh1 test => { TESTS => 't/*/*.t' }, 121b8851fccSafresh1 122b8851fccSafresh1 # For older versions of Perl, we have to force installation into the Perl 123b8851fccSafresh1 # module directories since site modules did not take precedence over core 124b8851fccSafresh1 # modules. 125b8851fccSafresh1 INSTALLDIRS => $] lt '5.011' ? 'perl' : 'site', 126b8851fccSafresh1 127b8851fccSafresh1 # Additional metadata. 128b8851fccSafresh1 META_ADD => { 129b8851fccSafresh1 'meta-spec' => { version => 2 }, 130b46d8ef2Safresh1 provides => { 131b46d8ef2Safresh1 'Pod::Man' => { 132b46d8ef2Safresh1 file => 'lib/Pod/Man.pm', 133b46d8ef2Safresh1 version => $dist_version, 134b46d8ef2Safresh1 }, 135b46d8ef2Safresh1 'Pod::ParseLink' => { 136b46d8ef2Safresh1 file => 'lib/Pod/ParseLink.pm', 137b46d8ef2Safresh1 version => $dist_version, 138b46d8ef2Safresh1 }, 139b46d8ef2Safresh1 'Pod::Text' => { 140b46d8ef2Safresh1 file => 'lib/Pod/Text.pm', 141b46d8ef2Safresh1 version => $dist_version, 142b46d8ef2Safresh1 }, 143b46d8ef2Safresh1 'Pod::Text::Color' => { 144b46d8ef2Safresh1 file => 'lib/Pod/Text/Color.pm', 145b46d8ef2Safresh1 version => $dist_version, 146b46d8ef2Safresh1 }, 147b46d8ef2Safresh1 'Pod::Text::Overstrike' => { 148b46d8ef2Safresh1 file => 'lib/Pod/Text/Overstrike.pm', 149b46d8ef2Safresh1 version => $dist_version, 150b46d8ef2Safresh1 }, 151b46d8ef2Safresh1 'Pod::Text::Termcap' => { 152b46d8ef2Safresh1 file => 'lib/Pod/Text/Termcap.pm', 153b46d8ef2Safresh1 version => $dist_version, 154b46d8ef2Safresh1 }, 155b46d8ef2Safresh1 }, 156b8851fccSafresh1 resources => { 157b8851fccSafresh1 bugtracker => { 158*e0680481Safresh1 web => 'https://github.com/rra/podlators/issues', 159b8851fccSafresh1 }, 160b46d8ef2Safresh1 homepage => 'https://www.eyrie.org/~eagle/software/podlators/', 161b8851fccSafresh1 repository => { 162b46d8ef2Safresh1 url => 'https://github.com/rra/podlators.git', 163b8851fccSafresh1 web => 'https://github.com/rra/podlators', 164b8851fccSafresh1 type => 'git', 165b8851fccSafresh1 }, 166b8851fccSafresh1 }, 167b8851fccSafresh1 }, 168b8851fccSafresh1); 169b8851fccSafresh1 170b8851fccSafresh1# Remove keys that aren't supported by this version of ExtUtils::MakeMaker. 171b8851fccSafresh1# This hash maps keys to the minimum supported version. 172b8851fccSafresh1my %supported = ( 173b8851fccSafresh1 LICENSE => 6.31, 174b8851fccSafresh1 META_ADD => 6.46, 175b8851fccSafresh1 MIN_PERL_VERSION => 6.48, 176b8851fccSafresh1); 177b8851fccSafresh1for my $key (keys(%supported)) { 178b8851fccSafresh1 if ($ExtUtils::MakeMaker::VERSION < $supported{$key}) { 179b8851fccSafresh1 delete $metadata{$key}; 180b8851fccSafresh1 } 181b8851fccSafresh1} 182b8851fccSafresh1 183b8851fccSafresh1# Generate the actual Makefile. Pick an arbitrary module to pull the version 184b8851fccSafresh1# from, since they should all have the same version. 185b8851fccSafresh1WriteMakefile(%metadata); 186