當您從源代碼構建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