mozbuild.backend 包

子模块

mozbuild.backend.base 模块

class mozbuild.backend.base.BuildBackend(environment)

基类:LoggingMixin

构建后端的抽象基类。

构建后端仅仅是构建配置(前端处理的输出)的使用者。它对这些数据进行一些操作。具体操作由具体实现决定。

build(config, output, jobs, verbose, what=None)

当执行 'mach build' 时调用。

这应该返回子进程的状态值,其中 0 表示成功,任何其他值都是错误代码。返回值为 None 表示应运行默认的 'make -f client.mk'。

consume(objs)

使用 TreeMetadata 实例流。

这是接口的主要方法。它接收前端输出并对其进行处理。

子类不需要实现此方法。相反,基类会使用对象并调用子类(可能)实现的方法。

consume_finished()

当 consume() 完成所有对象的处理时调用。

abstract consume_object(obj)

使用单个 TreeMetadata 实例。

这是子类用于对构建元数据做出反应的主要方法。

post_build(config, output, jobs, verbose, status)

在 'mach build' 执行的后期调用,在 build(…) 完成后调用。

statusbuild(…) 返回的状态值。

build 返回 None 的情况下,在默认的 make 命令完成后调用,并使用该命令的状态值。

这应该返回 build(…) 的状态值,或子进程的状态值,其中 0 表示成功,任何其他值都是错误代码。

如果引发异常,mach build 将以非零退出代码失败。

summary()
mozbuild.backend.base.HybridBackend(*backends)

HybridBackend 是一个或多个 PartialBackend 与一个非部分 BuildBackend 的组合。

构建配置对象被传递给每个后端,在第一个声明已处理它们的之后停止。

class mozbuild.backend.base.PartialBackend(environment)

基类:BuildBackend

PartialBackend 是一个 BuildBackend,声明其 consume_object 方法可能无法处理传递给它的所有构建配置对象,并且这没有问题。

mozbuild.backend.cargo_build_defs 模块

mozbuild.backend.clangd 模块

class mozbuild.backend.clangd.ClangdBackend(environment)

基类:CompileDBBackend

生成 clangd 后端的配置,它与 vscode 的 clangd 扩展一起使用

mozbuild.backend.clangd.find_vscode_cmd()

mozbuild.backend.common 模块

class mozbuild.backend.common.BinariesCollection

基类:object

跟踪构建生成的二进制文件的状态。

class mozbuild.backend.common.CommonBackend(environment)

基类:BuildBackend

包含所有构建后端共有的逻辑。

consume_finished()

当 consume() 完成所有对象的处理时调用。

consume_object(obj)

使用单个 TreeMetadata 实例。

这是子类用于对构建元数据做出反应的主要方法。

localized_path(relativesrcdir, filename)

返回文件的本地化路径。

给定 relativesrcdir,一个相对于 topsrcdir 的路径,返回当前区域设置(由 MOZ_UI_LOCALE 指定)中 filename 的路径,使用 L10NBASEDIR 作为非 en-US 区域设置的父目录。

class mozbuild.backend.common.XPIDLManager(config)

基类:object

帮助在构建系统的上下文中管理 XPCOM IDL。

class Module

基类:object

add_idls(idls)
stems()
idl_stems()

返回已管理 IDL 文件的 stem 的迭代器。

IDL 文件的 stem 是文件名(不带 .idl 扩展名)的基名。

将 XPIDL 模块与此实例链接。

mozbuild.backend.configenvironment 模块

class mozbuild.backend.configenvironment.BuildConfig

基类:object

表示 configure 的输出。

classmethod from_config_status(path)

从 config.status 文件创建实例。

class mozbuild.backend.configenvironment.ConfigEnvironment(topsrcdir, topobjdir, defines=None, substs=None, source=None, mozconfig=None)

基类:object

执行与已配置但为空的 objdir 相关的操作。

此类的目的是预处理源目录中的文件并在对象目录中输出结果。

文件有两种类型:配置文件和配置头文件,每种类型都通过不同的成员函数处理。

创建 ConfigEnvironment 需要一些参数
  • topsrcdir 和 topobjdir 分别是顶级源目录和顶级对象目录。

  • defines 是一个从 autoconf 中的 AC_DEFINE 和 AC_DEFINE_UNQUOTED 填充的字典。

  • substs 是一个从 autoconf 中的 AC_SUBST 填充的字典。

ConfigEnvironment 自动定义一个额外的 substs 变量,该变量来自所有 defines

  • ACDEFINES 包含 define,形式为 -DNAME=VALUE,用于预处理器命令行。创建 ConfigEnvironment 时给出的 define 的顺序将被保留。

以及另外两个额外的 subst 变量,它们来自所有其他 substs
  • ALLSUBSTS 包含 subst,形式为 NAME = VALUE,按排序顺序排列,用于 autoconf.mk。它包括 ACDEFINES。仅包含具有 VALUE 的 subst,这样当添加新的空 subst 时,结果文件不会发生变化。这减少了在 autoconf.mk 中添加新空 subst 时构建依赖项失效的情况。

  • ALLEMPTYSUBSTS 包含值为空的替换变量,格式为 NAME =。

ConfigEnvironment 期望设置一个名为“top_srcdir”的替换变量,其值为顶层源代码目录,在 Windows 上使用 msys 格式。它用于在处理配置文件时派生“srcdir”替换变量。它可以是绝对路径,也可以是相对于 topobjdir 的相对路径。

acdefines

一个专门的 memoize 装饰器版本,用于类实例属性。

static from_config_status(path)
property is_artifact_build
exception mozbuild.backend.configenvironment.ConfigStatusFailure

基类:Exception

加载 config.status 时出错

class mozbuild.backend.configenvironment.PartialConfigDict(config_statusd, typ, environ_override=False)

基类:object

方便使用类似字典的方式访问 config.statusd 中的定义和替换变量。

这允许构建配置客户端使用 buildconfig.defines[‘FOO’](以及替换变量的类似方式),其中 FOO 的值延迟加载,直到需要时才加载。

get(key, default=None)
iteritems()
class mozbuild.backend.configenvironment.PartialConfigEnvironment(topobjdir)

基类:object

