Properly substitute variables that reference paths outside SRCDIR.
Apply the same kind of trick added in r58 and use a define's base name if it
refers to a location outside SRCDIR; so far, GritNode::AssignFirstIds() would
parse a file name differently than _ReadFirstIdsFromFile() even though they
refer to the same entry.
TEST=in Chromium, make BUILDTYPE=Release builddir_name=/outside/srcdir/out tracing_resources
R=joi@chromium.org
Landing for original author raphael.kubo.da.costa@intel.com,
https://codereview.chromium.org/69463002/
Review URL: https://codereview.chromium.org/68163013
git-svn-id: http://grit-i18n.googlecode.com/svn/trunk@138 7262f16d-afe8-6277-6482-052fa10e57b1
diff --git a/grit/node/misc.py b/grit/node/misc.py
index 734c57a..345081f 100755
--- a/grit/node/misc.py
+++ b/grit/node/misc.py
@@ -49,7 +49,6 @@
def ReplaceVariable(matchobj):
for key, value in defines.iteritems():
if matchobj.group(1) == key:
- value = os.path.abspath(value)[len(src_root_dir) + 1:]
return value
return ''
@@ -58,7 +57,12 @@
new_grd_filename = re.sub(r'<\(([A-Za-z_]+)\)', ReplaceVariable,
grd_filename)
if new_grd_filename != grd_filename:
- new_grd_filename = new_grd_filename.replace('\\', '/')
+ abs_grd_filename = os.path.abspath(new_grd_filename)
+ if abs_grd_filename[:len(src_root_dir)] != src_root_dir:
+ new_grd_filename = os.path.basename(abs_grd_filename)
+ else:
+ new_grd_filename = abs_grd_filename[len(src_root_dir) + 1:]
+ new_grd_filename = new_grd_filename.replace('\\', '/')
renames.append((grd_filename, new_grd_filename))
for grd_filename, new_grd_filename in renames:
diff --git a/grit/node/misc_unittest.py b/grit/node/misc_unittest.py
index 496d153..b353edb 100644
--- a/grit/node/misc_unittest.py
+++ b/grit/node/misc_unittest.py
@@ -46,6 +46,12 @@
self.assertEqual({},
id_dict.get('out/Release/obj/gen/devtools/devtools.grd', None))
+ src_dir, id_dict = misc._ReadFirstIdsFromFile(
+ test_resource_ids,
+ {
+ 'SHARED_INTERMEDIATE_DIR': '/outside/src_dir',
+ })
+ self.assertEqual({}, id_dict.get('devtools.grd', None))
class IfNodeUnittest(unittest.TestCase):
def testIffyness(self):