123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136(**************************************************************************)(* *)(* Copyright 2016 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. *)(* *)(**************************************************************************)openOpamTypesletrepository_url={OpamUrl.transport="https";path="opam.ocaml.org";hash=None;backend=`http;}letdefault_compiler=OpamFormula.ors[OpamFormula.Atom(OpamPackage.Name.of_string"ocaml-system",OpamFormula.Atom(`Geq,OpamPackage.Version.of_string"4.02.3"));OpamFormula.Atom(OpamPackage.Name.of_string"ocaml-base-compiler",OpamFormula.Empty);]leteval_variables=[OpamVariable.of_string"sys-ocaml-version",["ocamlc";"-vnum"],"OCaml version present on your system independently of opam, if any";]letos_filteros=FOp(FIdent([],OpamVariable.of_string"os",None),`Eq,FStringos)letlinux_filter=os_filter"linux"letmacos_filter=os_filter"macos"letopenbsd_filter=os_filter"openbsd"letfreebsd_filter=os_filter"freebsd"letsandbox_filter=FOr(linux_filter,macos_filter)letgpatch_filter=FOr(openbsd_filter,freebsd_filter)letpatch_filter=FNotgpatch_filterletgtar_filter=openbsd_filterlettar_filter=FNotgtar_filterletwrappers~sandboxing()=letcmdt=[CString"%{hooks}%/sandbox.sh",None;CStringt,None;]inletw=OpamFile.Wrappers.emptyinifsandboxingthen{wwithOpamFile.Wrappers.wrap_build=[cmd"build",Somesandbox_filter];wrap_install=[cmd"install",Somesandbox_filter];wrap_remove=[cmd"remove",Somesandbox_filter];}elsewletbwrap_cmd="bwrap"letbwrap_filter=linux_filterletbwrap_string()=Printf.sprintf"Sandboxing tool %s was not found. You should install 'bubblewrap'. \
See http://opam.ocaml.org/doc/2.0/FAQ.html#Why-opam-asks-me-to-install-bwrap."bwrap_cmdletfetch_cmd_user()=letopenOpamStd.Option.OpinmatchOpamStd.Env.getopt"OPAMCURL",OpamStd.Env.getopt"OPAMFETCH">>|funs->OpamStd.String.splits' 'with|Somecmd,_|_,Some(cmd::_)->Somecmd|_->Noneletdl_tools()=matchfetch_cmd_user()with|None->["curl";"wget"]|Somecmd->[cmd]letdl_tool()=matchfetch_cmd_user()with|None->None|Somecmd->Some[(CStringcmd),None]letrecommended_tools()=letmake=OpamStateConfig.(Lazy.force!r.makecmd)in[[make],None,None;["m4"],None,None;["cc"],None,None;]letrequired_tools~sandboxing()=[dl_tools(),Some"A download tool is required, check env variables OPAMCURL or OPAMFETCH",None;["diff"],None,None;["patch"],None,Somepatch_filter;["gpatch"],None,Somegpatch_filter;["tar"],None,Sometar_filter;["gtar"],None,Somegtar_filter;["unzip"],None,None;]@ifsandboxingthen[[bwrap_cmd],Some(bwrap_string()),Somebwrap_filter;["sandbox-exec"],None,Somemacos_filter;]else[]letinit_scripts()=[("sandbox.sh",OpamScript.bwrap),Somebwrap_filter;("sandbox.sh",OpamScript.sandbox_exec),Somemacos_filter;]moduleI=OpamFile.InitConfiglet(@|)gf=OpamStd.Op.(g@*f)()letinit_config?(sandboxing=true)()=I.empty|>I.with_repositories[OpamRepositoryName.of_string"default",(repository_url,None)]|>I.with_default_compilerdefault_compiler|>I.with_eval_variableseval_variables|>I.with_wrappers@|wrappers~sandboxing|>I.with_recommended_tools@|recommended_tools|>I.with_required_tools@|required_tools~sandboxing|>I.with_init_scripts@|init_scripts|>I.with_dl_tool@|dl_tool