On Tue, 17 Jun 2003, Stas Bekman wrote:

[ .. ]
> David, please test this patch. This version performs the
> cleanup only during 'make install'. what I'm not sure about is
> whether it handles correctly some weird paths when creating the
> packlist. I think it should work, since nothing is passed via
> shell, but goes perl-2-perl.
[ .. ]

I had problems applying the original patch to httpd-test;
manually applying it worked except for an error about
a missing string terminator in the nuke_Apache__test target
(Win32 is picky about using quotes within commands).
This diff:
===================================================================
Index: Makefile.PL
===================================================================
RCS file: /home/cvspublic/httpd-test/perl-framework/Apache-Test/Makefile.PL,v
retrieving revision 1.8
diff -u -r1.8 Makefile.PL
--- Makefile.PL 29 Apr 2003 06:37:47 -0000      1.8
+++ Makefile.PL 18 Jun 2003 02:38:58 -0000
@@ -1,16 +1,21 @@
 use 5.005;

+use strict;
+
 use ExtUtils::MakeMaker;
 use Symbol;

 use lib qw(lib);

 my $VERSION;
+use File::Spec::Functions qw(catfile catdir);

 use Apache::Test5005compat;

 use Apache::TestMM qw(test); #enable 'make test'

+my $cleanup_packlist = ".mypacklist";
+
 Apache::TestMM::filter_args();

 my @scripts = qw(t/TEST);
@@ -21,6 +26,8 @@

 set_version();

+nuke_Apache__test();
+
 WriteMakefile(
     NAME      => 'Apache::Test',
     VERSION   => $VERSION,
@@ -59,3 +66,74 @@
     return $string;
 }

+
+# on Case-Insensitive systems Apache/Test.pm can't coexist with
+# Apache/test.pm, since Apache::test is now deprecated (was renamed to
+# Apache/testold.pm in mod_perl 1.28, we need to find and remove any
+# occurrences of this file. CPAN authors should
+# s/Apache::test/Apache::testold/ and can either require mod_perl 1.28
+# which already carries it or simply bundle it. The best option is to
+# port the test suite to use Apache::Test which works with both
+# mod_perl generations.
+#
+# we could have done this cleanup only for case-insensitive systems,
+# but I feel that doing it for all systems, will speedup the
+# transitions from Apache::test to either Apache::Test or
+# Apache::testold.
+#
+sub nuke_Apache__test {
+
+    my @convicts = ();
+    foreach (@INC) {
+        my $dir = catdir $_, "Apache";
+        next unless -d $dir;
+        opendir DIR, $dir or die "Cannot opendir $dir: $!\n";
+        my @matches = grep /^test.pm$/, readdir DIR;
+        closedir DIR;
+        push @convicts, map { catfile $dir, $_ } @matches if @matches;
+    }
+
+    if (@convicts) {
+        print <<EOI;
+!!! Makefile.PL has found old copies of Apache/test.pm which will
+be removed during 'make install' to prevent collisions with Apache::Test:
+
[EMAIL PROTECTED] "\n", @convicts]}
+
+CPAN authors are advised to either use Apache::testold or port their
+test suite to Apache::Test which works with both mod_perl generations.
+EOI
+    }
+
+    open PACKLIST, ">$cleanup_packlist"
+        or die "Can't open $cleanup_packlist: $!";
+    print PACKLIST join "", map "$_\n", @convicts;
+    close PACKLIST;
+}
+
+sub MY::install {
+    my $self = shift;
+
+    my $string = $self->MM::install(@_);
+    add_dep(\$string, pure_install => 'nuke_Apache__test');
+
+    $string;
+}
+
+sub MY::top_targets {
+    my $self = shift;
+    my $string = $self->MY::top_targets;
+
+    $string .= <<EOF;
+
+nuke_Apache__test:
+\t\$(PERLRUN) -MExtUtils::Install -e "uninstall(qq{$cleanup_packlist}, 1, 0)"
+EOF
+
+    $string;
+}
+
+sub add_dep {
+    my($string, $targ, $add) = @_;
+    $$string =~ s/($targ\s+::)/$1 $add/;
+}
=================================================================
worked for me on Win32 in uninstalling an existing test.pm in all
possible @INC locations before installing the new Test.pm.
Thanks, Stas.

-- 
best regards,
randy

Reply via email to