內容

名稱

ExtUtils::MM_VMS - ExtUtils::MakeMaker 中用於覆寫 UN*X 行為的方法

語法

Do not use this directly.
Instead, use ExtUtils::MM and it will figure out which MM_*
class to use for you.

說明

請參閱 ExtUtils::MM_Unix 以取得對此處所提供方法的文件說明。此套件覆寫這些方法的實作,而非語意。

總是載入的方法

wraplist

將清單轉換為大約 80 個欄位寬的字串。

方法

覆寫預設 MM_Unix 方法的方法標示為「(覆寫)」,而 MM_VMS 獨有的方法標示為「(特定)」。對於覆寫的方法,文件說明僅限於解釋此方法為何覆寫 MM_Unix 方法;請參閱 ExtUtils::MM_Unix 文件以取得更多詳細資料。

guess_name (覆寫)

嘗試判斷正在建立的擴充功能名稱。我們從目前目錄的名稱開始。然而,由於 VMS 檔名不分大小寫,因此我們尋找一個其名稱與目前目錄相符的 .pm 檔(可能是這個擴充功能的「主要」.pm 檔),並嘗試尋找一個 package 陳述式,以取得 Mixed::Case 套件名稱。

find_perl (覆寫)

使用 VMS 檔案規格語法和 CLI 指令來尋找和呼叫 Perl 映像。

_fixin_replace_shebang (覆寫)

用於 MM->fixin() 的輔助常式,覆寫是因為沒有實際的 shebang 行會由 shell 解釋,所以我們只預先加上 $Config{startperl} 並保留 shebang 行引數,以包含它可能有的任何開關。

maybe_command (覆寫)

遵循 VMS 可執行檔案的命名慣例。如果傳入的名稱與可執行檔案不完全相符,則附加 .Exe(或等效名稱)以檢查可執行映像,並附加 .Com 以檢查 DCL 程序。如果這失敗了,則會在 DCL$PATH 中檢查目錄,最後在 Sys$System: 中檢查一個具有指定名稱的可執行檔案,無論是否具有 .Exe 等效字尾。

pasthru (覆寫)

必須使用 /MACRO 限定詞指定要傳遞的巨集定義清單,且不得再新增另一個 /DEFINE 限定詞。我們在此將自己的逗號預先加上 $(PASTHRU_DEFINE) 的內容,因為它通常是空的,而 CCFLAGS 中總是存在的逗號會產生遺失限定詞值錯誤。

pm_to_blib (覆寫)

VMS 希望每個檔案都有點,所以我們不能有一個稱為「pm_to_blib」的檔案,它會變成「pm_to_blib.」而且 MMS/K 不夠聰明,無法知道當您有一個稱為「pm_to_blib」的目標時,它應該尋找「pm_to_blib.」。

因此在 VMS 中,它是 pm_to_blib.ts。

perl_script (覆寫)

如果傳入的名稱未指定可讀取的檔案,則附加 .com.pl 並重試,因為 VMS 下的所有檔案通常都有檔案類型。

replace_manpage_separator

使用 VMS 語法檔案名稱中合法的字元作為分隔符號。

init_DEST

(覆寫) 由於串接 VMS 檔案路徑的困難,我們必須預先展開 DEST* 變數。

init_DIRFILESEP

VMS 上目錄路徑與檔案名稱之間沒有分隔符號。

init_main (覆寫)
init_tools (覆寫)

提供各種實用程式指令的 VMS 特定形式。

將 DEV_NULL 設為空值,因為我不知道如何在 VMS 上執行此操作。

變更 EQUALIZE_TIMESTAMP,將目標檔案的修訂日期設為比來源檔案晚一秒,因為 MMK 會將來源檔案和目標檔案的修訂日期完全相等,視為目標需要更新的標誌。

init_platform (覆寫)

新增 PERL_VMS、MM_VMS_REVISION 和 MM_VMS_VERSION。

MM_VMS_REVISION 用於在 MM_VMS 具有 $VERSION 之前的向後相容性。

platform_constants
init_VERSION (覆寫)

使用 VMS 語意覆寫 *DEFINE_VERSION 巨集。將 MAKEMAKER 檔案路徑轉換為 VMS 樣式。

constants (覆寫)

修正許多檔案和目錄巨集,以確保 VMS 語法,無論輸入語法為何。還會將檔案清單以逗號分隔。

special_targets

清除預設的 .SUFFIXES 並放入我們自己的清單。

cflags (覆寫)

繞過 shell 腳本並直接為 CC 產生限定詞 (但如果此副檔名有 shell 腳本,則會警告使用者)。將多個 /Defines 折疊成一個,因為某些 C 編譯器只會注意命令列上此限定詞的一個執行個體。

const_cccmd (覆寫)

在處理 #include <sys/foo.h> 指令時,新增指令將 C 預處理器指向正確的位置。此外,建構 CC 命令列的方式也與 MM_Unix 方法略有不同。

tools_other (覆寫)

為 Makefile 引數加入一些可疑的額外巨集。

此外,保留舊的 $(SAY) 巨集,以防有人使用它。

init_dist (覆寫)

某些值的 VMSish 預設值。

macro         description                     default

