New features
- The
targets
subtool is now implemented. This subtool prints targets built by the project, either by rule name or depth from the final outputs. - The
compdb
subtool is now implement. This subtool dumps a JSON compilation database, as specified in https://clang.llvm.org/docs/JSONCompilationDatabase.html, and allows integration with some IDEs and build tools. - The
NINJA_STATUS
environment variable is now honored, allowing control over what information is included in the status line. - The
-l
flag (scheduling based on load average) is now ignored for compatibility with ninja.
Bug fixes
- When a job specified
depfile
anddeps
, but did not actually write thedepfile
(for example, D compilers with meson), we now write an empty dependency record to.ninja_deps
. This matches ninja's behavior and prevents unwanted rebuilds. - When the manifest is dirty, but a
restat = 1
action causes the manifest rebuild to be pruned, we now continue with the build. This prevents a manifest rebuild loop in these cases (for example with cmake using glob patterns), since the manifest is always dirty after reloading.
Cleanups
- When no
default
line is present inbuild.ninja
, we previously scheduled all targets for building rather than just the root targets (those with no dependents). This makes no difference is practice since we need to build all dependencies before a target anyway, but this was changed in order to implement thetargets
subtool. - We now do a better job at freeing memory when the manifest is rebuilt.
- Some code style inconsistencies were fixed.
Acknowledgements
This release involved the help of a number of people who reported bugs and implemented features. Thanks to Brian Callahan, Daan De Meyer, Ethan Sommer, Rasmus Thomsen, Simon Zeni, and @angularorbit for your contributions!