+# Build instructions for podlators.
+#
+# We need to use ExtUtils::MakeMaker since this module is part of Perl core,
+# which only supports that build method, and because it is a dependency of
+# other build systems like Module::Build.
+#
+# Copyright 1999, 2000, 2001, 2008, 2010, 2012, 2014, 2015, 2016
+# Russ Allbery <rra@cpan.org>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use 5.006;
use strict;
use warnings;
+use Config;
use ExtUtils::MakeMaker;
+use File::Spec;
+
+# Generate full paths for scripts distributed in the bin directory.
+#
+# @scripts - List of script names
+#
+# Returns: List of relative paths from top of distribution
+sub scripts {
+ my (@scripts) = @_;
+ return map { File::Spec->catfile('bin', $_) } @scripts;
+}
+
+# Generate an association between a source file and a destination man page for
+# non-module man pages. ExtUtils::MakeMaker only really understands how to
+# generate man pages for modules, so we need to help it for the script man
+# pages and (particularly) the perlpodstyle man page.
+#
+# $directory - Directory containing the file
+# $file - File containing POD in that directory
+#
+# Returns: The path to the file with POD and the output man page, as a pair
+sub man1pod {
+ my ($directory, $file) = @_;
+
+ # Determine the base name of the file by stripping any *.pod suffix.
+ my $basename = $file;
+ $basename =~ s{ [.]pod }{}xms;
+
+ # Determine the output file name for the generated man page.
+ my $outname = $basename . q{.} . $Config{man1ext};
+ my $outpath = File::Spec->catfile(qw(blib man1), $outname);
+ return (File::Spec->catfile($directory, $file), $outpath);
+}
+
+# The hash of all the metadata. This will be modified before WriteMakefile to
+# remove keys not supported by the local version of ExtUtils::MakeMaker.
+my %metadata = (
+ NAME => 'Pod',
+ DISTNAME => 'podlators',
+ ABSTRACT => 'Convert POD data to various other formats',
+ AUTHOR => 'Russ Allbery <rra@cpan.org>',
+ LICENSE => 'perl',
+ EXE_FILES => [scripts('pod2text', 'pod2man')],
+ VERSION_FROM => 'lib/Pod/Man.pm',
+ MIN_PERL_VERSION => '5.006',
+
+ # Override the files that generate section 1 man pages.
+ # (done differently in blead)
+ #MAN1PODS => {
+ # man1pod('bin', 'pod2man'),
+ # man1pod('bin', 'pod2text'),
+ # man1pod('pod', 'perlpodstyle'),
+ #},
-WriteMakefile(
- NAME => 'Pod',
- DISTNAME => 'podlators',
- VERSION_FROM => 'lib/Pod/Man.pm',
- EXE_FILES => [ 'bin/pod2man', 'bin/pod2text' ],
- AUTHOR => 'Russ Allbery (rra@stanford.edu)',
- ABSTRACT => 'Convert POD data to various other formats'
+ # Dependencies on other modules.
+ PREREQ_PM => {
+ 'Encode' => 0,
+ 'Pod::Simple' => 3.06,
+ },
+
+ # ExtUtils::MakeMaker doesn't pick up nested test directories by default.
+ test => { TESTS => 't/*/*.t' },
+
+ # For older versions of Perl, we have to force installation into the Perl
+ # module directories since site modules did not take precedence over core
+ # modules.
+ INSTALLDIRS => $] lt '5.011' ? 'perl' : 'site',
+
+ # Additional metadata.
+ META_ADD => {
+ 'meta-spec' => { version => 2 },
+ resources => {
+ bugtracker =>
+ 'https://rt.cpan.org/Public/Dist/Display.html?Name=podlators',
+ homepage => 'http://www.eyrie.org/~eagle/software/podlators/',
+ repository => {
+ url => 'git://github.com/rra/podlators.git',
+ web => 'https://github.com/rra/podlators',
+ type => 'git',
+ },
+ },
+ },
);
+
+# Remove keys that aren't supported by this version of ExtUtils::MakeMaker.
+# This hash maps keys to the minimum supported version.
+my %supported = (
+ LICENSE => 6.31,
+ META_ADD => 6.46,
+ MIN_PERL_VERSION => 6.48,
+);
+for my $key (keys(%supported)) {
+ if ($ExtUtils::MakeMaker::VERSION < $supported{$key}) {
+ delete $metadata{$key};
+ }
+}
+
+# Generate the actual Makefile. Pick an arbitrary module to pull the version
+# from, since they should all have the same version.
+WriteMakefile(%metadata);
use lib 't/lib';
+use File::Spec;
use Test::More;
use Test::RRA qw(skip_unless_automated use_prereq);
use_prereq('Perl::Critic::Utils');
use_prereq('Test::Synopsis');
+# Helper function that checks to see if a given path starts with blib/script.
+# This is written a bit weirdly so that it's portable to Windows and VMS.
+#
+# $path - Path to a file
+#
+# Returns: True if the file doesn't start with blib/script, false otherwise.
+sub in_blib_script {
+ my ($path) = @_;
+ my ($volume, $dir, $file) = File::Spec->splitpath($path);
+ my @dir = File::Spec->splitdir($dir);
+ return (scalar(@dir) < 2 || $dir[0] ne 'blib' || $dir[1] ne 'script');
+}
+
# The default Test::Synopsis all_synopsis_ok() function requires that the
# module be in a lib directory. Use Perl::Critic::Utils to find the modules
# in blib, or lib if it doesn't exist. However, strip out anything in
# blib/script, since scripts use a different SYNOPSIS syntax.
my @files = Perl::Critic::Utils::all_perl_files('blib');
-@files = grep { !m{blib/script/}xms } @files;
+@files = grep { in_blib_script($_) } @files;
if (!@files) {
@files = Perl::Critic::Utils::all_perl_files('lib');
}