I've found a problem with the "distclean" target in Perl on Win32 (at 
least) which causes subsequent builds of a distclean'ed source tree to fail.

If I run "nmake" followed by "nmake distclean" followed by "nmake" again 
then I get this error:

=====
        lib -out:libsdbm.lib sdbm.obj  pair.obj  hash.obj
Microsoft (R) Library Manager Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

        ..\..\..\miniperl.exe "-I..\..\..\lib" "-I..\..\..\lib" 
-MExtUtils::Command -e chmod 755 libsdbm.lib
The system cannot find the path specified.
NMAKE : fatal error U1077: '..\..\..\miniperl.exe' : return code '0x1'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
Unsuccessful make(SDBM_File): code=512 at buildext.pl line 98.
NMAKE : fatal error U1077: '..\miniperl.exe' : return code '0x2'
Stop.
=====

The problem is that ext/SDBM_File/sdbm/blibdirs gets left behind which 
means that the blibdirs target in ext/SDBM_File/sdbm/Makefile doesn't 
get run.  Running that target would have created the directory 
lib/auto/sdbm which the $(INST_STATIC) target tries to output 
"extralibs.ld" into.  (The "system cannot find the path specified" error 
relates to this missing directory.)

The reason that ext/SDBM_File/sdbm/blibdirs got left behind is that 
"nmake distclean" itself actually had an error (but it carried on 
anyway, so the error tends to go unnoticed):

=====
Making clean in SDBM_File
nmake -nologo clean
        cd sdbm && ..\..\miniperl.exe "-I..\..\lib" "-I..\..\lib" 
-MExtUtils::Command -e test_f Makefile && nmake clean
'..\..\miniperl.exe' is not recognized as an internal or external 
command,operable program or batch file.
=====

That error arises from this section in ext/SDBM_File/Makefile:

    clean_subdirs :
        -cd sdbm && $(TEST_F) $(FIRST_MAKEFILE) && $(MAKE) clean

The problem is that $(TEST_F) is

    TEST_F = $(PERLRUN) -MExtUtils::Command -e test_f

where $(PERLRUN) begins "..\..\miniperl.exe".

That's fine for use within the SDBM_File directory itself, but clearly 
the relative path there is wrong after we have cd'ed into the sdbm 
sub-directory.

The attached patch (against the most recent snapshot) changes the use of 
$(PERLRUN) to $(ABSPERLRUN) in $(TEST_F) and similar "tools", and also 
in "oneliners".  Presumably other platforms have the same problem too 
(?), so I've changed MM_Unix.pm and MM_VMS.pm as well as MM_Win32.pm.

- Steve


------------------------------------------------
Radan Computational Ltd.

The information contained in this message and any files transmitted with it are 
confidential and intended for the addressee(s) only.  If you have received this 
message in error or there are any problems, please notify the sender immediately.  The 
unauthorized use, disclosure, copying or alteration of this message is strictly 
forbidden.  Note that any views or opinions presented in this email are solely those 
of the author and do not necessarily represent those of Radan Computational Ltd.  The 
recipient(s) of this message should check it and any attached files for viruses: Radan 
Computational will accept no liability for any damage caused by any virus transmitted 
by this email.
--- lib/ExtUtils/MM_Unix.pm.orig        2003-11-17 22:55:22.000000000 +0000
+++ lib/ExtUtils/MM_Unix.pm     2004-03-04 15:04:01.396854300 +0000
@@ -1963,9 +1963,9 @@
     $self->{CP}         ||= "cp";
     $self->{MV}         ||= "mv";
     $self->{CHMOD}      ||= "chmod";
-    $self->{MKPATH}     ||= '$(PERLRUN) "-MExtUtils::Command" -e mkpath';
+    $self->{MKPATH}     ||= '$(ABSPERLRUN) "-MExtUtils::Command" -e mkpath';
     $self->{EQUALIZE_TIMESTAMP} ||= 
