Add 'platforms' and 'keywords' attributes to the DistributionMetadata class,
    along with options to print them.
Add a finalize_options() method to Distribution to do final processing
    on the platform and keyword attributes
Add DistributionMetadata.write_pkg_info() method to write a PKG-INFO file
    into the release tree.
diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py
index 6bda869..2346696 100644
--- a/Lib/distutils/dist.py
+++ b/Lib/distutils/dist.py
@@ -15,7 +15,7 @@
 from distutils.errors import *
 from distutils import sysconfig
 from distutils.fancy_getopt import FancyGetopt, translate_longopt
-from distutils.util import check_environ, strtobool
+from distutils.util import check_environ, strtobool, rfc822_escape
 
 
 # Regex to define acceptable Distutils command names.  This is not *quite*
@@ -85,6 +85,10 @@
          "print the package description"),
         ('long-description', None,
          "print the long package description"),
+        ('platforms', None,
+         "print the list of platforms"),
+        ('keywords', None,
+         "print the list of keywords"),
         ]
     display_option_names = map(lambda x: translate_longopt(x[0]),
                                display_options)
@@ -206,9 +210,7 @@
                     raise DistutilsSetupError, \
                           "invalid distribution option '%s'" % key
 
-        if self.metadata.version is None:
-            raise DistutilsSetupError, \
-                  "No version number specified for distribution"
+        self.finalize_options()
         
     # __init__ ()
 
@@ -526,6 +528,28 @@
     # _parse_command_opts ()
 
 
+    def finalize_options (self):
+        """Set final values for all the options on the Distribution
+        instance, analogous to the .finalize_options() method of Command
+        objects.
+        """
+
+        if self.metadata.version is None:
+            raise DistutilsSetupError, \
+                  "No version number specified for distribution"
+
+        keywords = self.metadata.keywords
+        if keywords is not None:
+            if type(keywords) is StringType:
+                keywordlist = string.split(keywords, ',')
+                self.metadata.keywords = map(string.strip, keywordlist)
+
+        platforms = self.metadata.platforms
+        if platforms is not None:
+            if type(platforms) is StringType:
+                platformlist = string.split(platforms, ',')
+                self.metadata.platforms = map(string.strip, platformlist)
+
     def _show_help (self,
                     parser,
                     global_options=1,
@@ -607,7 +631,11 @@
         for (opt, val) in option_order:
             if val and is_display_option.get(opt):
                 opt = translate_longopt(opt)
-                print getattr(self.metadata, "get_"+opt)()
+                value = getattr(self.metadata, "get_"+opt)()
+                if opt in ['keywords', 'platforms']:
+                    print string.join(value, ',')
+                else:
+                    print value
                 any_display_options = 1
 
         return any_display_options
@@ -950,7 +978,38 @@
         self.licence = None
         self.description = None
         self.long_description = None
+        self.keywords = None
+        self.platforms = None
         
+    def write_pkg_info (self, base_dir):
+        """Write the PKG-INFO file into the release tree.
+        """
+
+        pkg_info = open( os.path.join(base_dir, 'PKG-INFO'), 'w')
+
+        pkg_info.write('Metadata-Version: 1.0\n')
+        pkg_info.write('Name: %s\n' % self.get_name() )
+        pkg_info.write('Version: %s\n' % self.get_version() )
+        pkg_info.write('Summary: %s\n' % self.get_description() )
+        pkg_info.write('Home-page: %s\n' % self.get_url() )
+        pkg_info.write('Author: %s\n' % self.get_maintainer() )
+        pkg_info.write('Author-email: %s\n' % self.get_maintainer_email() )
+        pkg_info.write('License: %s\n' % self.get_licence() )
+
+        long_desc = rfc822_escape( self.get_long_description() )
+        pkg_info.write('Description: %s\n' % long_desc)
+
+        keywords = string.join( self.get_keywords(), ',')
+        if keywords:
+            pkg_info.write('Keywords: %s\n' % keywords )
+
+        for platform in self.get_platforms():
+            pkg_info.write('Platform: %s\n' % platform )
+
+        pkg_info.close()
+        
+    # write_pkg_info ()
+    
     # -- Metadata query methods ----------------------------------------
 
     def get_name (self):
@@ -996,6 +1055,12 @@
     def get_long_description(self):
         return self.long_description or "UNKNOWN"
 
+    def get_keywords(self):
+        return self.keywords or []
+
+    def get_platforms(self):
+        return self.platforms or ["UNKNOWN"]
+
 # class DistributionMetadata