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)¶
- class mozbuild.frontend.context.BaseCompileFlags(context)¶
基类:
ContextDerivedValue
,dict
- class mozbuild.frontend.context.CompileFlags(context)¶
- class mozbuild.frontend.context.Context(allowed_variables={}, config=None, finder=None)¶
-
表示 moz.build 配置上下文。
此类的实例由沙盒的执行填充。从核心来看,Context 是一个字典,具有一组定义的可能键,我们将其称为变量。每个变量都与一个类型相关联。
读取给定键的值时,我们首先尝试读取现有值。如果未找到值并且它在允许的变量集中定义,则返回该变量的类的全新实例。我们不会在访问之前分配默认实例,因为这使得调试最终结果变得更加简单。与其使用包含大量空/默认值的数据结构,不如使用仅包含已读取或触碰的值的数据结构。
变量类的实例是通过调用
class_name()
创建的,除非 class_name 派生自ContextDerivedValue
或SubContext
,在这种情况下,调用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='')¶
基类:
ContextDerivedValue
,str
- class mozbuild.frontend.context.HostCompileFlags(context)¶
- class mozbuild.frontend.context.InitializedDefines(context, value=None)¶
基类:
ContextDerivedValue
,OrderedDict
- 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)¶
- mozbuild.frontend.context.ManifestparserManifestList¶
_OrderedListWithAction
的别名
- mozbuild.frontend.context.OrderedPathListWithAction(action)¶
返回一个类,该类表现为 StrictOrderingOnAppendList,但在读取每个输入和上下文时调用给定的可调用对象,存储一个包含结果和原始项目的元组。
这用于扩展 moz.build 读取以在文件系统读取模式下提供更多数据。
- class mozbuild.frontend.context.Path(context, value=None)¶
基类:
ContextDerivedValue
,str
存储和解析相对于给定上下文的源路径
此类用作某些沙盒变量的后备类型。它表示相对于上下文的路径。支持的路径为
‘/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)¶
基类:
Context
,ContextDerivedValue
从另一个 Context 派生的 Context。
子上下文旨在用作上下文管理器。
子上下文从父上下文继承路径和其他相关状态。
- class mozbuild.frontend.context.TargetCompileFlags(context)¶
-
封装 CompileFlags 和 WasmCompileFlags 之间一些通用逻辑的基类。
- class mozbuild.frontend.context.TemplateContext(template=None, allowed_variables={}, config=None)¶
基类:
Context
- class mozbuild.frontend.context.WasmFlags(context)¶
mozbuild.frontend.data 模块¶
表示 Mozilla 源代码树的数据结构。
前端文件被解析成静态数据结构。这些数据结构在此模块中定义。
所有感兴趣的数据结构都是 TreeMetadata 类的子类。
填充这些数据结构的逻辑未在此类中定义。相反,我们这里有的是哑容器类。emitter 模块包含将执行的 mozbuild 文件转换为这些数据结构的代码。
- class mozbuild.frontend.data.BaseConfigSubstitution(context)¶
-
描述作为 config.status 部分的自动生成文件的基类。
- input_path¶
- output_path¶
- relpath¶
- class mozbuild.frontend.data.BaseDefines(context, defines)¶
-
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)¶
-
构建期间要编译的文件的基类。
- canonical_suffix¶
- files¶
- generated_files¶
- static_files¶
- 类 mozbuild.frontend.data.ChromeManifestEntry(context, manifest_path, entry)¶
-
表示 chrome.manifest 条目。
- entry¶
- path¶
- 类 mozbuild.frontend.data.ComputedFlags(context, reader_flags)¶
-
用于各种后端使用的聚合标志。
- flags¶
- get_flags()¶
- resolve_flags(key, value)¶
- 类 mozbuild.frontend.data.ConfigFileSubstitution(context)¶
-
描述将使用替换生成的配置文件。
- 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)¶
-
描述构建时目录遍历的工作方式。
此构建对象可能仅对递归 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
用于由外部构建系统构建的库的空混合。
基类:
SharedLibrary
,ExternalLibrary
由外部构建系统构建的共享库的上下文派生容器。
- class mozbuild.frontend.data.ExternalStaticLibrary(context, basename, real_name=None, link_into=None, no_expand_lib=False)¶
基类:
StaticLibrary
,ExternalLibrary
由外部构建系统构建的静态库的上下文派生容器。
- link_into¶
- no_expand_lib¶
- class mozbuild.frontend.data.FinalTargetFiles(sandbox, files)¶
-
FINAL_TARGET_FILES 的沙箱容器对象,它是一个 HierarchicalStringList。
我们需要一个从 ContextDerived 派生的对象在后端使用,所以这个对象扮演了这个角色。它只是对底层 HierarchicalStringList 的引用,该引用是在解析 FINAL_TARGET_FILES 时创建的。
- files¶
- class mozbuild.frontend.data.FinalTargetPreprocessedFiles(sandbox, files)¶
-
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)¶
-
表示一个生成的文件。
- 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)¶
基类:
HostMixin
,BaseLibrary
主机库的上下文派生容器对象
- KIND = 'host'¶
- basename¶
- import_name¶
- lib_name¶
- no_expand_lib = False¶
- refs¶
- class mozbuild.frontend.data.HostProgram(context, program, is_unit_test=False)¶
基类:
HostMixin
,BaseProgram
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)¶
基类:
BaseRustLibrary
,HostLibrary
主机 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.HostSimpleProgram(context, program, is_unit_test=False)¶
基类:
HostMixin
,BaseProgram
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)¶
-
在构建期间收集 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)¶
-
描述影响文件安装位置的规则。
- enabled¶
- is_custom()¶
返回目标是否不是根据给定的 xpiname 和 subdir 派生的。
- subdir¶
- target¶
- xpiname¶
- class mozbuild.frontend.data.JARManifest(context, path)¶
-
描述单个 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)¶
-
程序和库的通用上下文派生容器对象
- cxx_link¶
- lib_defines¶
- link_library(obj)¶
- link_system_library(lib)¶
- linked_libraries¶
- linked_system_libs¶
- property objs¶
- property output_path¶
- source_files()¶
- sources¶
- exception mozbuild.frontend.data.LinkageWrongKindError¶
基类:
Exception
尝试链接错误类型的对象时抛出的错误
- 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)¶
-
描述为单个源文件指定的编译器标志。
- 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.SandboxedWasmLibrary(context, basename, real_name=None)¶
基类:
Library
沙盒 wasm 静态库的上下文派生容器对象
- KIND = 'wasm'¶
- no_expand_lib = True¶
基类:
Library
共享库的上下文派生容器对象
- 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
静态库的上下文派生容器对象
- link_into¶
- 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)¶
-
表示包含测试信息的清单文件。
- 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.UnifiedSources(context, static_files, generated_files, canonical_suffix)¶
基类:
BaseSources
表示在构建过程中以统一方式编译的文件。
- have_unified_mapping¶
- unified_source_mapping¶
- class mozbuild.frontend.data.VariablePassthru(context)¶
-
一个变量字典,将这些变量原样传递到 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)¶
-
收集构建期间引用的 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)¶
-
在构建期间收集 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)¶
-
描述要编译的 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)¶
-
专用于从 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 文件,并应用其中定义的文件元数据规则以确定每个请求文件的元数据值。
从本质上讲,对于每个输入路径
通过查找祖先目录中的 moz.build 文件来确定与此文件相关的 moz.build 文件集。
从最远的 moz.build 文件开始评估。
迭代 Files 子上下文。
如果文件模式与我们正在查找信息的模式匹配,则应用属性更新。
返回属性的最新值。
- find_variables_from_ast(variables, path=None)¶
通过解析 moz.build 抽象语法树查找对指定变量的所有赋值。
此函数仅支持以下两种情况。
字典。键和值都应该是字符串,例如
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 的一个变体,在 .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() 的替代方法,默认按字母顺序排序。