mozbuild.frontend 包

子模块

mozbuild.frontend.context 模块

此模块包含数据结构(上下文),其中包含来自 moz.build 的配置。前端发出的数据源自这些上下文。

它还定义了 moz.build 中可用的变量和函数集。如果您正在寻找 moz.build 文件可以包含的内容的绝对权威,那么您来对地方了。

class mozbuild.frontend.context.AbsolutePath(context, value=None)

基类:Path

类似于 Path,但允许源目录和对象目录之外的任意路径。

class mozbuild.frontend.context.AsmFlags(context)

基类:BaseCompileFlags

class mozbuild.frontend.context.BaseCompileFlags(context)

基类:ContextDerivedValuedict

class mozbuild.frontend.context.CompileFlags(context)

基类:TargetCompileFlags

class mozbuild.frontend.context.Context(allowed_variables={}, config=None, finder=None)

基类:KeyedDefaultDict

表示 moz.build 配置上下文。

此类的实例由沙盒的执行填充。从核心来看,Context 是一个字典,具有一组定义的可能键,我们将其称为变量。每个变量都与一个类型相关联。

读取给定键的值时,我们首先尝试读取现有值。如果未找到值并且它在允许的变量集中定义,则返回该变量的类的全新实例。我们不会在访问之前分配默认实例,因为这使得调试最终结果变得更加简单。与其使用包含大量空/默认值的数据结构,不如使用仅包含已读取或触碰的值的数据结构。

变量类的实例是通过调用 class_name() 创建的,除非 class_name 派生自 ContextDerivedValueSubContext,在这种情况下,调用 class_name(instance_of_the_context)class_name(self)。在赋值(setitem)期间创建实例时,会向这些调用中添加值。

allowed_variables 是一个字典,其中包含可以在此上下文实例中设置和读取的变量。此字典中的键是表示此上下文中有效键的字符串。值是存储类型、分配类型、默认值、描述变量用途的文档字符串以及层级指示器(请参阅此模块中 VARIABLES 声明上方的注释)的元组。

config 是此上下文的 ConfigEnvironment。

add_source(path)

将给定路径添加为此上下文数据的源。

property all_paths

返回曾经添加到上下文中的所有路径。

property error_is_fatal

如果错误函数应该是致命的,则返回 True。

objdir

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

pop_source()

返回到上下文的先前当前路径。

push_source(path)

将给定路径添加为此上下文数据的源,并使其成为上下文的当前路径。

relobjdir

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

property relsrcdir
property source_stack

返回当前已推送源的堆栈。

property srcdir
update(iterable={}, **kwargs)

类似于 dict.update(),但使用上下文的 setitem。

此函数是事务性的:如果 setitem 对其中一个值失败,则上下文根本不会更新。

mozbuild.frontend.context.ContextDerivedTypedHierarchicalStringList(type)

专用于 ContextDerivedValue 类型的 HierarchicalStringList。

mozbuild.frontend.context.ContextDerivedTypedList(klass, base_class=<class 'mozbuild.util.List'>)

专用于 ContextDerivedValue 类型的 TypedList。

mozbuild.frontend.context.ContextDerivedTypedListWithItems(type, base_class=<class 'mozbuild.util.List'>)

专用于 ContextDerivedValue 类型的 TypedList。

mozbuild.frontend.context.ContextDerivedTypedRecord(*fields)

用于具有某些属性和动态类型检查的对象的工厂。

此 API 与 TypedNamedTuple API 非常相似,只是属性可以被修改。这支持类似以下的语法:

VARIABLE_NAME.property += [
  'item1',
  'item2',
]
class mozbuild.frontend.context.ContextDerivedValue

基类:object

派生自此类的类在 Context 中会受到特殊处理。请参阅 Context 文档。

mozbuild.frontend.context.Enum(*values)
class mozbuild.frontend.context.Files(parent, *patterns)

基类: SubContext

附加到文件的元数据。

通常需要用元数据注释文件,例如哪个 Bugzilla 组件跟踪某些文件的错误。此子上下文是我们放置这些元数据的地方。

此子上下文的参数是一个文件匹配模式,该模式应用于主机文件的目录。如果该模式匹配到当前正在查找其信息的某个文件,则附加到此实例的元数据将应用于该文件。

模式是文件名字符的集合,其中使用 / 作为目录分隔符(UNIX 样式路径),并使用 *** 表示通配符匹配。

没有 * 字符的模式是字面匹配,最多匹配一个实体。

带有 *** 的模式是通配符匹配。* 匹配至少在一个目录内的文件。** 匹配多个目录中的文件。

foo.html

仅匹配当前目录中的 foo.html 文件。

*.mjs

匹配当前目录中的所有 .mjs 文件。

**/*.cpp

匹配此目录及其所有子目录中的所有 .cpp 文件。

foo/*.css

匹配 foo/ 目录中的所有 .css 文件。

bar/*

匹配 bar/ 目录及其所有子目录中的所有文件。

bar/**

这等同于上面的 bar/*

bar/**/foo

匹配 bar/ 目录及其所有子目录中的所有 foo 文件。

*** 之间的行为差异仅在模式跟随 *** 时才明显。以 * 结尾的模式是贪婪的。当您需要在通配符之后添加其他模式时,需要使用 **。例如 **/foo

