从源代码构建perl时,您可以在将perl安装到最终目标之前运行make test
。
安装perl后是否可以执行相当于make test
的操作?
请注意,我没有原始来源。我想要做的是为我安装的相同版本的perl下载源tar存档,然后针对已安装的perl运行测试(来自源tar存档)。
可能/不可能?易/难?我该怎么做呢?
答案 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)
可能,只需要一点点努力(不需要Configure
或make
),也许有用:
源代码分发中的测试方案将所有内容加载到目录/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
,这可能没有帮助。
我发现了一些使用源代码目录中perl
,psed
和s2p
的硬编码路径的测试。您需要确保这些文件存在,并且测试针对这些程序的已安装版本。
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文件开始。
请注意以下事项:
它使用“#!。/ perl”作为she-bang
然后在第142行附近,它为t目录做了一个chdir。
首先,您可以修改she-bang行以将其指向已安装的perl可执行文件,并将't'目录的内容复制到perl核心软件包目录(或其他方式)。
我就是这样开始的。
另一种方法是在运行make install时创建所有已安装文件的列表(使其在临时目录中安装perl,然后在该目录上执行ls -lR以对列表进行操作)然后复制这些文件从已安装的perl文件到perl源目录。
使用版本控制系统(例如git)可以在这里提供很多帮助,这样您就可以轻松回滚到原本可能被覆盖的文件的原始版本。