summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Kravets <me@ikravets.com>2018-11-19 19:55:31 (GMT)
committerIvan Kravets <me@ikravets.com>2018-11-19 19:55:31 (GMT)
commit1ec74bcc6f5a17217cfa7067a18d172ed224b876 (patch)
tree7fa72e9defffa892f142d63cc7049599aac3406d
parent0f1caa4447b46c51c526e411e90fb57b379a7971 (diff)
downloadSCons-1ec74bcc6f5a17217cfa7067a18d172ed224b876.zip
SCons-1ec74bcc6f5a17217cfa7067a18d172ed224b876.tar.gz
SCons-1ec74bcc6f5a17217cfa7067a18d172ed224b876.tar.bz2
Remember known CPPPATH for dependencies
-rw-r--r--src/engine/SCons/Scanner/C.py18
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: