内容

名称

ExtUtils::Install - 从此处安装文件到此处

概要

use ExtUtils::Install;

install({ 'blib/lib' => 'some/install/dir' } );

uninstall($packlist);

pm_to_blib({ 'lib/Foo/Bar.pm' => 'blib/lib/Foo/Bar.pm' });

版本

2.22

说明

处理 perl 模块、脚本、手册页等的安装和卸载...

install() 和 uninstall() 都特定于 ExtUtils::MakeMaker 处理 perl 模块的安装和卸载的方式。它们并非设计为通用工具。

在某些操作系统(如 Win32)上,可能需要在重新启动后才能进行安装。这会产生不同的后果:删除旧 DLL 不会影响使用新 DLL 的程序,但如果新 DLL 在重新启动之前无法正确安装,则任何依赖它的内容都必须等待。包变量

$ExtUtils::Install::MUST_REBOOT

用于存储此状态。

如果此变量为真,则已发生此类操作,并且在重新启动之前,任何依赖于此模块的操作都无法继续进行。

如果此值已定义但为假,则已发生此类操作,但不会影响后续操作。

函数

install

# deprecated forms
install(\%from_to);
install(\%from_to, $verbose, $dry_run, $uninstall_shadows,
            $skip, $always_copy, \%result);

# recommended form as of 1.47
install([
    from_to => \%from_to,
    verbose => 1,
    dry_run => 0,
    uninstall_shadows => 1,
    skip => undef,
    always_copy => 1,
    result => \%install_results,
]);

将 %from_to 的每个目录树复制到其相应的值,同时保留时间戳和权限。

哈希中具有特殊含义的两个键是:“read”和“write”。它们包含 packlist 文件。复制完成后,install() 将目标文件列表写入 $from_to{write}。如果给出了 $from_to{read},则此文件的内容将合并到写入的文件中。读取和写入的文件可能相同,但在 AFS 上,人们很可能将文件安装到与文件稍后出现的目录不同的目录中。

如果 $verbose 为真,则将打印出每个已删除的文件。默认为假。这是“make install VERBINST=1”。$verbose 值高达 5,显示越来越多的诊断输出。

如果 $dry_run 为真,它将仅打印它将要执行的操作,而不会实际执行。默认为假。

如果 $uninstall_shadows 为真,则将卸载 @INC 中所有不同的版本。这是“make install UNINST=1”

从 1.37_02 开始,install() 支持使用模式列表来过滤掉不应安装的文件。如果省略或未定义 $skip,则 install 将尝试从 CWD 中的 INSTALL.SKIP 读取列表。此文件是一个正则表达式列表,就像 ExtUtils::Manifest 使用的 MANIFEST.SKIP 文件一样。

可以通过设置环境变量 EU_INSTALL_SITE_SKIPFILE 来提供默认站点 INSTALL.SKIP,仅当没有特定于分发的 INSTALL.SKIP 时才使用此变量。如果环境变量 EU_INSTALL_IGNORE_SKIP 为真,则不会执行任何安装文件过滤。

如果 $skip 未定义,则将自动检测并使用跳过文件(如果找到)。如果 $skip 是对数组的引用,则假定数组包含模式列表,如果 $skip 是一个真正的非引用,则假定它是包含模式列表的文件名,$skip 的任何其他值都表示不应进行安装过滤。

1.47 版中的更改

从 1.47 版开始,对安装界面进行了以下添加。请注意,建议使用新的参数样式和 %result 哈希。

当 $always_copy 参数为 true 时,无论文件是否已更改,都会更新文件;如果参数已定义但为 false,则仅在文件已更改时才进行复制;如果参数未定义,则使用环境变量 EU_INSTALL_ALWAYS_COPY 的值作为默认值。

%result 哈希将填充各种键/子哈希,反映安装情况。目前,这些键及其结构为

install             => { $target    => $source },
install_fail        => { $target    => $source },
install_unchanged   => { $target    => $source },

install_filtered    => { $source    => $pattern },

uninstall           => { $uninstalled => $source },
uninstall_fail      => { $uninstalled => $source },

