内容

名称

ExtUtils::Manifest - 编写和检查 MANIFEST 文件的实用程序

版本

版本 1.73

概要

use ExtUtils::Manifest qw(...funcs to import...);

mkmanifest();

my @missing_files    = manicheck;
my @skipped          = skipcheck;
my @extra_files      = filecheck;
my($missing, $extra) = fullcheck;

my $found    = manifind();

my $manifest = maniread();

manicopy($read,$target);

maniadd({$file => $comment, ...});

描述

...

函数

ExtUtils::Manifest 默认不导出任何函数。以下函数应要求导出

mkmanifest

mkmanifest();

将当前目录中及以下目录中的所有文件写入到 MANIFEST 中。其工作方式类似于 Unix 命令的结果

find . > MANIFEST

如果存在文件 MANIFEST.SKIP(如果存在),则忽略与其中任何正则表达式匹配的所有文件。

任何现有的 MANIFEST 文件都将保存为 MANIFEST.bak

manifind

my $found = manifind();

返回哈希引用。哈希的键是当前目录下找到的文件。

manicheck

my @missing_files = manicheck();

检查当前目录中的 MANIFEST 中的所有文件是否确实存在。如果 MANIFEST 和当前目录下的树同步,则它会静默返回一个空列表。否则,它将返回一个文件列表,这些文件在 MANIFEST 中列出但在目录中丢失,并且默认情况下还会将这些名称输出到 STDERR。

filecheck

my @extra_files = filecheck();

查找当前目录下未在 MANIFEST 文件中提到的文件。将参考可选文件 MANIFEST.SKIP。任何与该文件中正则表达式匹配的文件都不会报告为 MANIFEST 文件中丢失。找到的任何无关文件列表将被返回,并且默认情况下也会报告给 STDERR。

fullcheck

my($missing, $extra) = fullcheck();

执行 manicheck() 和 filecheck(),然后将它们作为两个数组引用返回。

skipcheck

my @skipped = skipcheck();

列出所有因 MANIFEST.SKIP 文件而被跳过的文件。

maniread

my $manifest = maniread();
my $manifest = maniread($manifest_file);

读取一个命名的 MANIFEST 文件(默认为当前目录中的 MANIFEST)并返回一个 HASH 引用,其中文件为键,注释为 HASH 的值。MANIFEST 文件中的空行和以 # 开头的行将被丢弃。

maniskip

my $skipchk = maniskip();
my $skipchk = maniskip($manifest_skip_file);

if ($skipchk->($file)) { .. }

读取一个命名的 MANIFEST.SKIP 文件(默认为当前目录中的 MANIFEST.SKIP)并返回一个 CODE 引用,用于测试是否应跳过给定的文件名。

manicopy

manicopy(\%src, $dest_dir);
manicopy(\%src, $dest_dir, $how);

将 %src 中的键文件复制到 $dest_dir。%src 通常由 maniread() 函数返回。

manicopy( maniread(), $dest_dir );

此函数可用于生成与预期分发树相同的目录树。

$how 可用于指定不同的“复制”方法。有效值包括:cp(实际复制文件)、ln(创建硬链接)和 best(主要链接文件,但复制任何符号链接以生成不带任何符号链接的树)。cp 为默认值。

maniadd

maniadd({ $file => $comment, ...});

向现有的 MANIFEST 添加一个条目,除非该条目已存在。

$file 将被标准化(即 Unix 化)。未实现

MANIFEST

分发中的文件列表,每行一个文件。MANIFEST 始终使用 Unix 文件路径约定,即使您不在 Unix 上也是如此。这意味着 foo/bar 样式,而不是 foo\bar

MANIFEST 文件中空格和行尾之间的任何内容都被视为注释。任何以 # 开头的行也是注释。从 ExtUtils::Manifest 1.52 开始,如果文件名用单引号引起来,则该文件名可以包含空格字符;该文件名中的单引号或反斜杠必须用反斜杠转义。

# this a comment
some/file
some/other/file            comment about some/file
'some/third file'          comment

MANIFEST.SKIP

文件 MANIFEST.SKIP 可能包含应由 mkmanifest() 和 filecheck() 忽略的文件的正则表达式。正则表达式应每行出现一次。空行和以 # 开头的行将被跳过。如果您需要正则表达式以 # 开头,请使用 \#

例如

# Version control files and dirs.
\bRCS\b
\bCVS\b
,v$
\B\.svn\b

# Makemaker generated files and dirs.
^MANIFEST\.
^Makefile$
^blib/
^MakeMaker-\d

# Temp, old and emacs backup files.
~$
\.old$
^#.*#$
^\.#

如果未找到 MANIFEST.SKIP 文件,将使用一组默认跳过项,类似于上面的示例。如果您不想跳过任何内容,只需创建一个空的 MANIFEST.SKIP 文件即可。

在自己的 MANIFEST.SKIP 文件中,可以使用某些指令来包含其他 MANIFEST.SKIP 文件的内容。目前识别出两个这样的指令。

#!include_default

这会插入默认 MANIFEST.SKIP 文件的内容

#!include /Path/to/another/manifest.skip

这会插入指定外部文件的内容

包含的内容将插入到 #!start included /path/to/manifest.skip#!end included /path/to/manifest.skip 标记之间的 MANIFEST.SKIP 文件中。原始 MANIFEST.SKIP 保存为 MANIFEST.SKIP.bak。

EXPORT_OK

&mkmanifest&manicheck&filecheck&fullcheck&maniread&manicopy 可导出。

全局变量

$ExtUtils::Manifest::MANIFEST 的默认值为 MANIFEST。更改它将导致不同的 MANIFEST 和不同的 MANIFEST.SKIP 文件。如果你想为不同的受众(比如用户版本和包含 RCS 的开发人员版本)维护不同的发行版,这将非常有用。

$ExtUtils::Manifest::Quiet 的默认值为 0。如果设置为 true 值,所有函数都将静默执行。

$ExtUtils::Manifest::Debug 的默认值为 0。如果设置为 true 值,或如果 PERL_MM_MANIFEST_DEBUG 为 true,将生成调试输出。

诊断

所有诊断输出都将发送到 STDERR

不在 MANIFEST 中: 文件

如果找到不在 MANIFEST 中的文件,将报告此消息。

跳过 文件

如果由于 MANIFEST.SKIP 中的条目而跳过某个文件,将报告此消息。

没有此文件: 文件

如果 MANIFEST 文件中提到的文件不存在,将报告此消息。

MANIFEST: $!

如果无法打开 MANIFEST,将报告此消息。

已添加到 MANIFEST: 文件

如果设置了 $Verbose 并且将文件添加到 MANIFEST,mkmanifest() 将报告此消息。$Verbose 的默认值为 1。

环境

PERL_MM_MANIFEST_DEBUG

启用调试

另请参阅

ExtUtils::MakeMaker,它为大多数功能提供了便捷的目标。

作者

Andreas Koenig [email protected]

目前由 Perl 工具链团队维护。

版权和许可证

此软件的版权所有者为 Andreas Koenig (c) 1996-。

这是一款免费软件;你可以根据 Perl 5 编程语言系统本身的条款重新分发和/或修改它。