| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
Proposed/deps log write errors checking
|
| | |
|
| | |
|
|\ \
| | |
| | | |
Merge pull request #617.
|
| | |
| | |
| | |
| | |
| | | |
When a single output of an edge is dirty, the restat check should
leave all outputs of that edge dirty.
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In a normal dependency scan (see DependencyScan::RecomputeDirty) we mark
all outputs of an Edge as dirty if any of the outputs is dirty. This is
the correct behavior because if any output is dirty, we will run the
command for that Edge and that can touch any of the outputs of the Edge
and so all the outputs should be marked dirty.
When updating the dirty state of Node's for a restat check, we were not
applying this logic, instead only those outputs that were actually
"dirty" were marked dirty.
Before this patch, restat edges with multiple outputs caused not all
dependent edges to run.
|
|\ \
| | |
| | | |
Land the first two commits of pull request #608.
|
| | | |
|
|/ / |
|
|\ \
| | |
| | | |
Fix diagnostic formatting regression caused by adaa91a33eb2cf23b88.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Ninja regressed to include a location for every file on the include stack for
nested diagnostics, i.e. it would print:
input:1: include.ninja:1: expected path
Fix this so that it prints only the current file location, like it used to:
include.ninja:1: expected path
Also add a test for this.
|
|\ \ \
| |/ /
|/| | |
Add test for a manifest ending in the middle of a keyword.
|
|/ / |
|
|\ \
| | |
| | | |
Reuse ManifestParser::Load() in ManifestParser::ParseFileInclude().
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
Loads of included ninja files were covered by the ".ninja parse" in Parse()
further up the stack from the toplevel file, but the load of the toplevel
file wasn't counted. Fix that.
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
ParseFileInclude() was doing the work that Load() was doing. Instead, just
make it call Load().
Also, remove a FIXME about using ReadPath() in ParseFileInclude() -- it's
already being used. (The FIXME was added in the same commit that added the
call to ReadPath() -- 8a0c96075786c19 -- it probably should've been deleted
before that commit.)
Also, remove a `contents.resize(contents.size() + 10);`. It's not clear what
it's for, but if it was important then ManifestParser::ParseFileInclude()
would have needed that call too, and it didn't have it.
No intended behavior change.
|
|\ \
| | |
| | | |
Add a 'recompact' tool, which forces recompaction of the build and deps ...
|
| | |
| | |
| | |
| | | |
This is useful for performance comparisons between two build directories.
|
|\ \ \
| | | |
| | | | |
Mention pools in the discussion of ninja's toplevel declarations.
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
Improve error message for duplicate rules and unknown pools.
|
| | |/ /
| |/| |
| | | |
| | | |
| | | | |
Also add more tests for invalid manifests. According to gcov, these invalid
inputs weren't tested before.
|
| | | | |
|
|\ \ \ \
| |/ / /
|/| | | |
Fix murmur hash implementations to work on strict alignment architectures
|
|/ / /
| | |
| | |
| | | |
architectures like OpenBSD/mips64el and OpenBSD/hppa64.
|
|\ \ \
| | | |
| | | | |
Use fwrite to print whatever the subcommand wrote
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Subcommands can write things like UTF-16, which some terminals can
understand. printf() will interpret the null bytes as the end of the
string.
In particular, MSVC's assert() will print wide characters by default,
and I can't find a way to disable it, leading to clang assertion
failures looking like:
FAILED: ...clang.exe ...
Aninja: build stopped: subcommand failed.
With this fix, I get the desired:
FAILED: ...clang.exe ...
Assertion failed: SymbolMap...
ninja: build stopped: subcommand failed.
|
|\ \ \
| |_|/
|/| | |
Support Bitrig
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
|/ / |
|
|\ \
| | |
| | | |
Add stdlib.h include for atol().
|
| |/
| |
| |
| |
| | |
This attempts to fix issue #600. `man atol` claims that atol() is in
stdlib.h, which wasn't included yet.
|
|\ \
| |/
|/| |
Make sure to not write partial deps entries.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When two ninja instances run in parallel in the same build directory,
one instance could write a deps entry header and a few ids, and then the
other instance could write a file name in the middle of the deps header.
When ninja reads this deps log on the next run, it will deserialize the
file name as indices, which will cause an out-of-bounds read.
(This can happen if a user runs a "compile this file" that uses ninja to
compile the current buffer in an editor, and also does a full build in a
terminal at the same time for example.)
While running two ninja instances in parallel in the same build
directory isn't a good idea, it happens to mostly work in non-deps mode:
There's redundant edge execution, but nothing crashes. This is partially
because the command log is line-buffered and a single log entry only
consists of a single line.
This change makes sure that deps entries are always written in one go,
like command log entries currently are. Running two ninja binaries in
parallel on the same build directory still isn't a great idea, but it's
less likely to lead to crashes.
See issue #595.
|
|\
| |
| | |
Add a test for CreatePhonyInEdge() in depsmode path.
|
|/
|
|
|
|
| |
Removing the `CreatePhonyInEdge(node);` line in
`ImplicitDepLoader::LoadDepsFromLog()` made no tests fail before this change.
The new test is a port to depsmode of the existing DepFileOK test.
|
|\
| |
| | |
Add test that proves `node->AddOutEdge(edge);` in `LoadDepFile()` is nee...
|
|/
|
|
| |
No functionality change. Related to issue #590.
|
|\
| |
| | |
Fix restat builds with edges generating headers depended on through deps...
|
|/
|
|
|
|
|
|
|
|
|
|
|
| |
in deps mode.
`ImplicitDepLoader::LoadDepFile()` already adds a depfile edge from every file
mentioned in a depfile to the depfile's output.
`ImplicitDepLoader::LoadDepsFromLog()` didn't do this yet, so add it. Else,
if a restat rule clears a generated .h file, this wouldn't propagate to cc files
depending on that .h file through a depfile.
Fixues issue #590.
|
|\
| |
| | |
Stop `-t msvc -o` from lowercasing paths from /showIncludes output.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
/showIncludes prints absolute paths. If a source file says
`#include <WiNdOwS.h>`, /showIncludes will use that spelling in
its output for the basename and use the on-disk cache for the
directory names in the rest for its output.
This makes the .d files created by `-t msvc -o` consistent with the
.d files written by gcc and clang.
Before this change, `-t msvc -o` would convert this output to
lower case. This is a problem if a build step produces a header file
with mixed case, such as "RuntimeFeatures.h". Due to the lowercasing,
the .d file would contain "runtimefeatures.h", while the build step
will create "RuntimeFeatures.h". Due to the case difference, ninja
would not realize that regeneration of the .h file would require
a rebuild of all source files having the header in the .d file.
(On the next build, ninja would rebuild them since stat()ing is not
case-sensitive on Windows.) One possible fix for this is to make sure
that generators always write generated header files in lower case too,
but on Mac gcc doesn't do lower-casing and .d files end up with the
case-as-written, so generators would have to be different on Mac and
Windows, which is undesirable.
If case-insensitve path comparisons are useful, they should be done
somewhere else (e.g. in CanonicalizePath()) where they affect both
paths read from .d files and paths read from .ninja files. This should
then be controlled by a top-level variable.
This patch changes behavior, but it only has an effect on generated
header files, which aren't common, and it only affects -t msvc, which
is still marked as experimental. (cmake doesn't use it yet.)
(If a file has both `#include <windows.h>` and `<Windows.h>`, this
will now take 2 stat() calls instead of just one, but that should
have a negligible cost.)
|
|\
| |
| | |
Build fails on Debian/kfreebsd
|
| | |
|
|\ \
| |/
|/| |
Fix mingw based builds. Fixes #587
|
|/ |
|