VARIABLES = {'BUG_COMPONENT': (<class 'mozbuild.util.TypedNamedTuple.<locals>.TypedTuple'>, <class 'tuple'>, "跟踪对这些文件进行更改的错误组件。\n\n            一个 2 元组 unicode 描述 Bugzilla 产品和\n            组件。 例如 ``('Firefox Build System', 'General')``。 \n            "), 'FINAL': (<class 'bool'>, <class 'bool'>, '将变量赋值标记为已完成。\n\n            正常 处理过程中,来自较新 Files 上下文的\n            会覆盖先前设置的值。 最后写入优先。 此行为\n            并不总是想要的。 ``FINAL`` 提供了一种机制来防止\n            对变量进行进一步更新。 \n\n            ``FINAL`` 设置为 true 时,此\n            上下文中定义的所有变量的值都标记为冻结,并且随后对它们的\n            所有写入在元数据读取期间都会被忽略。 \n\n            有关更多信息,请参阅 :ref:`mozbuild_files_metadata_finalizing`。 \n            '), 'SCHEDULES': (<class 'mozbuild.frontend.context.Schedules'>, <class 'list'>, '将源文件映射到更改时应安排的 CI 任务。\n            这些任务按命名组件分组,这些\n            名称再次出现在任务图配置中\n            `($topsrcdir/taskgraph/)。 \n\n            某些组件是“包含性”的,这意味着大多数文件的更改\n            不会安排它们,除了在 Files\n            子上下文中描述的那些文件之外。 例如,py-lint 任务不需要\n            为大多数更改安排,但当任何 Python 文件更改时,应安排它们。 \n            此类组件的命名方法是附加到 `SCHEDULES.inclusive`:\n\n            with Files(\'**.py\'):\n                SCHEDULES.inclusive += [\'py-lint\']\n\n            其他组件是“排他性”的,这意味着大多数文件的更改\n            会安排它们,但某些文件仅影响一个或两个\n            组件。 例如,大多数文件会安排 Firefox 的 Android、OS X、Windows 和 Linux 的构建和测试,但\n            `mobile/android/` 下的文件仅影响 Android 的构建和测试,因此\n            不需要其他操作系统的构建。 测试套件\n            提供了另一个示例:大多数文件会安排 reftests,但更改\n            到 reftests 脚本只需要安排 reftests,而不需要安排其他套件。 \n\n            排他性组件的命名方法是设置 `SCHEDULES.exclusive`:\n\n            with Files(\'mobile/android/**\'):\n                SCHEDULES.exclusive = [\'android\']\n            ')}
static aggregate(files)

给定路径到 Files 的映射,获取聚合结果。

使用者可能希望从描述路径的 Files 集合中提取有用的信息。例如,给定 N 个路径的文件信息数据,根据最频繁的错误组件推荐一个错误组件。此函数提供了从路径文件元数据集合中派生聚合知识的逻辑。

注意:此函数的目的是对 mozbuild.frontend.reader.BuildReader.files_info() 的结果进行操作。mozbuild.frontend.context.Files() 实例因此是所有与特定路径相关的 moz.build 文件中的所有 Files 的“折叠”(__iadd__``ed) 结果,而不是单个 moz.build 文件中的单个 ``Files 实例。

asdict()

将此实例作为具有内置数据结构的字典返回。

调用此方法以获取适合序列化的对象。

class mozbuild.frontend.context.FinalTargetValue(context, value='')

基类:ContextDerivedValuestr

class mozbuild.frontend.context.HostCompileFlags(context)

基类:BaseCompileFlags

class mozbuild.frontend.context.InitializedDefines(context, value=None)

基类:ContextDerivedValueOrderedDict

update([E, ]**F) None.  更新 D 来自 字典/可迭代对象 E F。

如果 E 存在且具有 .keys() 方法,则执行以下操作:for k in E: D[k] = E[k] 如果 E 存在且缺少 .keys() 方法,则执行以下操作:for k, v in E: D[k] = v 在任何一种情况下,之后都会执行以下操作:for k in F: D[k] = F[k]

class mozbuild.frontend.context.LinkFlags(context)

基类:BaseCompileFlags

mozbuild.frontend.context.ManifestparserManifestList

_OrderedListWithAction 的别名

class mozbuild.frontend.context.ObjDirPath(context, value=None)

基类:Path

类似于 Path,但仅限于对象目录中的路径。

mozbuild.frontend.context.OrderedPathListWithAction(action)

返回一个类,该类表现为 StrictOrderingOnAppendList,但在读取每个输入和上下文时调用给定的可调用对象,存储一个包含结果和原始项目的元组。

这用于扩展 moz.build 读取以在文件系统读取模式下提供更多数据。

class mozbuild.frontend.context.Path(context, value=None)

基类:ContextDerivedValuestr

存储和解析相对于给定上下文的源路径

此类用作某些沙盒变量的后备类型。它表示相对于上下文的路径。支持的路径为

  • ‘/topsrcdir/relative/paths’

  • ‘srcdir/relative/paths’

  • ‘!/topobjdir/relative/paths’

  • ‘!objdir/relative/paths’

  • ‘%/filesystem/absolute/paths’

join(*p)

mozpath.join(self, *p) 的 ContextDerived 等效项,返回一个新的 Path 实例。

target_basename

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

class mozbuild.frontend.context.PathMeta

基类:type

Path 类系列的元类。

它在 Path 使用 Path 的另一个实例而不是接收上下文的情况下处理使用正确参数调用 __new__。

它还使 Path(context, value) 根据 value 实例化子类之一,允许调用者进行标准类型检查(isinstance(path, ObjDirPath))而不是检查 value 本身(path.startswith('!'))。

mozbuild.frontend.context.ReftestManifestList

_OrderedListWithAction 的别名

class mozbuild.frontend.context.RenamedSourcePath(context, value=None)

基类:SourcePath

类似于 SourcePath,但在安装时具有不同的基本名称。

