mozconfig 文件

mozconfig 文件用于配置构建过程。

mozconfig 文件实际上是 shell 脚本。它们在特殊的上下文中执行,并向其公开特定的变量和函数。

API

函数

以下特殊函数可用于 mozconfig 脚本。

ac_add_options

此函数用于声明要传递到 configure 的额外选项/参数。

例如:

ac_add_options --disable-tests
ac_add_options --enable-optimize

mk_add_options

此函数用于将语句注入到 client.mk 中以执行。它通常用于定义变量,特别是对象目录。

例如:

mk_add_options AUTOCLOBBER=1

特殊的 mk_add_options 变量

出于历史原因,某些定义良好的变量的通信方法是通过 mk_add_options()。在本节中,我们记录了这些特殊变量是什么。

MOZ_OBJDIR

此变量用于定义当前构建的对象目录

查找活动的 mozconfig

可以存在多个 mozconfig 文件,以便为不同的任务提供不同的配置选项。查找活动 mozconfig 的规则在mozboot.mozconfig.find_mozconfig() 方法中定义。

mozboot.mozconfig.find_mozconfig(topsrcdir: str | Path, env=environ({'SHELL': '/bin/bash', 'MOZ_FETCHES': '[{"artifact": "public/build/node-modules.tar.zst", "extract": true, "task": "OajyGWQIRCKUlcPB9iu2Gw"}, {"artifact": "public/build/node.tar.zst", "extract": true, "task": "KuZT2N-QTvaXh03iaRDQXg"}, {"artifact": "public/build/python.tar.zst", "extract": true, "task": "AKtCY5T_SfufFqf9_8_fIQ"}]', 'MOZPYTHONHOME': '/builds/worker/fetches/python', 'GECKO_HEAD_REV': '4e75481ca2636e965da299cb585ad12d1ac02301', 'HOSTNAME': 'taskcluster-worker', 'MOZ_AUTOMATION': '1', 'TASKCLUSTER_ROOT_URL': 'https://firefox-ci-tc.services.mozilla.com', 'PWD': '/builds/worker/checkouts/gecko', 'LOGNAME': 'worker', 'GECKO_PATH': '/builds/worker/checkouts/gecko', 'TASKCLUSTER_WORKER_POOL': 'gecko-3/b-linux-medium-gcp', 'TASKCLUSTER_PORT_80_TCP_PORT': '80', 'HOME': '/builds/worker', 'TASKCLUSTER_WORKER_GROUP': 'us-central1-c', 'LANG': 'en_US.UTF-8', 'TASKCLUSTER_NAME': '/unruffled_turing/taskcluster', 'MOZ_PYTHON_HOME': '/builds/worker/fetches/python', 'TASKCLUSTER_INSTANCE_TYPE': 'projects/970387039909/machineTypes/c2-standard-8', 'GECKO_BASE_REPOSITORY': 'https://hg.mozilla.org/mozilla-unified', 'TASKCLUSTER_PORT': 'tcp://172.17.0.2:80', 'TASKCLUSTER_WORKER_LOCATION': '{"cloud":"google","region":"us-central1","zone":"us-central1-c"}', 'TERM': 'xterm', 'TASKCLUSTER_PUBLIC_IP': '34.55.120.109', 'HG_STORE_PATH': '/builds/worker/checkouts/hg-store', 'USER': 'worker', 'TASKCLUSTER_PORT_80_TCP_PROTO': 'tcp', 'MOZ_SCM_LEVEL': '3', 'SHLVL': '0', 'TASKCLUSTER_PROXY_URL': 'http://taskcluster', 'GECKO_HEAD_REPOSITORY': 'https://hg.mozilla.org/mozilla-central', 'SCCACHE_DISABLE': '1', 'LC_ALL': 'C', 'MOZ_SOURCE_DOCS_USE_GOOGLE': '1', 'MOZ_FETCHES_DIR': '/builds/worker/fetches', 'PATH': '/builds/worker/checkouts/gecko/node_modules/.bin:/builds/worker/fetches/node/bin:/builds/worker/.mozbuild/srcdirs/gecko-8a5b87fe5d69/_virtualenvs/docs/bin:/builds/worker/fetches/python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'RUN_ID': '0', 'TASK_ID': 'Njv58HGETNOaGhwBwmYaVg', 'TASKCLUSTER_WORKER_TYPE': 'b-linux-medium-gcp', 'TASKCLUSTER_PORT_80_TCP_ADDR': '172.17.0.2', 'DEBIAN_FRONTEND': 'noninteractive', 'TASKCLUSTER_PORT_80_TCP': 'tcp://172.17.0.2:80', '_': './mach', 'MACH_MAIN_PID': '26', 'VIRTUAL_ENV': '/builds/worker/.mozbuild/srcdirs/gecko-8a5b87fe5d69/_virtualenvs/docs', 'DOCUTILSCONFIG': '/builds/worker/checkouts/gecko/docs/docutils.conf'}))

查找当前环境的活动 mozconfig 文件。

这模拟了 mozconfig-find 中的逻辑。

  1. 如果设置了 ENV[MOZCONFIG],则使用它。

  2. 如果 $TOPSRCDIR/mozconfig 或 $TOPSRCDIR/.mozconfig 存在,则使用它。

  3. 如果两者都存在或检测到旧位置,则报错。

如果成功,将返回找到的 mozconfig 的绝对路径。如果找不到 mozconfig,则返回 None。如果存在错误状态,包括上面 #3 中的条件,则将引发 MozconfigFindException。

加载活动的 mozconfig

class mozbuild.mozconfig.MozconfigLoader(topsrcdir)

处理 mozconfig 文件的加载和解析。

read_mozconfig(path=None)

将 mozconfig 的内容读取到数据结构中。

这需要加载 mozconfig 的路径。如果给定的路径为 AUTODETECT,将尝试使用 find_mozconfig() 从环境中查找 mozconfig。

mozconfig 文件是 shell 脚本。因此,我们不能只解析它们。相反,我们在一个包装器中运行 shell 脚本,该包装器允许我们记录执行状态。因此,mozconfig 的输出是一个友好的静态数据结构。