Robert Spier wrote:
> 
> I need a script that meets the following specs:
> 
>   Input (via command line)
>     1)  file representing MANIFEST
>     2)        file representing MANIFEST.SKIP
>     3)        file representing list of all files found
> 
>   Output (via stdout)
>     error message if manifest check fails
> 
>   Restrictions:
>     The script cannot access any other files/filesystems/directory
>     listings besides the data in the files provided on the command
>     line.
> 
> I think the easiest to implement this is by subclassing
> ExtUtils::Manifest, and overriding manifiles() and maybe one or two
> other subroutines.

I assume you can probably yank the Mac and VMS stuff... but left it in
anyway.

Garrett

#!/usr/bin/perl
use ExtUtils::Manifest;

die "expected 3 args"  unless 3 == @ARGV;
-f or die "file not found: $_" for @ARGV;

my $found = {};
my $Is_MacOS = $^O eq 'MacOS';
my $Is_VMS = $^O eq 'VMS';
require VMS::Filespec if $Is_VMS;

$ExtUtils::Manifest::MANIFEST = shift;
my $read  = ExtUtils::Manifest::maniread() || {};

$ExtUtils::Manifest::DEFAULT_MSKIP = shift;
my $skip  = ExtUtils::Manifest::_maniskip();

open IN, shift;
/^(.*)$/ and $found->{$1}++  while (<IN>);
close IN;

# _check_manifest
foreach my $file (sort keys %$found){
    next if $skip->($file);
    unless ( exists $read->{$file} ) {
        my $canon = $Is_MacOS
            ? "\t".ExtUtils::Manifest::_unmacify($file)
            : '';
        warn "Not in $ExtUtils::Manifest::MANIFEST: $file$canon\n";
    }
}

# _check_files
foreach my $file (sort keys %$read) {
    warn "No such file: $file\n"  unless exists $found->{$file}
}

1;
__END__

--
Garrett Goebel
IS Development Specialist

ScriptPro                   Direct: 913.403.5261
5828 Reeds Road               Main: 913.384.1008
Mission, KS 66202              Fax: 913.384.2180
www.scriptpro.com          garrett at scriptpro dot com

Reply via email to