伦敦Perl和Raku研讨会于2024年10月26日举行。如果您的公司依赖Perl,请考虑赞助和/或参加.

名称

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

简介

需要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类重写的方法更少。

方法

以下方法描述仍在开发中。请参阅代码中未适当记录的部分,并向makemaker@perl.org邮件列表。更好的是,提供补丁。

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

跨平台方法正在进入MM_任何。如果你找不到以前放在这里的东西,请查看MM_Any。

方法

os_flavor公司

简单地说,我们是Unix。

c(o)

定义后缀规则以将不同风格的C文件编译为目标文件。

xs_obj_opt

将对象文件作为参数,并返回将输出到指定对象文件的编译命令行部分。

dbgoutflag数据库

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

cf标记(o)

与perl发行版中的cflags脚本非常相似。它不返回整个编译器命令行,而是初始化其所有部分。然后,const_cccmd方法实际返回使用这些部分的cccmd宏的定义。

常数ccmd(o)

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

常量配置(o)

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

常量加载库(o)

定义EXTRALIBS、LDLOADLIBS、BSLOADLIBS、LD_RUN_PATH。请参见ExtUtils::库列表了解详细信息。

常数(o)
我的$make_frag=$mm->常量;

打印出大量常量的宏。

依赖(o)

与dependent属性的宏相同。

初始化测试
$mm->初始测试

定义与INSTALL*并行的DESTDIR和DEST*变量。

初始化列表
$mm->init_dist;

为分发支持定义了大量宏。

宏描述默认值使用TAR的TAR TAR命令要传递给TAR cvf的TARFLAGS标志使用ZIP的ZIP ZIP命令要传递给ZIP-r的ZIPFLAGS标志将压缩命令压缩到gzip--最佳用于tarfiles要放在.gz上的后缀后缀压缩文件使用SHAR的SHAR SHAR命令PREOP之前要运行的额外命令制作存档要在之后运行的POSTOP额外命令制作存档TO_UNIX转换换行符的命令在存档中转换为Unix样式用于签入CI-u的CI命令源到版本控制RCS_LABEL命令标记源RCS-Nv$(VERSION_SYM):-qCI运行后DIST_CP$how参数到manicopy()best创建distdir时DIST_DEFAULT用于延迟列表的默认目标创建分发结果存档的DISTVNAME名称$(DISTNAME)-$(VERSION)(减去后缀)
距离(o)
我的$dist_macros=$mm->dist(%overrides);

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

%覆盖可用于覆盖上述任何一项。

分布基础(o)

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

dist_ci(o)距离

定义RCS的签入目标。

dist_core(o)
我的$dist_make_fragment=$MM->dist_core;

将“make dist”所需的目标放在一起,形成一个make片段。

分布目标
我的$make_frag=$MM->dist_target;

返回“dist”目标以创建用于分发的存档。该目标只需进行检查,以确保Makefile是最新的,并且依赖于$(DIST_DEFAULT)。

延迟_目标
我的$make_frag=$MM->tardist_target;

返回“tardist”目标,即“make tardist(使tardist生效)”。真正的工作是由动态命名的tardistfile_target()方法完成的,tardist应该将其作为依赖项。

zipdist_目标
我的$make_frag=$MM->zipdist_target;

返回“zipdist”目标,这就是“make zipdast”的工作原理。真正的工作是由动态命名的zipdistfile_target()方法完成的,zipdist应该将其作为依赖项。

目标文件_目标
我的$make_frag=$MM->tarfile_target;

此目标的名称是tardist生成的tarball的名称。这个目标完成了将distdir转换为tarball的实际工作。

zipfile_目标
我的$make_frag=$MM->zipfile_target;

这个目标的名称是由zipdist生成的zip文件的名称。这个目标完成了将distdir转换为zip文件的实际工作。

uutardist_目标
我的$make_frag=$MM->uutardist_target;

将tar文件转换为uuencoded文件

shdist_目标
我的$make_frag=$MM->shdist_target;

将distdir转换为shell存档。

dlsyms(o)

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

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

dynamic_bs(o)

定义引导文件的目标。

dynamic_lib(o)

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

xs_dynamic_lib宏

定义的宏dynamic_lib(动态库)第节。

xs_make_dynamic_lib

定义dynamic_lib(动态库)第节。

埃克塞斯卡

不推荐的方法。请改用libscan。

即席图书馆

由init_others调用,并调用extExtUtils::Liblist。请参见ExtUtils::库列表了解详细信息。

查找perl

查找可执行文件PERL和FULLPERL

固定素
$mm->fixin(@files);

将sharpbang或等效的幻数插入到一组@文件中。

力(o)

写入空的FORCE:target。

客人姓名

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

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

初始化首次扫描

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

由init_main调用。

初始化MANPODS

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

初始_MAN1PODS

从EXE_FILES列表初始化MAN1PODS。

初始化MAN3PODS

从PM文件列表初始化MAN3PODS。

初始化(_PM)

从PMLIBDIRS初始化PMLIBDIR和PM。

初始化DIRFILESEP

使用/for Unix。由init_main调用。

初始_最小

初始化AR、AR_STATIC_ARGS、BASEEXT、CONFIG、DISTNAME、DLBASE、EXE_EXT、FULLEXT、FULLPERL、FULPPERLRUN、FULLPERLRUNINST、INST_*、INSTALL*、INTALLDIRS、LIB_EXT、LIBPERL_A、MAP_TARGET、NAME、OBJ_EXT,PARENT_NAME、PERL、PERR_ARCLIB、PERL_INC、PERLRUNN、PERUNINST、PREFIX、VERSION、VERSION_SYM、XS_VERSION。

