Ensure backward compatibility
[gitmo/Mouse.git] / Makefile.PL
index 1222823..02450a7 100755 (executable)
@@ -1,3 +1,4 @@
+BEGIN{ $INC{'Module/Install/ExtraTests.pm'} = __FILE__ } # to disable the use of ExtrTests
 use strict;
 use warnings;
 use inc::Module::Install;
@@ -22,12 +23,16 @@ include 'Test::Exception'; # work around 0.27_0x (its use of diehook might be wr
 
 recommends 'MRO::Compat' if $] < 5.010;
 
-my $use_xs;\r
-\r
-for (@ARGV) {\r
-    /^--pp$/ and $use_xs = 0;\r
-    /^--xs$/ and $use_xs = 1;\r
-}\r
+my $use_xs;
+
+for (@ARGV) {
+    /^--pp$/ and $use_xs = 0;
+    /^--xs$/ and $use_xs = 1;
+}
+
+if($] < 5.008_001){
+    $use_xs = 0;
+}
 
 if(!defined $use_xs){
     configure_requires 'ExtUtils::CBuilder';
@@ -47,14 +52,14 @@ else{
     print "Mouse configured in Pure Perl (--pp)\n";
 }
 
-if ($Module::Install::AUTHOR) {
+if (author_context()) {
     local @INC = ('lib', @INC);
     require 'lib/Mouse/Spec.pm';
     my $require_version = Mouse::Spec->MooseVersion;
 
     if (eval{ require Moose; Moose->VERSION($require_version) }) {
         if (eval 'use Module::Install::AuthorTests; 1') {
-            create_moose_compatibility_test();
+            do 'author/create-moose-compatibility-tests.pl';
             recursive_author_tests('xt');
         } else {
             print "you don't have a M::I::AuthorTests.\n";
@@ -62,85 +67,20 @@ if ($Module::Install::AUTHOR) {
     } else {
         print "you don't have Moose $require_version. skipping moose compatibility test\n";
     }
+
+    if($use_xs){
+        # repeat testing
+        # see also ExtUtils::MM_Any::test_via_harness()
+        my $test_via_harness =  q{$(FULLPERLRUN) -MExtUtils::Command::MM -e}
+                               .q{ "do 'author/force-pp.pl'; test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')"}
+                               .q{ $(TEST_FILES)} . "\n";
+
+        postamble qq{test_dynamic :: test_pp\n\n}
+                . qq{test_pp :: pure_all\n}
+                . qq{\t} . $test_via_harness;
+    }
 }
 
 clean_files 'lib/Mouse/Tiny.pm';
 
 WriteAll check_nmake => 0;
-
-sub create_moose_compatibility_test {
-    require File::Path;
-    require File::Spec;
-    require File::Basename;
-
-    print "Creating compatibility tests in xt/compatibility/* ...\n";
-
-    File::Path::rmtree(File::Spec->catfile('xt', 'compatibility'));
-
-    # some test does not pass... currently skip it.
-    my %SKIP_TEST = (
-        '016-trigger.t'    => "trigger's argument is incompatble :(",
-        '810-isa-or.t'     => "Mouse has a [BUG]",
-
-        '052-undefined-type-in-union.t' => "Mouse accepts undefined type as a member of union types",
-        '054-anon-leak.t'     => 'Moose has memory leaks',
-
-        '600-tiny-tiny.t'     => "Moose doesn't support ::Tiny",
-        '601-tiny-mouse.t'    => "Moose doesn't support ::Tiny",
-        '602-mouse-tiny.t'    => "Moose doesn't support ::Tiny",
-
-        '031_roles_applied_in_create.t' => 't/lib/* classes are not Moose classes/roles',
-    );
-
-    my @compat_tests;
-
-    File::Find::find(
-        {
-            wanted => sub {
-                return unless -f $_;
-
-                return if /failing/; # skip tests in failing/ directories which  are Moose specific
-
-                return if /with_moose/; # tests with Moose
-                return if /100_bugs/;   # some tests require Mouse specific files
-                return if /deprecated/;
-
-                my $basename = File::Basename::basename($_);
-                return if $basename =~ /^\./;
-
-                if(exists $SKIP_TEST{$basename}){
-                    print "# skip $basename because: $SKIP_TEST{$basename}\n";
-                    return;
-                }
-
-                my $dirname = File::Basename::dirname($_);
-
-                my $tmpdir = File::Spec->catfile('xt', 'compatibility', $dirname);
-                File::Path::mkpath($tmpdir);
-
-                my $tmpfile = File::Spec->catfile($tmpdir, $basename);
-                open my $wfh, '>', $tmpfile or die $!;
-                print $wfh do {
-                    my $src = do {
-                        open my $rfh, '<', $_ or die $!;
-                        my $s = do { local $/; <$rfh> };
-                        close $rfh;
-                        $s;
-                    };
-                    $src =~ s/Mouse::(?:Util::)?is_class_loaded/Class::MOP::is_class_loaded/g;
-                    $src =~ s/Mouse::(?:Util::)?load_class/Class::MOP::load_class/g;
-                    $src =~ s/Mouse/Moose/g;
-                    $src;
-                };
-                close $wfh;
-                push @compat_tests, $tmpfile;
-            },
-            no_chdir => 1
-        },
-        't',
-    );
-    print "Compatibility tests created.\n";
-
-    clean_files "@compat_tests";
-}
-