diff options
| author | Greg Ward <gward@python.net> | 1999-05-02 21:39:13 +0000 | 
|---|---|---|
| committer | Greg Ward <gward@python.net> | 1999-05-02 21:39:13 +0000 | 
| commit | 0f72695da324d4cc24ebbeb4873c23d01f97f861 (patch) | |
| tree | 4ea1e1c5332f2957f923c49e5b43d1f921c9fb6f /Lib/distutils/command/install_lib.py | |
| parent | 85460a58f8935b56ad5fa3aae5c3545a444d0ace (diff) | |
| download | cpython-git-0f72695da324d4cc24ebbeb4873c23d01f97f861.tar.gz | |
Rearranged things so that compilation of .py files is the responsibility
of the 'install_py' command rather than 'build_py'.  Obviously, this
meant that the 'build_py' and 'install_py' modules had to change; less
obviously, so did 'install' and 'build', since these higher-level
commands must make options available to control the lower-level
commands, and some compilation-related options had to migrate with the
code.
Diffstat (limited to 'Lib/distutils/command/install_lib.py')
| -rw-r--r-- | Lib/distutils/command/install_lib.py | 37 | 
1 files changed, 33 insertions, 4 deletions
| diff --git a/Lib/distutils/command/install_lib.py b/Lib/distutils/command/install_lib.py index 22ab71e799..f147af47f3 100644 --- a/Lib/distutils/command/install_lib.py +++ b/Lib/distutils/command/install_lib.py @@ -2,19 +2,25 @@  __rcsid__ = "$Id$" -import sys +import sys, string  from distutils.core import Command  from distutils.util import copy_tree  class InstallPy (Command):      options = [('dir=', 'd', "directory to install to"), -               ('build-dir=' 'b', "build directory (where to install from)")] +               ('build-dir=' 'b', "build directory (where to install from)"), +               ('compile', 'c', "compile .py to .pyc"), +               ('optimize', 'o', "compile .py to .pyo (optimized)"), +              ] +                     def set_default_options (self):          # let the 'install' command dictate our installation directory          self.dir = None          self.build_dir = None +        self.compile = 1 +        self.optimize = 1      def set_final_options (self):          # If we don't have a 'dir' value, we'll have to ask the 'install' @@ -25,7 +31,10 @@ class InstallPy (Command):          self.set_undefined_options ('install',                                      ('build_lib', 'build_dir'), -                                    ('install_site_lib', 'dir')) +                                    ('install_site_lib', 'dir'), +                                    ('compile_py', 'compile'), +                                    ('optimize_py', 'optimize')) +      def run (self): @@ -33,8 +42,28 @@ class InstallPy (Command):          # Dump entire contents of the build directory to the installation          # directory (that's the beauty of having a build directory!) -        self.copy_tree (self.build_dir, self.dir) +        outfiles = self.copy_tree (self.build_dir, self.dir) +        # (Optionally) compile .py to .pyc +        # XXX hey! we can't control whether we optimize or not; that's up +        # to the invocation of the current Python interpreter (at least +        # according to the py_compile docs).  That sucks. + +        if self.compile: +            from py_compile import compile + +            for f in outfiles: +                # XXX can't assume this filename mapping! +                out_fn = string.replace (f, '.py', '.pyc') +                 +                self.make_file (f, out_fn, compile, (f,), +                                "compiling %s -> %s" % (f, out_fn), +                                "compilation of %s skipped" % f) + +        # XXX ignore self.optimize for now, since we don't really know if +        # we're compiling optimally or not, and couldn't pick what to do +        # even if we did know.  ;-( +      # run ()  # class InstallPy | 
