diff options
| author | Steven Knight <knight@baldmt.com> | 2003-01-06 18:42:37 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2003-01-06 18:42:37 (GMT) |
| commit | 7fbd5909a526fc1ad282c7e701b0f7832af2e3ed (patch) | |
| tree | 04f622a7b8fdab4ca337f20eced35b4d2699beb6 /src/engine/SCons/Node/FS.py | |
| parent | 6702e9dce5182eaa012da9dc511fcf85cf205049 (diff) | |
| download | SCons-7fbd5909a526fc1ad282c7e701b0f7832af2e3ed.zip SCons-7fbd5909a526fc1ad282c7e701b0f7832af2e3ed.tar.gz SCons-7fbd5909a526fc1ad282c7e701b0f7832af2e3ed.tar.bz2 | |
Refactor the Scanner interface to eliminate unnecessary scanning and make it easier to write efficient scanners.
Diffstat (limited to 'src/engine/SCons/Node/FS.py')
| -rw-r--r-- | src/engine/SCons/Node/FS.py | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index 826307b..aa7f973 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -790,6 +790,8 @@ class File(Entry): def _morph(self): """Turn a file system node into a File object.""" self.linked = 0 + self.scanner_paths = {} + self.found_includes = {} if not hasattr(self, '_local'): self._local = 0 @@ -856,11 +858,23 @@ class File(Entry): return self.dir.sconsign().get_implicit(self.name) def get_implicit_deps(self, env, scanner, target): - if scanner: - return scanner.scan(self, env, target) - else: + if not scanner: return [] - + + try: + path = target.scanner_paths[scanner] + except KeyError: + path = scanner.path(env, target.cwd) + target.scanner_paths[scanner] = path + + try: + includes = self.found_includes[path] + except KeyError: + includes = scanner(self, env, path) + self.found_includes[path] = includes + + return includes + def scanner_key(self): return os.path.splitext(self.name)[1] @@ -895,6 +909,7 @@ class File(Entry): def built(self): SCons.Node.Node.built(self) + self.found_includes = {} if hasattr(self, '_exists'): delattr(self, '_exists') if hasattr(self, '_rexists'): |
