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)
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)
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)
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)