"""distutils.command.x

Implements the Distutils 'x' command.
"""

# created 2000/mm/dd, John Doe

__revision__ = "$Id: checkdep.py,v 1.1 2004/03/22 22:22:05 anthonybaxter Exp $"

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
