当您从源代码构建perl时,可以在将perl安装到其最终目标之前运行make test
。安装后测试perl
安装perl之后可以执行相当于make test
的操作吗?
请注意,我不会有原始来源。我想要做的是下载与我安装的相同版本的perl的源tar档案,然后针对安装的perl运行测试(从源tar档案中)。
可能/不可能?易/难?我将如何去做这件事?
当您从源代码构建perl时,可以在将perl安装到其最终目标之前运行make test
。安装后测试perl
安装perl之后可以执行相当于make test
的操作吗?
请注意,我不会有原始来源。我想要做的是下载与我安装的相同版本的perl的源tar档案,然后针对安装的perl运行测试(从源tar档案中)。
可能/不可能?易/难?我将如何去做这件事?
您可以通过阅读perl源代码中的t/TEST文件开始。
注意以下几点:
它使用 “#./ perl的!” 因为她爆炸
然后在大约线142,它确实CHDIR到T目录。
作为开始,你可以修改,她邦线把它指向你安装Perl的可执行文件,并复制“T”目录的Perl核心包目录的内容(或者反过来) 。
这就是我如何开始它。
另一种方法是在运行make install时创建所有已安装文件的列表(使其在临时目录中安装perl,然后在该目录上执行ls -lR以创建列表),然后复制这些文件从安装的perl进入你的perl源代码目录。
使用版本控制系统(例如git)可以在这里提供很多帮助,以便您可以轻松地回滚到原来可能覆盖的任何文件的原始版本。
使用安装的Perl而不是刚刚构建的Perl运行测试需要您了解如何说服测试系统忽略所有未完成的构建,并继续使用运行测试安装了Perl。你不能说'做测试',因为它想要做的第一件事就是构建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,除非测试全部通过(或基本上全部通过)。
这就是为什么我想知道你是否必须做一个'Configure'和'make'首先。然后欺骗测试工具来使用你的perl而不是刚刚构建的perl。 至于为什么有人会想这样做 - 假设你得到一个已安装的Perl的tar-ball。解压后,我想能够测试它。我有我的理由:-) – ErikR
你必须运行配置来获得一个生成文件。如果你在没有先运行make的情况下运行'make test',那么'make test'会为你运行'make make',所以在你运行任何测试之前你最终会建立一个软件版本。此外,您必须努力工作,以避免测试构建区域中的模块,并测试已安装的模块。它正在颠覆Perl测试套件的设计目标。我想你可以尝试在构建版本上复制已安装的代码,但即使这样也不是微不足道的,特别是在布局不标准的情况下。 –
我认为你必须使用你安装的Perl来做'make install'。这可能是任意复杂甚至不可能的。 – musiKk
可能的,只有一点点硬(无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)'
(有可能是使用-MFile::Copy
更强大的perl
命令,但这种快速和肮脏的一行让我去)。我们使用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
许多测试都明确地测试构建的完整性,所以你可以期待许多测试失败的。
避风港;还没有尝试过,但我想我首先必须做一个'Configure'和一个'make' ...嗯... – ErikR