Commit Graph

17 Commits

Author SHA1 Message Date
Michael Vincent 2d14817f1f msvcdeps: Faster case correction
Visual Studio returns paths to dependencies with incorrect case.
ant_glob() is very slow for this use case (40~50% impact to overall
build time). This patch uses os.listdir() to find the correct case
of each path component.
2021-04-20 13:38:46 -05:00
Thomas Nagy a01652d3c2 Conceal gccdeps/msvcdeps errors on inaccessible/unreadable files 2020-06-25 00:55:46 +02:00
Thomas Nagy 8b6786623d gccdeps/msvcdeps: renaming a header must rebuild silently #2293 2020-06-20 00:45:10 +02:00
Michael Vincent f414602722 msvcdeps: Tweak debug output
Print out which source file waf is gathering dependencies for and leave
the leading spaces in the dependency debug output because it can be
helpful to see the dependency hierarchy.
2020-04-22 19:12:13 -05:00
Thomas Nagy 8cbc8da5ce
Undo parentheses escaping in ant_glob 2019-05-10 23:13:01 +02:00
Michael Vincent 9caad8c3ba msvcdeps: use ant_glob() to get correct case of include paths
When using msvcdeps, header dependencies are not detected reliably for
generated source files. The root cause is a bug in versions of MSVC
prior to VS2019 16.0 in which it emits lower-case path prefixes when
resolving include paths relative to the containing file. Absolute paths
and paths relative to include directories passed in the MSVC command
line are, in contrast, case-correct.

Such a file-relative include directive with an incorrect lower-case
prefix derails waf's node hash signature handling and fails silently.

This change uses ant_glob() with the ignorecase keyword argument to
find the file on the filesystem with the correct case. The prior
case-correction code has been superseded and was removed.

See the following Visual Studio bug report for details on the issue:
https://developercommunity.visualstudio.com/content/problem/233871/showincludes-lowercases-some-path-segments.html
2019-05-08 17:22:00 -05:00
Michael Vincent 7c362340af msvcdeps: remove path_to_node()'s path list support
Make path_to_node() only accept a path as a string instead of also as a
list. That requires joining the list of path components in the relative
path case before calling path_to_node(). Also use path.pop(0) to remove
the first path component instead of copying the remainder of the path
using a slice operator.
2019-05-08 17:22:00 -05:00
Michael Vincent 8b5a2a2086 msvcdeps: refactor cache lock
Rework how msvcdeps' cached_nodes lock is used so acquiring the lock is
only necessary on a cache miss. Also use a "with" context manager to
simplify management of the lock lifecycle.
2019-05-08 17:22:00 -05:00
Kevin Markussen cce984f77b msvcdeps: fix 'WafError' AttributeError
This patch corrects an error in the exec_response_command exception
handler which always assumed that the execution's stdout would be bound
to the the WafError exception object.

However, this assumption is only true when the execution completes with
a non-zero status code. For other exceptions, the stdout attribute is
not bound.

Now, when stdout is not available, the WafError msg will be used
instead.
2019-04-16 17:28:28 -05:00
Thomas Nagy e64467892c
Warn against loading gccdeps/msvcdeps options 2017-09-23 09:21:14 +02:00
Thomas Nagy 3e47e4250e
Display @argfile contents in msvcdeps #1831 2016-10-11 18:34:35 +02:00
Thomas Nagy 3c2c6a62b0
Remove leftover 'print' statements 2016-07-27 20:22:48 +02:00
Thomas Nagy 7aaa7c14ba
Make gccdeps and msvcdeps compatible - #1780 2016-07-26 19:41:57 +02:00
Thomas Nagy c916febaf7
Update some old code 2016-07-25 22:12:35 +02:00
Thomas Nagy 02a8361149
Beautify Logs.{debug,error,info,warn} now that the formatting bug is fixed 2016-05-28 16:18:51 +02:00
Thomas Nagy e9fd0660dc Undefined 'logger' variable 2013-07-16 21:00:02 +02:00
Matt Hoosier 1aad65b886 Add 'msvcdeps' tool
This tool operates similarly to 'gccdeps' by offloading the
flattening of the #include dependency tree to the compiler.

Change-Id: I5e58e8ca838f3d3dc65efa6ce4abf161110632ea

Signed-off-by: Thomas Nagy <tnagy2pow10@gmail.com>
2013-07-16 20:57:06 +02:00