安装后测试perl

时间:2011-08-21 23:15:56

标签: perl

从源代码构建perl时,您可以在将perl安装到最终目标之前运行make test

安装perl后是否可以执行相当于make test的操作?

请注意,我没有原始来源。我想要做的是为我安装的相同版本的perl下载源tar存档,然后针对已安装的perl运行测试(来自源tar存档)。

可能/不可能?易/难?我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

  • 可能的。
  • 硬。
  • 不值得。

使用已安装的Perl而不是刚刚构建的Perl运行测试需要您了解如何说服测试系统忽略它尚未完成的所有构建,并继续使用已安装的Perl运行测试。你不能说'make test',因为它要做的第一件事就是构建Perl。实际上,更重要的是,你不能说'make test',因为你没有makefile。

你为什么要这样做?如果您不信任系统Perl,请不要使用它。构建自己的,测试它,并将其安装在您的位置而不是系统位置。我大部分时间都这样做;我不冒险破坏系统的Perl,修改它并使用我自己的。当然,我有5.10.0,5.10.1,5.12.1,5.14.0和5.14.1建立(由我)供我使用。我通常至少有一个5.8.x版本,但目前不在这台机器上。

另外,请记住安装Perl系统的人是理智的。他们运行测试并且不安装Perl,除非测试全部通过(或基本上全部通过)。

答案 1 :(得分:2)

可能,只需要一点点努力(不需要Configuremake),也许有用:

源代码分发中的测试方案将所有内容加载到目录/path/to/src/distribution/lib'. The key to running your existing perl installation against this test suite is to put all of the install libraries into this lib`目录之外。这可以通过以下方式完成:

cd /path/to/src/distribution
mv lib lib-original
mkdir lib
/path/to/installed/perl -e 'system qq{cp -prv "$_/." lib/}' \
        -e 'for "lib-original",grep /../,reverse(@INC)'

(可能有一个更强大的perl命令使用-MFile::Copy,但这个快速而肮脏的单行程让我走了。我们使用reverse @INC,以便@INC前面的库将覆盖后面的库而不是相反的库。 grep /../,...子句阻止我们将.复制到lib,这可能没有帮助。

我发现了一些使用源代码目录中perlpseds2p的硬编码路径的测试。您需要确保这些文件存在,并且测试针对这些程序的已安装版本。

rm -f perl t/perl psed t/psed x2p/s2p
ln -s /path/to/installed/perl perl
ln -s /path/to/installed/perl t/perl
ln -s /path/to/installed/psed psed
ln -s /path/to/installed/psed t/psed
ln -s /path/to/installed/s2p x2p/s2p

现在使用常规的Unix-y习惯用于运行Perl测试套件:

cd t
/path/to/installed/perl -MExtUtils::Command::MM \
        -e 'test_harness(0,"../lib")' */*.t

某些测试可能明确地涉及测试源代码构建过程的完整性,因此可能会出现一些失败。

(此过程在v5.14.0,v5.8.9,v5.10.1上测试)

更新:更难了。典型的源代码分发中还有许多其他t目录。您可能还想尝试一下:

cd /path/to/source/distribution

for dir in */*/
do
        if [ -d $dir/t ] ; then
            pushd $dir
            echo Testing $dir
            /path/to/installed/perl -MExtUtils::Command::MM \
                    -e 'test_harness(0,"../../lib","lib")' t/*.t
            popd
        fi
done

其中许多测试都明确地测试了构建的完整性,因此您可以预期许多测试会失败。

答案 2 :(得分:1)

您可以从perl源代码中读取t / TEST文件开始。

请注意以下事项:

  1. 它使用“#!。/ perl”作为she-bang

  2. 然后在第142行附近,它为t目录做了一个chdir。

  3. 首先,您可以修改she-bang行以将其指向已安装的perl可执行文件,并将't'目录的内容复制到perl核心软件包目录(或其他方式)。

    我就是这样开始的。

    另一种方法是在运行make install时创建所有已安装文件的列表(使其在临时目录中安装perl,然后在该目录上执行ls -lR以对列表进行操作)然后复制这些文件从已安装的perl文件到perl源目录。

    使用版本控制系统(例如git)可以在这里提供很多帮助,这样您就可以轻松回滚到原本可能被覆盖的文件的原始版本。