构造函数采用 (source, target_basename) 的元组。

截至目前,此类不打算公开给 moz.build 沙盒,并且不受 RecursiveMake 后端支持。

property target_basename
class mozbuild.frontend.context.Schedules(inclusive=None, exclusive=None)

基类:object

类似于 ContextDerivedTypedRecord,但属性的行为不同

  • VAR.inclusive 只能附加到(+=),并且只能包含来自 mozbuild.schedules.INCLUSIVE_COMPONENTS 的值

  • VAR.exclusive 只能分配给(没有 +=),并且只能包含来自 mozbuild.schedules.ALL_COMPONENTS 的值

property components
property exclusive
property inclusive
mozbuild.frontend.context.SchedulingComponents

_TypedRecord 的别名

class mozbuild.frontend.context.SourcePath(context, value=None)

基类:Path

类似于 Path,但仅限于源目录中的路径。

translated

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

class mozbuild.frontend.context.SubContext(parent)

基类:ContextContextDerivedValue

从另一个 Context 派生的 Context。

子上下文旨在用作上下文管理器。

子上下文从父上下文继承路径和其他相关状态。

class mozbuild.frontend.context.TargetCompileFlags(context)

基类:BaseCompileFlags

封装 CompileFlags 和 WasmCompileFlags 之间一些通用逻辑的基类。

class mozbuild.frontend.context.TemplateContext(template=None, allowed_variables={}, config=None)

基类:Context

class mozbuild.frontend.context.WasmFlags(context)

基类:TargetCompileFlags

mozbuild.frontend.context.cls

Files 的别名

mozbuild.frontend.data 模块

表示 Mozilla 源代码树的数据结构。

前端文件被解析成静态数据结构。这些数据结构在此模块中定义。

所有感兴趣的数据结构都是 TreeMetadata 类的子类。

填充这些数据结构的逻辑未在此类中定义。相反,我们这里有的是哑容器类。emitter 模块包含将执行的 mozbuild 文件转换为这些数据结构的代码。

class mozbuild.frontend.data.BaseConfigSubstitution(context)

基类:ContextDerived

描述作为 config.status 部分的自动生成文件的基类。

input_path
output_path
relpath
class mozbuild.frontend.data.BaseDefines(context, defines)

基类:ContextDerived

DEFINES/HOST_DEFINES 的上下文派生容器对象,它们是 OrderedDicts。

defines
get_defines()
update(more_defines)
class mozbuild.frontend.data.BaseLibrary(context, basename)

基类:Linkable

库的通用上下文派生容器对象。

basename
import_name
property import_path
lib_name
属性 name
refs
mozbuild.frontend.data.BaseProgram(context, program, is_unit_test=False)

基类:Linkable

程序的上下文派生容器对象,它是 Unicode 字符串。

此类自动处理将二进制后缀附加到程序名称。如果未定义后缀,则程序名称保持不变。否则,如果程序名称以给定后缀结尾,则它保持不变。否则,将后缀附加到程序名称。

DICT_ATTRS = {'KIND', 'install_target', 'program', 'relobjdir'}
属性 name
program
mozbuild.frontend.data.BaseRustLibrary

基类:object

属性 import_path
init(context, basename, cargo_file, crate_type, dependencies, features, is_gkrust)
slots = ('cargo_file', 'crate_type', 'dependencies', 'features', 'output_category', 'is_gkrust')
mozbuild.frontend.data.BaseRustProgram(context, name, cargo_file)

基类:Linkable

KIND
SUFFIX_VAR
TARGET_SUBST_VAR
cargo_file
location
name
mozbuild.frontend.data.BaseSources(context, static_files, generated_files, canonical_suffix)

基类:ContextDerived

构建期间要编译的文件的基类。

canonical_suffix
files
generated_files
static_files
mozbuild.frontend.data.ChromeManifestEntry(context, manifest_path, entry)

基类:ContextDerived

表示 chrome.manifest 条目。

entry
path
mozbuild.frontend.data.ComputedFlags(context, reader_flags)

基类:ContextDerived

用于各种后端使用的聚合标志。

flags
get_flags()
resolve_flags(key, value)
mozbuild.frontend.data.ConfigFileSubstitution(context)

基类: BaseConfigSubstitution

描述将使用替换生成的配置文件。

input_path
output_path
relpath
mozbuild.frontend.data.ContextDerived(context)

基类: TreeMetadata

从单个 Context 实例派生的构建对象。

它包含所有上下文派生类共有的字段。此类可能永远不会直接实例化,而是从中派生。

config
context_all_paths
context_main_path
属性 defines
属性 install_target
属性 installed
objdir
属性 relobjdir
relsrcdir
srcdir
topobjdir
topsrcdir
mozbuild.frontend.data.Defines(context, defines)

基类: BaseDefines

defines
mozbuild.frontend.data.DirectoryTraversal(context)

基类:ContextDerived

描述构建时目录遍历的工作方式。

此构建对象可能仅对递归 make 后端感兴趣。其他构建后端应该(理想情况下)不要尝试模仿递归 make 后端的行为。它存在的原因仅仅是为了在过渡到 mozbuild 前端文件完成并转向更优化的构建后端时,支持现有的递归 make 后端。

此类中的字段对应于前端文件中的同名变量。

dirs
mozbuild.frontend.data.Exports(sandbox, files)

基类: FinalTargetFiles

EXPORTS 的上下文派生容器对象,它是 HierarchicalStringList。

我们需要一个从 ContextDerived 派生的对象在后端使用,因此此对象满足此角色。它只是对底层 HierarchicalStringList 的引用,该引用是在解析 EXPORTS 时创建的。

