| 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 |
| from distutils.file_util import write_file |
| |
| old_install = old_install_mod.install |
| |
| class install(old_install): |
| |
| # Always run install_clib - the command is cheap, so no need to bypass it; |
| # but it's not run by setuptools -- so it's run again in install_data |
| sub_commands = old_install.sub_commands + [ |
| ('install_clib', lambda x: True) |
| ] |
| |
| def finalize_options (self): |
| 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. |
| """ |
| from distutils.command.install import install as distutils_install |
| |
| # Explicit request for old-style install? Just do it |
| if self.old_and_unmanageable or self.single_version_externally_managed: |
| return distutils_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. |
| distutils_install.run(self) |
| else: |
| self.do_egg_install() |
| |
| def 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 |
| # with double-quotes. |
| with open(self.record) as f: |
| lines = [] |
| need_rewrite = False |
| for l in f: |
| l = l.rstrip() |
| if ' ' in l: |
| need_rewrite = True |
| l = '"%s"' % (l) |
| lines.append(l) |
| if need_rewrite: |
| self.execute(write_file, |
| (self.record, lines), |
| "re-writing list of installed files to '%s'" % |
| self.record) |
| return r |