]> granicus.if.org Git - python/commitdiff
Changed so the sub-commands we rely on to do the real work is specified
authorGreg Ward <gward@python.net>
Wed, 29 Mar 2000 02:15:57 +0000 (02:15 +0000)
committerGreg Ward <gward@python.net>
Wed, 29 Mar 2000 02:15:57 +0000 (02:15 +0000)
  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.

Lib/distutils/command/install.py

index ed74971efa76e302c227514ca4dc25ef72617b88..ac9ec86517106d73a583440d834e4d08778579e3 100644 (file)
@@ -82,6 +82,14 @@ class install (Command):
         ]
 
 
+    # '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 @@ class install (Command):
         # 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 @@ class install (Command):
     # 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")