files
属性 install_target
mozbuild.frontend.data.ExternalLibrary

基类:object

用于由外部构建系统构建的库的空混合。

class mozbuild.frontend.data.ExternalSharedLibrary(context, basename, real_name=None, soname=None, variant=None, symbols_file=False)

基类: SharedLibraryExternalLibrary

由外部构建系统构建的共享库的上下文派生容器。

output_category
soname
symbols_file
variant
class mozbuild.frontend.data.ExternalStaticLibrary(context, basename, real_name=None, link_into=None, no_expand_lib=False)

基类: StaticLibraryExternalLibrary

由外部构建系统构建的静态库的上下文派生容器。

no_expand_lib
class mozbuild.frontend.data.FinalTargetFiles(sandbox, files)

基类:ContextDerived

FINAL_TARGET_FILES 的沙箱容器对象,它是一个 HierarchicalStringList。

我们需要一个从 ContextDerived 派生的对象在后端使用,所以这个对象扮演了这个角色。它只是对底层 HierarchicalStringList 的引用,该引用是在解析 FINAL_TARGET_FILES 时创建的。

files
class mozbuild.frontend.data.FinalTargetPreprocessedFiles(sandbox, files)

基类:ContextDerived

FINAL_TARGET_PP_FILES 的沙箱容器对象,它是一个 HierarchicalStringList。

我们需要一个从 ContextDerived 派生的对象在后端使用,所以这个对象扮演了这个角色。它只是对底层 HierarchicalStringList 的引用,该引用是在解析 FINAL_TARGET_PP_FILES 时创建的。

files
class mozbuild.frontend.data.GeneratedFile(context, script, method, outputs, inputs, flags=(), localized=False, force=False, py2=False, required_during_compile=None)

基类:ContextDerived

表示一个生成的文件。

flags
force
inputs
localized
method
outputs
py2
required_before_compile
required_before_export
required_during_compile
script
class mozbuild.frontend.data.HostDefines(context, defines)

基类: BaseDefines

defines
class mozbuild.frontend.data.HostLibrary(context, basename)

基类: HostMixinBaseLibrary

主机库的上下文派生容器对象

KIND = 'host'
basename
import_name
lib_name
no_expand_lib = False
refs
class mozbuild.frontend.data.HostMixin

基类:object

property defines
class mozbuild.frontend.data.HostProgram(context, program, is_unit_test=False)

基类: HostMixinBaseProgram

HOST_PROGRAM 的上下文派生容器对象

KIND = 'host'
SUFFIX_VAR = 'HOST_BIN_SUFFIX'
property install_target
program
class mozbuild.frontend.data.HostRustLibrary(context, basename, cargo_file, crate_type, dependencies, features, is_gkrust)

基类: BaseRustLibraryHostLibrary

主机 Rust 库的上下文派生容器对象

FEATURES_VAR = 'HOST_RUST_LIBRARY_FEATURES'
KIND = 'host'
LIB_FILE_VAR = 'HOST_RUST_LIBRARY_FILE'
TARGET_SUBST_VAR = 'RUST_HOST_TARGET'
cargo_file
crate_type
dependencies
features
is_gkrust
no_expand_lib = True
output_category
class mozbuild.frontend.data.HostRustProgram(context, name, cargo_file)

基类: BaseRustProgram

KIND
SUFFIX_VAR
TARGET_SUBST_VAR
cargo_file
location
name
class mozbuild.frontend.data.HostSharedLibrary(context, basename)

基类: HostMixin, Library

主机共享库的上下文派生容器对象。

此类支持的功能少于用于目标共享库的 SharedLibrary。目前拥有足够的构建系统支持来构建 clang 插件。

KIND = 'host'
class mozbuild.frontend.data.HostSimpleProgram(context, program, is_unit_test=False)

基类: HostMixinBaseProgram

HOST_SIMPLE_PROGRAMS 中每个程序的上下文派生容器对象

KIND = 'host'
SUFFIX_VAR = 'HOST_BIN_SUFFIX'
program
source_files()
class mozbuild.frontend.data.HostSources(context, static_files, generated_files, canonical_suffix)

基类: HostMixin, BaseSources

表示在构建过程中要为主机编译的文件。

canonical_suffix
files
generated_files
static_files
class mozbuild.frontend.data.IPDLCollection(context)

基类:ContextDerived

在构建期间收集 IPDL 文件。

all_preprocessed_sources()
all_regular_sources()
all_source_files()
all_sources()
config
context_all_paths
context_main_path
objdir
relsrcdir
srcdir
topobjdir
topsrcdir
class mozbuild.frontend.data.InstallationTarget(context)

基类:ContextDerived

描述影响文件安装位置的规则。

enabled
is_custom()

返回目标是否不是根据给定的 xpiname 和 subdir 派生的。

subdir
target
xpiname
class mozbuild.frontend.data.JARManifest(context, path)

基类:ContextDerived

描述单个 JAR 清单文件以及如何处理它。

此类对于优化后端还没有多大用处,因为我们没有捕获定义。在所有定义都定义在 moz.build 中而不是 Makefile.in 文件中之前,我们无法安全地捕获定义。

path
class mozbuild.frontend.data.Library(context, basename, real_name=None)

基类: BaseLibrary

库的上下文派生容器对象

KIND = 'target'
class mozbuild.frontend.data.Linkable(context)

基类:ContextDerived

程序和库的通用上下文派生容器对象

lib_defines
linked_libraries
linked_system_libs
property objs
property output_path
source_files()
sources
exception mozbuild.frontend.data.LinkageWrongKindError

基类: Exception