初始化工具

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

初始化链接器

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

初始化PERL
$mm->init_PERL;

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

允许PERL为miniperlFULLPERL必须是一个完整的perlABSPERL被PERL转换为绝对路径*PERLRUN包含运行perl所需的一切图书馆等。。。*PERLUNINST是*PERLUN+查找正在构建的模块。
初始化平台
平台常量

添加MM_Unix_VERSION。

初始化PERM
$mm->init_PERM

由init_main调用。初始化PERL_*

初始化(_X)
$mm->init_xs

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

安装(o)

定义安装目标。

安装箱(o)

定义要创建和安装EXE_FILES的目标。

链接文本(o)

定义链接文本目标,该目标又定义LINKTYPE。

lsdir(lsdir)

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

宏(o)

将宏属性定义的宏插入Makefile的简单子程序。

马克佩尔

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

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

xs_static_lib_is_xs(o)

由makeapell的实用方法调用。通过查看给定文件是否定义了以开头的任何符号来检查该文件是否为XS库行李箱_(带有可选的前导下划线-在MacOS上需要)。

生成文件(o)

定义如何重写Makefile。

可能_命令

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

需要_链接(o)

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

解析摘要

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

解析版本
my$version=MM->parse_version($file);

解析$文件并返回第一个赋值所设置的$VERSION。如果无法确定$VERSION是什么,它将返回字符串“undef”我们的$VERSION或者普通的$VERSION都可以,但是我的$VERSION不是。

Foo VERSION软件包还检查了。使用了找到的第一个版本声明,但这可能会发生变化,因为它与Perl的实现方式不同。

parse_version()将尝试使用版本在检查之前$版本因此,以下操作将起作用。

$版本=qv(1.2.3);
帕什鲁(o)

定义传递给子目录中递归make调用的字符串。变量如下PASTHRU_定义在每个级别中使用,并在命令行上向下传递,例如该级别的DEFINE值。例子:

#级别0具有DEFINE=-Dfunky#此代码将定义级别0的PASTHRU=PASTHRU_define=“$(define)#$(PASTHRU_DEFINE)“#级别0的$(CCCMD)将包括宏$(DEFINE)和$(PASTHRU_DEFINE)#级别1也是如此,所以当级别1编译时,它将获得正确的值#所以无限大
perl脚本

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

珀尔依赖(o)

定义perl发行版附带的所有*.h文件的依赖项。

pm_to_blib

定义将散列PM中的所有文件复制到目标并自动拆分它们的目标。请参见ExtUtils::Install中的“DESCRIPTION”

购买力平价

定义为二进制分发创建PPD(Perl Package Description)文件的目标。

加前缀
$MM->前缀($var,$prefix,$new_prefix,$default);

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

如果$前缀不匹配一个PREFIX作为WriteMakefile()的参数,它会将其设置为$new_PREFIX+$default。这适用于那些文件布局不符合我们的前缀概念的系统。

这是为了启发式,试图创建镜像已安装perl的目录结构。

例如:

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

这将尝试从$MM->{INSTALLMAN1DIR}路径的前面删除“/usr”(如有必要,将其初始化为$Config{INSTALLMAN1DIR}),并将其替换为“/home/foo”。如果失败,只需使用“/home/foo/man/man1”。

处理PL(o)

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

指定_外壳

如果需要,请指定SHELL-在Unix上未完成。

报价_人

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

更换过滤器
我的$man_name=$MM->replace_manpage_sepator($file_path);

采用“Foo/Bar.pm”格式的包名称(可能是嵌套包),并将斜杠替换为::或其他安全的手册页文件名。返回替换项。

光盘
单线客机
引用_文字

引用适合在命令行上使用的宏文字值,以便在通过make进行扩展时,可以按照此方法的给定方式由命令接收:

我的$quoted=$mm->quoteliteral(q{it is not});#返回:#“它不是”print MAKEFILE“target:\n\techo$quoted\n”;#运行“make target”时,将输出:#不是这样的
转义换行
最大执行长度

使用POSIX公司::ARG_MAX。否则返回到4096。

静态(o)

定义静态目标。

xs_生成_静态_库

定义静态库第节。

static_lib_关闭

记录$(额外)在里面无法删除.ld$(PERL_SRC)/外部.libs.

static_lib_fixtures

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

static_lib_pure_cmd

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

静态制造(o)

致电makeapell。

subdir_x(o)

细分的辅助子例程

细分(o)

定义要处理子目录的目标。

测试(o)

定义测试目标。

测试通过线束(覆盖)

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

test_via_script(覆盖)

同样,PERL_DL_NONLAZY的事情。

工具_xsubp(o)

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

所有目标

也创建手册页

顶部目标(o)

定义目标all、subdirs、config和O_FILES

写下的

过时、弃用的方法。自5.21版以来未使用。

xs_c(o)

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

xs_cpp(o)

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

xs_(o)

定义从XS直接转到目标文件的后缀规则。这最初只用于断开的make实现,但现在对于下面的per-XS文件是必要的XSMULTI公司,因为每个XS文件可能都有一个单独的$(版本).

另请参阅

ExtUtils::MakeMaker