Ejemplo n.º 1
0
    def parse(self, stats, options):
        log.debug('generating dependencies for package %s', self.package)

        pub_vers = sorted(stats['public_vers'].union(stats['ext']))
        if pub_vers:
            dbgpkg = self.package.endswith('-dbg')
            tpl = 'python-dbg' if dbgpkg else 'python'
            minv = pub_vers[0]
            maxv = pub_vers[-1]
            if dbgpkg:
                tpl2 = 'python%d.%d-dbg'
            else:
                tpl2 = 'python%d.%d'
            self.depend(' | '.join(tpl2 % i for i in debsorted(pub_vers)))

            # additional Depends to block python package transitions
            if minv <= DEFAULT:
                self.depend("%s (>= %d.%d)" % \
                            (tpl, minv[0], minv[1]))
            if maxv >= DEFAULT:
                self.depend("%s (<< %d.%d)" % \
                            (tpl, maxv[0], maxv[1] + 1))

        # make sure pycompile binary is available
        if stats['compile']:
            self.depend(MINPYCDEP)

        if not options.ignore_shebangs:
            for interpreter, version in stats['shebangs']:
                self.depend(interpreter)

        for private_dir, details in stats['private_dirs'].iteritems():
            if options.ignore_shebangs:
                versions = []
            else:
                versions = list(v for i, v in details.get('shebangs', []) if v)

            for v in versions:
                if v in SUPPORTED:
                    self.depend("python%d.%d" % v)
                else:
                    log.warn(
                        'dependency on python%s (from shebang) ignored'
                        ' - it\'s not supported anymore', vrepr(v))
            # /usr/bin/python shebang → add python to Depends
            if any(True for i, v in details.get('shebangs', []) if v is None):
                self.depend('python')

            if details.get('compile', False):
                self.depend(MINPYCDEP)
                args = ''
                vr = options.vrange
                if len(versions) == 1:  # only one version from shebang
                    args += "-V %s" % vrepr(versions[0])
                elif vr:
                    # if there are no hardcoded versions in shebang or there
                    # are scripts for different Python versions: compile with
                    # default Python version (or the one requested via X-P-V)
                    args += "-V %s" % vrange_str(vr)
                    if vr[0]:  # minimum version specified
                        self.depend("python (>= %s)" % vrepr(vr[0]))
                    if vr[1]:  # maximum version specified
                        self.depend("python (<< %s)" % vrepr(vr[1]))

                for pattern in options.regexpr or []:
                    args += " -X '%s'" % pattern.replace("'", r"'\''")
                self.rtscript((private_dir, args))

        if options.guess_deps:
            for fn in stats['requires.txt']:
                # TODO: should options.recommends and options.suggests be
                # removed from requires.txt?
                for i in parse_pydep(fn):
                    self.depend(i)

        # add dependencies from --depends
        for item in options.depends or []:
            self.depend(guess_dependency(item))
        # add dependencies from --recommends
        for item in options.recommends or []:
            self.recommend(guess_dependency(item))
        # add dependencies from --suggests
        for item in options.suggests or []:
            self.suggest(guess_dependency(item))

        log.debug(self)
