404

[ Avaa Bypassed ]




Upload:

Command:

botdev@18.190.207.74: ~ $
"""distutils.command.build_scripts

Implements the Distutils 'build_scripts' command."""

__revision__ = "$Id$"

import os, re
from stat import ST_MODE
from distutils.core import Command
from distutils.dep_util import newer
from distutils.util import convert_path
from distutils import log

# check if Python is called on the first line with this expression
first_line_re = re.compile('^#!.*python[0-9.]*([ \t].*)?$')

class build_scripts (Command):

    description = "\"build\" scripts (copy and fixup #! line)"

    user_options = [
        ('build-dir=', 'd', "directory to \"build\" (copy) to"),
        ('force', 'f', "forcibly build everything (ignore file timestamps"),
        ('executable=', 'e', "specify final destination interpreter path"),
        ]

    boolean_options = ['force']


    def initialize_options (self):
        self.build_dir = None
        self.scripts = None
        self.force = None
        self.executable = None
        self.outfiles = None

    def finalize_options (self):
        self.set_undefined_options('build',
                                   ('build_scripts', 'build_dir'),
                                   ('force', 'force'),
                                   ('executable', 'executable'))
        self.scripts = self.distribution.scripts

    def get_source_files(self):
        return self.scripts

    def run (self):
        if not self.scripts:
            return
        self.copy_scripts()


    def copy_scripts (self):
        """Copy each script listed in 'self.scripts'; if it's marked as a
        Python script in the Unix way (first line matches 'first_line_re',
        ie. starts with "\#!" and contains "python"), then adjust the first
        line to refer to the current Python interpreter as we copy.
        """
        _sysconfig = __import__('sysconfig')
        self.mkpath(self.build_dir)
        outfiles = []
        for script in self.scripts:
            adjust = 0
            script = convert_path(script)
            outfile = os.path.join(self.build_dir, os.path.basename(script))
            outfiles.append(outfile)

            if not self.force and not newer(script, outfile):
                log.debug("not copying %s (up-to-date)", script)
                continue

            # Always open the file, but ignore failures in dry-run mode --
            # that way, we'll get accurate feedback if we can read the
            # script.
            try:
                f = open(script, "r")
            except IOError:
                if not self.dry_run:
                    raise
                f = None
            else:
                first_line = f.readline()
                if not first_line:
                    self.warn("%s is an empty file (skipping)" % script)
                    continue

                match = first_line_re.match(first_line)
                if match:
                    adjust = 1
                    post_interp = match.group(1) or ''

            if adjust:
                log.info("copying and adjusting %s -> %s", script,
                         self.build_dir)
                if not self.dry_run:
                    outf = open(outfile, "w")
                    if not _sysconfig.is_python_build():
                        outf.write("#!%s%s\n" %
                                   (self.executable,
                                    post_interp))
                    else:
                        outf.write("#!%s%s\n" %
                                   (os.path.join(
                            _sysconfig.get_config_var("BINDIR"),
                           "python%s%s" % (_sysconfig.get_config_var("VERSION"),
                                           _sysconfig.get_config_var("EXE"))),
                                    post_interp))
                    outf.writelines(f.readlines())
                    outf.close()
                if f:
                    f.close()
            else:
                if f:
                    f.close()
                self.copy_file(script, outfile)

        if os.name == 'posix':
            for file in outfiles:
                if self.dry_run:
                    log.info("changing mode of %s", file)
                else:
                    oldmode = os.stat(file)[ST_MODE] & 07777
                    newmode = (oldmode | 0555) & 07777
                    if newmode != oldmode:
                        log.info("changing mode of %s from %o to %o",
                                 file, oldmode, newmode)
                        os.chmod(file, newmode)

    # copy_scripts ()

# class build_scripts

Filemanager

Name Type Size Permission Actions
__init__.py File 822 B 0644
__init__.pyc File 663 B 0644
bdist.py File 5.46 KB 0644
bdist.pyc File 5.04 KB 0644
bdist_dumb.py File 5.07 KB 0644
bdist_dumb.pyc File 4.86 KB 0644
bdist_msi.py File 34.37 KB 0644
bdist_msi.pyc File 23.37 KB 0644
bdist_rpm.py File 20.56 KB 0644
bdist_rpm.pyc File 17.18 KB 0644
bdist_wininst.py File 14.84 KB 0644
bdist_wininst.pyc File 10.63 KB 0644
build.py File 5.39 KB 0644
build.pyc File 5.01 KB 0644
build_clib.py File 7.94 KB 0644
build_clib.pyc File 6.18 KB 0644
build_ext.py File 31.53 KB 0644
build_ext.pyc File 18.81 KB 0644
build_py.py File 15.96 KB 0644
build_py.pyc File 11.18 KB 0644
build_scripts.py File 4.49 KB 0644
build_scripts.pyc File 4.36 KB 0644
check.py File 5.54 KB 0644
check.pyc File 6.09 KB 0644
clean.py File 2.75 KB 0644
clean.pyc File 2.99 KB 0644
command_template File 719 B 0644
config.py File 12.82 KB 0644
config.pyc File 12.35 KB 0644
install.py File 27.34 KB 0644
install.pyc File 17.47 KB 0644
install_data.py File 2.78 KB 0644
install_data.pyc File 3.03 KB 0644
install_egg_info.py File 3.51 KB 0644
install_egg_info.pyc File 4.25 KB 0644
install_headers.py File 1.31 KB 0644
install_headers.pyc File 2.19 KB 0644
install_lib.py File 8.14 KB 0644
install_lib.pyc File 6.5 KB 0644
install_scripts.py File 2.02 KB 0644
install_scripts.pyc File 2.85 KB 0644
register.py File 11.56 KB 0644
register.pyc File 9.94 KB 0644
sdist.py File 18.12 KB 0644
sdist.pyc File 16.27 KB 0644
upload.py File 6.84 KB 0644
upload.pyc File 6.15 KB 0644