ExtUtils::Install - 從此處安裝檔案至其他地方
use ExtUtils::Install;
install({ 'blib/lib' => 'some/install/dir' } );
uninstall($packlist);
pm_to_blib({ 'lib/Foo/Bar.pm' => 'blib/lib/Foo/Bar.pm' });
2.22
處理安裝和解除安裝 Perl 模組、腳本、man 頁面等...
install() 和 uninstall() 都是針對 ExtUtils::MakeMaker 處理 Perl 模組的安裝和解除安裝方式而設計的。它們不是通用工具。
在某些操作系統上,例如 Win32,直到重新啟動後才能進行安裝。這可能會產生不同的後果:刪除舊的 DLL 不會影響使用新 DLL 的程序,但如果新 DLL 在重新啟動之前無法正確安裝,則依賴它的任何東西都必須等待。該包變數
$ExtUtils::Install::MUST_REBOOT
用於存儲此狀態。
如果此變數為 true,則已執行此類操作,並且依賴於此模組的任何事物都無法繼續進行,直到重新啟動完成。
如果此值被定義但為 false,則已執行此類操作,但不應影響後續操作。
# deprecated forms
install(\%from_to);
install(\%from_to, $verbose, $dry_run, $uninstall_shadows,
$skip, $always_copy, \%result);
# recommended form as of 1.47
install([
from_to => \%from_to,
verbose => 1,
dry_run => 0,
uninstall_shadows => 1,
skip => undef,
always_copy => 1,
result => \%install_results,
]);
將 %from_to 的每個目錄樹複製到相對應的值,保留時間戳和權限。
在哈希表中有兩個具有特殊意義的鍵:"read" 和 "write"。這些鍵包含 packlist 文件。複製完成後,install() 會將目標文件列表寫入 $from_to{write}。如果給定了 $from_to{read},則此文件的內容將合併到寫入的文件中。讀取和寫入的文件可能相同,但在 AFS 上,人們安裝到的目錄很可能與文件稍後出現的目錄不同。
如果 $verbose 為 true,將會打印出每個被刪除的文件。默認值為 false。這是 "make install VERBINST=1"。$verbose 的值可高達 5,顯示越來越多的診斷輸出。
如果 $dry_run 為 true,它將只打印出它要執行的操作,而不實際執行它。默認值為 false。
如果 $uninstall_shadows 為 true,則將卸載整個 @INC 中的不同版本。這是 "make install UNINST=1"
截至 1.37_02 版本,install() 支持使用模式列表來過濾不應安裝的文件。如果省略或未定義 $skip,則 install 將嘗試從 CWD 中的 INSTALL.SKIP 中讀取列表。此文件是正則表達式的列表,與 ExtUtils::Manifest 使用的 MANIFEST.SKIP 文件相同。
通過設置環境變量 EU_INSTALL_SITE_SKIPFILE,可以提供默認的站點 INSTALL.SKIP。只有在沒有特定於發行版的 INSTALL.SKIP 時才會使用此文件。如果環境變量 EU_INSTALL_IGNORE_SKIP 為 true,則不會執行任何安裝文件過濾。
如果 $skip 為未定義,則將自動檢測跳過文件並使用它(如果找到)。如果 $skip 是對陣列的引用,則假定該陣列包含模式列表,如果 $skip 是真實的非引用,則假定它是包含模式列表的文件名,$skip 的任何其他值都表示不應執行任何安裝過濾。
版本 1.47 的變更
從版本 1.47 開始,對 install 介面進行了以下添加。請注意,推薦使用新的參數風格和 %result 哈希的用法。
當 $always_copy 參數為 true 時,將更新文件,無論它們是否已更改,如果定義但為 false,則僅在文件已更改時進行複製,如果未定義,則使用環境變量 EU_INSTALL_ALWAYS_COPY 的值作為默認值。
%result 哈希將填充各種反映安裝的鍵/子哈希。目前,這些鍵及其結構為
install => { $target => $source },
install_fail => { $target => $source },
install_unchanged => { $target => $source },
install_filtered => { $source => $pattern },
uninstall => { $uninstalled => $source },
uninstall_fail => { $uninstalled => $source },
其中$source
是要安裝的檔案的檔案規格。 $target
是它要被安裝到的位置,而$uninstalled
是在@INC
或$ENV{PERL5LIB}
或其他標準位置中的任何影子檔案,$pattern
是導致跳過源檔案的模式。在未來會添加更多鍵,例如顯示已創建的目錄,但這需要在其他模組中進行更改,因此必須等待。
這些鍵將在任何異常被拋出之前填充。
請注意,%result的所有更新都是累加的,哈希在使用前不會被清除,因此可以輕鬆地聚合許多安裝的狀態結果。
新的參數風格
如果只有一個參數且它是對陣列的引用,則假定該陣列包含指定選項的鍵值對列表。在這種情況下,選項"from_to"是強制性的。這種風格意味著您不必提供一個難以理解的參數列表,可以使用自我文檔化的參數列表,這樣更容易理解。
這現在是建議的install()介面。
返回值
如果所有動作都成功,install將返回一個結果的哈希引用,如上述的$result參數所描述的。如果任何動作失敗,那麼install將終止,因此建議傳遞$result參數而不是使用返回值。如果提供了結果參數,則返回的哈希引用將是傳遞的哈希引用。
不鼓勵使用
install_default();
install_default($fullext);
使用參數調用install(),將模塊從blib/複製到默認的網站安裝位置。
$fullext是模塊轉換為目錄的名稱(即,Foo::Bar將是Foo/Bar)。如果未指定$fullext,它將嘗試從@ARGV中讀取。
這主要用於安裝腳本。
注意 由於硬編碼的安裝位置沒有辦法控制站點vs核心vs供應商目錄,以及給出模塊名稱的奇怪方式,因此此函數實際上並不有用。考慮到不鼓勵使用。
uninstall($packlist_file);
uninstall($packlist_file, $verbose, $dont_execute);
從 $packlist_file 中列出的文件。
如果 $verbose 為 true,將打印出每個刪除的文件。默認值為 false。
如果 $dont_execute 為 true,它將僅打印出它要做的事情,而不實際執行它。默認值為 false。
pm_to_blib(\%from_to);
pm_to_blib(\%from_to, $autosplit_dir);
pm_to_blib(\%from_to, $autosplit_dir, $filter_cmd);
將 %from_to 的每個鍵高效地複製到其對應的值。如果提供了 $autosplit_dir,則所有 .pm 文件將被自動分割到其中。任何目標目錄都會被創建。
$filter_cmd 是一個可選的 shell 命令,用於在分割和複製之前運行每個 .pm 文件。輸入是模塊的內容,輸出是新的模塊內容。
您可以設置環境變量 PERL_INSTALL_ROOT,它將被添加為每個安裝文件(和目錄)的目錄。
默認情況下會生成詳細輸出,設置 PERL_INSTALL_QUIET 環境變量將使此輸出無聲。
將添加到每個安裝路徑。
將阻止自動使用 INSTALL.SKIP 作為安裝跳過文件。
如果在 make 目錄中沒有 INSTALL.SKIP 文件,則可以使用此值提供默認值。
如果此環境變量為 true,則正常安裝過程將始終在安裝過程中覆蓋較舊的相同文件。
請注意,如果未定義 EU_INSTALL_ALWAYS_COPY,則將支持別名 EU_ALWAYS_COPY,直至至少 1.50 版本。請確保您使用正確的 EU_INSTALL_ALWAYS_COPY。
原作者已遺失在時間的迷霧中。可能與 Makemaker 相同。
當前由 demerphq yves at cpan.org
維護的生產版本,由 Michael G. Schwern 進行了大量更改。
通過 http://rt.cpan.org/ 發送 bug 報告。請將生成的 Makefile 與您的報告一起發送。
本程序是自由軟件;您可以按照 Perl 本身的相同條款重新分發它和/或修改它。