-      '$(PERLRUN) "-MExtUtils::Command" -e eqtime';
+      '$(ABSPERLRUN) "-MExtUtils::Command" -e eqtime';
 
     $self->{UNINST}     ||= 0;
     $self->{VERBINST}   ||= 0;
@@ -1974,11 +1974,11 @@
 install([EMAIL PROTECTED], '$(VERBINST)', 0, '$(UNINST)');
 CODE
     $self->{DOC_INSTALL} ||= 
-      '$(PERLRUN) "-MExtUtils::Command::MM" -e perllocal_install';
+      '$(ABSPERLRUN) "-MExtUtils::Command::MM" -e perllocal_install';
     $self->{UNINSTALL}   ||= 
-      '$(PERLRUN) "-MExtUtils::Command::MM" -e uninstall';
+      '$(ABSPERLRUN) "-MExtUtils::Command::MM" -e uninstall';
     $self->{WARN_IF_OLD_PACKLIST} ||= 
-      '$(PERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist';
+      '$(ABSPERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist';
 
     $self->{UMASK_NULL}         ||= "umask 0";
     $self->{DEV_NULL}           ||= "> /dev/null 2>&1";
@@ -3613,7 +3613,7 @@
 
     $switches = join ' ', @$switches;
 
-    return qq{\$(PERLRUN) $switches -e $cmd};   
+    return qq{\$(ABSPERLRUN) $switches -e $cmd};   
 }
 
 
--- lib/ExtUtils/MM_VMS.pm.orig 2003-11-04 00:13:06.000000000 +0000
+++ lib/ExtUtils/MM_VMS.pm      2004-03-04 15:06:14.454751400 +0000
@@ -408,14 +408,14 @@
     $self->{MAKE_APERL_FILE}    ||= 'Makeaperl.MMS';
     $self->{MAKEFILE_OLD}       ||= '$(FIRST_MAKEFILE)_old';
 
-    $self->{ECHO}     ||= '$(PERLRUN) -le "print [EMAIL PROTECTED]"';
-    $self->{ECHO_N}   ||= '$(PERLRUN) -e  "print [EMAIL PROTECTED]"';
-    $self->{TOUCH}    ||= '$(PERLRUN) "-MExtUtils::Command" -e touch';
-    $self->{CHMOD}    ||= '$(PERLRUN) "-MExtUtils::Command" -e chmod'; 
-    $self->{RM_F}     ||= '$(PERLRUN) "-MExtUtils::Command" -e rm_f';
-    $self->{RM_RF}    ||= '$(PERLRUN) "-MExtUtils::Command" -e rm_rf';
-    $self->{TEST_F}   ||= '$(PERLRUN) "-MExtUtils::Command" -e test_f';
-    $self->{EQUALIZE_TIMESTAMP} ||= '$(PERLRUN) -we "open F,qq{>>$ARGV[1]};close 
F;utime(0,(stat($ARGV[0]))[9]+1,$ARGV[1])"';
+    $self->{ECHO}     ||= '$(ABSPERLRUN) -le "print [EMAIL PROTECTED]"';
+    $self->{ECHO_N}   ||= '$(ABSPERLRUN) -e  "print [EMAIL PROTECTED]"';
+    $self->{TOUCH}    ||= '$(ABSPERLRUN) "-MExtUtils::Command" -e touch';
+    $self->{CHMOD}    ||= '$(ABSPERLRUN) "-MExtUtils::Command" -e chmod'; 
+    $self->{RM_F}     ||= '$(ABSPERLRUN) "-MExtUtils::Command" -e rm_f';
+    $self->{RM_RF}    ||= '$(ABSPERLRUN) "-MExtUtils::Command" -e rm_rf';
+    $self->{TEST_F}   ||= '$(ABSPERLRUN) "-MExtUtils::Command" -e test_f';
+    $self->{EQUALIZE_TIMESTAMP} ||= '$(ABSPERLRUN) -we "open F,qq{>>$ARGV[1]};close 
F;utime(0,(stat($ARGV[0]))[9]+1,$ARGV[1])"';
 
     $self->{MOD_INSTALL} ||= 
       $self->oneliner(<<'CODE', ['-MExtUtils::Install']);