尝试链接错误类型的对象时抛出的错误

class mozbuild.frontend.data.LocalInclude(context, path)

基类:ContextDerived

描述单个本地包含路径。

path
class mozbuild.frontend.data.LocalizedFiles(sandbox, files)

基类: FinalTargetFiles

LOCALIZED_FILES 的沙箱容器对象,它是一个 HierarchicalStringList。

files
class mozbuild.frontend.data.LocalizedPreprocessedFiles(sandbox, files)

基类: FinalTargetPreprocessedFiles

LOCALIZED_PP_FILES 的沙箱容器对象,它是一个 HierarchicalStringList。

files
class mozbuild.frontend.data.ObjdirFiles(sandbox, files)

基类: FinalTargetFiles

OBJDIR_FILES 的沙箱容器对象,它是一个 HierarchicalStringList。

files
property install_target
class mozbuild.frontend.data.ObjdirPreprocessedFiles(sandbox, files)

基类: FinalTargetPreprocessedFiles

OBJDIR_PP_FILES 的沙箱容器对象,它是一个 HierarchicalStringList。

files
property install_target
class mozbuild.frontend.data.PerSourceFlag(context, file_name, flags)

基类:ContextDerived

描述为单个源文件指定的编译器标志。

file_name
flags
class mozbuild.frontend.data.PgoGenerateOnlySources(context, files)

基类:BaseSources

表示在构建期间要编译的文件。

这些文件仅在 PGO 生成阶段使用。

canonical_suffix
files
generated_files
static_files
class mozbuild.frontend.data.Program(context, program, is_unit_test=False)

基类:BaseProgram

PROGRAM 的上下文派生容器对象

KIND = 'target'
SUFFIX_VAR = 'BIN_SUFFIX'
program
class mozbuild.frontend.data.RustLibrary(context, basename, cargo_file, crate_type, dependencies, features, is_gkrust=False, link_into=None)

基类:BaseRustLibrary, StaticLibrary

rust 静态库的上下文派生容器对象

FEATURES_VAR = 'RUST_LIBRARY_FEATURES'
KIND = 'target'
LIB_FILE_VAR = 'RUST_LIBRARY_FILE'
TARGET_SUBST_VAR = 'RUST_TARGET'
cargo_file
crate_type
dependencies
features
is_gkrust
output_category
class mozbuild.frontend.data.RustProgram(context, name, cargo_file)

基类: BaseRustProgram

KIND
SUFFIX_VAR
TARGET_SUBST_VAR
cargo_file
location
name
class mozbuild.frontend.data.RustTests(context, names, features)

基类:ContextDerived

features
names
output_category
class mozbuild.frontend.data.SandboxedWasmLibrary(context, basename, real_name=None)

基类:Library

沙盒 wasm 静态库的上下文派生容器对象

KIND = 'wasm'
no_expand_lib = True
class mozbuild.frontend.data.SharedLibrary(context, basename, real_name=None, soname=None, variant=None, symbols_file=False)

基类:Library

共享库的上下文派生容器对象

DICT_ATTRS = {'basename', 'import_name', 'install_target', 'lib_name', 'relobjdir', 'soname'}
FRAMEWORK = 1
MAX_VARIANT = 2
property import_path
output_category
soname
symbols_file
variant
class mozbuild.frontend.data.SimpleProgram(context, program, is_unit_test=False)

基类:BaseProgram

SIMPLE_PROGRAMS 中每个程序的上下文派生容器对象

KIND = 'target'
SUFFIX_VAR = 'BIN_SUFFIX'
program
source_files()
class mozbuild.frontend.data.Sources(context, static_files, generated_files, canonical_suffix)

基类:BaseSources

表示在构建期间要编译的文件。

canonical_suffix
files
generated_files
static_files
class mozbuild.frontend.data.StaticLibrary(context, basename, real_name=None, link_into=None, no_expand_lib=False)

基类:Library

静态库的上下文派生容器对象

no_expand_lib
class mozbuild.frontend.data.TestHarnessFiles(sandbox, files)

基类: FinalTargetFiles

TEST_HARNESS_FILES 的沙盒容器对象,它是一个 HierarchicalStringList。

files
property install_target
class mozbuild.frontend.data.TestManifest(context, path, manifest, flavor=None, install_prefix=None, relpath=None, sources=(), dupe_manifest=False)

基类:ContextDerived

表示包含测试信息的清单文件。

deferred_installs
directory
dupe_manifest
external_installs
flavor
install_prefix
installs
manifest
manifest_obj_relpath
manifest_relpath
path
pattern_installs
source_relpaths
tests
class mozbuild.frontend.data.TreeMetadata

基类:object

所有捕获数据的基类。

to_dict()
class mozbuild.frontend.data.UnifiedSources(context, static_files, generated_files, canonical_suffix)

基类:BaseSources

表示在构建过程中以统一方式编译的文件。

have_unified_mapping
unified_source_mapping
class mozbuild.frontend.data.VariablePassthru(context)

基类:ContextDerived

一个变量字典,将这些变量原样传递到 backend.mk。

此对象的目的是促进将变量从 Makefile.in 快速迁移到 moz.build。在理想情况下,此类不存在,每个变量都有一个更丰富的类来表示它。只要我们依赖此类,我们就失去了构建后端灵活性的能力,因为我们将继续绑定到我们的 rules.mk。

variables
class mozbuild.frontend.data.WasmDefines(context, defines)

基类: BaseDefines

defines
class mozbuild.frontend.data.WasmSources(context, static_files, generated_files, canonical_suffix)

基类:BaseSources

表示在构建过程中使用 wasm 编译器编译的文件。

