diff --git a/utils/add_copyright.py b/utils/add_copyright.py
index 63d725a..2d3f734 100755
--- a/utils/add_copyright.py
+++ b/utils/add_copyright.py
@@ -12,7 +12,8 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-"""Adds copyright notices to all the files that need them under the current directory.
+"""Adds copyright notices to all the files that need them under the
+current directory.
 
 usage: add_copyright.py [--check]
 
@@ -29,7 +30,7 @@
 import sys
 
 COPYRIGHTRE = re.compile(
-    'Copyright \d+ The Shaderc Authors. All rights reserved.')
+    r'Copyright \d+ The Shaderc Authors. All rights reserved.')
 COPYRIGHT = 'Copyright 2016 The Shaderc Authors. All rights reserved.'
 LICENSED = """
 Licensed under the Apache License, Version 2.0 (the "License");
@@ -46,7 +47,8 @@
 
 
 def find(top, filename_glob, skip_glob_list):
-    """Returns files in the tree rooted at top matching filename_glob but not in directories matching skip_glob_list."""
+    """Returns files in the tree rooted at top matching filename_glob but not
+    in directories matching skip_glob_list."""
 
     file_list = []
     for path, dirs, files in os.walk(top):
@@ -59,7 +61,8 @@
 
 
 def filtered_descendants(glob):
-    """Returns glob-matching filenames under the current directory, but skips some irrelevant paths."""
+    """Returns glob-matching filenames under the current directory, but skips
+    some irrelevant paths."""
     return find('.', glob, ['third_party', 'ext', 'build*', 'out*'])
 
 
diff --git a/utils/update_build_version.py b/utils/update_build_version.py
index e223646..fd600a1 100755
--- a/utils/update_build_version.py
+++ b/utils/update_build_version.py
@@ -17,7 +17,7 @@
 # Updates build-version.inc in the current directory, unless the update is
 # identical to the existing content.
 #
-# Args: <shaderc_dir> <spirv-tools_dir> <glslang_dir>
+# Args: <shaderc-dir> <spirv-tools-dir> <glslang-dir>
 #
 # For each directory, there will be a line in build-version.inc containing that
 # directory's "git describe" output enclosed in double quotes and appropriately
@@ -34,7 +34,7 @@
 OUTFILE = 'build-version.inc'
 
 
-def command_output(cmd, dir):
+def command_output(cmd, directory):
     """Runs a command in a directory and returns its standard output stream.
 
     Captures the standard error stream.
@@ -42,24 +42,24 @@
     Raises a RuntimeError if the command fails to launch or otherwise fails.
     """
     p = subprocess.Popen(cmd,
-                         cwd=dir,
+                         cwd=directory,
                          stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE)
     (stdout, _) = p.communicate()
     if p.returncode != 0:
-        raise RuntimeError('Failed to run %s in %s' % (cmd, dir))
+        raise RuntimeError('Failed to run {} in {}'.format(cmd, directory))
     return stdout
 
 
-def deduce_software_version(dir):
+def deduce_software_version(directory):
     """Returns a software version number parsed from the CHANGES file
-    in the given dir.
+    in the given directory.
 
     The CHANGES file describes most recent versions first.
     """
 
-    pattern = re.compile('(v\d+\.\d+(-dev)?) \d\d\d\d-\d\d-\d\d$')
-    changes_file = os.path.join(dir, 'CHANGES')
+    pattern = re.compile(r'(v\d+\.\d+(-dev)?) \d\d\d\d-\d\d-\d\d$')
+    changes_file = os.path.join(directory, 'CHANGES')
     with open(changes_file) as f:
         for line in f.readlines():
             match = pattern.match(line)
@@ -68,11 +68,11 @@
     raise Exception('No version number found in {}'.format(changes_file))
 
 
-def describe(dir):
+def describe(directory):
     """Returns a string describing the current Git HEAD version as descriptively
     as possible.
 
-    Runs 'git describe', or alternately 'git rev-parse HEAD', in dir.  If
+    Runs 'git describe', or alternately 'git rev-parse HEAD', in directory.  If
     successful, returns the output; otherwise returns 'unknown hash, <date>'."""
     try:
         # decode() is needed here for Python3 compatibility. In Python2,
@@ -80,30 +80,29 @@
         # Popen.communicate() returns a bytes instance, which needs to be
         # decoded into text data first in Python3. And this decode() won't
         # hurt Python2.
-        return command_output(['git', 'describe'], dir).rstrip().decode()
+        return command_output(['git', 'describe'], directory).rstrip().decode()
     except:
         try:
             return command_output(
-                ['git', 'rev-parse', 'HEAD'], dir).rstrip().decode()
+                ['git', 'rev-parse', 'HEAD'], directory).rstrip().decode()
         except:
             return 'unknown hash, ' + datetime.date.today().isoformat()
 
 
-def get_version_string(project, dir):
+def get_version_string(project, directory):
     """Returns a detailed version string for a given project with its directory,
     which consists of software version string and git description string."""
     detailed_version_string_lst = [project]
     if project != 'glslang':
-        detailed_version_string_lst.append(deduce_software_version(dir))
-    detailed_version_string_lst.append(describe(dir).replace('"', '\\"'))
+        detailed_version_string_lst.append(deduce_software_version(directory))
+    detailed_version_string_lst.append(describe(directory).replace('"', '\\"'))
     return ' '.join(detailed_version_string_lst)
 
 
 def main():
     if len(sys.argv) != 4:
-        print(
-            'usage: {0} <shaderc_dir> <spirv-tools_dir> <glslang_dir>'.format(
-                sys.argv[0]))
+        print('usage: {} <shaderc-dir> <spirv-tools-dir> <glslang-dir>'.format(
+            sys.argv[0]))
         sys.exit(1)
 
     projects = ['shaderc', 'spirv-tools', 'glslang']
