diff options
author | Nicholas Clark <nick@ccl4.org> | 2010-10-05 05:42:22 +0100 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2010-10-05 13:37:29 +0100 |
commit | 13b5e8d8173af2197798ae78b4520ece8cb1151c (patch) | |
tree | 866f1bf4b87bf1ebd298f484ac71f0fce8c72508 | |
parent | 2c3d1f01b5371329bf99858414b5a2c0e891bce1 (diff) | |
download | perl-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
-rw-r--r-- | make_ext.pl | 47 |
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: |