@@ -2122,7 +2122,7 @@
     # Switches must be quoted else they will be lowercased.
     $switches = join ' ', map { qq{"$_"} } @$switches;
 
-    return qq{\$(PERLRUN) $switches -e $cmd};
+    return qq{\$(ABSPERLRUN) $switches -e $cmd};
 }
 
 
--- lib/ExtUtils/MM_Win32.pm.orig       2003-10-30 07:38:02.000000000 +0000
+++ lib/ExtUtils/MM_Win32.pm    2004-03-04 15:02:58.039912300 +0000
@@ -171,14 +171,14 @@
     $self->{ECHO}     ||= $self->oneliner('print [EMAIL PROTECTED]', ['-l']);
     $self->{ECHO_N}   ||= $self->oneliner('print [EMAIL PROTECTED]');
 
-    $self->{TOUCH}    ||= '$(PERLRUN) -MExtUtils::Command -e touch';
-    $self->{CHMOD}    ||= '$(PERLRUN) -MExtUtils::Command -e chmod'; 
-    $self->{CP}       ||= '$(PERLRUN) -MExtUtils::Command -e cp';
-    $self->{RM_F}     ||= '$(PERLRUN) -MExtUtils::Command -e rm_f';
-    $self->{RM_RF}    ||= '$(PERLRUN) -MExtUtils::Command -e rm_rf';
-    $self->{MV}       ||= '$(PERLRUN) -MExtUtils::Command -e mv';
+    $self->{TOUCH}    ||= '$(ABSPERLRUN) -MExtUtils::Command -e touch';
+    $self->{CHMOD}    ||= '$(ABSPERLRUN) -MExtUtils::Command -e chmod'; 
+    $self->{CP}       ||= '$(ABSPERLRUN) -MExtUtils::Command -e cp';
+    $self->{RM_F}     ||= '$(ABSPERLRUN) -MExtUtils::Command -e rm_f';
+    $self->{RM_RF}    ||= '$(ABSPERLRUN) -MExtUtils::Command -e rm_rf';
+    $self->{MV}       ||= '$(ABSPERLRUN) -MExtUtils::Command -e mv';
     $self->{NOOP}     ||= 'rem';
-    $self->{TEST_F}   ||= '$(PERLRUN) -MExtUtils::Command -e test_f';
+    $self->{TEST_F}   ||= '$(ABSPERLRUN) -MExtUtils::Command -e test_f';
     $self->{DEV_NULL} ||= '> NUL';
 
     $self->{LD}     ||= $Config{ld} || 'link';
@@ -451,7 +451,7 @@
 
     $switches = join ' ', @$switches;
 
-    return qq{\$(PERLRUN) $switches -e $cmd};
+    return qq{\$(ABSPERLRUN) $switches -e $cmd};
 }
 
 
--- t/oneliner.t.orig   2002-12-17 08:53:02.000000000 +0000
+++ t/oneliner.t        2004-03-04 15:10:31.371693500 +0000
@@ -28,7 +28,7 @@
 sub try_oneliner {
     my($code, $switches, $expect, $name) = @_;
     my $cmd = $mm->oneliner($code, $switches);
-    $cmd =~ s{\$\(PERLRUN\)}{$^X};
+    $cmd =~ s{\$\(ABSPERLRUN\)}{$^X};
 
     # VMS likes to put newlines at the end of commands if there isn't
     # one already.
--- t/split_command.t.orig      2003-03-29 08:43:12.000000000 +0000
+++ t/split_command.t   2004-03-04 15:11:43.323790700 +0000
@@ -54,7 +54,7 @@
 sub _run {
     my @cmds = @_;
 
-    s{\$\(PERLRUN\)}{$perl} foreach @cmds;
+    s{\$\(ABSPERLRUN\)}{$perl} foreach @cmds;
     if( $Is_VMS ) {
         s{-\n}{} foreach @cmds
     }

Reply via email to