Name Description Size
__init__.py 0
action 33
analyze 3
android_version_code.py Generate a v1 android:versionCode. The important consideration is that version codes be monotonically increasing (per Android package name) for all published builds. The input build IDs are based on timestamps and hence are always monotonically increasing. The generated v1 version codes look like (in binary): 0111 1000 0010 tttt tttt tttt tttt txpg The 17 bits labelled 't' represent the number of hours since midnight on September 1, 2015. (2015090100 in YYYYMMMDDHH format.) This yields a little under 15 years worth of hourly build identifiers, since 2**17 / (366 * 24) =~ 14.92. The bits labelled 'x', 'p', and 'g' are feature flags. The bit labelled 'x' is 1 if the build is for an x86 or x86-64 architecture, and 0 otherwise, which means the build is for an ARM or ARM64 architecture. (Fennec no longer supports ARMv6, so ARM is equivalent to ARMv7. ARM64 is also known as AArch64; it is logically ARMv8.) For the same release, x86 and x86_64 builds have higher version codes and take precedence over ARM builds, so that they are preferred over ARM on devices that have ARM emulation. The bit labelled 'p' is 1 if the build is for a 64-bit architecture (x86-64 or ARM64), and 0 otherwise, which means the build is for a 32-bit architecture (x86 or ARM). 64-bit builds have higher version codes so they take precedence over 32-bit builds on devices that support 64-bit. The bit labelled 'g' is 1 if the build targets a recent API level, which is currently always the case, because Firefox no longer ships releases that are split by API levels. However, we may reintroduce a split in the future, in which case the release that targets an older API level will We throw an explanatory exception when we are within one calendar year of running out of build events. This gives lots of time to update the version scheme. The responsible individual should then bump the range (to allow builds to continue) and use the time remaining to update the version scheme via the reserved high order bits. N.B.: the reserved 0 bit to the left of the highest order 't' bit can, sometimes, be used to bump the version scheme. In addition, by reducing the granularity of the build identifiers (for example, moving to identifying builds every 2 or 4 hours), the version scheme may be adjusted further still without losing a (valuable) high order bit. 7908
artifact_builds.py 924
artifact_cache.py Fetch and cache artifacts from URLs. This module manages fetching artifacts from URLS and purging old artifacts using a simple Least Recently Used cache. This module requires certain modules be importable from the ambient Python environment. Consumers will need to arrange this themselves. The bulk of the complexity is in managing and persisting several caches. If we found a Python LRU cache that pickled cleanly, we could remove a lot of this code! Sadly, I found no such candidate implementations, so we pickle pylru caches manually. None of the instances (or the underlying caches) are safe for concurrent use. A future need, perhaps. 8778
artifact_commands.py Download, cache, and install pre-built binary artifacts to build Firefox. Use |mach build| as normal to freshen your installed binary libraries: artifact builds automatically download, cache, and install binary artifacts from Mozilla automation, replacing whatever may be in your object directory. Use |mach artifact last| to see what binary artifacts were last used. Never build libxul again! 19636
artifacts.py Fetch build artifacts from a Firefox tree. This provides an (at-the-moment special purpose) interface to download Android artifacts from Mozilla's Task Cluster. This module performs the following steps: * find a candidate hg parent revision. At one time we used the local pushlog, which required the mozext hg extension. This isn't feasible with git, and it is only mildly less efficient to not use the pushlog, so we don't use it even when querying hg. * map the candidate parent to candidate Task Cluster tasks and artifact locations. Pushlog entries might not correspond to tasks (yet), and those tasks might not produce the desired class of artifacts. * fetch fresh Task Cluster artifacts and purge old artifacts, using a simple Least Recently Used cache. * post-process fresh artifacts, to speed future installation. In particular, extract relevant files from Mac OS X DMG files into a friendly archive format so we don't have to mount DMG files frequently. This module requires certain modules be importable from the ambient Python environment. |mach artifact| ensures these modules are available, but other consumers will need to arrange this themselves. 53511
backend 12
base.py Emit the parent directories of a path. 38666
build_commands.py What to build. Can be a top-level make target or a relative directory. If multiple options are provided, they will be built serially. Takes dependency information from `topsrcdir/build/dumbmake-dependencies` to build additional targets as needed. BUILDING ONLY PARTS OF THE TREE CAN RESULT IN BAD TREE STATE. USE AT YOUR OWN RISK. 7363
chunkify.py Split an integer into evenly distributed list >>> split_evenly(7, 3) [3, 2, 2] >>> split_evenly(12, 3) [4, 4, 4] >>> split_evenly(35, 10) [4, 4, 4, 4, 4, 3, 3, 3, 3, 3] >>> split_evenly(1, 2) Traceback (most recent call last): ... ChunkingError: Number of chunks is greater than number 1671
code-analysis 1
codecoverage 5
compilation 5
config_status.py ============= ADVERTISEMENT You are building Firefox for Android. After your build completes, you can open the top source directory in Android Studio directly and build using Gradle. See the documentation at https://developer.mozilla.org/en-US/docs/Simple_Firefox_for_Android_build ============= 6603
configure 9
controller 3
doctor.py Disable the last access time feature? This improves the speed of file and directory access by deferring Last Access Time modification on disk by up to an hour. Backup programs that rely on this feature may be affected. https://technet.microsoft.com/en-us/library/cc785435.aspx 10933
dotproperties.py A thin representation of a key=value .properties file. 2653
export_telemetry_schema.py This script converts the build system telemetry schema from voluptuous format to json-schema. You should run it with `mach python`. 1310
faster_daemon.py Use pywatchman to watch source directories and perform partial |mach build faster| builds. 10771
frontend 8
gen_test_backend.py 1967
generated_sources.py Generate the SHA-512 digest of `data` and return it as a hex string. 2549
gn_processor.py # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. 23329
html_build_viewer.py Register a resource JSON file with the server. The file will be made available under the name/key specified. 3668
jar.py jarmaker.py provides a python class to package up chrome content by processing jar.mn files. See the documentation for jar.mn on MDC for further details on the format. 23403
mach_commands.py =================== PERFORMANCE WARNING Your machine experienced a lot of swap activity during the build. This is possibly a sign that your machine doesn't have enough physical memory or not enough available memory to perform the build. It's also possible some other system activity during the build is to blame. If you feel this message is not appropriate for your machine configuration, please file a Firefox Build System :: General bug at https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox%20Build%20System&component=General and tell us about your machine and build configuration so we can adjust the warning heuristic. =================== 68666
makeutil.py Provides an interface for writing simple makefiles Instances of this class are created, populated with rules, then written. 5810
moz_yaml.py --- # Third-Party Library Template # All fields are mandatory unless otherwise noted # Version of this schema schema: 1 bugzilla: # Bugzilla product and component for this directory and subdirectories product: product name component: component name # Document the source of externally hosted code origin: # Short name of the package/library name: name of the package description: short (one line) description # Full URL for the package's homepage/etc # Usually different from repository url url: package's homepage url # Human-readable identifier for this version/release # Generally "version NNN", "tag SSS", "bookmark SSS" release: identifier # The package's license, where possible using the mnemonic from # https://spdx.org/licenses/ # Multiple licenses can be specified (as a YAML list) # A "LICENSE" file must exist containing the full license text license: MPL-2.0 # Configuration for the automated vendoring system. # Files are always vendored into a directory structure that matches the source # repository, into the same directory as the moz.yaml file # optional vendoring: # Repository URL to vendor from # eg. https://github.com/kinetiknz/nestegg.git # Any repository host can be specified here, however initially we'll only # support automated vendoring from selected sources initiall. url: source url (generally repository clone url) # Revision to pull in # Must be a long or short commit SHA (long preferred) revision: sha # List of patch files to apply after vendoring. Applied in the order # specified, and alphabetically if globbing is used. Patches must apply # cleanly before changes are pushed # All patch files are implicitly added to the keep file list. # optional patches: - file - path/to/file - path/*.patch # List of files that are not deleted while vendoring # Implicitly contains "moz.yaml", any files referenced as patches # optional keep: - file - path/to/file - another/path - *.mozilla # Files/paths that will not be vendored from source repository # Implicitly contains ".git", and ".gitignore" # optional exclude: - file - path/to/file - another/path - docs - src/*.test # Files/paths that will always be vendored, even if they would # otherwise be excluded by "exclude". # optional include: - file - path/to/file - another/path - docs/LICENSE.* # If neither "exclude" or "include" are set, all files will be vendored # Files/paths in "include" will always be vendored, even if excluded # eg. excluding "docs/" then including "docs/LICENSE" will vendor just the # LICENSE file from the docs directory # All three file/path parameters ("keep", "exclude", and "include") support # filenames, directory names, and globs/wildcards. # In-tree scripts to be executed after vendoring but before pushing. # optional run_after: - script - another script 10022
mozconfig_loader 1041
mozconfig.py The MOZ_MYCONFIG environment variable to define the location of mozconfigs is deprecated. If you wish to define the mozconfig path via an environment variable, use MOZCONFIG instead. 17951
mozinfo.py Build a dict containing data about the build configuration from the environment. 5260
nodeutil.py Determines the possible paths for node executables. Returns a list of paths, which includes the build state directory. 4499
preprocessor.py This is a very primitive line based preprocessor, for times when using a C preprocessor isn't an option. It currently supports the following grammar for expressions, whitespace is ignored: expression : and_cond ( '||' expression ) ? ; and_cond: test ( '&&' and_cond ) ? ; test: unary ( ( '==' | '!=' ) unary ) ? ; unary : '!'? value ; value : [0-9]+ # integer | 'defined(' \w+ ')' | \w+ # string identifier or value; 28907
pythonutil.py Determine the version of a Python executable by invoking it. May raise ``subprocess.CalledProcessError`` or ``ValueError`` on failure. 3117
repackaging 6
resources 1
schedules.py Constants for SCHEDULES configuration in moz.build files and for skip-unless-schedules optimizations in task-graph generation. 2100
shellutil.py Parses a given command line string and creates a list of command and arguments, with wildcard expansion. 7303
sphinx.py Directive to insert mozbuild sandbox symbol information. 4637
telemetry.py This file contains a voluptuous schema definition for build system telemetry, and functions to fill an instance of that schema for a single mach invocation. 12243
test 29
testing.py Processes a "support-files" entry from a test object, either from a parsed object from a test manifests or its representation in moz.build and returns the installs to perform for this test object. Processing the same support files multiple times will not have any further effect, and the structure of the parsed objects from manifests will have a lot of repeated entries, so this class takes care of memoizing. 15068
util.py Wrapper around the exec statement to avoid bogus errors like: SyntaxError: unqualified exec is not allowed in function ... it is a nested function. or SyntaxError: unqualified exec is not allowed in function ... it contains a nested function with free variable which happen with older versions of python 2.7. 48648
vendor_aom.py Construct a url for a tarball snapshot of the given revision. 8735
vendor_dav1d.py Construct a url for a tarball snapshot of the given revision. 7206
vendor_manifest.py 592
vendor_python.py extract source distribution into vendor directory 5771
vendor_rust.py \ # This file contains vendoring instructions for cargo. # It was generated by `mach vendor rust`. # Please do not edit. {config} # Take advantage of the fact that cargo will treat lines starting with # # as comments to add preprocessing directives. This file can thus by copied # as-is to $topsrcdir/.cargo/config with no preprocessing to be used there # (for e.g. independent tasks building rust code), or be preprocessed by # the build system to produce a .cargo/config with the right content. #define REPLACE_NAME {replace_name} #define VENDORED_DIRECTORY {directory} # We explicitly exclude the following section when preprocessing because # it would overlap with the preprocessed [source."@REPLACE_NAME@"], and # cargo would fail. #ifndef REPLACE_NAME [source.{replace_name}] directory = "{directory}" #endif # Thankfully, @REPLACE_NAME@ is unlikely to be a legitimate source, so # cargo will ignore it when it's here verbatim. #filter substitution [source."@REPLACE_NAME@"] directory = "@top_srcdir@/@VENDORED_DIRECTORY@" 19877
virtualenv.py Please upgrade to the latest MozillaBuild development environment. See https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Windows_Prerequisites 26652