summaryrefslogtreecommitdiffstats
path: root/site_scons/site_tools/replace_strings.py
diff options
context:
space:
mode:
authorbradnelson@chromium.org <bradnelson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-09 22:38:44 +0000
committerbradnelson@chromium.org <bradnelson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-09 22:38:44 +0000
commitfb9a9fa42b71367b1cda5ca444cf93a3ef74cd3b (patch)
treef610f8a9b7c2b4f96d28905c77d9c830ea50f800 /site_scons/site_tools/replace_strings.py
parent8b4b861f8ef2456c2c643032d78a17f6261fd234 (diff)
downloadchromium_src-fb9a9fa42b71367b1cda5ca444cf93a3ef74cd3b.zip
chromium_src-fb9a9fa42b71367b1cda5ca444cf93a3ef74cd3b.tar.gz
chromium_src-fb9a9fa42b71367b1cda5ca444cf93a3ef74cd3b.tar.bz2
Dropping in software construction toolkit.
Review URL: http://codereview.chromium.org/6329 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@3145 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'site_scons/site_tools/replace_strings.py')
-rw-r--r--site_scons/site_tools/replace_strings.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/site_scons/site_tools/replace_strings.py b/site_scons/site_tools/replace_strings.py
new file mode 100644
index 0000000..c31f685
--- /dev/null
+++ b/site_scons/site_tools/replace_strings.py
@@ -0,0 +1,81 @@
+#!/usr/bin/python2.4
+# Copyright 2008, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Search and replace builder for SCons."""
+
+
+import re
+import SCons.Script
+
+
+def ReplaceStrings(target, source, env):
+ """Replace Strings builder, does regex substitution on files.
+
+ Args:
+ target: A single target file node.
+ source: A single input file node.
+ env: Environment in which to build.
+
+ From env:
+ REPLACE_STRINGS: A list of pairs of regex search and replacement strings.
+ The body of the source file has substitution performed on each
+ pair (search_regex, replacement) in order.
+
+ Returns:
+ The target node, a file with contents from source, with the substitutions
+ from REPLACE_STRINGS performed on it.
+
+ For example:
+ env.ReplaceStrings('out', 'in',
+ REPLACE_STRINGS = [('a*', 'b'), ('b', 'CCC')])
+ With 'in' having contents: Haaapy.
+ Outputs: HCCCpy.
+ """
+ # Load text.
+ fh = open(source[0].abspath, 'rb')
+ text = fh.read()
+ fh.close()
+ # Do replacements.
+ for r in env['REPLACE_STRINGS']:
+ text = re.sub(r[0], r[1], text)
+ # Write it out.
+ fh = open(target[0].abspath, 'wb')
+ fh.write(text)
+ fh.close()
+
+
+def generate(env):
+ # NOTE: SCons requires the use of this name, which fails gpylint.
+ """SCons entry point for this tool."""
+
+ # Add the builder
+ act = SCons.Script.Action(ReplaceStrings, varlist=['REPLACE_STRINGS'])
+ bld = SCons.Script.Builder(action=act, single_source=True)
+ env.Append(BUILDERS={'ReplaceStrings': bld})