gecko/python/mozbuild
Gregory Szorc 8e72b6e44d Bug 848530 - Check for moz.build traversal at top of build; r=glandium
One of the first actions an invoked Makefile now does is check to see if
*any* moz.build file or Makefile.in is out of date. If so, config.status
is executed to rebuild the build backend.

Since we always perform this check as part of a build, we no longer need
special handling for out of date moz.build files during traversals. This
results in the removal of a significant amount of code!

Another upside of the change is that if a moz.build file is modified
during building, we don't (potentially) modify the build backend from
under the in-progress build. Thus the only race condition that remains
is if a moz.build is mutated during moz.build reading. This window (a
few seconds) is significantly shorter than the time of a full build
(minutes).

This patch should also enable us to remove empty Makefile.in files
without requiring a clobber.
2013-05-17 10:54:56 -07:00
..
dumbmake Bug 677452 - Add smartmake-like functionality to |mach build DIR|. r=gps 2013-05-01 15:36:05 -07:00
mozbuild Bug 848530 - Check for moz.build traversal at top of build; r=glandium 2013-05-17 10:54:56 -07:00
mozpack Bug 871080 - Send chrome manifest entries first to package formatters, before e.g. resource manifest entries. r=gps 2013-05-15 19:22:46 +02:00
README.rst Bug 784841 - Part 7: Implement recursive make backend; r=ted 2013-01-29 06:24:24 -08:00
setup.py Bug 780561 - Import new packager code. r=gps 2013-01-23 11:23:14 +01:00
TODO Bug 784841 - Part 2: Implement sandboxing for Python build files; r=ted,glandium 2013-01-15 22:21:21 -08:00

========
mozbuild
========

mozbuild is a Python package providing functionality used by Mozilla's
build system.

Modules Overview
================

* mozbuild.backend -- Functionality for producing and interacting with build
  backends. A build backend is an entity that consumes build system metadata
  (from mozbuild.frontend) and does something useful with it (typically writing
  out files that can be used by a build tool to build the tree).
* mozbuild.compilation -- Functionality related to compiling. This
  includes managing compiler warnings.
* mozbuild.frontend -- Functionality for reading build frontend files
  (what defines the build system) and converting them to data structures
  which are fed into build backends to produce backend configurations.
* mozpack -- Functionality related to packaging builds.

Overview
========

The build system consists of frontend files that define what to do. They
say things like "compile X" "copy Y."

The mozbuild.frontend package contains code for reading these frontend
files and converting them to static data structures. The set of produced
static data structures for the tree constitute the current build
configuration.

There exist entities called build backends. From a high level, build
backends consume the build configuration and do something with it. They
typically produce tool-specific files such as make files which can be used
to build the tree.

Piecing it all together, we have frontend files that are parsed into data
structures. These data structures are fed into a build backend. The output
from build backends is used by builders to build the tree.