内容

名称

ExtUtils::MM_Unix - ExtUtils::MakeMaker 使用的方法

概要

require ExtUtils::MM_Unix;

描述

此包提供的方法旨在与 ExtUtils::MakeMaker 结合使用。当 MakeMaker 编写 Makefile 时,它会创建一个或多个对象,这些对象从包 MM 继承其方法。MM 本身不提供任何方法,但它 ISA ExtUtils::MM_Unix 类。MM 的继承树允许特定于操作系统的包负责 MM_Unix 提供的所有方法。我们正在尝试通过在 ExtUtils::MM_Unix 中定义相当原始的操作来减少必要的覆盖次数。

如果您要编写特定于平台的 MM 包,请尝试将必要的覆盖限制在原始方法,如果无法做到这一点,让我们一起想办法实现这一目标。

如果您在 Makefile.PL 中(在 MY 类中)覆盖了任何这些方法,请向 makemaker 邮件列表报告。我们正在努力最大限度地减少必要的覆盖方法,并在可能的情况下切换到数据驱动的 Makefile.PL。从长远来看,通过 MY 类可以覆盖的方法会更少。

方法

以下方法描述仍在开发中。对于没有充分记录的部分,请参考代码,并向 [email protected] 邮件列表大声抱怨。更重要的是,提供一个补丁。

并非所有以下方法都可以在 Makefile.PL 中覆盖。可覆盖的方法标记为 (o)。所有方法都可以通过特定于平台的 MM_*.pm 文件覆盖。

跨平台方法正在移至 MM_Any。如果您找不到以前在这里的内容,请在 MM_Any 中查找。

方法

os_flavor

简单地说,我们是 Unix。

c_o (o)

定义后缀规则,将不同类型的 C 文件编译成目标文件。

xs_obj_opt

以目标文件作为参数,返回编译命令行中输出到指定目标文件的部分。

dbgoutflag

返回一个 CC 标志,告诉 CC 在编译目标文件时输出一个单独的调试符号文件。

cflags (o)

与 perl 发行版中的 cflags 脚本功能基本相同。它不返回完整的编译器命令行,而是初始化所有部分。const_cccmd 方法实际上返回 CCCMD 宏的定义,该宏使用这些部分。

const_cccmd (o)

返回 C 程序的完整编译器调用,并将定义存储在 CONST_CCCMD 中。

const_config (o)

如果需要,设置 SHELL,然后在 Makefile 中定义几个从 %Config 导入的常量。

const_loadlibs (o)

定义 EXTRALIBS、LDLOADLIBS、BSLOADLIBS、LD_RUN_PATH。有关详细信息,请参阅 ExtUtils::Liblist

constants (o)
my $make_frag = $mm->constants;

打印出许多常量的宏。

depend (o)

与 depend 属性的宏相同。

init_DEST
$mm->init_DEST

定义 DESTDIR 和 DEST* 变量,与 INSTALL* 变量平行。

init_dist
$mm->init_dist;

定义许多用于发行版支持的宏。

macro         description                     default

TAR           tar command to use              tar
TARFLAGS      flags to pass to TAR            cvf

ZIP           zip command to use              zip
ZIPFLAGS      flags to pass to ZIP            -r

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

SHAR          shar command to use             shar

PREOP         extra commands to run before
              making the archive
POSTOP        extra commands to run after
              making the archive

TO_UNIX       a command to convert linefeeds
              to Unix style in your archive

CI            command to checkin your         ci -u
              sources to version control
RCS_LABEL     command to label your sources   rcs -Nv$(VERSION_SYM): -q
              just after CI is run

DIST_CP       $how argument to manicopy()     best
              when the distdir is created

DIST_DEFAULT  default target to use to        tardist
              create a distribution

DISTVNAME     name of the resulting archive   $(DISTNAME)-$(VERSION)
              (minus suffixes)
dist (o)
my $dist_macros = $mm->dist(%overrides);

生成一个 make 片段,定义在 init_dist 中初始化的所有宏。

%overrides 可用于覆盖上述任何内容。

dist_basics (o)

定义目标 distclean、distcheck、skipcheck、manifest、veryclean。

dist_ci (o)

为 RCS 定义一个检查目标。

dist_core (o)
my $dist_make_fragment = $MM->dist_core;

将 'make dist' 所需的目标整合到一个 make 片段中。

dist_target
my $make_frag = $MM->dist_target;

返回 'dist' 目标,用于创建用于分发的存档。此目标仅检查 Makefile 是否是最新的,并依赖于 $(DIST_DEFAULT)。

tardist_target
my $make_frag = $MM->tardist_target;

返回 'tardist' 目标,它只是为了使 'make tardist' 工作。实际工作由动态命名的 tardistfile_target() 方法完成,tardist 应该将其作为依赖项。

zipdist_target
my $make_frag = $MM->zipdist_target;

返回 'zipdist' 目标,它只是为了使 'make zipdist' 工作。实际工作由动态命名的 zipdistfile_target() 方法完成,zipdist 应该将其作为依赖项。

tarfile_target
my $make_frag = $MM->tarfile_target;