Ejemplo n.º 2
0
    def parse(self, stats, options):
        log.debug("generating dependencies for package %s", self.package)

        pub_vers = sorted(stats["public_vers"].union(stats["ext"]))
        if pub_vers:
            dbgpkg = self.package.endswith("-dbg")
            tpl = "python-dbg" if dbgpkg else "python"
            minv = pub_vers[0]
            maxv = pub_vers[-1]
            if dbgpkg:
                tpl2 = "python%d.%d-dbg"
            else:
                tpl2 = "python%d.%d"
            self.depend(" | ".join(tpl2 % i for i in debsorted(pub_vers)))

            # additional Depends to block python package transitions
            if minv <= DEFAULT:
                self.depend("%s (>= %d.%d)" % (tpl, minv[0], minv[1]))
            if maxv >= DEFAULT:
                self.depend("%s (<< %d.%d)" % (tpl, maxv[0], maxv[1] + 1))

        # make sure pycompile binary is available
        if stats["compile"]:
            self.depend(MINPYCDEP)

        if not options.ignore_shebangs:
            for interpreter, version in stats["shebangs"]:
                self.depend(interpreter)

        for private_dir, details in stats["private_dirs"].iteritems():
            if options.ignore_shebangs:
                versions = []
            else:
                versions = list(v for i, v in details.get("shebangs", []) if v)

            for v in versions:
                if v in SUPPORTED:
                    self.depend("python%d.%d" % v)
                else:
                    log.warn("dependency on python%s (from shebang) ignored" " - it's not supported anymore", vrepr(v))
            # /usr/bin/python shebang → add python to Depends
            if any(True for i, v in details.get("shebangs", []) if v is None):
                self.depend("python")

            if details.get("compile", False):
                self.depend(MINPYCDEP)
                args = ""
                vr = options.vrange
                if len(versions) == 1:  # only one version from shebang
                    args += "-V %s" % vrepr(versions[0])
                elif vr:
                    # if there are no hardcoded versions in shebang or there
                    # are scripts for different Python versions: compile with
                    # default Python version (or the one requested via X-P-V)
                    args += "-V %s" % vrange_str(vr)
                    if vr[0] == vr[1]:
                        self.depend("python%s" % vrepr(vr[0]))
                    else:
                        if vr[0]:  # minimum version specified
                            self.depend("python (>= %s)" % vrepr(vr[0]))
                        if vr[1]:  # maximum version specified
                            self.depend("python (<< %s)" % vrepr((vr[1][0], int(vr[1][1]) + 1)))

                for pattern in options.regexpr or []:
                    args += " -X '%s'" % pattern.replace("'", r"'\''")
                self.rtscript((private_dir, args))

        if options.guess_deps:
            for fn in stats["requires.txt"]:
                # TODO: should options.recommends and options.suggests be
                # removed from requires.txt?
                for i in parse_pydep(fn):
                    self.depend(i)

        # add dependencies from --depends
        for item in options.depends or []:
            self.depend(guess_dependency(item))
        # add dependencies from --recommends
        for item in options.recommends or []:
            self.recommend(guess_dependency(item))
        # add dependencies from --suggests
        for item in options.suggests or []:
            self.suggest(guess_dependency(item))

        log.debug(self)
Ejemplo n.º 3
0
    def parse(self, stats, options):
        log.debug('generating dependencies for package %s', self.package)

        pub_vers = sorted(stats['public_vers'].union(stats['ext']))
        if pub_vers:
            dbgpkg = self.package.endswith('-dbg')
            tpl = 'python-dbg' if dbgpkg else 'python'
            minv = pub_vers[0]
            maxv = pub_vers[-1]
            # generating "python2.X | python2.Y | python2.Z" dependencies
            # disabled (see #625740):
            #if dbgpkg:
            #    tpl2 = 'python%d.%d-dbg'
            #else:
            #    tpl2 = 'python%d.%d'
            #self.depend(' | '.join(tpl2 % i for i in debsorted(pub_vers)))

            # additional Depends to block python package transitions
            if minv <= DEFAULT:
                self.depend("%s (>= %d.%d)" % \
                            (tpl, minv[0], minv[1]))
            if maxv >= DEFAULT:
                self.depend("%s (<< %d.%d)" % \
                            (tpl, maxv[0], maxv[1] + 1))

        # make sure pycompile binary is available
        if stats['compile']:
            self.depend(MINPYCDEP)

        for interpreter, version in stats['shebangs']:
            self.depend("%s:any" % interpreter)

        for private_dir, details in stats['private_dirs'].iteritems():
            versions = list(v for i, v in details.get('shebangs', []) if v)

            for v in versions:
                if v in SUPPORTED:
                    self.depend("python%d.%d:any" % v)
                else:
                    log.info('dependency on python%s (from shebang) ignored'
                             ' - it\'s not supported anymore', vrepr(v))
            # /usr/bin/python shebang → add python to Depends
            if any(True for i, v in details.get('shebangs', []) if v is None):
                self.depend('python:any')

            if details.get('compile', False):
                self.depend(MINPYCDEP)
                args = ''
                vr = options.vrange
                if len(versions) == 1:  # only one version from shebang
                    args += "-V %s" % vrepr(versions[0])
                elif vr:
                    # if there are no hardcoded versions in shebang or there
                    # are scripts for different Python versions: compile with
                    # default Python version (or the one requested via X-P-V)
                    args += "-V %s" % vrange_str(vr)
                    if vr == (None, None):
                        pass
                    elif vr[0] == vr[1]:
                        self.depend("python%s:any" % vrepr(vr[0]))
                    else:
                        if vr[0]:  # minimum version specified
                            self.depend("python:any (>= %s)" % vrepr(vr[0]))
                        if vr[1]:  # maximum version specified
                            self.depend("python:any (<< %d.%d)" % \
                                       (vr[1][0], vr[1][1] + 1))

                for pattern in options.regexpr or []:
                    args += " -X '%s'" % pattern.replace("'", r"'\''")
                self.rtscript((private_dir, args))

        if options.guess_deps:
            for fn in stats['requires.txt']:
                # TODO: should options.recommends and options.suggests be
                # removed from requires.txt?
                for i in parse_pydep(fn):
                    self.depend(i)

        # add dependencies from --depends
        for item in options.depends or []:
            self.depend(guess_dependency(item))
        # add dependencies from --recommends
        for item in options.recommends or []:
            self.recommend(guess_dependency(item))
        # add dependencies from --suggests
        for item in options.suggests or []:
            self.suggest(guess_dependency(item))

        log.debug(self)
