Make distutils "install --home" support all platforms.
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 @@
                   ("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 @@
 
     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")