Commit 9997ecc2 authored by Christoph Groth's avatar Christoph Groth
Browse files

setup.py: use setuptools

parent e9999ec6
*~
MANIFEST
*.pyc
*.pyo
*.so
......@@ -15,3 +14,5 @@ MANIFEST
/doc/source/images/.*_flag
/doc/source/images/[a-zA-Z]*.py
/build.conf
/kwant.egg-info/
/MANIFEST.in
......@@ -17,17 +17,19 @@ import glob
import imp
import subprocess
import ConfigParser
from distutils.core import setup, Extension, Command
from distutils.util import get_platform
from setuptools import setup, Extension, Command
from sysconfig import get_platform
from distutils.errors import DistutilsError, DistutilsModuleError, \
CCompilerError
from distutils.command.build import build
from distutils.command.sdist import sdist
from setuptools.command.sdist import sdist
from setuptools.command.build_ext import build_ext
import numpy
CONFIG_FILE = 'build.conf'
README_FILE = 'README.rst'
MANIFEST_IN_FILE = 'MANIFEST.in'
README_END_BEFORE = 'See also in this directory:'
STATIC_VERSION_PATH = ('kwant', '_kwant_version.py')
REQUIRED_CYTHON_VERSION = (0, 22)
......@@ -72,11 +74,6 @@ if cythonize:
cython_version[-1] -= 1
cython_version = tuple(cython_version)
if cythonize and cython_version:
from Cython.Distutils import build_ext
else:
from distutils.command.build_ext import build_ext
distr_root = os.path.dirname(os.path.abspath(__file__))
def banner(title=''):
......@@ -95,6 +92,7 @@ Build configuration was:
"""
error_msg = error_msg.format(header=banner(' Error '), sep=banner())
class kwant_build_ext(build_ext):
def run(self):
if not config_file_present:
......@@ -150,30 +148,6 @@ class kwant_build(build):
write_version(os.path.join(self.build_lib, *STATIC_VERSION_PATH))
class kwant_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()
if not run(argv=[__file__, '-v', lib_dir]):
raise DistutilsError('at least one of the tests failed')
def git_lsfiles():
if not version_is_from_git:
return
......@@ -197,45 +171,42 @@ class kwant_sdist(sdist):
sub_commands = [('build', None)] + sdist.sub_commands
def run(self):
"""
Create MANIFEST.in from git if possible, otherwise check that MANIFEST.in
is present.
Right now (2015) generating MANIFEST.in seems to be the only way to
include files in the source distribution that setuptools does not think
should be there. Setting include_package_data to True makes setuptools
include *.pyx and other source files in the binary distribution.
"""
manifest = os.path.join(distr_root, MANIFEST_IN_FILE)
names = git_lsfiles()
trustworthy = True
if names is None:
# Check that MANIFEST exists and has not been generated by
# distutils.
try:
with open(distr_root + '/MANIFEST', 'r') as f:
line = f.read()
except IOError:
print("Error: MANIFEST file is missing and Git is not"
" available to regenerate it.", file=sys.stderr)
if not (os.path.isfile(manifest) and os.access(manifest, os.R_OK)):
print("Error:", MANIFEST_IN_FILE,
"file is missing and Git is not available"
" to regenerate it.", file=sys.stderr)
exit(1)
trustworthy = not line.strip().startswith('#')
else:
# Generate MANIFEST file.
with open(distr_root + '/MANIFEST', 'w') as f:
with open(manifest, 'w') as f:
for name in names:
a, sep, b = name.rpartition('/')
if b == '.gitignore':
continue
stem, dot, extension = b.rpartition('.')
f.write('include {}'.format(name))
if extension == 'pyx':
f.write(''.join([a, sep, stem, dot, 'c', '\n']))
f.write(name + '\n')
f.write('MANIFEST\n')
f.write(''.join([' ', a, sep, stem, dot, 'c']))
f.write('\n')
sdist.run(self)
if names is None:
print(banner(' Warning '),
"""Git was not available for re-generating the MANIFEST file (the list of file
names to be included in the source distribution). The old MANIFEST was used.""",
banner(),
sep='\n', file=sys.stderr)
if not trustworthy:
print(banner(' Warning '),
"""The existing MANIFEST file seems to have been generated by distutils (it begins
with a comment). It may well be incomplete.""",
"""Git was not available to generate the list of files to be included in the
source distribution. The old MANIFEST.in was used.""",
banner(),
sep='\n', file=sys.stderr)
......@@ -301,9 +272,7 @@ def search_mumps():
def extensions():
"""Return a list of tuples (args, kwrds) to be passed to
Extension. possibly after replacing ".pyx" with ".c" if Cython is not to be
used."""
"""Return a list of tuples (args, kwrds) to be passed to Extension."""
global build_summary, config_file_present
build_summary = []
......@@ -476,13 +445,16 @@ def main():
url="http://kwant-project.org/",
license="BSD",
packages=packages(),
test_suite = 'nose.collector',
cmdclass={'build': kwant_build,
'sdist': kwant_sdist,
'build_ext': kwant_build_ext,
'build_tut': kwant_build_tut,
'test': kwant_test},
'build_tut': kwant_build_tut},
ext_modules=ext_modules(extensions()),
include_dirs=[numpy.get_include()])
include_dirs=[numpy.get_include()],
setup_requires=['numpy > 1.6.1', 'nose >= 1.0'],
install_requires=['numpy > 1.6.1', 'scipy >= 0.9', 'tinyarray'],
extras_require={'plotting': 'matplotlib >= 1.2'})
if __name__ == '__main__':
main()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment