123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566typerejection=UserConstraintofOpamFormula.atomtypet={st:OpamStateTypes.unlockedOpamStateTypes.switch_state;(* To load the opam files *)pkgs:OpamTypes.version_setOpamTypes.name_map;(* All available versions *)constraints:OpamFormula.version_constraintOpamTypes.name_map;(* User-provided constraints *)test:OpamPackage.Name.Set.t;prefer_oldest:bool;}letloadtpkg=tryOpamSwitchState.opamt.stpkgwithNot_found->failwith(Format.asprintf"Package %S not found!"(OpamPackage.to_stringpkg))letuser_restrictionstname=OpamPackage.Name.Map.find_optnamet.constraintsletenvtpkgv=ifList.memvOpamPackageVar.predefined_depends_variablesthenNoneelse(letr=OpamPackageVar.resolve_switch~package:pkgt.stvinifr=NonethenOpamConsole.warning"Unknown variable %S in package %S"(OpamVariable.Full.to_stringv)(OpamPackage.to_stringpkg);r)letfilter_depstpkgf=lettest=OpamPackage.Name.Set.mem(OpamPackage.namepkg)t.testinf|>OpamFilter.partial_filter_formula(envtpkg)|>OpamFilter.filter_deps~build:true~post:true~test~doc:false~dev:false~dev_setup:false~default:falseletsort_versionstversions=ift.prefer_oldestthenversionselseList.revversionsletcandidatestname=letuser_constraints=user_restrictionstnameinmatchOpamPackage.Name.Map.find_optnamet.pkgswith|Someversions->OpamPackage.Version.Set.elementsversions|>sort_versionst(* Higher versions are preferred. *)|>List.map(funv->matchuser_constraintswith|Sometestwhennot(OpamFormula.check_version_formula(OpamFormula.Atomtest)v)->v,Error(UserConstraint(name,Sometest))|_->letopam=loadt(OpamPackage.createnamev)in(* Note: [OpamStateTypes.available_packages] filters out unavailable packages for us. *)v,Okopam)|None->OpamConsole.log"opam-0install""Package %S not found!"(OpamPackage.Name.to_stringname);[]letpp_rejectionf=function|UserConstraintx->Fmt.pff"Rejected by user-specified constraint %s"(OpamFormula.string_of_atomx)letcreate?(prefer_oldest=false)?(test=OpamPackage.Name.Set.empty)~constraintsst=letpkgs=Lazy.forcest.OpamStateTypes.available_packages|>OpamPackage.to_mapin{st;pkgs;constraints;test;prefer_oldest}