def __init__(self, options, impl='cpython3'): self.options = options self.packages = {} self.python_version = None source_section = True binary_package = None # Note that each DebHelper instance supports ONE interpreter type only # it's not possible to mix cpython2, cpython3 and pypy here self.impl = impl skip_tpl = set() for name, tpls in PKG_NAME_TPLS.items(): if name != impl: skip_tpl.update(tpls) skip_tpl = tuple(skip_tpl) pkgs = options.package skip_pkgs = options.no_package try: fp = open('debian/control', 'r', encoding='utf-8') except IOError: raise Exception('cannot find debian/control file') for line in fp: if not line.strip(): source_section = False binary_package = None continue line_l = line.lower() # field names are case-insensitive if binary_package: if binary_package not in self.packages: continue if line_l.startswith('architecture:'): arch = line[13:].strip() # TODO: if arch doesn't match current architecture: #del self.packages[binary_package] self.packages[binary_package]['arch'] = arch continue elif line_l.startswith('package:'): binary_package = line[8:].strip() if skip_tpl and binary_package.startswith(skip_tpl): log.debug('skipping package: %s', binary_package) continue if pkgs and binary_package not in pkgs: continue if skip_pkgs and binary_package in skip_pkgs: continue self.packages[binary_package] = { 'substvars': {}, 'autoscripts': {}, 'rtupdates': [], 'arch': 'any' } elif line_l.startswith('source:'): self.source_name = line[7:].strip() elif source_section and self.impl == 'cpython3' and line_l.startswith( 'x-python3-version:'): self.python_version = line[18:] if len(self.python_version.split(',')) > 2: raise ValueError( 'too many arguments provided for X-Python3-Version: min and max only.' ) elif source_section and self.impl == 'cpython2': if line_l.startswith('xs-python-version:'): if not self.python_version: self.python_version = line[18:].strip() if line_l.startswith('x-python-version:'): self.python_version = line[17:].strip() fp.close() log.debug('source=%s, binary packages=%s', self.source_name, list(self.packages.keys()))
def __init__(self, options, impl='cpython3'): self.options = options self.packages = {} self.build_depends = {} self.python_version = None source_section = True binary_package = None build_depends_line = '' inside_bdepends_field = False # Note that each DebHelper instance supports ONE interpreter type only # it's not possible to mix cpython2, cpython3 and pypy here self.impl = impl skip_tpl = set() for name, tpls in PKG_NAME_TPLS.items(): if name != impl: skip_tpl.update(tpls) skip_tpl = tuple(skip_tpl) substvar = DEPENDS_SUBSTVARS[impl] pkgs = options.package skip_pkgs = options.no_package try: fp = open('debian/control', 'r', encoding='utf-8') except IOError: raise Exception('cannot find debian/control file') for line in fp: if line.startswith('#'): continue if not line.strip(): source_section = False binary_package = None inside_depends_field = False continue line_l = line.lower() # field names are case-insensitive if binary_package: if binary_package not in self.packages: continue if line_l.startswith('architecture:'): arch = line[13:].strip() if options.arch is False and arch != 'all' or\ options.arch is True and arch == 'all': # TODO: check also if arch matches current architecture: del self.packages[binary_package] else: self.packages[binary_package]['arch'] = arch continue if not binary_package.startswith(PKG_NAME_TPLS[impl]): # package doesn't have common prefix (python-, python3-, pypy-) # so lets check if Depends contains appropriate substvar if line_l.startswith('depends:'): if substvar in line: continue inside_depends_field = True elif inside_depends_field: # multiline continuation if not line.startswith((' ', '\t')): inside_depends_field = False log.debug( 'skipping package %s (missing %s in Depends)', binary_package, substvar) del self.packages[binary_package] elif substvar in line: inside_depends_field = None elif line_l.startswith('package:'): binary_package = line[8:].strip() if skip_tpl and binary_package.startswith(skip_tpl): log.debug('skipping package: %s', binary_package) continue if pkgs and binary_package not in pkgs: continue if skip_pkgs and binary_package in skip_pkgs: continue self.packages[binary_package] = { 'substvars': {}, 'autoscripts': {}, 'rtupdates': [], 'arch': 'any' } elif line_l.startswith('source:'): self.source_name = line[7:].strip() elif source_section and self.impl == 'cpython3' and line_l.startswith( 'x-python3-version:'): self.python_version = line[18:] if len(self.python_version.split(',')) > 2: raise ValueError( 'too many arguments provided for X-Python3-Version: min and max only.' ) elif source_section and self.impl == 'cpython2': if line_l.startswith('xs-python-version:'): if not self.python_version: self.python_version = line[18:].strip() if line_l.startswith('x-python-version:'): self.python_version = line[17:].strip() elif source_section and line_l.startswith( ('build-depends:', 'build-depends-indep:')): inside_bdepends_field = True build_depends_line += ',' + line.split(':', 1)[1].strip(', \t\n') elif inside_bdepends_field: # multiline continuation if not line.startswith((' ', '\t', '#')): inside_bdepends_field = False elif not line.strip().startswith('#'): build_depends_line += ',' + line.strip(', \t\n') for dep1 in build_depends_line.strip(', \t').split(','): for dep2 in dep1.split('|'): details = parse_dep(dep2) if details: details = details.groupdict() if details['arch']: architectures = details['arch'].split() else: architectures = [None] for arch in architectures: self.build_depends.setdefault( details['name'], {})[arch] = details['version'] fp.close() log.debug('source=%s, binary packages=%s', self.source_name, list(self.packages.keys()))
def __init__(self, options, impl='cpython3'): self.options = options self.packages = {} self.python_version = None source_section = True binary_package = None # Note that each DebHelper instance supports ONE interpreter type only # it's not possible to mix cpython2, cpython3 and pypy here self.impl = impl skip_tpl = set() for name, tpls in PKG_NAME_TPLS.items(): if name != impl: skip_tpl.update(tpls) skip_tpl = tuple(skip_tpl) pkgs = options.package skip_pkgs = options.no_package try: fp = open('debian/control', 'r', encoding='utf-8') except IOError: raise Exception('cannot find debian/control file') for line in fp: if not line.strip(): source_section = False binary_package = None continue line_l = line.lower() # field names are case-insensitive if binary_package: if binary_package not in self.packages: continue if line_l.startswith('architecture:'): arch = line[13:].strip() # TODO: if arch doesn't match current architecture: #del self.packages[binary_package] self.packages[binary_package]['arch'] = arch continue elif line_l.startswith('package:'): binary_package = line[8:].strip() if skip_tpl and binary_package.startswith(skip_tpl): log.debug('skipping package: %s', binary_package) continue if pkgs and binary_package not in pkgs: continue if skip_pkgs and binary_package in skip_pkgs: continue self.packages[binary_package] = {'substvars': {}, 'autoscripts': {}, 'rtupdates': [], 'arch': 'any'} elif line_l.startswith('source:'): self.source_name = line[7:].strip() elif source_section and self.impl == 'cpython3' and line_l.startswith('x-python3-version:'): self.python_version = line[18:] if len(self.python_version.split(',')) > 2: raise ValueError('too many arguments provided for X-Python3-Version: min and max only.') elif source_section and self.impl == 'cpython2': if line_l.startswith('xs-python-version:'): if not self.python_version: self.python_version = line[18:].strip() if line_l.startswith('x-python-version:'): self.python_version = line[17:].strip() fp.close() log.debug('source=%s, binary packages=%s', self.source_name, list(self.packages.keys()))
def __init__(self, options, impl='cpython3'): self.options = options self.packages = {} self.build_depends = {} self.python_version = None source_section = True binary_package = None build_depends_line = '' inside_bdepends_field = False # Note that each DebHelper instance supports ONE interpreter type only # it's not possible to mix cpython2, cpython3 and pypy here self.impl = impl skip_tpl = set() for name, tpls in PKG_NAME_TPLS.items(): if name != impl: skip_tpl.update(tpls) skip_tpl = tuple(skip_tpl) substvar = DEPENDS_SUBSTVARS[impl] pkgs = options.package skip_pkgs = options.no_package try: fp = open('debian/control', 'r', encoding='utf-8') except IOError: raise Exception('cannot find debian/control file') for line in fp: if line.startswith('#'): continue if not line.strip(): source_section = False binary_package = None inside_depends_field = False continue line_l = line.lower() # field names are case-insensitive if binary_package: if binary_package not in self.packages: continue if line_l.startswith('architecture:'): arch = line[13:].strip() if options.arch is False and arch != 'all' or\ options.arch is True and arch == 'all': # TODO: check also if arch matches current architecture: del self.packages[binary_package] else: self.packages[binary_package]['arch'] = arch continue if not binary_package.startswith(PKG_NAME_TPLS[impl]): # package doesn't have common prefix (python-, python3-, pypy-) # so lets check if Depends contains appropriate substvar if line_l.startswith('depends:'): if substvar in line: continue inside_depends_field = True elif inside_depends_field: # multiline continuation if not line.startswith((' ', '\t')): inside_depends_field = False log.debug('skipping package %s (missing %s in Depends)', binary_package, substvar) del self.packages[binary_package] elif substvar in line: inside_depends_field = None elif line_l.startswith('package:'): binary_package = line[8:].strip() if skip_tpl and binary_package.startswith(skip_tpl): log.debug('skipping package: %s', binary_package) continue if pkgs and binary_package not in pkgs: continue if skip_pkgs and binary_package in skip_pkgs: continue self.packages[binary_package] = {'substvars': {}, 'autoscripts': {}, 'rtupdates': [], 'arch': 'any'} elif line_l.startswith('source:'): self.source_name = line[7:].strip() elif source_section and self.impl == 'cpython3' and line_l.startswith('x-python3-version:'): self.python_version = line[18:] if len(self.python_version.split(',')) > 2: raise ValueError('too many arguments provided for X-Python3-Version: min and max only.') elif source_section and self.impl == 'cpython2': if line_l.startswith('xs-python-version:'): if not self.python_version: self.python_version = line[18:].strip() if line_l.startswith('x-python-version:'): self.python_version = line[17:].strip() elif source_section and line_l.startswith(('build-depends:', 'build-depends-indep:')): inside_bdepends_field = True build_depends_line += ',' + line.split(':', 1)[1].strip(', \t\n') elif inside_bdepends_field: # multiline continuation if not line.startswith((' ', '\t', '#')): inside_bdepends_field = False elif not line.strip().startswith('#'): build_depends_line += ',' + line.strip(', \t\n') for dep1 in build_depends_line.strip(', \t').split(','): for dep2 in dep1.split('|'): details = parse_dep(dep2) if details: details = details.groupdict() if details['arch']: architectures = details['arch'].split() else: architectures = [None] for arch in architectures: self.build_depends.setdefault(details['name'], {})[arch] = details['version'] fp.close() log.debug('source=%s, binary packages=%s', self.source_name, list(self.packages.keys()))