summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
Diffstat (limited to 'tool')
-rwxr-xr-xtool/update-deps22
1 files changed, 15 insertions, 7 deletions
diff --git a/tool/update-deps b/tool/update-deps
index e0067c8ac2..efd556aebe 100755
--- a/tool/update-deps
+++ b/tool/update-deps
@@ -327,21 +327,23 @@ end
def read_single_cc_deps(path_i, cwd)
files = {}
- path_i.each_line.with_index {|line, lineindex|
+ compiler_wd = nil
+ path_i.each_line {|line|
next if /\A\# \d+ "(.*)"/ !~ line
- files[$1] = lineindex
+ dep = $1
+ next if %r{\A<.*>\z} =~ dep # omit <command-line>, etc.
+ compiler_wd ||= dep
+ files[dep] = true
}
# gcc emits {# 1 "/absolute/directory/of/the/source/file//"} at 2nd line.
- compiler_wd = files.keys.find {|f| %r{\A/.*//\z} =~ f }
- if compiler_wd
+ if %r{\A/.*//\z} =~ compiler_wd
files.delete compiler_wd
compiler_wd = Pathname(compiler_wd.sub(%r{//\z}, ''))
- else
+ elsif !(compiler_wd = yield)
raise "compiler working directory not found: #{path_i}"
end
deps = []
files.each_key {|dep|
- next if %r{\A<.*>\z} =~ dep # omit <command-line>, etc.
dep = Pathname(dep)
if dep.relative?
dep = compiler_wd + dep
@@ -367,7 +369,13 @@ def read_cc_deps(cwd)
end
path_o = cwd + fn_o
path_i = cwd + fn_i
- deps[path_o] = read_single_cc_deps(path_i, cwd)
+ deps[path_o] = read_single_cc_deps(path_i, cwd) do
+ if fn_o.to_s.start_with?("enc/")
+ cwd
+ else
+ path_i.parent
+ end
+ end
}
deps
end