123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103(**************************************************************************)(* *)(* Copyright 2017-2018 OCamlPro *)(* *)(* All rights reserved. This file is distributed under the terms of the *)(* GNU Lesser General Public License version 2.1, with the special *)(* exception on linking described in the file LICENSE. *)(* *)(**************************************************************************)typecudf_package=Cudf.package={package:string;version:int;depends:Cudf_types.vpkgformula;conflicts:Cudf_types.vpkglist;provides:Cudf_types.veqpkglist;installed:bool;was_installed:bool;keep:[`Keep_version|`Keep_package|`Keep_feature|`Keep_none];pkg_extra:Cudf_types.typed_valueCudf_types.stanza;}typepreamble=Cudf.preamble={preamble_id:string;property:Cudf_types.typedecl;univ_checksum:string;status_checksum:string;req_checksum:string;}typerequest=Cudf.request={request_id:string;install:Cudf_types.vpkglist;remove:Cudf_types.vpkglist;upgrade:Cudf_types.vpkglist;req_extra:Cudf_types.typed_valueCudf_types.stanza;}typeproblemtypesolver_backend=[`GLPK|`LPofstring|`COIN_CLP|`COIN_CBC|`COIN_SYMPHONY]letdefault_solver=`GLPKexceptionTimeoutlet()=Callback.register_exception"Sys.Break"Sys.Breaklet()=Callback.register_exception"Mccs.Timeout"Timeoutexternalset_verbosity:int->unit="set_verbosity"externalgen_problem:preamble->problem="gen_problem"externaladd_package_to_problem:problem->cudf_package->unit="add_package_to_problem"externalset_problem_request:problem->request->unit="set_problem_request"externalcall_solver:solver_backend->string->int->problem->Cudf.packagelistoption="call_solver"externalbackends_list:unit->solver_backendlist="backends_list"letproblem_of_cudfcudf=letpreamble,universe,request=cudfinletpb=gen_problempreambleinCudf.iter_packages(add_package_to_problempb)universe;set_problem_requestpbrequest;pbletresolve_cudf?(verbose=false)?timeout?(solver=default_solver)criteria(preamble,_,_ascudf)=lettimeout=matchtimeoutwith|None->0|Somef->int_of_float(1000.*.f)inset_verbosity(ifverbosethen1else0);letpb=problem_of_cudfcudfinmatchcall_solversolvercriteriatimeoutpbwith|None->None|Somesol->letuniv=Cudf.load_universesolinSome(preamble,univ)letget_solver_id?(solver=default_solver)()="mccs+"^matchsolverwith|`GLPK->"glpk"|`LPcmd->Printf.sprintf"lp(%s)"cmd|`COIN_CLP->"coin/clp"|`COIN_CBC->"coin/cbc"|`COIN_SYMPHONY->"coin/symphony"letsolver_id=get_solver_id()letsupported_backends=backends_list()