#
# make_ext.pl "MAKE=nmake -nologo" --dir=..\ext --target=clean
#
-# make_ext.pl MAKE=dmake --dir=..\ext
-#
-# make_ext.pl MAKE=dmake --dir=..\ext --target=clean
-#
# Will skip building extensions which are marked with an '!' char.
# Mostly because they still not ported to specified platform.
#
# by an '!ext' and are appropriate to the type of building being done.
# An extensions follows the format of Foo/Bar, which would be extension Foo::Bar
+# To fix dependency ordering, on *nix systems, edit Makefile.SH to create a
+# rule. That isn't sufficient for other systems; you also have to do
+# something in this file. See the code at
+# '# XXX hack for dependency # ordering'
+# below.
+#
+# The basic logic is:
+# 1) if there's a Makefile.PL in git for the module, use it. and call make
+# 2) If not, auto-generate one (normally)
+# 3) unless the auto-generation code figures out that the extension is
+# *really* simple, in which case don't. This will be for pure perl
+# modules, and all that is needed to be done is to copy from the source
+# to the dest directories.
+#
# It may be deleted in a later release of perl so try to
# avoid using it for other purposes.
$ENV{PATH} = "$topdir;$topdir\\win32\\bin;$ENV{PATH}";
my $pl2bat = "$topdir\\win32\\bin\\pl2bat";
unless (-f "$pl2bat.bat") {
- my @args = ($perl, "-I$topdir\\lib", ("$pl2bat.pl") x 2);
+ my @args = ($perl, "-I$topdir\\lib", "-I$topdir\\cpan\\ExtUtils-PL2Bat\\lib", ("$pl2bat.pl") x 2);
print "@args\n" if $verbose;
system(@args) unless IS_CROSS;
}
push @extspec, 'DynaLoader' if $dynaloader;
}
-{
+{ # XXX hack for dependency ordering
# Cwd needs to be built before Encode recurses into subdirectories.
- # Pod::Simple needs to be built before Pod::Functions
+ # Pod::Simple needs to be built before Pod::Functions, but after 'if'
+ # lib needs to be built before IO-Compress
# This seems to be the simplest way to ensure this ordering:
- my (@first, @other);
+ my (@first, @second, @other);
foreach (@extspec) {
- if ($_ eq 'Cwd' || $_ eq 'Pod/Simple') {
+ if ($_ eq 'Cwd' || $_ eq 'if' || $_ eq 'lib') {
push @first, $_;
+ }
+ elsif ($_ eq 'Pod/Simple') {
+ push @second, $_;
} else {
push @other, $_;
}
}
- @extspec = (@first, @other);
+ @extspec = (@first, @second, @other);
}
if ($Config{osname} eq 'catamount' and @extspec) {
if (-f $makefile) {
$makefile_no_minus_f = 0;
- open my $mfh, $makefile or die "Cannot open $makefile: $!";
+ open my $mfh, '<', $makefile or die "Cannot open $makefile: $!";
while (<$mfh>) {
# Plagiarised from CPAN::Distribution
last if /MakeMaker post_initialize section/;
last unless defined $oldv;
require ExtUtils::MM_Unix;
defined (my $newv = parse_version MM $vmod) or last;
- if ($newv ne $oldv) {
+ if (version->parse($newv) ne $oldv) {
close $mfh or die "close $makefile: $!";
_unlink($makefile);
{
'INSTALLMAN3DIR=none';
}
push @args, @$pass_through;
+ push @args, 'PERL=' . $perl if $perl; # use miniperl to run the Makefile later
_quote_args(\@args) if IS_VMS;
print join(' ', $perl, @args), "\n" if $verbose;
my $code = do {
|README
|README\.patching
|README\.release
+ |\.gitignore
)\z/xi; # /i to deal with case munging systems.
if ($leaf eq "$last.pm") {
++$has_top;
}
# This is running under miniperl, so no autodie
if ($target eq 'all') {
- local $ENV{PERL_INSTALL_QUIET} = 1;
- require ExtUtils::Install;
- ExtUtils::Install::pm_to_blib(\%pm, '../../lib/auto');
- open my $fh, '>', $pm_to_blib
- or die "Can't open '$pm_to_blib': $!";
- print $fh "$0 has handled pm_to_blib directly\n";
- close $fh
- or die "Can't close '$pm_to_blib': $!";
- if (IS_UNIX) {
- # Fake the fallback cleanup
- my $fallback
- = join '', map {s!^\.\./\.\./!!; "rm -f $_\n"} sort values %pm;
- foreach my $clean_target ('realclean', 'veryclean') {
- fallback_cleanup($return_dir, $clean_target, $fallback);
+ my $need_update = 1;
+ if (-f $pm_to_blib) {
+ # avoid touching pm_to_blib unless there's something that
+ # needs updating, see #126710
+ $need_update = 0;
+ my $test_at = -M _;
+ while (my $from = each(%pm)) {
+ if (-M $from < $test_at) {
+ ++$need_update;
+ last;
+ }
+ }
+ keys %pm; # reset iterator
+ }
+
+ if ($need_update) {
+ local $ENV{PERL_INSTALL_QUIET} = 1;
+ require ExtUtils::Install;
+ ExtUtils::Install::pm_to_blib(\%pm, '../../lib/auto');
+ open my $fh, '>', $pm_to_blib
+ or die "Can't open '$pm_to_blib': $!";
+ print $fh "$0 has handled pm_to_blib directly\n";
+ close $fh
+ or die "Can't close '$pm_to_blib': $!";
+ if (IS_UNIX) {
+ # Fake the fallback cleanup
+ my $fallback
+ = join '', map {s!^\.\./\.\./!!; "rm -f $_\n"} sort values %pm;
+ foreach my $clean_target ('realclean', 'veryclean') {
+ fallback_cleanup($return_dir, $clean_target, $fallback);
+ }
}
}
} else {