From 04edb8988e1ad3dcf892c0f5f6aa3045aae42afa Mon Sep 17 00:00:00 2001
From: Christoph Groth <christoph.groth@cea.fr>
Date: Tue, 20 Dec 2016 16:41:46 +0100
Subject: [PATCH] setup.py: stop using the setup_requires option to setup

Packages that are mentionned there are installed in a way that bypasses
pip:
https://pip.pypa.io/en/stable/user_guide/?highlight=setup_requires#installation-bundles
---
 setup.py | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/setup.py b/setup.py
index 148d746e..c6ef0458 100755
--- a/setup.py
+++ b/setup.py
@@ -33,10 +33,17 @@ from distutils.errors import DistutilsError, DistutilsModuleError, \
 from distutils.command.build import build as build_orig
 from setuptools.command.sdist import sdist as sdist_orig
 from setuptools.command.build_ext import build_ext as build_ext_orig
+from setuptools.command.test import test as test_orig
+
+def banner(title=''):
+    starred = title.center(79, '*')
+    return '\n' + starred if title else starred
 
 try:
     import numpy
 except ImportError:
+    print(banner(' Caution '), 'NumPy header directory cannot be determined'
+          ' ("import numpy" failed).', banner(), sep='\n', file=sys.stderr)
     include_dirs = []
 else:
     include_dirs = [numpy.get_include()]
@@ -103,10 +110,6 @@ if use_cython:
 
 distr_root = os.path.dirname(os.path.abspath(__file__))
 
-def banner(title=''):
-    starred = title.center(79, '*')
-    return '\n' + starred if title else starred
-
 error_msg = """{header}
 The compilation of Kwant has failed.  Please examine the error message
 above and consult the installation instructions in README.rst.
@@ -236,10 +239,23 @@ source distribution.  The old {} was used.""".format(MANIFEST_IN_FILE),
                   banner(), sep='\n', file=sys.stderr)
 
     def make_release_tree(self, base_dir, files):
-        sdist.make_release_tree(self, base_dir, files)
+        sdist_orig.make_release_tree(self, base_dir, files)
         write_version(os.path.join(base_dir, *STATIC_VERSION_PATH))
 
 
+# The only purpose of this class is to provide a better error message when
+# "nose" is not available.
+class test(test_orig):
+    def run(self):
+        try:
+            import nose
+        except ImportError:
+            print('The Python package "nose" is required to run tests.',
+                  file=sys.stderr)
+            exit(1)
+        test_orig.run(self)
+
+
 def write_version(fname):
     # This could be a hard link, so try to delete it first.  Is there any way
     # to do this atomically together with opening?
@@ -484,10 +500,10 @@ def main():
           cmdclass={'build': build,
                     'sdist': sdist,
                     'build_ext': build_ext,
-                    'build_tut': build_tut},
+                    'build_tut': build_tut,
+                    'test': test},
           ext_modules=ext_modules(extensions()),
           include_dirs=include_dirs,
-          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'},
           classifiers=[c.strip() for c in CLASSIFIERS.split('\n')])
-- 
GitLab