允许通过 config.statusd/* 文件访问单个 config.status 项目。

此类类似于完整的 ConfigEnvironment,后者使用 config.status,但此类允许访问和跟踪对单个配置值的依赖关系。它旨在在构建过程中用于处理诸如 GENERATED_FILES、CONFIGURE_DEFINE_FILES 等需要访问特定替换变量或定义的事项。

创建 PartialConfigEnvironment 只需要 topobjdir,这用于区分顶层环境和 js/src 环境。

PartialConfigEnvironment 自动从所有定义中定义一个额外的替换变量

  • ACDEFINES 包含 define,形式为 -DNAME=VALUE,用于预处理器命令行。创建 ConfigEnvironment 时给出的 define 的顺序将被保留。

以及从所有定义中定义一个作为字典的额外定义

  • ALLDEFINES 包含所有全局定义作为字典。这旨在替代 config.status 中的 defines 结构,以便脚本可以直接依赖其值。

get_dependencies()
write_vars(config)

mozbuild.backend.cpp_eclipse 模块

class mozbuild.backend.cpp_eclipse.CppEclipseBackend(environment)

基类:CommonBackend

生成 Cpp Eclipse 项目文件的后端。

consume_finished()

当 consume() 完成所有对象的处理时调用。

consume_object(obj)

使用单个 TreeMetadata 实例。

这是子类用于对构建元数据做出反应的主要方法。

static get_workspace_path(topsrcdir, topobjdir)
summary()

mozbuild.backend.fastermake 模块

class mozbuild.backend.fastermake.FasterMakeBackend(environment)

基类:MakeBackend, PartialBackend

consume_finished()

当 consume() 完成所有对象的处理时调用。

consume_object(obj)

使用单个 TreeMetadata 实例。

这是子类用于对构建元数据做出反应的主要方法。

mozbuild.backend.mach_commands 模块

mozbuild.backend.mach_commands.get_clang_tools(command_context, clang_tools_path)
mozbuild.backend.mach_commands.get_eclipse_workspace_path(command_context)
mozbuild.backend.mach_commands.get_visualstudio_workspace_path(command_context)
mozbuild.backend.mach_commands.prompt_bool(prompt, limit=5)

使用提示信息提示用户并要求输入布尔值。

mozbuild.backend.mach_commands.run(command_context, ide, no_interactive, args)
mozbuild.backend.mach_commands.setup_clangd_rust_in_vscode(command_context)
mozbuild.backend.mach_commands.setup_vscode(command_context, interactive)

mozbuild.backend.make 模块

class mozbuild.backend.make.MakeBackend(environment)

基类:CommonBackend

封装使用 Make 的后端逻辑的类。

mozbuild.backend.recursivemake 模块

class mozbuild.backend.recursivemake.BackendMakeFile(srcdir, objdir, environment, topsrcdir, topobjdir, dry_run)

基类:object

表示一个生成的 backend.mk 文件。

它既是文件句柄的包装器,也是存储累积状态的容器。

值得花点时间解释一下 make 依赖关系。生成的 backend.mk 以及 Makefile.in(如果存在)都在 GLOBAL_DEPS 列表中。这意味着,如果其中一个发生更改,则该 Makefile 中的所有目标都将失效。backend.mk 还依赖于其所有输入文件。

值得考虑文件修改时间对构建行为的影响。

由于我们对 moz.build 文件执行“全部或无”遍历(扫描整个树而不是单个文件),如果我们盲目地写入 backend.mk 文件,更新树中单个 mozbuild 文件的净效果是所有 backend.mk 文件都具有新的修改时间。这反过来会导致整个树中的所有 make 目标失效!这将有效地破坏增量构建,因为任何 mozbuild 更改都会导致整个树重新构建!

解决方案是不更新 backend.mk 文件的修改时间,除非它们实际上发生了变化。我们使用 FileAvoidWrite 来实现这一点。

add_statement(stmt)
close()
property diff
write(buf)
write_once(buf)
class mozbuild.backend.recursivemake.RecursiveMakeBackend(environment)

基类:MakeBackend

与现有递归 make 构建系统集成的后端。

此后端促进了从 Makefile.in 到 moz.build 文件的过渡。

此后端执行 Makefile.in -> Makefile 转换。它还输出包含从 moz.build 文件派生内容的 .mk 文件。两者都被递归 make 构建器使用。

此后端最终可能会发展为输出非递归 make 文件。但是,只要树中存在 Makefile.in 文件,我们就与递归 make 绑定,因此将需要此后端。

class Substitution

基类:object

用于 _create_makefile 的 BaseConfigSubstitution 类。

config
input_path
output_path
topobjdir
topsrcdir
consume_finished()

当 consume() 完成所有对象的处理时调用。

consume_object(obj)

输出使用递归 make 构建所需的构建文件。

summary()
class mozbuild.backend.recursivemake.RecursiveMakeTraversal

基类:object

辅助类,用于跟踪“传统”递归 make 后端如何递归子目录。这在从 Makefile 中删除所有临时规则之前很有用。

每个目录可能具有一种或多种类型的子目录
  • (普通) 目录

  • 测试

class SubDirectories

基类:SubDirectories

SubDirectoriesTuple

SubDirectories 的别名

SubDirectoryCategories = ['dirs', 'tests']
add(dir, dirs=[], tests=[])

将目录添加到遍历中,并注册其子目录,并按类别排序。如果该目录已添加到遍历中,则将新的子目录添加到已知的列表中。

call_filter(current, filter)

辅助函数,用于从 compute_dependencies 和 traverse 中调用过滤器。

compute_dependencies(filter=None)

计算与注册的目录遍历相对应的 make 依赖项。

filter 是一个具有以下签名的函数

def filter(current, subdirs)

其中 current 是正在遍历的目录,subdirs 是与其对应的 SubDirectories 实例。filter 函数返回一个元组 (filtered_current, filtered_parallel, filtered_dirs),其中 filtered_current 是 current 或 None(如果要跳过当前目录),filtered_parallel 和 filtered_dirs 是并行目录和顺序目录的列表,可以从 SubDirectories 成员中给出的任何内容重新排列。

默认过滤器对应于默认递归遍历。

static default_filter(current, subdirs)

用于 compute_dependencies 和 traverse 的默认过滤器。

get_subdirs(dir)

返回给定目录下所有直接子目录。

traverse(start, filter=None)

迭代过滤后的子目录,遵循传统的 make 遍历顺序。

mozbuild.backend.recursivemake.make_quote(s)

mozbuild.backend.static_analysis 模块

class mozbuild.backend.static_analysis.StaticAnalysisBackend(environment)

基类:CompileDBBackend

mozbuild.backend.test_manifest 模块

class mozbuild.backend.test_manifest.TestManifestBackend(environment)

基类:PartialBackend

生成测试元数据文件的局部后端。

add(t, flavor, topsrcdir)
add_defaults(manifest)
add_installs(obj, topsrcdir)
consume_finished()

当 consume() 完成所有对象的处理时调用。

consume_object(obj)

使用单个 TreeMetadata 实例。

这是子类用于对构建元数据做出反应的主要方法。

mozbuild.backend.visualstudio 模块

class mozbuild.backend.visualstudio.VisualStudioBackend(environment)

基类:CommonBackend

生成 Visual Studio 项目文件。

此后端用于生成 Visual Studio 项目和解决方案,以促进使用 Visual Studio 开发 Firefox。

此后端目前被认为是实验性的。其工作方式存在许多不理想的地方。

consume_finished()

当 consume() 完成所有对象的处理时调用。

consume_object(obj)

使用单个 TreeMetadata 实例。

这是子类用于对构建元数据做出反应的主要方法。

summary()
static write_vs_project(fh, version, project_id, name, includes=[], forced_includes=[], defines=[], build_command=None, clean_command=None, debugger=None, headers=[], sources=[])
mozbuild.backend.visualstudio.get_id(name)
mozbuild.backend.visualstudio.visual_studio_product_to_platform_toolset_version(version)
mozbuild.backend.visualstudio.visual_studio_product_to_solution_version(version)

模块内容

mozbuild.backend.get_backend_class(name)