内容

名称

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 (override)

提供 VMS 特定的各种实用程序命令形式。

将 DEV_NULL 设置为空,因为我不知道如何在 VMS 上执行此操作。

将 EQUALIZE_TIMESTAMP 更改为将目标文件的修订日期设置为源文件之后的 1 秒,因为 MMK 将源文件和目标文件的完全相同的修订日期解释为需要更新目标的标志。

init_platform (override)

添加 PERL_VMS、MM_VMS_REVISION 和 MM_VMS_VERSION。

MM_VMS_REVISION 用于在 MM_VMS 具有 $VERSION 之前的向后兼容性。

platform_constants
init_VERSION (override)

使用 VMS 语义覆盖 *DEFINE_VERSION 宏。将 MAKEMAKER 文件路径转换为 VMS 样式。

constants (override)

修复了大量文件和目录宏,以确保无论输入语法如何都使用 VMS 语法。还将文件列表改为逗号分隔。

special_targets

清除默认的 .SUFFIXES 并放入我们自己的列表。

cflags (override)

绕过 shell 脚本并直接为 CC 生成限定符(但如果此扩展名存在 shell 脚本,则警告用户)。将多个 /Defines 折叠为一个,因为某些 C 编译器只关注命令行中此限定符的一个实例。

const_cccmd (override)

添加指令以在处理 #include <sys/foo.h> 指令时将 C 预处理器指向正确的位置。还以与 MM_Unix 方法略有不同的方式构建 CC 命令行。

tools_other (override)

为 Makefile 参数添加一些可疑的额外宏。

还保留旧的 $(SAY) 宏,以防有人使用它。

init_dist (override)

某些值的 VMS 式默认值。

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 (override)

在命令行中使用 VMS 语法。特别是,$(DEFINE) 和 $(PERL_INC) 已被拉入 $(CCCMD)。还使用 MM[SK] 宏。

xs_c (override)

使用 MM[SK] 宏。

xs_o (override)

使用 MM[SK] 宏和 VMS 命令行来编译 C 代码。

_xsbuild_replace_macro (覆盖)

由于限定符及其所有子限定符必须一起考虑,因此没有简单的替换方法,所以我们使用自己的实用程序例程进行替换。

_xsbuild_value (覆盖)

将扩展规范转换为 Unix 格式,因为这将与 XSBUILD 数据结构中的内容匹配。

dlsyms (覆盖)

创建 VMS 链接器选项文件,指定此扩展的共享映像的通用符号,并列出应链接到的其他共享映像或库。

xs_obj_opt

覆盖以修复 -o 标志。

dynamic_lib (覆盖)

使用 VMS Link 命令。

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 (覆盖)

正在检查的 make 类型在 VMS 上都不可用,而且我们的 $self->{MAKE} 是一个未展开(也无法展开)的宏,其值只有 make 工具本身知道。

make_type (覆盖)

返回一个合适的字符串,描述正在编写的 Makefile 的类型。

作者

最初作者 Charles Bailey [email protected]

维护者 Michael G Schwern [email protected]

有关补丁和联系信息,请参阅 ExtUtils::MakeMaker