diff --git a/Lib/distutils/command/__init__.py b/Lib/distutils/command/__init__.py
index 870005d..3a9a53e 100644
--- a/Lib/distutils/command/__init__.py
+++ b/Lib/distutils/command/__init__.py
@@ -24,6 +24,7 @@
            'bdist_dumb',
            'bdist_rpm',
            'bdist_wininst',
+           'checkdep',
            # These two are reserved for future use:
            #'bdist_sdux',
            #'bdist_pkgtool',
diff --git a/Lib/distutils/command/checkdep.py b/Lib/distutils/command/checkdep.py
new file mode 100644
index 0000000..729002c
--- /dev/null
+++ b/Lib/distutils/command/checkdep.py
@@ -0,0 +1,70 @@
+"""distutils.command.x
+
+Implements the Distutils 'x' command.
+"""
+
+# created 2000/mm/dd, John Doe
+
+__revision__ = "$Id$"
+
+from distutils.core import Command
+
+class DependencyFailure(Exception): pass
+
+class VersionTooOld(DependencyFailure): pass
+
+class VersionNotKnown(DependencyFailure): pass
+
+class checkdep (Command):
+
+    # Brief (40-50 characters) description of the command
+    description = "check package dependencies"
+
+    # List of option tuples: long name, short name (None if no short
+    # name), and help string.
+    # Later on, we might have auto-fetch and the like here. Feel free.
+    user_options = []
+
+    def initialize_options (self):
+        self.debug = None
+
+    # initialize_options()
+
+
+    def finalize_options (self):
+        pass
+    # finalize_options()
+
+
+    def run (self):
+        from distutils.version import LooseVersion
+        failed = []
+        for pkg, ver in self.distribution.metadata.requires:
+            if pkg == 'python':
+                if ver is not None:
+                    # Special case the 'python' package
+                    import sys
+                    thisver = LooseVersion('%d.%d.%d'%sys.version_info[:3])
+                    if thisver < ver:
+                        failed.append(((pkg,ver), VersionTooOld(thisver)))
+                continue
+            # Kinda hacky - we should do more here
+            try:
+                mod = __import__(pkg)
+            except Exception, e:
+                failed.append(((pkg,ver), e))
+                continue
+            if ver is not None:
+                if hasattr(mod, '__version__'):
+                    thisver = LooseVersion(mod.__version__)
+                    if thisver < ver:
+                        failed.append(((pkg,ver), VersionTooOld(thisver)))
+                else:
+                    failed.append(((pkg,ver), VersionNotKnown()))
+
+        if failed:
+            raise DependencyFailure, failed
+
+    # run()
+
+# class x
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 5d5bdaa..7fb46a7 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -126,6 +126,8 @@
          "force installation (overwrite any existing files)"),
         ('skip-build', None,
          "skip rebuilding everything (for testing/debugging)"),
+        ('skip-checkdep', None,
+         "skip checking dependencies (use at own risk)"),
 
         # Where to install documentation (eventually!)
         #('doc-format=', None, "format of documentation to generate"),
@@ -183,12 +185,15 @@
 
         # 'force' forces installation, even if target files are not
         # out-of-date.  'skip_build' skips running the "build" command,
-        # handy if you know it's not necessary.  'warn_dir' (which is *not*
+        # handy if you know it's not necessary.  'skip_checkdep' skips
+        # the 'checkdep' command, if you are sure you can work around the
+        # dependency failure in another way. 'warn_dir' (which is *not*
         # a user option, it's just there so the bdist_* commands can turn
         # it off) determines whether we warn about installing to a
         # directory not in sys.path.
         self.force = 0
         self.skip_build = 0
+        self.skip_checkdep = 0
         self.warn_dir = 1
 
         # These are only here as a conduit from the 'build' command to the
@@ -500,6 +505,12 @@
         if not self.skip_build:
             self.run_command('build')
 
+        # We check dependencies before we install
+        # For now, this is disabled. Before 2.4 is released, this will
+        # be turned on.
+        #if not self.skip_checkdep:
+        #    self.run_command('checkdep')
+
         # Run all sub-commands (at least those that need to be run)
         for cmd_name in self.get_sub_commands():
             self.run_command(cmd_name)
diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py
index eb41972..fba463c 100644
--- a/Lib/distutils/core.py
+++ b/Lib/distutils/core.py
@@ -47,7 +47,8 @@
                   'name', 'version', 'author', 'author_email',
                   'maintainer', 'maintainer_email', 'url', 'license',
                   'description', 'long_description', 'keywords',
-                  'platforms', 'classifiers', 'download_url')
+                  'platforms', 'classifiers', 'download_url',
+                  'provides', 'requires', )
 
 # Legal keyword arguments for the Extension constructor
 extension_keywords = ('name', 'sources', 'include_dirs',
diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py
index 586e6bb..2795b7b 100644
--- a/Lib/distutils/dist.py
+++ b/Lib/distutils/dist.py
@@ -214,6 +214,51 @@
                 else:
                     sys.stderr.write(msg + "\n")
 
+            # Build up the requires sequence
+            from distutils.version import LooseVersion
+            requires = attrs.get('requires')
+            if requires:
+                if isinstance(requires, type('')):
+                    raise DistutilsOptionError, 'requires should be a sequence'
+                newreq = []
+                for req in requires:
+                    if '-' not in req:
+                        # We have a plain package name - any version will do
+                        newreq.append((req,None))
+                    else:
+                        pkg, ver = string.split(req, '-', 1)
+                        newreq.append((pkg, LooseVersion(ver)))
+                attrs['requires'] = newreq
+
+            # Build up the provides object. If the setup() has no 
+            # provides line, we use packages or modules and the version
+            # to synthesise the provides. If no version is provided (no
+            # pun intended) we don't have a provides entry at all.
+            provides = attrs.get('provides')
+            if provides:
+                if isinstance(provides, type('')):
+                    raise DistutilsOptionError, 'provides should be a sequence'
+                newprov = []
+                for prov in provides:
+                    if '-' not in prov:
+                        # We have a plain package name - any version will do
+                        newprov.append((prov,None))
+                    else:
+                        pkg, ver = string.split(prov, '-', 1)
+                        newprov.append((pkg, LooseVersion(ver)))
+                attrs['provides'] = newprov
+            elif attrs.get('version'):
+                # Build a provides line
+                prov = []
+                if attrs.get('packages'):
+                    for pkg in attrs['packages']:
+                        pkg = string.replace(pkg, '/', '.')
+                        prov.append('%s-%s'%(pkg, attrs['version']))
+                elif attrs.get('modules'):
+                    for mod in attrs['modules']:
+                        prov.append('%s-%s'%(mod, attrs['version']))
+                attrs['provides'] = prov
+
             # Now work on the rest of the attributes.  Any attribute that's
             # not already defined is invalid!
             for (key,val) in attrs.items():
@@ -974,7 +1019,7 @@
                          "license", "description", "long_description",
                          "keywords", "platforms", "fullname", "contact",
                          "contact_email", "license", "classifiers",
-                         "download_url")
+                         "download_url", "provides", "requires",)
 
     def __init__ (self):
         self.name = None
@@ -991,6 +1036,8 @@
         self.platforms = None
         self.classifiers = None
         self.download_url = None
+        self.requires = []
+        self.provides = []
 
     def write_pkg_info (self, base_dir):
         """Write the PKG-INFO file into the release tree.
@@ -1006,6 +1053,10 @@
         pkg_info.write('Author: %s\n' % self.get_contact() )
         pkg_info.write('Author-email: %s\n' % self.get_contact_email() )
         pkg_info.write('License: %s\n' % self.get_license() )
+        for req in self.get_requires():
+            pkg_info.write('Requires: %s\n' % req )
+        for prov in self.get_provides():
+            pkg_info.write('Provides: %s\n' % prov )
         if self.download_url:
             pkg_info.write('Download-URL: %s\n' % self.download_url)
 
@@ -1084,6 +1135,13 @@
     def get_download_url(self):
         return self.download_url or "UNKNOWN"
 
+    def get_requires(self):
+        return [ '%s%s%s'%(x, (y and '-') or '', y or '') 
+                                                for x,y in self.requires ]
+
+    def get_provides(self):
+        return self.provides
+
 # class DistributionMetadata
 
 