canonical_suffix
files
generated_files
static_files
class mozbuild.frontend.data.WebIDLCollection(context)

基类:ContextDerived

收集构建期间引用的 WebIDL 信息。

all_basenames()
all_non_static_basenames()
all_non_static_sources()
all_preprocessed_sources()
all_regular_basenames()
all_regular_bindinggen_stems()
all_regular_cpp_basenames()
all_regular_sources()
all_regular_stems()
all_source_files()
all_sources()
all_static_sources()
all_stems()
all_test_basenames()
all_test_cpp_basenames()
all_test_sources()
all_test_stems()
config
context_all_paths
context_main_path
generated_events_basenames()
generated_events_stems()
objdir
relsrcdir
srcdir
topobjdir
topsrcdir
property unified_source_mapping
class mozbuild.frontend.data.XPCOMComponentManifests(context)

基类:ContextDerived

在构建期间收集 XPCOM 清单文件。

all_source_files()
all_sources()
config
context_all_paths
context_main_path
objdir
relsrcdir
srcdir
topobjdir
topsrcdir
class mozbuild.frontend.data.XPIDLModule(context, name, idl_files)

基类:ContextDerived

描述要编译的 XPIDL 模块。

idl_files
name
mozbuild.frontend.data.cargo_output_directory(context, target_var)

mozbuild.frontend.emitter 模块

class mozbuild.frontend.emitter.TreeMetadataEmitter(config)

Bases: LoggingMixin

将执行的 mozbuild 文件转换为数据结构。

这是 reader.py 和 data.py 之间的桥梁。它获取 reader.BuildReader 读取的内容,并将其转换为 data 模块中定义的类。

ARCH_VAR = {'host': 'HOST_OS_ARCH', 'target': 'OS_TARGET'}
LIBRARY_NAME_VAR = {'host': 'HOST_LIBRARY_NAME', 'target': 'LIBRARY_NAME', 'wasm': 'SANDBOXED_WASM_LIBRARY_NAME'}
STDCXXCOMPAT_NAME = {'host': 'host_stdc++compat', 'target': 'stdc++compat'}
emit(output, emitfn=None)

将 BuildReader 输出转换为数据结构。

BuildReader.read_topsrcdir() 的返回值(一个生成器)通常会馈送到此函数中。

emit_from_context(context)

将 Context 转换为树元数据对象。

这是一个 mozbuild.frontend.data.ContextDerived 实例的生成器。

summary()

mozbuild.frontend.gyp_reader 模块

class mozbuild.frontend.gyp_reader.GypContext(config, relobjdir)

基类:TemplateContext

专用于从 Gyp 中提取的数据的 Context。

config 是此上下文的 ConfigEnvironment。relobjdir 是将用于此上下文的对象目录,相对于 ConfigEnvironment 中定义的 topobjdir。

class mozbuild.frontend.gyp_reader.GypProcessor(config, gyp_dir_attrs, path, output, executor, action_overrides, non_unified_sources)

基类:object

使用给定的执行器在后台读取 gyp 配置,并为后端处理发出 GypContext。

config 是一个 ConfigEnvironment,path 是根 gyp 配置文件的路径,output 是各种 gyp 依赖项的 objdir 将位于其下的基本路径。gyp_dir_attrs 是为来自 moz.build 的 dir 设置的属性。

property results
mozbuild.frontend.gyp_reader.handle_actions(actions, context, action_overrides)
mozbuild.frontend.gyp_reader.handle_copies(copies, context)
mozbuild.frontend.gyp_reader.load_gyp(*args)
mozbuild.frontend.gyp_reader.process_gyp_result(gyp_result, gyp_dir_attrs, path, config, output, non_unified_sources, action_overrides)

mozbuild.frontend.mach_commands 模块

exception mozbuild.frontend.mach_commands.InvalidPathException

基类: Exception

表示由于路径无效而导致的错误。

mozbuild.frontend.mach_commands.bugzilla_automation(command_context, out_dir)

分析并验证自动化所需的 Bugzilla 元数据。

这将为 Bugzilla 元数据写入 JSON 和 gzip 压缩的 JSON 文件。

如果 Bugzilla 元数据验证失败,则退出代码将不为 0。

mozbuild.frontend.mach_commands.file_info(command_context)

显示从 moz.build 文件派生的文件元数据。

moz.build 文件包含“Files”子上下文,用于针对文件模式声明元数据。此命令套件用于查询该数据。

mozbuild.frontend.mach_commands.file_info_bugzilla(command_context, paths, rev=None, fmt=None)

显示一组文件的 Bugzilla 组件。

给定一组请求的文件(可以使用通配符指定),打印每个文件的 Bugzilla 组件。

mozbuild.frontend.mach_commands.file_info_missing_bugzilla(command_context, paths, rev=None, fmt=None)
mozbuild.frontend.mach_commands.file_info_schedules(command_context, paths)

显示给定文件计划的内容。

给定一组请求的文件(可以使用通配符指定),打印计划组件的总集。

mozbuild.frontend.mach_commands.reference(command_context, symbol, name_only=False)

mozbuild.frontend.reader 模块

将构建前端文件读取到数据结构中。

在代码架构方面,主要接口是 BuildReader。BuildReader 从根 mozbuild 文件开始。它为该文件创建一个新的执行环境,由 Sandbox 类表示。Sandbox 类用于填充 Context,表示单个 mozbuild 文件的输出。该

BuildReader 包含遍历 mozbuild 文件树的基本逻辑。它通过检查执行期间填充的特定变量来做到这一点。

class mozbuild.frontend.reader.BuildReader(config, finder=<mozpack.files.FileFinder object>)

