Author: schwern
Date: Sat Jun 27 20:01:32 2009
New Revision: 12946

Added:
   Module-Build/trunk/t/write_default_maniskip.t
Modified:
   Module-Build/trunk/MANIFEST
   Module-Build/trunk/lib/Module/Build/Base.pm

Log:
Change the manifest action to use the system MANIFEST.SKIP rather than have MB 
make its own.

Modified: Module-Build/trunk/MANIFEST
==============================================================================
--- Module-Build/trunk/MANIFEST (original)
+++ Module-Build/trunk/MANIFEST Sat Jun 27 20:01:32 2009
@@ -71,4 +71,5 @@
 t/tilde.t
 t/use_tap_harness.t
 t/versions.t
+t/write_default_maniskip.t
 t/xs.t

Modified: Module-Build/trunk/lib/Module/Build/Base.pm
==============================================================================
--- Module-Build/trunk/lib/Module/Build/Base.pm (original)
+++ Module-Build/trunk/lib/Module/Build/Base.pm Sat Jun 27 20:01:32 2009
@@ -3358,35 +3358,81 @@
       });
 }
 
+
+=begin private
+
+  my $has_include = $build->_eumanifest_has_include;
+
+Returns true if the installed version of ExtUtils::Manifest supports
+#include and #include_default directives.  False otherwise.
+
+=end private
+
+=cut
+
+# #!include and #!include_default were added in 1.50
+sub _eumanifest_has_include {
+    my $self = shift;
+
+    require ExtUtils::Manifest;
+    return ExtUtils::Manifest->VERSION >= 1.50 ? 1 : 0;
+    return 0;
+}
+
+
+=begin private
+
+  my $maniskip_file = $build->_default_maniskip;
+
+Returns the location of the installed MANIFEST.SKIP file used by
+default.
+
+=end private
+
+=cut
+
+sub _default_maniskip {
+    my $self = shift;
+
+    my $default_maniskip;
+    for my $dir (@INC) {
+        $default_maniskip = File::Spec->catfile($dir, "ExtUtils", 
"MANIFEST.SKIP");
+        last if -r $default_maniskip;
+    }
+
+    return $default_maniskip;
+}
+
+
+=begin private
+
+  my $content = $build->_slurp($file);
+
+Reads $file and returns the $content.
+
+=end private
+
+=cut
+
+sub _slurp {
+    my $self = shift;
+    my $file = shift;
+    open my $fh, "<", $file or croak "Can't open $file: $!";
+    local $/;
+    return <$fh>;
+}
+
+
 sub _write_default_maniskip {
   my $self = shift;
   my $file = shift || 'MANIFEST.SKIP';
   my $fh = IO::File->new("> $file")
     or die "Can't open $file: $!";
 
-  # This is derived from MakeMaker's default MANIFEST.SKIP file with
-  # some new entries
+  my $content = $self->_eumanifest_has_include ? "#!include_default\n"
+                                               : $self->_slurp( 
$self->_default_maniskip );
 
-  print $fh <<'EOF';
-# Avoid version control files.
-\bRCS\b
-\bCVS\b
-,v$
-\B\.svn\b
-\B\.cvsignore$
-
-# Avoid MakeMaker generated and utility files.
-\bMakefile$
-\bblib
-\bMakeMaker-\d
-\bpm_to_blib$
-\bblibdirs$
-^MANIFEST\.SKIP$
-
-# Avoid VMS specific MakeMaker generated files
-\bDescrip.MMS$
-\bDESCRIP.MMS$
-\bdescrip.mms$
+  $content .= <<'EOF';
 
 # Avoid Module::Build generated and utility files.
 \bBuild$
@@ -3396,30 +3442,15 @@
 \bBUILD.COM$
 \bbuild.com$
 
-# Avoid Devel::Cover generated files
-\bcover_db
-
-# Avoid temp and backup files.
-~$
-\.tmp$
-\.old$
-\.bak$
-\#$
-\.#
-\.rej$
-
-# Avoid OS-specific files/dirs
-#   Mac OSX metadata
-\B\.DS_Store
-#   Mac OSX SMB mount metadata files
-\B\._
 # Avoid archives of this distribution
 EOF
 
   # Skip, for example, 'Module-Build-0.27.tar.gz'
-  print $fh '\b'.$self->dist_name.'-[\d\.\_]+'."\n";
+  $content .= '\b'.$self->dist_name.'-[\d\.\_]+'."\n";
+
+  print $fh $content;
 
-  $fh->close();
+  return;
 }
 
 sub ACTION_manifest {

Added: Module-Build/trunk/t/write_default_maniskip.t
==============================================================================
--- (empty file)
+++ Module-Build/trunk/t/write_default_maniskip.t       Sat Jun 27 20:01:32 2009
@@ -0,0 +1,37 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use lib 't/lib';
+use MBTest 'no_plan';
+
+use_ok 'Module::Build';
+ensure_blib 'Module::Build';
+
+{
+    chdir MBTest->tmpdir();
+
+    my $build = Module::Build->new(
+        dist_name       => "Foo-Bar",
+        dist_version    => '1.23',
+    );
+
+    my $skip = "mskip.txt";  # for compatibility
+    $build->_write_default_maniskip($skip);
+
+    ok -r $skip, "Default maniskip written";
+    my $have = slurp($skip);
+
+    my $head;
+    if( $build->_eumanifest_has_include ) {
+        $head = "#!include_default\n";
+    }
+    else {
+        $head = slurp($build->_default_maniskip);
+    }
+
+    like $have, qr/^\Q$head\E/, "default MANIFEST.SKIP used";
+    like $have, qr/^# Avoid Module::Build generated /ms, "Module::Build 
specific entries";
+    like $have, qr/Foo-Bar-/, "distribution tarball entry";
+}

Reply via email to