Changed so the sub-commands we rely on to do the real work is specified
  in a class attribute 'sub_commands', rather than hard-coded in 'run()'.
  This should make it easier to subclass 'install', and also makes it
  easier to keep 'run()' and the new 'get_outputs()' consistent.
Added 'get_outputs()' in preparation for the 'bdist' command.
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index ed74971..ac9ec86 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -82,6 +82,14 @@
         ]
 
 
+    # 'sub_commands': a list of commands this command might have to run
+    # to get its work done.  Each command is represented as a tuple
+    # (func, command) where 'func' is a function to call that returns
+    # true if 'command' (the sub-command name, a string) needs to be
+    # run.  If 'func' is None, assume that 'command' must always be run.
+    sub_commands = [(None, 'install_lib')]
+
+
     def initialize_options (self):
 
         # High-level options: these select both an installation base
@@ -355,10 +363,11 @@
         # Obviously have to build before we can install
         self.run_peer ('build')
 
-        # Now install all Python modules -- don't bother to make this
-        # conditional; why would someone distribute a Python module
-        # distribution without Python modules?
-        self.run_peer ('install_lib')
+        # Run all sub-commands: currently this just means install all
+        # Python modules using 'install_lib'.
+        for (func, cmd) in self.sub_commands:
+            if func is None or func():
+                self.run_peer (cmd)
 
         if self.path_file:
             self.create_path_file ()
@@ -374,6 +383,17 @@
     # run ()
 
 
+    def get_outputs (self):
+        # This command doesn't have any outputs of its own, so just
+        # get the outputs of all its sub-commands.
+        outputs = []
+        for (func, cmd) in self.sub_commands:
+            if func is None or func():
+                outputs.extend (self.run_peer (cmd))
+
+        return outputs
+
+
     def create_path_file (self):
         filename = os.path.join (self.install_libbase,
                                  self.path_file + ".pth")