基类:object

将 mozbuild 文件树读取到数据结构中。

这是构建系统开始的地方。您向它提供一个树配置(配置的输出),它执行 moz.build 文件并收集它们定义的数据。

读取器可以在每个沙盒评估后但在处理其评估内容之前选择调用一个可调用对象。这使调用者有机会在从其内容发生副作用之前修改上下文。此回调接收包含每个沙盒评估结果的Context。其返回值被忽略。

all_mozbuild_paths()

所有可用 moz.build 文件的迭代器。

此方法与读取器关系不大。它应该属于其他地方。

files_info(paths)

获取一组文件的 Files 的聚合数据。

给定一组输入路径,确定哪些 moz.build 文件可能为它们定义元数据,评估这些 moz.build 文件,并应用其中定义的文件元数据规则以确定每个请求文件的元数据值。

从本质上讲,对于每个输入路径

  1. 通过查找祖先目录中的 moz.build 文件来确定与此文件相关的 moz.build 文件集。

  2. 从最远的 moz.build 文件开始评估。

  3. 迭代 Files 子上下文。

  4. 如果文件模式与我们正在查找信息的模式匹配,则应用属性更新。

  5. 返回属性的最新值。

find_variables_from_ast(variables, path=None)

通过解析 moz.build 抽象语法树查找对指定变量的所有赋值。

此函数仅支持以下两种情况。

  1. 字典。键和值都应该是字符串,例如

    VARIABLE[‘foo’] = ‘bar’

这是一个带有Subscript目标的Assign节点。Subscript的值是 id 为“VARIABLE”的Name节点。此目标的切片是Index节点,其值为Str,值为“foo”。

2) 简单列表。值应该是字符串,例如:赋值的目标应该是 Name 节点。值应该是 List 节点,其元素是 Str 节点。例如

VARIABLE += [‘foo’]

这是一个带有 id 为“VARIABLE”的Name目标的AugAssign节点。该值是包含一个Str元素的List节点,其值为“foo”。

通过稍微修改,此函数可以支持其他类型的赋值。但是,如果我们最终编写了很多 AST 代码,那么最好将高级 AST 操作库导入到树中。

参数:
  • variables (list) – 要捕获的变量赋值列表。

  • path (str) – 相对于源目录的路径。如果指定,则仅解析与此路径相关的moz.build文件。否则解析所有moz.build文件。

返回值:

一个生成元组的生成器,元组的格式为 (<moz.build路径>, <变量名>, <键>, <值>)。只有当变量是对象时, 才会被定义,否则为 None

gyp_summary()
read_mozbuild(path, config, descend=True, metadata={})

读取并处理一个 mozbuild 文件,并进入子目录。

这从单个 mozbuild 文件开始,执行它,并根据我们的遍历逻辑进入其他引用的文件。

遍历逻辑是迭代 *DIRS 变量,将每个元素视为一个相对目录路径。对于遇到的每个目录,我们将在新的沙箱中打开位于该目录中的 moz.build 文件并进行处理。

如果 descend 为 True(默认值),我们将根据变量值进入子目录和文件。

可以将字典形式的任意元数据传递给此函数。此功能旨在方便构建读取器注入与沙箱执行上下文无关的状态和注释到 moz.build 文件中。

遍历以深度优先的方式执行(没有特殊原因)。

read_relevant_mozbuilds(paths)

读取并处理与一组路径相关的 moz.build 文件。

对于相对于根文件系统的路径的可迭代对象 paths,查找可能应用于它们的 moz.build 文件,并读取这些文件。

返回值是一个 2 元组。第一个元素是字典,将每个输入文件系统路径映射到与其相关的 Context 实例列表。第二个元素是所有 Context 实例的列表。每个 Context 实例都存在于这两个数据结构中。

read_topsrcdir()

读取链接的 moz.build 文件的树。

这从树的最顶层的 moz.build 文件开始,并进入所有链接的 moz.build 文件,直到所有相关文件都已评估。

这是一个 Context 实例的生成器。读取每个 moz.build 文件时,都会创建一个新的 Context 并发出。

summary()
exception mozbuild.frontend.reader.BuildReaderError(file_stack, trace, sandbox_exec_error=None, sandbox_load_error=None, validation_error=None, other_error=None, sandbox_called_error=None)

基类: Exception

表示在 BuildReader 执行期间遇到的错误。

此类的主要目的是促进用户可操作的错误消息。执行错误应说明

  • 它们失败的原因

  • 它们失败的位置

  • 可以采取哪些措施来防止错误

此类中的许多代码应该在 sandbox.py 中。但是,鉴于 MozbuildSandbox 对 Sandbox 的添加(例如,包含文件概念 - 当然会影响错误消息),提取起来有些困难。

property actual_file
property main_file
property sandbox_error
class mozbuild.frontend.reader.EmptyConfig(topsrcdir, substs=None)

基类:object

一个空的配置对象。

此配置对象适用于在原始检出(没有任何现有配置)上与 BuildReader 一起使用。该配置只是从顶级源目录路径引导而来。

class PopulateOnGetDict(default_factory, *args, **kwargs)

基类:ReadOnlyDefaultDict

ReadOnlyDefaultDict 的一个变体,在 .get() 期间填充。

由于 CONFIG 使用 .get() 来访问成员,因此需要此变体。如果没有它,将返回 None(而不是我们的 EmptyValue 类型)。

get(key, default=None)

如果键在字典中,则返回键的值,否则返回默认值。