此目标的名称是 tardist 生成的 tar 包的名称。此目标执行将 distdir 转换为 tar 包的实际工作。

zipfile_target
my $make_frag = $MM->zipfile_target;

此目标的名称是 zipdist 生成的 zip 文件的名称。此目标执行将 distdir 转换为 zip 文件的实际工作。

uutardist_target
my $make_frag = $MM->uutardist_target;

将 tar 文件转换为 uuencoded 文件。

shdist_target
my $make_frag = $MM->shdist_target;

将 distdir 转换为 shell 存档。

dlsyms (o)

由某些操作系统用于定义 DL_FUNCS 和 DL_VARS 并写入 *.exp 文件。

通常只返回一个空字符串。

dynamic_bs (o)

定义引导文件目标。

dynamic_lib (o)

定义如何生成 *.so(或等效)文件。

xs_dynamic_lib_macros

定义 dynamic_lib 部分的宏。

xs_make_dynamic_lib

定义 dynamic_lib 部分的配方。

exescan

已弃用方法。使用 libscan 代替。

extliblist

由 init_others 调用,并调用 ext ExtUtils::Liblist。有关详细信息,请参阅 ExtUtils::Liblist

find_perl

查找可执行文件 PERL 和 FULLPERL。

fixin
$mm->fixin(@files);

将井号或等效的魔数插入到一组 @files 中。

force (o)

写入一个空的 FORCE: 目标。

guess_name

通过检查工作目录的名称来猜测此包的名称。只有在开发人员没有提供 NAME 属性时,MakeMaker 才会调用此方法。

如果此对象中存在需要编译器的 C、XS、MYEXTLIB 或类似对象,则返回 true。不会像 needs_linking() 那样下降到子目录。

init_dirscan

扫描目录结构并初始化 DIR、XS、XS_FILES、C、C_FILES、O_FILES、H、H_FILES、PL_FILES、EXE_FILES。

由 init_main 调用。

init_MANPODS

确定是否应生成手册页,并根据需要初始化 MAN1PODS 和 MAN3PODS。

init_MAN1PODS

从 EXE_FILES 列表中初始化 MAN1PODS。

init_MAN3PODS

从 PM 文件列表中初始化 MAN3PODS。

init_PM

从 PMLIBDIRS 初始化 PMLIBDIRS 和 PM。

init_DIRFILESEP

对 Unix 使用 /。由 init_main 调用。

init_main

初始化 AR、AR_STATIC_ARGS、BASEEXT、CONFIG、DISTNAME、DLBASE、EXE_EXT、FULLEXT、FULLPERL、FULLPERLRUN、FULLPERLRUNINST、INST_*、INSTALL*、INSTALLDIRS、LIB_EXT、LIBPERL_A、MAP_TARGET、NAME、OBJ_EXT、PARENT_NAME、PERL、PERL_ARCHLIB、PERL_INC、PERL_LIB、PERL_SRC、PERLRUN、PERLRUNINST、PREFIX、VERSION、VERSION_SYM、XS_VERSION。

init_tools

初始化工具以使用它们通用的(更快的)Unix 命令。

init_linker

Unix 不需要特殊的链接器标志。

init_PERL
$mm->init_PERL;

由 init_main 调用。设置 ABSPERL、PERL、FULLPERL 和所有 *PERLRUN* 排列。

PERL is allowed to be miniperl
FULLPERL must be a complete perl

ABSPERL is PERL converted to an absolute path

*PERLRUN contains everything necessary to run perl, find it's
     libraries, etc...

*PERLRUNINST is *PERLRUN + everything necessary to find the
     modules being built.
init_platform
platform_constants

添加 MM_Unix_VERSION。

init_PERM
$mm->init_PERM

由 init_main 调用。初始化 PERL_*。

init_xs
$mm->init_xs

设置与 XS 代码相关的宏。目前仅限 INST_STATIC、INST_DYNAMIC 和 INST_BOOT。

install (o)

定义安装目标。

installbin (o)

定义制作和安装 EXE_FILES 的目标。

linkext (o)

定义 linkext 目标,该目标反过来定义 LINKTYPE。

lsdir

以目录名和正则表达式作为参数。返回目录中与正则表达式匹配的所有条目。

macro (o)

简单子例程,用于将宏属性定义的宏插入 Makefile 中。

makeaperl (o)

由 staticmake 调用。定义如何编写 Makefile 以生成静态的新 perl。

默认情况下,生成的 Makefile 包含 perl 库中的所有静态扩展。(库文件的净化版本,例如 DynaLoader_pure_p1_c0_032.a 会自动忽略,以避免链接错误。)

xs_static_lib_is_xs (o)

由 makeaperl 的实用方法调用。通过查看给定文件是否定义了以 boot_ 开头的任何符号(可选地以一个下划线开头 - 在 MacOS 上需要),来检查给定文件是否为 XS 库。

makefile (o)

定义如何重写 Makefile。

maybe_command

如果参数可能是命令,则返回 true。

needs_linking (o)

这个模块是否需要链接?查看子目录对象(另请参阅 has_link_code())

parse_abstract

解析文件并返回您认为是 ABSTRACT 的内容

