summaryrefslogtreecommitdiff
path: root/make_ext.pl
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2010-10-05 05:42:22 +0100
committerNicholas Clark <nick@ccl4.org>2010-10-05 13:37:29 +0100
commit13b5e8d8173af2197798ae78b4520ece8cb1151c (patch)
tree866f1bf4b87bf1ebd298f484ac71f0fce8c72508 /make_ext.pl
parent2c3d1f01b5371329bf99858414b5a2c0e891bce1 (diff)
downloadperl-13b5e8d8173af2197798ae78b4520ece8cb1151c.tar.gz
make_ext.pl now writes Makefile.PL that cope with pod*.PL self-extractors.
The "fun" comes because 1: these extract as pod2foo.com on VMS, pod2foo everywhere else 2: these contain a chdir, which messes up relative paths in @INC
Diffstat (limited to 'make_ext.pl')
-rw-r--r--make_ext.pl47
1 files changed, 41 insertions, 6 deletions
diff --git a/make_ext.pl b/make_ext.pl
index 11f11943fe..a4a6ea7b87 100644
--- a/make_ext.pl
+++ b/make_ext.pl
@@ -343,20 +343,55 @@ sub build_extension {
$pod_name = $fromname unless -e $pod_name;
open my $fh, '>', 'Makefile.PL'
or die "Can't open Makefile.PL for writing: $!";
- print $fh <<"EOM";
+ printf $fh <<'EOM', $0, $mname, $fromname, $pod_name;
#-*- buffer-read-only: t -*-
-# This Makefile.PL was written by $0.
+# This Makefile.PL was written by %s.
# It will be deleted automatically by make realclean
use strict;
use ExtUtils::MakeMaker;
+# This is what the .PL extracts to. Not the ultimate file that is installed.
+# (ie Win32 runs pl2bat after this)
+
+# Doing this here avoids all sort of quoting issues that would come from
+# attempting to write out perl source with literals to generate the arrays and
+# hash.
+my @temps = 'Makefile.PL';
+foreach (glob('scripts/pod*.PL')) {
+ # The various pod*.PL extrators change directory. Doing that with relative
+ # paths in @INC breaks. It seems the lesser of two evils to copy (to avoid)
+ # the chdir doing anything, than to attempt to convert lib paths to
+ # absolute, and potentially run into problems with quoting special
+ # characters in the path to our build dir (such as spaces)
+ require File::Copy;
+
+ my $temp = $_;
+ $temp =~ s!scripts/!!;
+ File::Copy::copy($_, $temp) or die "Can't copy $temp to $_: $!";
+ push @temps, $temp;
+}
+
+my $script_ext = $^O eq 'VMS' ? '.com' : '';
+my %%pod_scripts;
+foreach (glob('pod*.PL')) {
+ my $script = $_;
+ s/.PL$/$script_ext/;
+ $pod_scripts{$script} = $_;
+}
+my @exe_files = values %%pod_scripts;
+
WriteMakefile(
- NAME => '$mname',
- VERSION_FROM => '$fromname',
- ABSTRACT_FROM => '$pod_name',
- realclean => {FILES => 'Makefile.PL'},
+ NAME => '%s',
+ VERSION_FROM => '%s',
+ ABSTRACT_FROM => '%s',
+ realclean => { FILES => "@temps" },
+ (%%pod_scripts ? (
+ PL_FILES => \%%pod_scripts,
+ EXE_FILES => \@exe_files,
+ clean => { FILES => "@exe_files" },
+ ) : ()),
);
# ex: set ro: