diff --git a/Lib/distutils/archive_util.py b/Lib/distutils/archive_util.py
index d5b3096..55babe6 100644
--- a/Lib/distutils/archive_util.py
+++ b/Lib/distutils/archive_util.py
@@ -68,7 +68,7 @@
         import zipfile
     except ImportError:
         zipfile = None
-        
+
     zip_filename = base_name + ".zip"
     mkpath(os.path.dirname(zip_filename), dry_run=dry_run)
 
@@ -79,7 +79,7 @@
             zipoptions = "-r"
         else:
             zipoptions = "-rq"
-        
+
         try:
             spawn(["zip", zipoptions, zip_filename, base_dir],
                   dry_run=dry_run)
diff --git a/Lib/distutils/bcppcompiler.py b/Lib/distutils/bcppcompiler.py
index b0360a2..f995e36 100644
--- a/Lib/distutils/bcppcompiler.py
+++ b/Lib/distutils/bcppcompiler.py
@@ -85,7 +85,7 @@
     def compile(self, sources,
                 output_dir=None, macros=None, include_dirs=None, debug=0,
                 extra_preargs=None, extra_postargs=None, depends=None):
-        
+
         macros, objects, extra_postargs, pp_opts, build = \
                 self._setup_compile(output_dir, macros, include_dirs, sources,
                                     depends, extra_postargs)
diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py
index ebd93c2..a3b1ffa 100644
--- a/Lib/distutils/ccompiler.py
+++ b/Lib/distutils/ccompiler.py
@@ -685,7 +685,7 @@
 
         # A concrete compiler class can either override this method
         # entirely or implement _compile().
-        
+
         macros, objects, extra_postargs, pp_opts, build = \
                 self._setup_compile(output_dir, macros, include_dirs, sources,
                                     depends, extra_postargs)
@@ -703,7 +703,7 @@
 
     def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
         """Compile 'src' to product 'obj'."""
-        
+
         # A concrete compiler class that does not override compile()
         # should implement _compile().
         pass
diff --git a/Lib/distutils/cmd.py b/Lib/distutils/cmd.py
index 9362410..be8e826 100644
--- a/Lib/distutils/cmd.py
+++ b/Lib/distutils/cmd.py
@@ -79,7 +79,7 @@
         # verbose is largely ignored, but needs to be set for
         # backwards compatibility (I think)?
         self.verbose = dist.verbose
-        
+
         # Some commands define a 'self.force' option to ignore file
         # timestamps, but methods defined *here* assume that
         # 'self.force' exists for all commands.  So define it here
@@ -100,7 +100,7 @@
 
 
     # XXX A more explicit way to customize dry_run would be better.
-    
+
     def __getattr__ (self, attr):
         if attr == 'dry_run':
             myval = getattr(self, "_" + attr)
diff --git a/Lib/distutils/command/bdist.py b/Lib/distutils/command/bdist.py
index 7c606ff..4eca9c3 100644
--- a/Lib/distutils/command/bdist.py
+++ b/Lib/distutils/command/bdist.py
@@ -78,7 +78,7 @@
                        'wininst': ('bdist_wininst',
                                    "Windows executable installer"),
                        'zip':   ('bdist_dumb', "ZIP file"),
-                       #'pkgtool': ('bdist_pkgtool', 
+                       #'pkgtool': ('bdist_pkgtool',
                        #            "Solaris pkgtool distribution"),
                        #'sdux':  ('bdist_sdux', "HP-UX swinstall depot"),
                       }
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
index 8ee3a5c..3db332d 100644
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -53,7 +53,7 @@
         self.dist_dir = None
         self.skip_build = 0
         self.relative = 0
-        
+
     # initialize_options()
 
 
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
index 7c593ad..d91c089 100644
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -115,7 +115,7 @@
         # we do not want to include pyc or pyo files
         install_lib.compile = 0
         install_lib.optimize = 0
-        
+
         # If we are building an installer for a Python version other
         # than the one we are currently running, then we need to ensure
         # our build_lib reflects the other Python version rather than ours.
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index 0c37768..04cd742 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -173,7 +173,7 @@
             self.include_dirs.append(os.path.join(sys.exec_prefix, 'PC'))
             self.library_dirs.append(os.path.join(sys.exec_prefix, 'PCBuild'))
 
-        # OS/2 (EMX) doesn't support Debug vs Release builds, but has the 
+        # OS/2 (EMX) doesn't support Debug vs Release builds, but has the
         # import libraries in its "Config" subdirectory
         if os.name == 'os2':
             self.library_dirs.append(os.path.join(sys.exec_prefix, 'Config'))
