82 lines
3.1 KiB
Python
82 lines
3.1 KiB
Python
from __future__ import division, absolute_import, print_function
|
|
|
|
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, 'r') 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
|