require ExtUtils::Manifest; ExtUtils::Manifest::mkmanifest(); ExtUtils::Manifest::manicheck(); ExtUtils::Manifest::filecheck(); ExtUtils::Manifest::fullcheck(); ExtUtils::Manifest::skipcheck(); ExtUtild::Manifest::manifind(); ExtUtils::Manifest::maniread($file); ExtUtils::Manifest::manicopy($read, $target, $how);
These routines automate the maintenance and use of a MANIFEST file. A MANIFEST file is essentially just a list of filenames, one per line, with an optional comment on each line, separated by whitespace (usually one or more tabs). The idea is simply that you can extract the filenames by saying:
awk '{print $1}' MANIFEST
mkmanifest()
writes the names of all files in and below the
current directory to a file named in the global variable
$ExtUtils::Manifest::MANIFEST
(which defaults to MANIFEST)
in the current directory. As the counterpart to the awk command
above, it works much like:
find . -type f -print > MANIFEST
except that it also checks the existing MANIFEST file (if any) and copies over any comments that are found there. Also, all filenames that match any regular expression in a file MANIFEST.SKIP (if such a file exists) are ignored.
manicheck()
checks whether all files listed in a MANIFEST
file in the current directory really do exist.
filecheck()
finds files below the current directory that are not
mentioned in the MANIFEST file. An optional MANIFEST.SKIP
file will be consulted, and any filename matching a regular expression
in such a file will not be reported as missing in the MANIFEST file.
fullcheck()
does both a manicheck()
and a filecheck()
.
skipcheck()
lists all files that are skipped due to your
MANIFEST.SKIP file.
manifind()
returns a hash reference. The keys of the hash are the
files found below the current directory. The values are null strings,
representing all the MANIFEST comments that aren't there.
maniread($file)
reads a named MANIFEST file (defaults to
MANIFEST in the current directory) and returns a hash reference,
the keys of which are the filenames, and the values of which are the
comments that are there. Er, which may be null if the
comments aren't there....
manicopy($read, $target, $how)
copies the files that are the
keys in the hash %$read
to the named target directory. The
hash reference $read
is typically returned by the
maniread()
function. manicopy()
is useful
for producing a directory tree identical to the intended distribution tree. The
third parameter $how
can be used to specify a different
method of "copying". Valid values are "cp
",
which actually copies the files, "ln
", which
creates hard links, and "best
", which mostly
links the files but copies any symbolic link to make a tree without any symbolic
link. "best
" is the default, though it may not
be the best default.
The MANIFEST.SKIP file may contain regular expressions of
files that should be ignored by mkmanifest()
and
filecheck()
. The regular expressions should appear one on
each line. A typical example:
\bRCS\b ^MANIFEST\. (?i)^makefile$ ~$ \.html$ \.old$ ^blib/ ^MakeMaker-\d
mkmanifest()
, manicheck()
, filecheck()
, fullcheck()
,
maniread()
, and manicopy()
are exportable.
$ExtUtils::Manifest::MANIFEST
defaults to MANIFEST
. Changing it
results in both a different MANIFEST and a different
MANIFEST.SKIP file. This is useful if you want to maintain
different distributions for different audiences (say a user version
and a developer version including RCS).
$ExtUtils::Manifest::Quiet
defaults to 0. You can set it to a true
value to get all the functions to shutup already.
All diagnostic output is sent to STDERR
.
Not in MANIFEST:
file
A file excluded by a regular expression in MANIFEST.SKIP was missing from the MANIFEST file.
No such file:
file
A file mentioned in a MANIFEST file does not exist.
MANIFEST:
$!The MANIFEST file could not be opened.
Added to MANIFEST:
file
Reported by mkmanifest()
if $Verbose
is set and a file is added
to MANIFEST. $Verbose
is set to 1 by default.
The ExtUtils::MakeMaker library module generates a Makefile with handy targets for most of this functionality.