@@ -636,7 +636,7 @@
             # EMX/GCC requires the python library explicitly, and I
             # believe VACPP does as well (though not confirmed) - AIM Apr01
             template = "python%d%d"
-            # debug versions of the main DLL aren't supported, at least 
+            # debug versions of the main DLL aren't supported, at least
             # not at this time - AIM Apr01
             #if self.debug:
             #    template = template + '_d'
diff --git a/Lib/distutils/command/build_scripts.py b/Lib/distutils/command/build_scripts.py
index 165a009..e0fcc23 100644
--- a/Lib/distutils/command/build_scripts.py
+++ b/Lib/distutils/command/build_scripts.py
@@ -94,7 +94,7 @@
                 if not self.dry_run:
                     outf = open(outfile, "w")
                     if not sysconfig.python_build:
-                        outf.write("#!%s%s\n" % 
+                        outf.write("#!%s%s\n" %
                                    (os.path.normpath(sys.executable),
                                     post_interp))
                     else:
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 3c36ede..175f785 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -537,7 +537,7 @@
             not (self.path_file and self.install_path_file) and
             install_lib not in sys_path):
             log.debug(("modules installed to '%s', which is not in "
-                       "Python's module search path (sys.path) -- " 
+                       "Python's module search path (sys.path) -- "
                        "you'll have to change the search path yourself"),
                        self.install_lib)
 
diff --git a/Lib/distutils/command/register.py b/Lib/distutils/command/register.py
index 8e347ce..8104ce0 100644
--- a/Lib/distutils/command/register.py
+++ b/Lib/distutils/command/register.py
@@ -286,4 +286,3 @@
         if self.show_response:
             print '-'*75, data, '-'*75
         return result
-
diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py
index fba463c..fef291f 100644
--- a/Lib/distutils/core.py
+++ b/Lib/distutils/core.py
@@ -239,4 +239,3 @@
     return _setup_distribution
 
 # run_setup ()
-
diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py
index 0101bae..a962007 100644
--- a/Lib/distutils/cygwinccompiler.py
+++ b/Lib/distutils/cygwinccompiler.py
@@ -75,7 +75,7 @@
                          (status, details))
         if status is not CONFIG_H_OK:
             self.warn(
-                "Python's pyconfig.h doesn't seem to support your compiler. " 
+                "Python's pyconfig.h doesn't seem to support your compiler. "
                 "Reason: %s. "
                 "Compiling may fail because of undefined preprocessor macros."
                 % details)
diff --git a/Lib/distutils/debug.py b/Lib/distutils/debug.py
index e195ebd..2a87eb5 100644
--- a/Lib/distutils/debug.py
+++ b/Lib/distutils/debug.py
@@ -7,4 +7,3 @@
 # If DISTUTILS_DEBUG is anything other than the empty string, we run in
 # debug mode.
 DEBUG = os.environ.get('DISTUTILS_DEBUG')
-
diff --git a/Lib/distutils/dir_util.py b/Lib/distutils/dir_util.py
index e479b62..77f64c4 100644
--- a/Lib/distutils/dir_util.py
+++ b/Lib/distutils/dir_util.py
@@ -225,4 +225,3 @@
         if path[0:1] == os.sep:
             path = drive + path[1:]
         return path
-
diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py
index 7d0a7ba..b4dd0b9 100644
--- a/Lib/distutils/dist.py
+++ b/Lib/distutils/dist.py
@@ -231,7 +231,7 @@
                         newreq.append((pkg, LooseVersion(ver)))
                 attrs['requires'] = newreq
 
-            # Build up the provides object. If the setup() has no 
+            # Build up the provides object. If the setup() has no
             # provides line, we use packages or modules and the version
             # to synthesise the provides. If no version is provided (no
             # pun intended) we don't have a provides entry at all.
@@ -1137,7 +1137,7 @@
         return self.download_url or "UNKNOWN"
 
     def get_requires(self):
-        return [ '%s%s%s'%(x, (y and '-') or '', y or '') 
+        return [ '%s%s%s'%(x, (y and '-') or '', y or '')
                                                 for x,y in self.requires ]
 
     def get_provides(self):
diff --git a/Lib/distutils/file_util.py b/Lib/distutils/file_util.py
index e230ce5..e2b1c51 100644
--- a/Lib/distutils/file_util.py
+++ b/Lib/distutils/file_util.py
@@ -42,7 +42,7 @@
             except os.error, (errno, errstr):
                 raise DistutilsFileError, \
                       "could not delete '%s': %s" % (dst, errstr)
-        
+
         try:
             fdst = open(dst, 'wb')
         except os.error, (errno, errstr):
diff --git a/Lib/distutils/filelist.py b/Lib/distutils/filelist.py
index 0872e96..566d87a 100644
--- a/Lib/distutils/filelist.py
+++ b/Lib/distutils/filelist.py
@@ -167,7 +167,7 @@
             for pattern in patterns:
                 if not self.include_pattern(pattern, prefix=dir):
                     log.warn(("warning: no files found matching '%s' " +
-                                "under directory '%s'"), 
+                                "under directory '%s'"),
                              pattern, dir)
 
         elif action == 'recursive-exclude':
