Added '--force' option -- very clear what it means for building (ignore
timestamps), so every build_* command has 'self.force', which follows the
'build' command if not set by the user.
diff --git a/Lib/distutils/command/build.py b/Lib/distutils/command/build.py
index 2da589a..bca0ece 100644
--- a/Lib/distutils/command/build.py
+++ b/Lib/distutils/command/build.py
@@ -28,6 +28,8 @@
          "temporary build directory"),
         ('debug', 'g',
          "compile extensions and libraries with debugging information"),
+        ('force', 'f',
+         "forcibly build everything (ignore file timestamps"),
         ]
 
     def initialize_options (self):
@@ -39,9 +41,12 @@
         self.build_lib = None
         self.build_temp = None
         self.debug = None
+        self.force = 0
 
     def finalize_options (self):
 
+        print "build.finalize: force=%s" % self.force
+
         # Need this to name platform-specific directories, but sys.platform
         # is not enough -- it only names the OS and version, not the
         # hardware architecture!
diff --git a/Lib/distutils/command/build_clib.py b/Lib/distutils/command/build_clib.py
index f48e647..2311187 100644
--- a/Lib/distutils/command/build_clib.py
+++ b/Lib/distutils/command/build_clib.py
@@ -37,6 +37,8 @@
          "directory to put temporary build by-products"),
         ('debug', 'g',
          "compile with debugging information"),
+        ('force', 'f',
+         "forcibly build everything (ignore file timestamps"),
         ]
 
     def initialize_options (self):
@@ -51,6 +53,7 @@
         self.define = None
         self.undef = None
         self.debug = None
+        self.force = 0
 
     # initialize_options()
 
@@ -65,7 +68,8 @@
         self.set_undefined_options ('build',
                                     ('build_temp', 'build_clib'),
                                     ('build_temp', 'build_temp'),
-                                    ('debug', 'debug'))
+                                    ('debug', 'debug'),
+                                    ('force', 'force'))
 
         self.libraries = self.distribution.libraries
         if self.libraries:
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index 2cb1c61..ddb01d4 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -66,6 +66,8 @@
          "extra explicit link objects to include in the link"),
         ('debug', 'g',
          "compile/link with debugging information"),
+        ('force', 'f',
+         "forcibly build everything (ignore file timestamps"),
         ]
 
 
@@ -84,6 +86,7 @@
         self.rpath = None
         self.link_objects = None
         self.debug = None
+        self.force = None
 
 
     def finalize_options (self):
@@ -92,7 +95,8 @@
         self.set_undefined_options ('build',
                                     ('build_lib', 'build_lib'),
                                     ('build_temp', 'build_temp'),
-                                    ('debug', 'debug'))
+                                    ('debug', 'debug'),
+                                    ('force', 'force'))
 
         if self.package is None:
             self.package = self.distribution.ext_package
diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py
index 3baddc6..d719cec 100644
--- a/Lib/distutils/command/build_py.py
+++ b/Lib/distutils/command/build_py.py
@@ -20,6 +20,7 @@
 
     user_options = [
         ('build-lib=', 'd', "directory to \"build\" (copy) to"),
+        ('force', 'f', "forcibly build everything (ignore file timestamps"),
         ]
 
 
@@ -28,10 +29,14 @@
         self.modules = None
         self.package = None
         self.package_dir = None
+        self.force = None
 
     def finalize_options (self):
+        print "build_py.finalize: force=%s" % self.force
         self.set_undefined_options ('build',
-                                    ('build_lib', 'build_lib'))
+                                    ('build_lib', 'build_lib'),
+                                    ('force', 'force'))
+        print "build_py.finalize: force=%s" % self.force
 
         # Get the distribution options that are aliases for build_py
         # options -- list of packages and list of modules.