Added --force (-f) option to force installation (including bytecode
compilation).
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 2cb7871..2332770 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -85,8 +85,9 @@
         ('install-data=', None,
          "installation directory for data files"),
 
-        # For lazy debuggers who just want to test the install
-        # commands without rerunning "build" all the time
+        # Miscellaneous control options
+        ('force', 'f',
+         "force installation (overwrite any existing files)"),
         ('skip-build', None,
          "skip rebuilding everything (for testing/debugging)"),
 
@@ -146,6 +147,7 @@
         self.extra_path = None
         self.install_path_file = 0
 
+        self.force = 0
         self.skip_build = 0
 
         # These are only here as a conduit from the 'build' command to the
diff --git a/Lib/distutils/command/install_data.py b/Lib/distutils/command/install_data.py
index 9193f91..6cfc7d4 100644
--- a/Lib/distutils/command/install_data.py
+++ b/Lib/distutils/command/install_data.py
@@ -22,18 +22,21 @@
          "(default: installation base dir)"),
         ('root=', None,
          "install everything relative to this alternate root directory"),
+        ('force', 'f', "force installation (overwrite existing files)"),
         ]
 
     def initialize_options (self):
         self.install_dir = None
         self.outfiles = []
         self.root = None
+        self.force = 0
         self.data_files = self.distribution.data_files
 
     def finalize_options (self):
         self.set_undefined_options('install',
 	                           ('install_data', 'install_dir'),
 				   ('root', 'root'),
+                                   ('force', 'force'),
 				  )
 
     def run (self):
diff --git a/Lib/distutils/command/install_headers.py b/Lib/distutils/command/install_headers.py
index 2e6ce86..5c06d57 100644
--- a/Lib/distutils/command/install_headers.py
+++ b/Lib/distutils/command/install_headers.py
@@ -17,16 +17,21 @@
 
     user_options = [('install-dir=', 'd',
                      "directory to install header files to"),
+                    ('force', 'f',
+                     "force installation (overwrite existing files)"),
                    ]
 
 
     def initialize_options (self):
         self.install_dir = None
+        self.force = 0
         self.outfiles = []
 
     def finalize_options (self):
         self.set_undefined_options('install',
-                                   ('install_headers', 'install_dir'))
+                                   ('install_headers', 'install_dir'),
+                                   ('force', 'force'))
+                                   
 
     def run (self):
         headers = self.distribution.headers
diff --git a/Lib/distutils/command/install_lib.py b/Lib/distutils/command/install_lib.py
index 879a7d0..2d19e5b 100644
--- a/Lib/distutils/command/install_lib.py
+++ b/Lib/distutils/command/install_lib.py
@@ -13,6 +13,7 @@
     user_options = [
         ('install-dir=', 'd', "directory to install to"),
         ('build-dir=','b', "build directory (where to install from)"),
+        ('force', 'f', "force installation (overwrite existing files)"),
         ('compile', 'c', "compile .py to .pyc"),
         ('optimize', 'o', "compile .py to .pyo (optimized)"),
         ('skip-build', None, "skip the build steps"),
@@ -23,6 +24,7 @@
         # let the 'install' command dictate our installation directory
         self.install_dir = None
         self.build_dir = None
+        self.force = 0
         self.compile = 1
         self.optimize = 1
         self.skip_build = None
@@ -35,6 +37,7 @@
         self.set_undefined_options ('install',
                                     ('build_lib', 'build_dir'),
                                     ('install_lib', 'install_dir'),
+                                    ('force', 'force'),
                                     ('compile_py', 'compile'),
                                     ('optimize_py', 'optimize'),
                                     ('skip_build', 'skip_build'),
diff --git a/Lib/distutils/command/install_scripts.py b/Lib/distutils/command/install_scripts.py
index 3eb3963..d506f90 100644
--- a/Lib/distutils/command/install_scripts.py
+++ b/Lib/distutils/command/install_scripts.py
@@ -18,11 +18,13 @@
     user_options = [
         ('install-dir=', 'd', "directory to install scripts to"),
         ('build-dir=','b', "build directory (where to install from)"),
+        ('force', 'f', "force installation (overwrite existing files)"),
         ('skip-build', None, "skip the build steps"),
     ]
 
     def initialize_options (self):
         self.install_dir = None
+        self.force = 0
         self.build_dir = None
         self.skip_build = None
 
@@ -30,13 +32,14 @@
         self.set_undefined_options('build', ('build_scripts', 'build_dir'))
         self.set_undefined_options ('install',
                                     ('install_scripts', 'install_dir'),
+                                    ('force', 'force'),
                                     ('skip_build', 'skip_build'),
                                    )
 
     def run (self):
         if not self.skip_build:
             self.run_command('build_scripts')
-        self.outfiles = self.copy_tree (self.build_dir, self.install_dir)
+        self.outfiles = self.copy_tree(self.build_dir, self.install_dir)
         if os.name == 'posix':
             # Set the executable bits (owner, group, and world) on
             # all the scripts we just installed.