summaryrefslogtreecommitdiff
path: root/numpy/distutils/command/install.py
diff options
context:
space:
mode:
authorRobert Kern <robert.kern@gmail.com>2008-09-18 21:48:57 +0000
committerRobert Kern <robert.kern@gmail.com>2008-09-18 21:48:57 +0000
commit4abde4ab7cd688e38dc2b935eac07594a06db286 (patch)
treef679d252b32d5030abd9d9d5f750acfc2064f20c /numpy/distutils/command/install.py
parentcfc88c90c9536dac8c739be22c87769c6e2bda4a (diff)
downloadnumpy-4abde4ab7cd688e38dc2b935eac07594a06db286.tar.gz
BUG: Override setuptools' install.run() method to correctly allow 'python setup.py install' to work.
Diffstat (limited to 'numpy/distutils/command/install.py')
-rw-r--r--numpy/distutils/command/install.py37
1 files changed, 36 insertions, 1 deletions
diff --git a/numpy/distutils/command/install.py b/numpy/distutils/command/install.py
index 36e6b5a66..87b549da8 100644
--- a/numpy/distutils/command/install.py
+++ b/numpy/distutils/command/install.py
@@ -1,8 +1,10 @@
import sys
if 'setuptools' in sys.modules:
import setuptools.command.install as old_install_mod
+ have_setuptools = True
else:
import distutils.command.install as old_install_mod
+ have_setuptools = False
old_install = old_install_mod.install
from distutils.file_util import write_file
@@ -12,8 +14,41 @@ class install(old_install):
old_install.finalize_options(self)
self.install_lib = self.install_libbase
+ def setuptools_run(self):
+ """ The setuptools version of the .run() method.
+
+ We must pull in the entire code so we can override the level used in the
+ _getframe() call since we wrap this call by one more level.
+ """
+ # Explicit request for old-style install? Just do it
+ if self.old_and_unmanageable or self.single_version_externally_managed:
+ return old_install_mod._install.run(self)
+
+ # Attempt to detect whether we were called from setup() or by another
+ # command. If we were called by setup(), our caller will be the
+ # 'run_command' method in 'distutils.dist', and *its* caller will be
+ # the 'run_commands' method. If we were called any other way, our
+ # immediate caller *might* be 'run_command', but it won't have been
+ # called by 'run_commands'. This is slightly kludgy, but seems to
+ # work.
+ #
+ caller = sys._getframe(3)
+ caller_module = caller.f_globals.get('__name__','')
+ caller_name = caller.f_code.co_name
+
+ if caller_module != 'distutils.dist' or caller_name!='run_commands':
+ # We weren't called from the command line or setup(), so we
+ # should run in backward-compatibility mode to support bdist_*
+ # commands.
+ old_install_mod._install.run(self)
+ else:
+ self.do_egg_install()
+
def run(self):
- r = old_install.run(self)
+ if not have_setuptools:
+ r = old_install.run(self)
+ else:
+ r = self.setuptools_run()
if self.record:
# bdist_rpm fails when INSTALLED_FILES contains
# paths with spaces. Such paths must be enclosed