diff options
author | Fred Drake <fdrake@acm.org> | 2004-06-25 23:02:59 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2004-06-25 23:02:59 (GMT) |
commit | ec6229e35247ef9eff6c2af254cee4a558d1d46a (patch) | |
tree | e68a681c2a5e01ade9384e4b41ad20d43a3bb865 /Lib | |
parent | 8d726eef968177acaae2a6daa7fe8fb5a8026c42 (diff) | |
download | cpython-ec6229e35247ef9eff6c2af254cee4a558d1d46a.zip cpython-ec6229e35247ef9eff6c2af254cee4a558d1d46a.tar.gz cpython-ec6229e35247ef9eff6c2af254cee4a558d1d46a.tar.bz2 |
Make distutils "install --home" support all platforms.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/distutils/command/install.py | 34 | ||||
-rw-r--r-- | Lib/distutils/tests/test_install.py | 55 |
2 files changed, 72 insertions, 17 deletions
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py index 7fb46a7..3c36ede 100644 --- a/Lib/distutils/command/install.py +++ b/Lib/distutils/command/install.py @@ -242,19 +242,15 @@ class install (Command): ("must supply either prefix/exec-prefix/home or " + "install-base/install-platbase -- not both") + if self.home and (self.prefix or self.exec_prefix): + raise DistutilsOptionError, \ + "must supply either home or prefix/exec-prefix -- not both" + # Next, stuff that's wrong (or dubious) only on certain platforms. - if os.name == 'posix': - if self.home and (self.prefix or self.exec_prefix): - raise DistutilsOptionError, \ - ("must supply either home or prefix/exec-prefix -- " + - "not both") - else: + if os.name != "posix": if self.exec_prefix: self.warn("exec-prefix option ignored on this platform") self.exec_prefix = None - if self.home: - self.warn("home option ignored on this platform") - self.home = None # Now the interesting logic -- so interesting that we farm it out # to other methods. The goal of these methods is to set the final @@ -405,15 +401,19 @@ class install (Command): def finalize_other (self): # Windows and Mac OS for now - if self.prefix is None: - self.prefix = os.path.normpath(sys.prefix) + if self.home is not None: + self.install_base = self.install_platbase = self.home + self.select_scheme("unix_home") + else: + if self.prefix is None: + self.prefix = os.path.normpath(sys.prefix) - self.install_base = self.install_platbase = self.prefix - try: - self.select_scheme(os.name) - except KeyError: - raise DistutilsPlatformError, \ - "I don't know how to install stuff on '%s'" % os.name + self.install_base = self.install_platbase = self.prefix + try: + self.select_scheme(os.name) + except KeyError: + raise DistutilsPlatformError, \ + "I don't know how to install stuff on '%s'" % os.name # finalize_other () diff --git a/Lib/distutils/tests/test_install.py b/Lib/distutils/tests/test_install.py new file mode 100644 index 0000000..c834b91 --- /dev/null +++ b/Lib/distutils/tests/test_install.py @@ -0,0 +1,55 @@ +"""Tests for distutils.command.install.""" + +import os +import unittest + +from distutils.command.install import install +from distutils.core import Distribution + +from distutils.tests import support + + +class InstallTestCase(support.TempdirManager, unittest.TestCase): + + def test_home_installation_scheme(self): + # This ensure two things: + # - that --home generates the desired set of directory names + # - test --home is supported on all platforms + builddir = self.mkdtemp() + destination = os.path.join(builddir, "installation") + + dist = Distribution({"name": "foopkg"}) + # script_name need not exist, it just need to be initialized + dist.script_name = os.path.join(builddir, "setup.py") + dist.command_obj["build"] = support.DummyCommand( + build_base=builddir, + build_lib=os.path.join(builddir, "lib"), + ) + + cmd = install(dist) + cmd.home = destination + cmd.ensure_finalized() + + self.assertEqual(cmd.install_base, destination) + self.assertEqual(cmd.install_platbase, destination) + + def check_path(got, expected): + got = os.path.normpath(got) + expected = os.path.normpath(expected) + self.assertEqual(got, expected) + + libdir = os.path.join(destination, "lib", "python") + check_path(cmd.install_lib, libdir) + check_path(cmd.install_platlib, libdir) + check_path(cmd.install_purelib, libdir) + check_path(cmd.install_headers, + os.path.join(destination, "include", "python", "foopkg")) + check_path(cmd.install_scripts, os.path.join(destination, "bin")) + check_path(cmd.install_data, destination) + + +def test_suite(): + return unittest.makeSuite(InstallTestCase) + +if __name__ == "__main__": + unittest.main(defaultTest="test_suite") |