內容

名稱

ExtUtils::Manifest - 編寫和檢查 MANIFEST 檔案的公用程式

版本

版本 1.73

語法

use ExtUtils::Manifest qw(...funcs to import...);

mkmanifest();

my @missing_files    = manicheck;
my @skipped          = skipcheck;
my @extra_files      = filecheck;
my($missing, $extra) = fullcheck;

my $found    = manifind();

my $manifest = maniread();

manicopy($read,$target);

maniadd({$file => $comment, ...});

說明

...

函式

ExtUtils::Manifest 預設不匯出任何函式。以下函式可應要求匯出

mkmanifest

mkmanifest();

將目前目錄及其子目錄中的所有檔案寫入您的 MANIFEST。其作用方式類似於 Unix 指令的結果

find . > MANIFEST

如果任何檔案符合檔案 MANIFEST.SKIP (如果存在) 中的任何正規表示式,則會略過該檔案。

任何現有的 MANIFEST 檔案都將儲存為 MANIFEST.bak

manifind

my $found = manifind();

傳回雜湊參考。雜湊的鍵是當前目錄下找到的檔案。

manicheck

my @missing_files = manicheck();

檢查當前目錄中的 MANIFEST 內的所有檔案是否真的存在。如果 MANIFEST 和當前目錄下的樹狀結構同步,它會靜默傳回一個空清單。否則,它會傳回一個清單,其中列出 MANIFEST 中列出但目錄中遺失的檔案,並且預設也會將這些名稱輸出到 STDERR。

filecheck

my @extra_files = filecheck();

在當前目錄下尋找未在 MANIFEST 檔案中提及的檔案。會參考一個選用的檔案 MANIFEST.SKIP。任何符合此檔案中正規表示式的檔案都不會報告為 MANIFEST 檔案中遺失。會傳回找到的任何多餘檔案的清單,並且預設也會報告到 STDERR。

fullcheck

my($missing, $extra) = fullcheck();

同時執行 manicheck() 和 filecheck(),然後將它們傳回為兩個陣列參考。

skipcheck

my @skipped = skipcheck();

列出所有因 MANIFEST.SKIP 檔案而略過的檔案。

maniread

my $manifest = maniread();
my $manifest = maniread($manifest_file);

讀取一個指定的 MANIFEST 檔案(預設為當前目錄中的 MANIFEST),並傳回一個雜湊參考,其中檔案為鍵,而註解為雜湊的值。MANIFEST 檔案中空白行和以 # 開頭的行會被捨棄。

maniskip

my $skipchk = maniskip();
my $skipchk = maniskip($manifest_skip_file);

if ($skipchk->($file)) { .. }

讀取一個指定的 MANIFEST.SKIP 檔案(預設為當前目錄中的 MANIFEST.SKIP),並傳回一個程式碼參考,用於測試是否應略過給定的檔案名稱。

manicopy

manicopy(\%src, $dest_dir);
manicopy(\%src, $dest_dir, $how);

將 %src 中的鍵檔案複製到 $dest_dir。%src 通常由 maniread() 函式傳回。

manicopy( maniread(), $dest_dir );

此函式可用於產生與預期的發行樹狀結構相同的目錄樹狀結構。

$how 可用於指定不同的「複製」方法。有效值為 cp(實際複製檔案)、ln(建立硬連結)和 best(大多數會連結檔案,但會複製任何符號連結以建立沒有任何符號連結的樹狀結構)。預設為 cp

maniadd

maniadd({ $file => $comment, ...});

將一個項目新增到現有的 MANIFEST,除非它已經存在。

$file 會被正規化(即 Unix 化)。尚未實作

MANIFEST

發行版中的檔案清單,每行一個檔案。MANIFEST 總是使用 Unix 檔案路徑慣例,即使您不在 Unix 上。這表示使用 foo/bar 風格,而不是 foo\bar

MANIFEST 檔案中空白和行尾之間的任何內容都視為註解。任何以 # 開頭的行也是註解。從 ExtUtils::Manifest 1.52 開始,如果檔案名稱用單引號括起來,則可以包含空白字元;該檔案名稱中的單引號或反斜線必須用反斜線跳脫。

# this a comment
some/file
some/other/file            comment about some/file
'some/third file'          comment

MANIFEST.SKIP

MANIFEST.SKIP 檔案可能包含 mkmanifest() 和 filecheck() 應忽略的檔案的正規表示式。正規表示式應每一行出現一次。空白行和以 # 開頭的行會被略過。如果您需要正規表示式以 # 開頭,請使用 \#

例如

# Version control files and dirs.
\bRCS\b
\bCVS\b
,v$
\B\.svn\b

# Makemaker generated files and dirs.
^MANIFEST\.
^Makefile$
^blib/
^MakeMaker-\d

# Temp, old and emacs backup files.
~$
\.old$
^#.*#$
^\.#

如果找不到 MANIFEST.SKIP 檔案,將會使用一組預設的跳過項目,類似於上述範例。如果您不想跳過任何項目,只需建立一個空的 MANIFEST.SKIP 檔案即可。

在自己的 MANIFEST.SKIP 檔案中,可以使用特定指令來包含其他 MANIFEST.SKIP 檔案的內容。目前已識別出兩個此類指令。

#!include_default

這會插入預設 MANIFEST.SKIP 檔案的內容

#!include /Path/to/another/manifest.skip

這會插入指定的外部檔案的內容

包含的內容將會插入到 MANIFEST.SKIP 檔案中,介於 #!start included /path/to/manifest.skip#!end included /path/to/manifest.skip 標記之間。原始的 MANIFEST.SKIP 會儲存為 MANIFEST.SKIP.bak。

EXPORT_OK

&mkmanifest&manicheck&filecheck&fullcheck&maniread&manicopy 是可匯出的。

全域變數

$ExtUtils::Manifest::MANIFEST 預設為 MANIFEST。變更它會產生不同的 MANIFEST 和不同的 MANIFEST.SKIP 檔案。如果您想為不同的受眾維護不同的發行版本(例如使用者版本和包含 RCS 的開發人員版本),這會很有用。

$ExtUtils::Manifest::Quiet 預設為 0。如果設定為 true 值,所有函式都會靜默執行。

$ExtUtils::Manifest::Debug 預設為 0。如果設定為 true 值,或如果 PERL_MM_MANIFEST_DEBUG 為 true,將會產生偵錯輸出。

診斷

所有診斷輸出都會傳送到 STDERR

不在 MANIFEST 中: 檔案

如果找到不在 MANIFEST 中的檔案,將會回報此訊息。

跳過 檔案

如果由於 MANIFEST.SKIP 中的項目而跳過檔案,將會回報此訊息。

找不到此檔案: 檔案

如果 MANIFEST 檔案中提到的檔案不存在,將會回報此訊息。

MANIFEST: $!

如果無法開啟 MANIFEST,則會回報。

已新增至 MANIFEST: 檔案

如果設定 $Verbose,且有檔案新增至 MANIFEST,則會由 mkmanifest() 回報。預設會將 $Verbose 設定為 1。

環境

PERL_MM_MANIFEST_DEBUG

開啟偵錯

另請參閱

ExtUtils::MakeMaker,其中包含大部分功能的便利目標。

作者

Andreas Koenig andreas.koenig@anima.de

目前由 Perl Toolchain Gang 維護。

著作權和授權

此軟體的著作權為 (c) 1996- Andreas Koenig 所有。

這是自由軟體;您可以在與 Perl 5 程式語言系統相同的條款下重新散布或修改它。