diff --git a/setup.py b/setup.py index f1b76a6ffc56eca97d9b07fe034b56e0113f2238..6c725139c818261058d4910c09981a81b21dd205 100755 --- a/setup.py +++ b/setup.py @@ -23,9 +23,10 @@ import os import glob import subprocess import ConfigParser -from distutils.core import setup, Command -from distutils.extension import Extension -from distutils.errors import DistutilsError, CCompilerError +from distutils.core import setup, Extension, Command +from distutils.util import get_platform +from distutils.errors import DistutilsError, DistutilsModuleError, \ + CCompilerError from distutils.command.build import build as distutils_build from distutils.command.sdist import sdist as distutils_sdist import numpy @@ -101,6 +102,30 @@ class kwant_build(distutils_build): sub_commands = [('build_tut', None)] + distutils_build.sub_commands +class test(Command): + description = "build, then run the unit tests" + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + try: + from nose.core import run + except ImportError: + raise DistutilsModuleError('nose <http://nose.readthedocs.org/> ' + 'is needed to run the tests') + self.run_command('build') + major, minor = sys.version_info[:2] + lib_dir = "build/lib.{0}-{1}.{2}".format(get_platform(), major, minor) + print '**************** Tests ****************' + if not run(argv=[__file__, '-v', lib_dir]): + raise DistutilsError('at least one of the tests failed') + + def git_lsfiles(): try: p = subprocess.Popen(['git', 'ls-files'], cwd=kwant_dir, @@ -410,7 +435,8 @@ def main(): cmdclass={'build': kwant_build, 'sdist': kwant_sdist, 'build_ext': kwant_build_ext, - 'build_tut': build_tut}, + 'build_tut': build_tut, + 'test': test}, ext_modules=ext_modules(extensions()), include_dirs=[numpy.get_include()])