summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorbradnelson@chromium.org <bradnelson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-04 20:08:47 +0000
committerbradnelson@chromium.org <bradnelson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-04 20:08:47 +0000
commit2ab24f976efe9f0c167afbf444177b860a2bb82f (patch)
treecd9a190154b0903193f04950f4942146ba2089f5 /tools
parent530f43f302f1eef9d3530767015891f1db1f1272 (diff)
downloadchromium_src-2ab24f976efe9f0c167afbf444177b860a2bb82f.zip
chromium_src-2ab24f976efe9f0c167afbf444177b860a2bb82f.tar.gz
chromium_src-2ab24f976efe9f0c167afbf444177b860a2bb82f.tar.bz2
Altering grit so that it clobbers all outputs even on windows.
Previously headers were handled differently only as an optimization. This thwarts vstudio + gyp. Adding a grit_info python stub so that gyp can get an accurate list of inputs and outputs from a grd file. Currently only using it for the inputs, because there's no good way in gyp to have rules invoke a !@( expansion once per rule instance. This change will over-specify dependencies for these modules, but it will at least not under-specify them anymore. BUG=24836 TEST=None Review URL: http://codereview.chromium.org/197007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25499 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools')
-rw-r--r--tools/grit/grit/tool/build.py15
-rwxr-xr-xtools/grit/grit_info.py90
2 files changed, 99 insertions, 6 deletions
diff --git a/tools/grit/grit/tool/build.py b/tools/grit/grit/tool/build.py
index e750b9b..1ba1b59 100644
--- a/tools/grit/grit/tool/build.py
+++ b/tools/grit/grit/tool/build.py
@@ -208,12 +208,15 @@ are exported to translation interchange files (e.g. XMB files), etc.
os.rename(output.GetOutputFilename() + '.tmp',
output.GetOutputFilename())
else:
- files_match = filecmp.cmp(output.GetOutputFilename(),
- output.GetOutputFilename() + '.tmp')
- if (output.GetType() != 'rc_header' or not files_match
- or sys.platform != 'win32'):
- shutil.copy2(output.GetOutputFilename() + '.tmp',
- output.GetOutputFilename())
+ # CHROMIUM SPECIFIC CHANGE.
+ # This clashes with gyp + vstudio, which expect the output timestamp
+ # to change on a rebuild, even if nothing has changed.
+ #files_match = filecmp.cmp(output.GetOutputFilename(),
+ # output.GetOutputFilename() + '.tmp')
+ #if (output.GetType() != 'rc_header' or not files_match
+ # or sys.platform != 'win32'):
+ shutil.copy2(output.GetOutputFilename() + '.tmp',
+ output.GetOutputFilename())
os.remove(output.GetOutputFilename() + '.tmp')
self.VerboseOut(' done.\n')
diff --git a/tools/grit/grit_info.py b/tools/grit/grit_info.py
new file mode 100755
index 0000000..116ace0
--- /dev/null
+++ b/tools/grit/grit_info.py
@@ -0,0 +1,90 @@
+#!/usr/bin/python
+# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+'''Tool to determine inputs and outputs of a grit file.
+'''
+
+import os
+import posixpath
+import types
+import sys
+from grit import grd_reader
+from grit import util
+
+
+def Outputs(filename):
+ grd = grd_reader.Parse(filename)
+
+ target = []
+ lang_folders = {}
+ # Add all explicitly-specified output files
+ for output in grd.GetOutputFiles():
+ path = output.GetFilename()
+ target.append(path)
+
+ if path.endswith('.h'):
+ path, filename = os.path.split(path)
+ if output.attrs['lang']:
+ lang_folders[output.attrs['lang']] = os.path.dirname(path)
+
+ # Add all generated files, once for each output language.
+ for node in grd:
+ if node.name == 'structure':
+ # TODO(joi) Should remove the "if sconsdep is true" thing as it is a
+ # hack - see grit/node/structure.py
+ if node.HasFileForLanguage() and node.attrs['sconsdep'] == 'true':
+ for lang in lang_folders:
+ path = node.FileForLanguage(lang, lang_folders[lang],
+ create_file=False,
+ return_if_not_generated=False)
+ if path:
+ target.append(path)
+
+ return [t.replace('\\', '/') for t in target]
+
+
+def Inputs(filename):
+ grd = grd_reader.Parse(filename, debug=False)
+ files = []
+ for node in grd:
+ if (node.name == 'structure' or node.name == 'skeleton' or
+ (node.name == 'file' and node.parent and
+ node.parent.name == 'translations')):
+ files.append(node.GetFilePath())
+ elif node.name == 'include':
+ # Only include files that we actually plan on using.
+ if node.SatisfiesOutputCondition():
+ files.append(node.FilenameToOpen())
+
+ # Add in the grit source files. If one of these change, we want to re-run
+ # grit.
+ grit_root_dir = os.path.dirname(__file__)
+ for root, dirs, filenames in os.walk(grit_root_dir):
+ grit_src = [os.path.join(root, f) for f in filenames if f.endswith('.py')]
+ files.extend(grit_src)
+
+ return [f.replace('\\', '/') for f in files]
+
+
+def main(argv):
+ if len(argv) >= 3 and argv[1] == '--inputs':
+ for f in argv[2:]:
+ inputs = Inputs(f)
+ # Include grd file as second input (works around gyp expecting it).
+ inputs = [inputs[0], f] + inputs[1:]
+ print '\n'.join(inputs)
+ return 0
+ if len(argv) >= 4 and argv[1] == '--outputs':
+ for f in argv[3:]:
+ outputs = [posixpath.join(argv[2], f) for f in Outputs(f)]
+ print '\n'.join(outputs)
+ return 0
+ print 'USAGE: ./grit_info.py --inputs <grd-files>..'
+ print ' ./grit_info.py --outputs <out-prefix> <grd-files>..'
+ return 1
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))