summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Add jhasse's suggestion to suppress output on '--quiet'.Eli Ribble2021-05-061-1/+1
| | | | | This just ensures that we also don't get the "Entering directory..." message when the new '--quiet' flag is added.
* Update help description for --quietHenner Zeller2021-05-061-1/+1
| | | | Signed-off-by: Henner Zeller <h.zeller@acm.org>
* Add --quiet option that suppresses status updates.Henner Zeller2021-05-063-3/+10
| | | | | | Refined pull request after discussion in #1816 Signed-off-by: Henner Zeller <h.zeller@acm.org>
* Avoid implicit cast LoadStatus -> boolJan Niklas Hasse2021-04-091-3/+2
|
* Fix misleading usage of return type of Open*LogJan Niklas Hasse2021-04-091-4/+4
| | | | | In an earlier version of 791c887e22046e5e7a2d05ecb5ff27701d56895d those functions returned LoadStatus, too, but it was changed back to bool.
* dyndep: reconcile dyndep-specified outputs with depfile-specified inputsBrad King2021-03-244-5/+55
| | | | | | | | | When a path loaded from a depfile does not have a node, we create a new node with a phony edge producing it. If we later load a dyndep file that specifies the same node as an output of a known edge, we previously failed with a "multiple rules generate ..." error. Instead, since the conflicting edge was internally generated, replace the node's input edge with the now-known real edge that produces it.
* dyndep: add dedicated test for dyndep-discovered implicit dependenciesBrad King2021-03-241-0/+31
| | | | Previously this was covered only as part of more complex tests.
* Add some regression tests for additional test casesJohn Drouhard2021-03-241-0/+186
| | | | | | | These expose some behavior related to implicit deps unknown to ninja and timestamps with generating them as part of a rule. See discussions in #1932 and #1933.
* Revert "Change build log to always log the most recent input mtime"John Drouhard2021-03-246-226/+74
| | | | | | | | | | This reverts commit 67fbbeeec91ec171da7d4e297b8f9b319f3424c8. There were a few missing test cases exposed by CMake's test suite that need slight adjustments. Better to revert the original attempt, add the test cases, and then re-land the change with the fixes. Fixes #1932
* Remove `-w dupbuild` from error message and help outputJan Niklas Hasse2021-03-203-10/+7
| | | | This is step 4 on #931.
* Change build log to always log the most recent input mtimeJohn Drouhard2021-03-166-74/+226
| | | | | | | | | | | | | | | | | | | | | | | | If an edge's output files' mtimes are compared to the most recent input's mtime, edges might be calculated as clean even if they are actually dirty. While an edge's command is running its rule to produce its outputs and an input to the edge is updated before the outputs are written to disk, then subsequent runs will think that the outputs are newer than the inputs, even though the inputs have actually been updated and may be different than what were used to produce those outputs. Ninja will now restat all inputs just prior to running an edge's command and remember the most recent input mtime. When the command completes, it will stat any discovered dependencies from dep files (if necessary), recalculate the most recent input mtime, and log it to the build log file. On subsequent runs, ninja will use this value to compare to the edge's most recent input's mtime to determine whether the outputs are dirty. This extends the methodology used by restat rules to work in all cases. Restat rules are still unique in that they will clean the edge's output nodes recursively if the edge's command did not change the output, but in all cases, the mtime recorded in the log file is now the most recent input mtime. See the new tests for more clarification.
* wincodepage: minimize to indicate UTF-8 or notBrad King2021-03-011-3/+2
| | | | | | | | | The ANSI code page identifier is more information than generator programs actually need. The encoding of `build.ninja` is always either UTF-8 or the system-wide ANSI code page. Reduce the output to provide no more information than the generator programs need. The Console code page can be obtained in other ways, so drop it.
* Add tool to print code page information on WindowsBrad King2021-02-261-0/+17
| | | | | | | | | | | | Since commit 00459e2b (Use UTF-8 on Windows 10 Version 1903, fix #1195, 2021-02-17), `ninja` does not always expect `build.ninja` to be encoded in the system's ANSI code page. The expected encoding now depends on how `ninja` is built and the version of Windows on which it is running. Add a `-t wincodepage` tool that generators can use to ask `ninja` what encoding it expects. Issue: #1195
* Merge pull request #1331 from ilor/missingdeps3Jan Niklas Hasse2021-02-236-5/+478
|\ | | | | missingdeps tool, take 2
| * missingdeps: use nested maps for edge adjacency cacheTomasz Śniatowski2021-02-222-34/+15
| | | | | | | | | | | | In my tests, nested maps outperform a large map of pairs by 10-20% on a sample Chromium missingdeps run, and are arguably simpler due to fewer ifdefs needed.
| * missingdeps: add exception for targets that dep on build.ninjaTomasz Śniatowski2021-02-221-0/+8
| | | | | | | | A "missing dep path" to build.ninja is a false positive, skip reporting it.
| * Add a -t missingdeps tool to detect some classes of build flakesTomasz Śniatowski2021-02-224-1/+474
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The tool looks for targets that depend on a generated file, but do not properly specify a dependency on the generator. It needs to be run after a successful build, and will list all potential flakes that may have broken the build, but didn't due to accidental build step ordering. The search relies on the correctness of depfile and generator output information, but these are usually easier to get right than dependencies. The errors found can usually be verified as actual build flakes by trying to build the listed problematic files alone in a clean build directory. Such builds usually fail with a compile job lacking a generated file. There is some overlap between this tool and 'gn check', but not everyone uses gn, not everyone using gn uses gn check, and most importantly, gn check is more about modularity, and less about actual build-time deps without flakes. The tool needs to be run after a build completes and depfile data is collected. It may take several seconds to process, up to a dozen or two on a large, chromium-sized build.
| * Refactor depfile loading in preparation for the missingdeps toolTomasz Śniatowski2021-02-222-4/+15
| | | | | | | | | | Extract an usable helper to load depfile dependencies without adding them to the graph.
* | Merge pull request #1915 from jhasse/windows-utf8Jan Niklas Hasse2021-02-231-15/+20
|\ \ | | | | | | Use UTF-8 on Windows 10 Version 1903, fix #1195
| * | Use UTF-8 on Windows 10 Version 1903, fix #1195Jan Niklas Hasse2021-02-171-15/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allows Ninja to use descriptions, filenames and environment variables with characters outside of the ANSI codepage on Windows. Build manifests are now UTF-8 by default (this change needs to be emphasized in the release notes). WriteConsoleOutput doesn't support UTF-8, but it's deprecated on newer Windows 10 versions anyway (or as Microsoft likes to put it: "no longer a part of our ecosystem roadmap"). We'll use the VT100 sequence just as we do on Linux and macOS. https://docs.microsoft.com/en-us/windows/uwp/design/globalizing/use-utf8-code-page https://docs.microsoft.com/en-us/windows/console/writeconsoleoutput https://docs.microsoft.com/de-de/windows/console/console-virtual-terminal-sequences
* | | Merge pull request #1899 from colincross/status_for_serializeJan Niklas Hasse2021-02-229-393/+531
|\ \ \ | |/ / |/| | Status changes to support frontends
| * | Put builder output through status interfaceColin Cross2021-02-056-15/+76
| | | | | | | | | | | | | | | | | | Send all output after manifest parsing is finished to the Status interface, so that when status frontends are added they can handle build messages.
| * | Turn BuildStatus into an interfaceColin Cross2020-12-187-327/+426
| | | | | | | | | | | | | | | | | | Make BuildStatus an abstract interface, and move the current implementation to StatusPrinter, to make way for a serialized Status output.
| * | Simplify running edges statusColin Cross2020-12-183-25/+21
| | | | | | | | | | | | | | | | | | | | | Store the number of running edges instead of trying to compute it from the started and finshed edge counts, which may be different for starting and ending status messages. Allows removing the status parameter to PrintStatus and the EdgeStatus enum.
| * | Move edge time from Status to BuilderColin Cross2020-12-184-98/+80
| | | | | | | | | | | | | | | | | | | | | | | | The times that end up in the build log currently originate in the status printer, and are propagated back out to the Builder. Move the edge times into the Builder instead, and move the overall start time into NinjaMain so it doesn't get reset during manifest rebuilds.
* | | disk_interface: Restore toleration of missing files in RemoveFile on WindowsBrad King2021-02-121-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | Revise the logic from commit 2d7f7e55 (Delete read-only files on Windows, too, 2020-12-07) to check if `GetFileAttributes` or `DeleteFile` failed due either variant of the file/path-not-found error. Issue: #1886
* | | disk_interface: Do not query bits of INVALID_FILE_ATTRIBUTESBrad King2021-02-121-5/+5
| | |
* | | disk_interface: Improve wrapping of comment in RemoveFileBrad King2021-02-121-3/+3
| |/ |/|
* | Merge pull request #1892 from jhasse/windows-readonlyJan Niklas Hasse2021-02-102-2/+25
|\ \ | | | | | | Delete read-only files on Windows, too
| * | Delete read-only files on Windows, tooJan Niklas Hasse2020-12-072-2/+25
| |/ | | | | | | Fixes main complaint of #1886.
* | Add Haiku support.Augustin Cavalier2021-01-281-0/+4
| |
* | Merge pull request #1674 from cameron314/bugfix/core-countJan Niklas Hasse2021-01-011-0/+29
|\ \ | |/ |/| Fixed processor count detection on Windows
| * Added preprocessor if to clarify processor count workaround code is only ↵Cameron2020-12-311-1/+2
| | | | | | | | needed on 32-bit builds (following code review)
| * Tweaks following code reviewCameron2020-06-101-4/+3
| |
| * Style changes following code reviewCameron Desrochers2019-11-201-4/+8
| |
| * Removed unnecessary #ifdef following code reviewCameron Desrochers2019-11-131-2/+1
| |
| * Use symbolic constant as suggested in code reviewCameron2019-11-131-1/+1
| | | | | | Co-Authored-By: Takuto Ikuta <atetubou@gmail.com>
| * Fixed processor count detection on Windows when multiple processor groups ↵Cameron Desrochers2019-11-121-0/+26
| | | | | | | | (i.e. >64 processors) are present
* | Merge pull request #1791 from neheb/expJan Niklas Hasse2020-12-062-5/+4
|\ \ | | | | | | [clang-tidy] add explicit to single argument constructors
| * | [clang-tidy] add explicit to single argument constructorsRosen Penev2020-12-062-5/+4
| | | | | | | | | | | | | | | | | | Found with google-explicit-constructor Signed-off-by: Rosen Penev <rosenp@gmail.com>
* | | Merge pull request #1790 from neheb/boolJan Niklas Hasse2020-12-061-4/+1
|\ \ \ | | | | | | | | [clang-tidy] simplify boolean expression
| * | | [clang-tidy] simplify boolean expressionRosen Penev2020-12-051-4/+1
| |/ / | | | | | | | | | | | | | | | Found with readability-simplify-boolean-expr Signed-off-by: Rosen Penev <rosenp@gmail.com>
* | | Merge pull request #1866 from jhasse/unique-edge-idsJan Niklas Hasse2020-12-037-23/+34
|\ \ \ | | | | | | | | Add unique IDs to edges
| * | | Add unique IDs to edgesColin Cross2020-10-307-23/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Edges are nominally ordered by order in the build manifest, but in fact are ordered by memory address. In most cases the memory address will be monontonically increasing. Since serialized build output will need unique IDs, add a monotonically increasing ID to edges, and use that for sorting instead of memory address.
* | | | [clang-tidy] fix inconsistent declarationsRosen Penev2020-12-022-7/+7
| |/ / |/| | | | | | | | | | | | | | Found with readability-inconsistent-declaration-parameter-name Signed-off-by: Rosen Penev <rosenp@gmail.com>
* | | Add FreeBSD support to GetProcessorCountMateusz Guzik2020-11-301-1/+12
| | |
* | | mark this 1.10.2.gitJan Niklas Hasse2020-11-281-1/+1
| | |
* | | Merge pull request #1879 from kadler/aix-cleanupJan Niklas Hasse2020-11-141-0/+3
|\ \ \ | | | | | | | | Fix building on AIX
| * | | Use internal getopt for IBM i and AIXKevin Adler2020-11-131-0/+3
| | | |
* | | | Fix buffer overread in hash_collision_benchmark.ccKevin Adler2020-11-131-1/+2
|/ / / | | | | | | | | | | | | | | | | | | The randomly generated command strings are not null-terminated and implicitly converted to StringPiece objects, which will use strlen to determine how long the passed `char*` is. Without the null terminator, this results in undefined behavior and regularly causes crashes on AIX.