--- ./lib/ExtUtils/MM_Unix.pm-pre	Sat Nov  8 13:07:26 2003
+++ ./lib/ExtUtils/MM_Unix.pm	Sun Dec 14 23:10:14 2003
@@ -2972,7 +2972,7 @@ $(FIRST_MAKEFILE) : Makefile.PL $(CONFIG
 	$(NOECHO) $(ECHO) "==> Please rerun the make command.  <=="
 	false
 
-};
+} if -f 'Makefile.PL';
 
     join "", @m;
 }
@@ -3823,6 +3823,7 @@ sub test {
     }
     # note: 'test.pl' name is also hardcoded in init_dirscan()
     my(@m);
+    my $subdirs_test = ($self->{DIR} && @{$self->{DIR}} ? 'subdirs-test' : '');
     push(@m,"
 TEST_VERBOSE=0
 TEST_TYPE=test_\$(LINKTYPE)
@@ -3832,14 +3833,14 @@ TESTDB_SW = -d
 
 testdb :: testdb_\$(LINKTYPE)
 
-test :: \$(TEST_TYPE)
+test :: \$(TEST_TYPE) $subdirs_test
 ");
 
     if ($Is_Win95) {
-        push(@m, map(qq{\t\$(NOECHO) \$(PERLRUN) -e "exit unless -f shift; chdir '$_'; system q{\$(MAKE) test \$(PASTHRU)}" \$(FIRST_MAKEFILE)\n}, @{$self->{DIR}}));
+        push(@m, map(qq{\nsubdirs-test ::\n\t\$(NOECHO) \$(PERLRUN) -e "exit unless -f shift; chdir '$_'; system q{\$(MAKE) -f \$(FIRST_MAKEFILE) test \$(PASTHRU)}" \$(FIRST_MAKEFILE)\n}, @{$self->{DIR}}));
     }
     else {
-        push(@m, map("\t\$(NOECHO) cd $_ && \$(TEST_F) \$(FIRST_MAKEFILE) && \$(MAKE) test \$(PASTHRU)\n", @{$self->{DIR}}));
+        push(@m, map("\nsubdirs-test ::\n\t\$(NOECHO) cd $_ && \$(TEST_F) \$(FIRST_MAKEFILE) && \$(MAKE) -f \$(FIRST_MAKEFILE) test \$(PASTHRU)\n", @{$self->{DIR}}));
     }
 
     push(@m, "\t\$(NOECHO) \$(ECHO) 'No tests defined for \$(NAME) extension.'\n")
