OS/2 patches by Andrew I MacIntyre for distutils.

Closes patch #435381.
diff --git a/Lib/distutils/command/bdist.py b/Lib/distutils/command/bdist.py
index fc18bd0..68609f3 100644
--- a/Lib/distutils/command/bdist.py
+++ b/Lib/distutils/command/bdist.py
@@ -57,7 +57,8 @@
     # This won't do in reality: will need to distinguish RPM-ish Linux,
     # Debian-ish Linux, Solaris, FreeBSD, ..., Windows, Mac OS.
     default_format = { 'posix': 'gztar',
-                       'nt': 'zip', }
+                       'nt': 'zip',
+                       'os2': 'zip', }
 
     # Establish the preferred order (for the --help-formats option).
     format_commands = ['rpm', 'gztar', 'bztar', 'ztar', 'tar',
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
index dbe862b..b627a86 100644
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -37,7 +37,8 @@
     boolean_options = ['keep-temp', 'skip-build']
 
     default_format = { 'posix': 'gztar',
-                       'nt': 'zip', }
+                       'nt': 'zip',
+                       'os2': 'zip' }
 
 
     def initialize_options (self):
@@ -88,6 +89,12 @@
         # pseudo-installation tree.
         archive_basename = "%s.%s" % (self.distribution.get_fullname(),
                                       self.plat_name)
+
+        # OS/2 objects to any ":" characters in a filename (such as when
+        # a timestamp is used in a version) so change them to hyphens.
+        if os.name == "os2":
+            archive_basename = archive_basename.replace(":", "-")
+
         self.make_archive(os.path.join(self.dist_dir, archive_basename),
                           self.format,
                           root_dir=self.bdist_dir)
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index 98617f7..91fee5e 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -167,6 +167,11 @@
             else:
                 self.build_temp = os.path.join(self.build_temp, "Release")
 
+        # OS/2 (EMX) doesn't support Debug vs Release builds, but has the 
+        # import libraries in its "Config" subdirectory
+        if os.name == 'os2':
+            self.library_dirs.append(os.path.join(sys.exec_prefix, 'Config'))
+
         # for extensions under Cygwin Python's library directory must be
         # appended to library_dirs
         if sys.platform[:6] == 'cygwin':
@@ -554,6 +559,10 @@
             else:
                 return "swig.exe"
 
+        elif os.name == "os2":
+            # assume swig available in the PATH.
+            return "swig.exe"
+
         else:
             raise DistutilsPlatformError, \
                   ("I don't know how to find (much less run) SWIG "
@@ -578,6 +587,9 @@
 
         from distutils.sysconfig import get_config_var
         ext_path = string.split(ext_name, '.')
+        # OS/2 has an 8 character module (extension) limit :-(
+        if os.name == "os2":
+            ext_path[len(ext_path) - 1] = ext_path[len(ext_path) - 1][:8]
         # extensions in debug_mode are named 'module_d.pyd' under windows
         so_ext = get_config_var('SO')
         if os.name == 'nt' and self.debug:
@@ -599,7 +611,7 @@
     def get_libraries (self, ext):
         """Return the list of libraries to link against when building a
         shared extension.  On most platforms, this is just 'ext.libraries';
-        on Windows, we add the Python library (eg. python20.dll).
+        on Windows and OS/2, we add the Python library (eg. python20.dll).
         """
         # The python library is always needed on Windows.  For MSVC, this
         # is redundant, since the library is mentioned in a pragma in
@@ -617,6 +629,19 @@
             # don't extend ext.libraries, it may be shared with other
             # extensions, it is a reference to the original list
             return ext.libraries + [pythonlib]
+        elif sys.platform == "os2emx":
+            # EMX/GCC requires the python library explicitly, and I
+            # believe VACPP does as well (though not confirmed) - AIM Apr01
+            template = "python%d%d"
+            # debug versions of the main DLL aren't supported, at least 
+            # not at this time - AIM Apr01
+            #if self.debug:
+            #    template = template + '_d'
+            pythonlib = (template %
+                   (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff))
+            # don't extend ext.libraries, it may be shared with other
+            # extensions, it is a reference to the original list
+            return ext.libraries + [pythonlib]
         elif sys.platform[:6] == "cygwin":
             template = "python%d.%d"
             pythonlib = (template %
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 8755a14..4d78d3a 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -55,6 +55,13 @@
         'headers': '$base/Include/$dist_name',
         'scripts': '$base/Scripts',
         'data'   : '$base',
+        },
+    'os2': {
+        'purelib': '$base/Lib/site-packages',
+        'platlib': '$base/Lib/site-packages',
+        'headers': '$base/Include/$dist_name',
+        'scripts': '$base/Scripts',
+        'data'   : '$base',
         }
     }