ZIPFLAGS      flags to pass to ZIP            -Vu

COMPRESS      compression command to          gzip
              use for tarfiles
SUFFIX        suffix to put on                -gz
              compressed files

SHAR          shar command to use             vms_share

DIST_DEFAULT  default target to use to        tardist
              create a distribution

DISTVNAME     Use VERSION_SYM instead of      $(DISTNAME)-$(VERSION_SYM)
              VERSION for the name
c_o (覆寫)

在命令列上使用 VMS 語法。特別是,$(DEFINE) 和 $(PERL_INC) 已拉入 $(CCCMD)。此外,使用 MM[SK] 巨集。

xs_c (覆寫)

使用 MM[SK] 巨集。

xs_o (覆寫)

使用 MM[SK] 巨集,以及 C 編譯器的 VMS 命令列。

_xsbuild_replace_macro (覆寫)

由於必須同時考量一個限定詞及其所有子限定詞,因此沒有簡單的替換方式,所以我們使用自己的公用程式例程進行替換。

_xsbuild_value (覆寫)

將擴充功能規格轉換為 Unix 格式,因為這會與 XSBUILD 資料結構中的內容相符。

dlsyms (覆寫)

建立 VMS 連結器選項檔案,指定此擴充功能的可分享映像的通用符號,並列出其他應連結的可分享映像或函式庫。

xs_obj_opt

覆寫以修正 -o 旗標。

dynamic_lib (覆寫)

使用 VMS 連結指令。

xs_make_static_lib (覆寫)

使用 VMS 指令操作物件函式庫。

static_lib_pure_cmd (覆寫)

使用 VMS 指令操作物件函式庫。

xs_static_lib_is_xs
extra_clean_files

清除一些特定於作業系統的檔案。加上用於縮短許多指令的暫存檔。以及名稱混淆資料庫。

zipfile_target
tarfile_target
shdist_target

呼叫 shar、tar 和 zip 的語法與 Unix 不同。

install (覆寫)

多次解決 DCL 的 255 字元限制,並在一些情況下使用 VMS 風格的命令列引號。

perldepend (覆寫)

使用 VMS 風格的語法表示檔案;直接在此執行比讓 MM_Unix 方法重複呼叫 catfile 更省事。此外,如果我們必須重建 Config.pm,請使用 MM[SK] 執行。

makeaperl (覆寫)

承諾使用 VMS 指令建立一組新的 Perl 映像。由於 VMS 進行動態載入,因此不需要將每個擴充功能靜態連結到 Perl 映像,所以這不是正常的建置路徑。因此,它尚未經過實際測試,而且很可能不完整。

maketext_filter (覆寫)

確保標記目標的冒號前面有空格,以區分目標分隔符號和作為檔案規格一部分出現的冒號。

prefixify (覆寫)

在 VMS 上加上字首很簡單。每個都應該是

perl_root:[some.dir]

可以轉換成

volume:[your.prefix.some.dir]

否則,您會得到預設配置。

實際上,您的搜尋字首會被忽略,而使用 $Config{vms_prefix} 取代。

cd
oneliner
echo

perl 會在 "<foo>" 上出錯,認為它是輸入重新導向。因此,我們改用本機 Write 指令。此外,它的速度更快。

quote_literal
escape_dollarsigns

加上引號,不要跳脫。

escape_all_dollarsigns

加上引號,不要跳脫。

escape_newlines
max_exec_len

256 個字元。

init_linker
catdir (覆寫)
catfile (覆寫)

消除 MMS/MMK 檔案輸出的巨集。

(File::Spec::VMS 過去會為我們執行此動作,但它已移除)

eliminate_macros

使用 %$self 的相同命名元素的內容,在文字字串中擴充 MM[KS]/Make 巨集,並以 Unix 語法傳回結果作為檔案規格。

注意:這是此方法的正規版本。File::Spec::VMS 中的版本已棄用。

fixpath
my $path = $mm->fixpath($path);
my $path = $mm->fixpath($path, $is_dir);

萬用例程,用於清除問題 MM[SK]/Make 巨集。擴充任何目錄規格中的巨集,以避免在執行 MM[SK] 時並置兩個 VMS 語法目錄。同時擴充所有巨集的表達式,以便我們可以知道擴充的長度,並避免在執行 MM[KS] 時超出 DCL 的命令緩衝區。

fixpath() 檢查結果是否符合目前預設目錄中的目錄名稱,並相應傳回目錄或檔案規格。$is_dir 可設定為 true 強制 fixpath() 將路徑視為目錄,或設定為 false 強制視為檔案。

注意:這是此方法的正規版本。File::Spec::VMS 中的版本已棄用。

os_flavor

VMS 是 VMS。

is_make_type (override)

VMS 上沒有任何正在檢查的 make 類型可行,加上我們的 $self->{MAKE} 是未展開(且無法展開)的巨集,其值只有 make 工具程式本身知道。

make_type (override)

傳回描述正在編寫的 makefile 類型的合適字串。

AUTHOR

原始作者 Charles Bailey bailey@newman.upenn.edu

由 Michael G Schwern 維護 schwern@pobox.com

有關修補程式和聯絡資訊,請參閱 ExtUtils::MakeMaker