def get_pin_from_build(m, dep, build_dep_versions): dep_split = dep.split() dep_name = dep_split[0] build = '' if len(dep_split) >= 3: build = dep_split[2] pin = None version = build_dep_versions.get(dep_name) or m.config.variant.get( dep_name) if (version and dep_name in m.config.variant.get('pin_run_as_build', {}) and not (dep_name == 'python' and (m.noarch or m.noarch_python)) and dep_name in build_dep_versions): pin_cfg = m.config.variant['pin_run_as_build'][dep_name] if isinstance(pin_cfg, str): # if pin arg is a single 'x.x', use the same value for min and max pin_cfg = dict(min_pin=pin_cfg, max_pin=pin_cfg) pin = utils.apply_pin_expressions(version.split()[0], **pin_cfg) elif dep.startswith('numpy') and 'x.x' in dep: if not build_dep_versions.get(dep_name): raise ValueError( "numpy x.x specified, but numpy not in build requirements.") pin = utils.apply_pin_expressions(version.split()[0], min_pin='x.x', max_pin='x.x') if pin: dep = " ".join((dep_name, pin, build)).strip() return dep
def get_pin_from_build(m, dep, build_dep_versions): dep_name = dep.split()[0] pin = None version = build_dep_versions.get(dep_name) or m.config.variant.get(dep_name) if (version and dep_name in m.config.variant.get('pin_run_as_build', {}) and not (dep_name == 'python' and m.noarch)): pin = utils.apply_pin_expressions(version.split()[0], **m.config.variant['pin_run_as_build'][dep_name]) elif dep.startswith('numpy') and 'x.x' in dep: if not build_dep_versions.get(dep_name): raise ValueError("numpy x.x specified, but numpy not in build requirements.") pin = utils.apply_pin_expressions(version.split()[0], min_pin='p.p', max_pin='p.p') if pin: dep = " ".join((dep_name, pin)) return dep
def eval_pin_compatible(self, build, host): lower_bound, upper_bound, min_pin, max_pin, exact = self.splitted[1][ len("PIN_COMPATIBLE") + 1 : -1 ].split(",") if lower_bound == "None": lower_bound = None if upper_bound == "None": upper_bound = None exact = exact == "True" versions = {b.name: b for b in build} versions.update({h.name: h for h in host}) if versions: if exact and versions.get(self.name): compatibility = " ".join(versions[self.name].final_version) else: version = lower_bound or versions.get(self.name).final_version[0] if version: if upper_bound: if min_pin or lower_bound: compatibility = ">=" + str(version) + "," compatibility += "<{upper_bound}".format( upper_bound=upper_bound ) else: compatibility = apply_pin_expressions(version, min_pin, max_pin) self.final = ( " ".join((self.name, compatibility)) if compatibility is not None else self.name )
def get_pin_from_build(m, dep, build_dep_versions): dep_name = dep.split()[0] pin = None version = build_dep_versions.get(dep_name) or m.config.variant.get(dep_name) if (version and dep_name in m.config.variant.get('pin_run_as_build', {}) and not (dep_name == 'python' and (m.noarch or m.noarch_python)) and dep_name in build_dep_versions): pin_cfg = m.config.variant['pin_run_as_build'][dep_name] if isinstance(pin_cfg, str): # if pin arg is a single 'x.x', use the same value for min and max pin_cfg = dict(min_pin=pin_cfg, max_pin=pin_cfg) pin = utils.apply_pin_expressions(version.split()[0], **pin_cfg) elif dep.startswith('numpy') and 'x.x' in dep: if not build_dep_versions.get(dep_name): raise ValueError("numpy x.x specified, but numpy not in build requirements.") pin = utils.apply_pin_expressions(version.split()[0], min_pin='x.x', max_pin='x.x') if pin: dep = " ".join((dep_name, pin)) return dep