diff options
author | Ivan Kravets <me@ikravets.com> | 2018-11-19 19:55:31 (GMT) |
---|---|---|
committer | Ivan Kravets <me@ikravets.com> | 2018-11-19 19:55:31 (GMT) |
commit | 1ec74bcc6f5a17217cfa7067a18d172ed224b876 (patch) | |
tree | 7fa72e9defffa892f142d63cc7049599aac3406d | |
parent | 0f1caa4447b46c51c526e411e90fb57b379a7971 (diff) | |
download | SCons-1ec74bcc6f5a17217cfa7067a18d172ed224b876.zip SCons-1ec74bcc6f5a17217cfa7067a18d172ed224b876.tar.gz SCons-1ec74bcc6f5a17217cfa7067a18d172ed224b876.tar.bz2 |
Remember known CPPPATH for dependencies
-rw-r--r-- | src/engine/SCons/Scanner/C.py | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/engine/SCons/Scanner/C.py b/src/engine/SCons/Scanner/C.py index bd75bc9..ede74b9 100644 --- a/src/engine/SCons/Scanner/C.py +++ b/src/engine/SCons/Scanner/C.py @@ -29,6 +29,7 @@ This module implements the dependency scanner for C/C++ code. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" + import SCons.Node.FS import SCons.Scanner import SCons.Util @@ -46,16 +47,25 @@ class SConsCPPScanner(SCons.cpp.PreProcessor): def __init__(self, *args, **kw): SCons.cpp.PreProcessor.__init__(self, *args, **kw) self.missing = [] + self._known_paths = tuple() + def initialize_result(self, fname): self.result = SCons.Util.UniqueList([fname]) - def finalize_result(self, fname): - return self.result[1:] + def find_include_file(self, t): keyword, quote, fname = t - result = SCons.Node.FS.find_file(fname, self.searchpath[quote]) - if not result: + result = SCons.Node.FS.find_file( + fname, self._known_paths + self.searchpath[quote]) + if result: + result_path = result.get_abspath() + for p in self.searchpath[quote]: + if result_path.startswith(p.get_abspath()): + self._known_paths.add(p) + break + else: self.missing.append((fname, self.current_file)) return result + def read_file(self, file): try: with open(str(file.rfile())) as fp: |