#!/usr/bin/env python

__revision__ = "$Id: setup.py,v 1.13 2004/04/19 20:34:49 myers Exp $"

import sys, os, string, re, unittest

from distutils.core import setup, Extension, Command
import distutils.command.build_ext

import ssl

cmdclass = {}

setup_args = { 
    'name': 'python-ssl',
    'version': ssl.__version__,
    'description': 'A wrapper for OpenSSL libraries using ctypes',
    'long_description': """\
""",

    'license': 'BSD',
    'author': 'Myers W. Carpenter',
    'author_email': 'icepick@icepick.info',
    'url': 'http://icepick.info/projects/python-ssl/',
    'download_url': 'http://icepick.info/projects/python-ssl/',
    'classifiers': [
        'Programming Language :: Python',
    ],
    'cmdclass': cmdclass,

    'packages': ['ssl',],
}

# patch distutils if it can't cope with the 'classifiers' or
# 'download_url' keywords
if sys.version < '2.2.3':
    from distutils.dist import DistributionMetadata
    DistributionMetadata.classifiers = None
    DistributionMetadata.download_url = None

if hasattr(distutils.dist.DistributionMetadata, 'get_platforms'):
    setup_args['platforms'] = 'win32 posix'

class test(Command):
    """
    Based off of http://mail.python.org/pipermail/distutils-sig/2002-January/002714.html
    """
    description  = "test the distribution prior to install"
    
    user_options = [
        ('verbosity=', 'l',
         "Set the verbosity on TestRunner",),
        ('test-dir=', None,
         "directory that contains the test definitions"),]
                 
    def initialize_options(self):
        self.test_dir = 'test'    
        self.verbosity = 1
        
    def finalize_options(self):
        build = self.get_finalized_command('build')
        self.build_purelib = build.build_purelib
        self.build_platlib = build.build_platlib
                                                                                           
    def run(self):
        import unittest
        self.run_command('build')
        self.run_command('build_ext')

        old_path = sys.path[:]
        sys.path.insert(0, self.build_purelib)
        sys.path.insert(0, self.build_platlib)
        sys.path.insert(0, os.path.join(os.getcwd(), self.test_dir))
        
        runner = unittest.TextTestRunner(verbosity=self.verbosity)
        suite = self.build_suite()
        runner.run(suite)
        
        sys.path = old_path[:]
                
    def build_suite(self):
        files = os.listdir(self.test_dir)
        test = re.compile("^test_.*.py$", re.IGNORECASE)
        files = filter(test.search, files)
        filenameToModuleName = lambda f: os.path.splitext(f)[0]
        moduleNames = map(filenameToModuleName, files)
        modules = map(__import__, moduleNames)
        load = unittest.defaultTestLoader.loadTestsFromModule
        return unittest.TestSuite(map(load, modules))                    

cmdclass['test'] = test

if __name__ == '__main__':
    distutils.core.setup(**setup_args)