Ejemplo n.º 4
0
    def parse(self, stats, options):
        log.debug('generating dependencies for package %s', self.package)

        pub_vers = sorted(stats['public_vers'].union(stats['public_ext']))
        if pub_vers:
            dbgpkg = self.package.endswith('-dbg')
            tpl = 'python-dbg' if dbgpkg else 'python'
            supported = sorted(SUPPORTED)
            min_supp = supported[0]
            max_supp = supported[-1]
            minv = pub_vers[0]
            maxv = pub_vers[-1]
            if dbgpkg:
                tpl2 = 'python%d.%d-dbg'
            else:
                tpl2 = 'python%d.%d'
            self.depend(' | '.join(tpl2 % i for i in debsorted(pub_vers)))

            # additional Breaks/Depends to block python package transitions
            if self.use_breaks:
                if minv <= min_supp:
                    self.break_("%s (<< %d.%d)" % \
                                (tpl, minv[0], minv[1]))
                if maxv >= max_supp:
                    self.break_("%s (>= %d.%d)" % \
                                (tpl, maxv[0], maxv[1] + 1))
            else:
                if minv <= DEFAULT:
                    self.depend("%s (>= %d.%d)" % \
                                (tpl, minv[0], minv[1]))
                if maxv >= DEFAULT:
                    self.depend("%s (<< %d.%d)" % \
                                (tpl, maxv[0], maxv[1] + 1))

        # make sure pycompile binary is available
        if stats['compile']:
            self.depend(MINPYCDEP)

        for interpreter, version in stats['shebangs']:
            self.depend(interpreter)

        for private_dir, details in stats['private_dirs'].iteritems():
            versions = list(v for i, v in details.get('shebangs', []) if v)
            if len(versions) > 1:
                log.error('more than one Python dependency from shebangs'
                          '(%s shebang versions: %s)', private_dir, versions)
                exit(13)
            elif len(versions) == 1:  # one hardcoded version
                self.depend("python%d.%d" % versions[0])
                # TODO: if versions[0] not in requested_versions: FTBFS
            elif details.get('compile', False):
                # no hardcoded versions, but there's something to compile
                self.depend(MINPYCDEP)
                args = ''
                vr = options.vrange
                if vr:
                    args += "-V %s" % vrange_str(vr)
                    if vr[0]:  # minimum version specified
                        self.depend("python (>= %s)" % vrepr(vr[0]))
                    if vr[1]:  # maximum version specified
                        self.depend("python (<< %s)" % vrepr(vr[1]))

                for pattern in options.regexpr or []:
                    args += " -X '%s'" % pattern.replace("'", r"\'")
                self.rtscript((private_dir, args))

        if options.guess_deps:
            for fn in stats['requires.txt']:
                # TODO: should options.recommends and options.suggests be
                # removed from requires.txt?
                for i in parse_pydep(fn):
                    self.depend(i)

        # add dependencies from --depends
        for item in options.depends or []:
            self.depend(guess_dependency(item))
        # add dependencies from --recommends
        for item in options.recommends or []:
            self.recommend(guess_dependency(item))
        # add dependencies from --suggests
        for item in options.suggests or []:
            self.suggest(guess_dependency(item))

        log.debug(self)