parse_version
my $version = MM->parse_version($file);

解析 $file 并返回第一个赋值语句中设置的 $VERSION 值。如果无法确定 $VERSION 的值,则返回字符串 "undef"。$VERSION 应该对所有人可见,因此 our $VERSION 或纯 $VERSION 都可以,但 my $VERSION 不行。

还会检查 package Foo VERSION。使用找到的第一个版本声明,但这可能会改变,因为它与 Perl 的处理方式不同。

parse_version() 会在检查 $VERSION 之前尝试 use version,因此以下操作将起作用。

$VERSION = qv(1.2.3);
pasthru (o)

定义传递给子目录中递归 make 调用的字符串。诸如 PASTHRU_DEFINE 之类的变量在每个级别使用,并通过命令行向下传递,例如使用该级别 DEFINE 的值。示例

# Level 0 has DEFINE = -Dfunky
# This code will define level 0's PASTHRU=PASTHRU_DEFINE="$(DEFINE)
#     $(PASTHRU_DEFINE)"
# Level 0's $(CCCMD) will include macros $(DEFINE) and $(PASTHRU_DEFINE)
# So will level 1's, so when level 1 compiles, it will get right values
# And so ad infinitum
perl_script

接受一个参数,即文件名,如果参数可能是 Perl 脚本,则返回文件名。在 MM_Unix 上,对于任何普通可读文件来说都是如此。

perldepend (o)

定义来自 Perl 发行版附带的所有 *.h 文件的依赖关系。

pm_to_blib

定义将哈希 PM 中的所有文件复制到其目标位置并自动拆分的目标。请参阅 "ExtUtils::Install 中的 DESCRIPTION"

ppd

定义为二进制发行版创建 PPD(Perl 包描述)文件的目标。

prefixify
$MM->prefixify($var, $prefix, $new_prefix, $default);

使用 $MM->{uc $var} || $Config{lc $var},它将尝试用 $new_prefix 替换其 $prefix。

如果 $prefix 无法匹配,并且在调用 WriteMakefile() 时提供了 PREFIX 作为参数,则将其设置为 $new_prefix + $default。这适用于文件布局不完全符合我们对前缀的理解的系统。

这用于尝试创建镜像已安装 Perl 的目录结构的启发式方法。

例如

$MM->prefixify('installman1dir', '/usr', '/home/foo', 'man/man1');

这将尝试从 $MM->{INSTALLMAN1DIR} 路径的开头删除 '/usr'(如果需要,将其初始化为 $Config{installman1dir}),并用 '/home/foo' 替换它。如果失败,它将简单地使用 '/home/foo/man/man1'。

processPL (o)

定义运行 *.PL 文件的目标。

specify_shell

如果需要,指定 SHELL - 在 Unix 上不执行此操作。

quote_paren

命令行参数中的反斜杠括号 ()。 不处理递归的 Makefile $(...) 结构,但处理简单的结构。

replace_manpage_separator
my $man_name = $MM->replace_manpage_separator($file_path);

接受一个包的名称,它可能是一个嵌套的包,格式为 'Foo/Bar.pm',并将斜杠替换为 :: 或其他对 man 页面文件名安全的字符。 返回替换后的结果。

cd
oneliner
quote_literal

引用适合在命令行上使用的宏字面值,以便在 make 展开后,命令会收到与传递给此方法的值相同的字面值。

my $quoted = $mm->quote_literal(q{it isn't});
# returns:
#   'it isn'\''t'
print MAKEFILE "target:\n\techo $quoted\n";
# when run "make target", will output:
#   it isn't
escape_newlines
max_exec_len

使用 POSIX::ARG_MAX。 否则回退到 4096。

static (o)

定义静态目标。

xs_make_static_lib

定义 static_lib 部分的配方。

static_lib_closures

extralibs.ld$(PERL_SRC)/ext.libs 中记录 $(EXTRALIBS)

static_lib_fixtures

处理将 $(MYEXTLIB) 复制为最终静态库的启动器,然后将其添加到库中。

static_lib_pure_cmd

定义如何运行归档实用程序。

staticmake (o)

调用 makeaperl。

subdir_x (o)

子目录的辅助子例程。

subdirs (o)

定义处理子目录的目标。

test (o)

定义测试目标。

test_via_harness (override)

由于我忘记的原因,Unix 机器喜欢为测试设置 PERL_DL_NONLAZY。

test_via_script (override)

同样,PERL_DL_NONLAZY 问题。

tool_xsubpp (o)

确定类型映射、xsubpp 版本和原型行为。

all_target

也构建手册页

top_targets (o)

定义目标 all、subdirs、config 和 O_FILES

writedoc

已过时,已弃用方法。从 5.21 版本开始不再使用。

xs_c (o)

定义将 XS 文件编译为 C 的后缀规则。

xs_cpp (o)

定义将 XS 文件编译为 C++ 的后缀规则。

xs_o (o)

定义从 XS 直接到目标文件的后缀规则。这最初只针对有问题的 make 实现,但现在在 XSMULTI 下每个 XS 文件可能都有单独的 $(VERSION),因此是必要的。

另请参阅

ExtUtils::MakeMaker