diff --git a/Lib/distutils/log.py b/Lib/distutils/log.py
index 01420da..024e7c2 100644
--- a/Lib/distutils/log.py
+++ b/Lib/distutils/log.py
@@ -28,16 +28,16 @@
 
     def debug(self, msg, *args):
         self._log(DEBUG, msg, args)
-    
+
     def info(self, msg, *args):
         self._log(INFO, msg, args)
-    
+
     def warn(self, msg, *args):
         self._log(WARN, msg, args)
-    
+
     def error(self, msg, *args):
         self._log(ERROR, msg, args)
-    
+
     def fatal(self, msg, *args):
         self._log(FATAL, msg, args)
 
diff --git a/Lib/distutils/msvccompiler.py b/Lib/distutils/msvccompiler.py
index 1441ea0..168881a 100644
--- a/Lib/distutils/msvccompiler.py
+++ b/Lib/distutils/msvccompiler.py
@@ -117,7 +117,7 @@
             if d:
                 self.macros["$(%s)" % macro] = d[key]
                 break
-              
+
     def load_macros(self, version):
         vsbase = r"Software\Microsoft\VisualStudio\%0.1f" % version
         self.set_macro("VCInstallDir", vsbase + r"\Setup\VC", "productdir")
@@ -166,7 +166,7 @@
         return majorVersion + minorVersion
     # else we don't know what version of the compiler this is
     return None
-    
+
 
 class MSVCCompiler (CCompiler) :
     """Concrete class that implements an interface to Microsoft Visual C++,
@@ -525,7 +525,7 @@
                 return fn
 
         return exe
-    
+
     def get_msvc_paths(self, path, platform='x86'):
         """Get a list of devstudio directories (include, lib or path).
 
@@ -576,4 +576,3 @@
             p = self.get_msvc_paths(name)
         if p:
             os.environ[name] = string.join(p, ';')
-
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py
index 67391e8..a89b88c 100644
--- a/Lib/distutils/spawn.py
+++ b/Lib/distutils/spawn.py
@@ -97,7 +97,7 @@
     #cmd = _nt_quote_args(cmd)
     if search_path:
         # either we find one or it stays the same
-        executable = find_executable(executable) or executable 
+        executable = find_executable(executable) or executable
     log.info(string.join([executable] + cmd[1:], ' '))
     if not dry_run:
         # spawnv for OS/2 EMX requires a full path to the .exe
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index c912a15..0a4e14c 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -367,7 +367,7 @@
             my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: now "%s" but "%s" during configure'
                 % (cur_target, cfg_target))
             raise DistutilsPlatformError(my_msg)
-        
+
     # On AIX, there are wrong paths to the linker scripts in the Makefile
     # -- these paths are relative to the Python source, but when installed
     # the scripts are in another directory.
diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py
index 11ecb9f..24cbcb5 100644
--- a/Lib/distutils/unixccompiler.py
+++ b/Lib/distutils/unixccompiler.py
@@ -206,7 +206,7 @@
         elif sys.platform[:5] == "hp-ux":
             return "+s -L" + dir
         elif compiler[:3] == "gcc" or compiler[:3] == "g++":
-          return "-Wl,-R" + dir
+            return "-Wl,-R" + dir
         else:
             return "-R" + dir
 
@@ -217,7 +217,7 @@
         shared_f = self.library_filename(lib, lib_type='shared')
         dylib_f = self.library_filename(lib, lib_type='dylib')
         static_f = self.library_filename(lib, lib_type='static')
-        
+
         for dir in dirs:
             shared = os.path.join(dir, shared_f)
             dylib = os.path.join(dir, dylib_f)
@@ -232,6 +232,6 @@
                 return shared
             elif os.path.exists(static):
                 return static
-            
+
         # Oops, didn't find it in *any* of 'dirs'
         return None
diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py
index 12775d6..387e9bd 100644
--- a/Lib/distutils/util.py
+++ b/Lib/distutils/util.py
@@ -300,7 +300,7 @@
 
 def strtobool (val):
     """Convert a string representation of truth to true (1) or false (0).
-    
+
     True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
     are 'n', 'no', 'f', 'false', 'off', and '0'.  Raises ValueError if
     'val' is anything else.
