Index: tools/gcmole/gcmole.lua |
diff --git a/tools/gcmole/gcmole.lua b/tools/gcmole/gcmole.lua |
index bdbdf36a416c6a5f62a184cc2844bb242ca6cc88..42cb2e370bd9cbf1476157c5055231989cf00920 100644 |
--- a/tools/gcmole/gcmole.lua |
+++ b/tools/gcmole/gcmole.lua |
@@ -183,6 +183,7 @@ end |
------------------------------------------------------------------------------- |
-- GYP file parsing |
+-- TODO(machenbach): Remove this when deprecating gyp. |
local function ParseGYPFile() |
local result = {} |
local gyp_files = { |
@@ -209,6 +210,32 @@ local function ParseGYPFile() |
return result |
end |
+local function ParseGNFile() |
+ local result = {} |
+ local gn_files = { |
+ { "BUILD.gn", '"([^"]-%.cc)"', "" }, |
+ { "test/cctest/BUILD.gn", '"(test-[^"]-%.cc)"', "test/cctest/" } |
+ } |
+ |
+ for i = 1, #gn_files do |
+ local filename = gn_files[i][1] |
+ local pattern = gn_files[i][2] |
+ local prefix = gn_files[i][3] |
+ local gn_file = assert(io.open(filename), "failed to open GN file") |
+ local gn = gn_file:read('*a') |
+ for condition, sources in |
+ gn:gmatch "### gcmole%((.-)%) ###(.-)%]" do |
+ if result[condition] == nil then result[condition] = {} end |
+ for file in sources:gmatch(pattern) do |
+ table.insert(result[condition], prefix .. file) |
+ end |
+ end |
+ gn_file:close() |
+ end |
+ |
+ return result |
+end |
+ |
local function EvaluateCondition(cond, props) |
if cond == 'all' then return true end |
@@ -230,13 +257,40 @@ local function BuildFileList(sources, props) |
return list |
end |
-local sources = ParseGYPFile() |
+ |
+local gyp_sources = ParseGYPFile() |
+local gn_sources = ParseGNFile() |
+ |
+-- TODO(machenbach): Remove this comparison logic when deprecating gyp. |
+local function CompareSources(sources1, sources2, what) |
+ for condition, files1 in pairs(sources1) do |
+ local files2 = sources2[condition] |
+ assert( |
+ files2 ~= nil, |
+ "Missing gcmole condition in " .. what .. ": " .. condition) |
+ |
+ -- Turn into set for speed. |
+ files2_set = {} |
+ for i, file in pairs(files2) do files2_set[file] = true end |
+ |
+ for i, file in pairs(files1) do |
+ assert( |
+ files2_set[file] ~= nil, |
+ "Missing file " .. file .. " in " .. what .. " for condition " .. |
+ condition) |
+ end |
+ end |
+end |
+ |
+CompareSources(gyp_sources, gn_sources, "GN") |
+CompareSources(gn_sources, gyp_sources, "GYP") |
+ |
local function FilesForArch(arch) |
- return BuildFileList(sources, { os = 'linux', |
- arch = arch, |
- mode = 'debug', |
- simulator = ''}) |
+ return BuildFileList(gn_sources, { os = 'linux', |
+ arch = arch, |
+ mode = 'debug', |
+ simulator = ''}) |
end |
local mtConfig = {} |