default_substs = {'JS_STANDALONE': '1', 'MOZ_APP_NAME': 'empty', 'MOZ_CHILD_PROCESS_NAME': 'empty'}
class mozbuild.frontend.reader.MozbuildSandbox(context, metadata={}, finder=<mozpack.files.FileFinder object>)

基类:Sandbox

为 mozbuild 文件定制的沙箱的实现。

我们公开了一些有用的函数,并公开了定义 Mozilla 构建系统的变量集。

context 是一个 Context 实例。

metadata 是一个元数据字典,可以在沙箱评估期间使用。

exec_file(path, becomes_current_path=True)

覆盖 exec_file 以规范化路径并限制文件加载。

如果路径不属于 topsrcdir 或其中一个外部根目录,则将被拒绝。

recompute_exports()

使用子目录中的当前值重新计算要导出到子目录的变量。

exception mozbuild.frontend.reader.SandboxCalledError(file_stack, message)

基类:SandboxError

表示调用 error() 函数导致的错误。

exception mozbuild.frontend.reader.SandboxValidationError(message, context)

基类: Exception

表示在验证沙箱结果时遇到的错误。

class mozbuild.frontend.reader.TemplateFunction(func, sandbox)

基类:object

class RewriteName(sandbox, global_name)

基类:NodeTransformer

AST 节点转换器,用于重写变量访问以通过字典进行。

visit_Name(node)
exec_in_sandbox(sandbox, *args, **kwargs)

在给定的沙箱中执行模板函数。

mozbuild.frontend.reader.is_read_allowed(path, config)

我们是否允许加载指定路径下的 mozbuild 文件。

这用作廉价的安全措施,以确保构建隔离到已知的源目录。

我们被允许从主源目录和任何定义的外部源目录读取。后者是为了允许第三方应用程序挂钩到我们的构建系统。

mozbuild.frontend.reader.log(logger, level, action, params, formatter)

mozbuild.frontend.sandbox 模块

构建文件的 Python 沙箱实现。

此模块包含用于在高度受控的环境中执行的 Python 沙箱的类。

主类是 Sandbox。它提供了一个 Python 代码的执行环境,并用于填充 Context 实例,以获取执行结果的信息。

此模块中的代码与在 Python 其他地方看到的代码相比,采用了不同的异常处理方法。内置异常(如 KeyError)的参数是机器可解析的。在发生错误的情况下,此机器友好的数据用于显示用户友好的错误消息。

class mozbuild.frontend.sandbox.Sandbox(context, finder=<mozpack.files.FileFinder object>)

基类:dict

表示用于执行 Python 代码的沙箱。

此类为单个 mozbuild 前端文件的执行提供了一个沙箱。该执行的结果存储在作为 context 参数提供的 Context 实例中。

Sandbox 实际上是围绕 compile() + exec() 的一个增强包装器。你将它指向一些 Python 代码,它就会执行它。与正常执行 Python 代码的主要区别在于,执行的代码在功能方面受到很大限制:沙箱仅公开了一组非常有限的 Python 功能。只有特定类型和函数可用。这可以防止执行的代码执行诸如导入模块、打开文件等操作。

Sandbox 实例充当沙箱执行本身的全局命名空间。它们不应用于访问执行的结果。这些结果在执行后可在给定的 Context 实例中获得。

Sandbox 本身负责实施规则,例如禁止重新分配变量。

实现说明:Sandbox 派生自 dict,因为 exec() 坚持要求它为命名空间提供的内容是字典。

BUILTINS = {'False': False, 'None': None, 'True': True, 'int': <class 'int'>, 'set': <class 'set'>, 'sorted': <function alphabetical_sorted>, 'tuple': <class 'tuple'>}
exec_file(path, becomes_current_path=True)

在沙箱中执行指定路径下的代码。

路径必须是绝对路径。

exec_function(func, args=(), kwargs={}, path='', becomes_current_path=True)

在沙箱中执行给定参数的函数。

exec_source(source, path='', becomes_current_path=True)

在字符串中执行 Python 代码。

传递的字符串应包含要执行的 Python 代码。字符串将被编译并执行。

您几乎总是应该通过 exec_file() 进行操作,因为 exec_source() 不会执行额外的路径规范化。这可能导致相对路径的行为异常。

get(key, default=None)

如果键在字典中,则返回键的值,否则返回默认值。

pop_subcontext(context)

从执行栈中弹出 SubContext。

SubContext 必须以相反的顺序压入和弹出。这在函数调用期间得到验证,以确保正确的使用者 API 使用。

push_subcontext(context)

将 SubContext 推送到执行栈上。

调用时,活动上下文将设置为指定的上下文,这意味着所有变量访问都将通过它进行。我们还记录此 SubContext 作为此沙箱执行的一部分。

exception mozbuild.frontend.sandbox.SandboxError(file_stack)

基类: Exception

exception mozbuild.frontend.sandbox.SandboxExecutionError(file_stack, exc_type, exc_value, trace)

基类:SandboxError

表示在沙箱执行期间遇到的错误。

这是一个简单的容器异常。其目的是捕获状态,以便其他内容可以对其进行报告。

exception mozbuild.frontend.sandbox.SandboxLoadError(file_stack, trace, illegal_path=None, read_error=None)

基类:SandboxError

表示在加载要执行的文件时遇到的错误。

此异常表示沙箱中作为加载文件一部分发生的错误。错误可能是在执行文件的过程中发生的。如果是这样,则 file_stack 将不为空,导致加载的文件将在堆栈顶部。

mozbuild.frontend.sandbox.alphabetical_sorted(iterable, key=<function <lambda>>, reverse=False)

沙箱中 sorted() 的替代方法,默认按字母顺序排序。

模块内容