其中 $source 是正在安装的文件的文件规范。$target 是安装目标,$uninstalled@INC$ENV{PERL5LIB} 或其他标准位置中的任何影子文件,$pattern 是导致跳过源文件的文件模式。未来将添加更多键,例如显示创建的目录,但这需要更改其他模块,因此必须等待。

如果出现错误,将在引发任何异常之前填充这些键。

请注意,%result 的所有更新都是累加的,哈希在使用前不会被清除,因此可以轻松地汇总许多安装的状态结果。

新参数样式

如果只有一个参数,并且它是对数组的引用,则假定该数组包含指定选项的键值对列表。在这种情况下,选项“from_to”是必需的。这种样式意味着您不必提供一个神秘的参数列表,并且可以使用更容易理解的自文档化参数列表。

现在这是 install() 的推荐接口。

返回

如果所有操作都成功,install 将返回一个哈希引用,其中包含如上文 $result 参数所述的结果。如果任何操作失败,install 将终止,因此建议传入 $result 参数,而不是使用返回值。如果提供了 result 参数,则返回的哈希引用将是传入的哈希引用。

install_default

不推荐

install_default();
install_default($fullext);

使用参数调用 install(),将模块从 blib/ 复制到默认站点安装位置。

$fullext 是转换为目录的模块名称(例如,Foo::Bar 将为 Foo/Bar)。如果未指定 $fullext,它将尝试从 @ARGV 中读取它。

这主要对安装脚本有用。

注意此函数实际上并不有用,因为它具有硬编码的安装位置,无法控制站点与核心与供应商目录,并且给出了模块名称的奇怪方式。请考虑不使用它。

uninstall

uninstall($packlist_file);
uninstall($packlist_file, $verbose, $dont_execute);

删除 $packlist_file 中列出的文件。

如果 $verbose 为 true,将打印出删除的每个文件。默认值为 false。

如果 $dont_execute 为 true,它将仅打印它将要执行的操作,而不会实际执行。默认值为 false。

pm_to_blib

pm_to_blib(\%from_to);
pm_to_blib(\%from_to, $autosplit_dir);
pm_to_blib(\%from_to, $autosplit_dir, $filter_cmd);

高效地将 %from_to 的每个键复制到其对应值。如果提供了 $autosplit_dir,所有 .pm 文件都将自动拆分到其中。将创建任何目标目录。

$filter_cmd 是一个可选的 shell 命令,用于在拆分和复制之前运行每个 .pm 文件。输入是模块的内容,输出是新模块的内容。

您可以设置一个环境变量 PERL_INSTALL_ROOT,它将作为目录添加到每个已安装文件(和目录)之前。

默认情况下会生成详细输出,设置 PERL_INSTALL_QUIET 环境变量将使此输出静默。

环境

PERL_INSTALL_ROOT

将添加到每个安装路径之前。

EU_INSTALL_IGNORE_SKIP

将阻止自动使用 INSTALL.SKIP 作为安装跳过文件。

EU_INSTALL_SITE_SKIPFILE

如果 make 目录中没有 INSTALL.SKIP 文件,则可以使用此值提供默认值。

EU_INSTALL_ALWAYS_COPY

如果此环境变量为真,则在安装过程中,正常的安装过程将始终覆盖旧的相同文件。

请注意,如果未定义 EU_INSTALL_ALWAYS_COPY,则别名 EU_ALWAYS_COPY 将受支持,直到至少 1.50 版本。请确保使用正确的 EU_INSTALL_ALWAYS_COPY。

作者

原始作者已淹没在时间的迷雾中。可能与 Makemaker 相同。

当前由 demerphq yves at cpan.org 维护生产版本,Michael G. Schwern 做了大量更改。

通过 http://rt.cpan.org/ 发送错误报告。请将生成的 Makefile 与报告一起发送。

许可证

此程序是免费软件;您可以在与 Perl 本身相同的条款下重新分发或修改它。

请参阅 https://perldotcom.perl5.cn/perl/misc/Artistic.html