You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					80 lines
				
				3.0 KiB
			
		
		
			
		
	
	
					80 lines
				
				3.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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
							 |