123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275(**************************************************************************)(* *)(* Copyright 2012-2020 OCamlPro *)(* Copyright 2012 INRIA *)(* *)(* 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. *)(* *)(**************************************************************************)openOpamTypesopenOpamFilename.Optypet=dirname(* Returns a generic file, coerced by the .mli *)let(/-)dirf=OpamFile.make(dir//f)letconfigt=t/-"config"letinit_config_files()=List.mapOpamFile.make[OpamFilename.Dir.of_string(OpamStd.Sys.etc())//"opamrc";OpamFilename.Dir.of_string(OpamStd.Sys.home())//".opamrc";]letstate_cachet=t/"repo"//"state.cache"letlockt=t//"lock"letconfig_lockt=t//"config.lock"letarchives_dirt=t/"archives"letarchivetnv=archives_dirt//(OpamPackage.to_stringnv^"+opam.tar.gz")letrepos_lockt=t/"repo"//"lock"letrepos_configt=t/"repo"/-"repos-config"letinitt=t/"opam-init"lethooks_dirt=initt/"hooks"letlogt=t/"log"letbackup_file=letfile=lazyUnix.(lettm=gmtime(Unix.gettimeofday())inPrintf.sprintf"state-%04d%02d%02d%02d%02d%02d.export"(tm.tm_year+1900)(tm.tm_mon+1)tm.tm_mdaytm.tm_hourtm.tm_mintm.tm_sec)infun()->Lazy.forcefileletbackup_dirt=t/"backup"letbackupt=backup_dirt/-backup_file()letpluginst=t/"plugins"letplugins_bint=pluginst/"bin"letplugin_bintname=letsname=OpamPackage.Name.to_stringnameinletbasename=ifOpamStd.String.starts_with~prefix:"opam-"snamethensnameelse"opam-"^snameinplugins_bint//basenameletplugintname=letsname=OpamPackage.Name.to_stringnameinassert(sname<>"bin");pluginst/snamemoduletypeLAYOUT=sigtypectxvalroot:dirname->ctx->dirnamevallib_dir:dirname->ctx->dirnameendmoduleSwitch=structletrootta=OpamSwitch.get_rootta(** Internal files and dirs with static location *)letmeta_dirname=".opam-switch"letmetata=rootta/meta_dirnameletlockta=metata//"lock"letbackup_dirta=metata/"backup"letbackupta=backup_dirta/-backup_file()letselectionsta=metata/-"switch-state"letbuild_dirta=metata/"build"letbuildtanv=build_dirta/OpamPackage.to_stringnvletremove_dirta=metata/"remove"letremovetanv=remove_dirta/OpamPackage.to_stringnvletinstall_dirta=metata/"install"letinstalltan=install_dirta/-(OpamPackage.Name.to_stringn^".install")letchangestan=install_dirta/-(OpamPackage.Name.to_stringn^".changes")letreinstallta=metata/-"reinstall"letswitch_configta=metata/-"switch-config"letconfig_dirta=metata/"config"letconfigtan=config_dirta/-(OpamPackage.Name.to_stringn^".config")letsources_dirta=metata/"sources"letextra_files_dirta=metata/"extra-files-cache"letextra_filetah=extra_files_dirta//OpamHash.contentshletsourcestanv=sources_dirta/OpamPackage.to_stringnvletpinned_packagetaname=sources_dirta/OpamPackage.Name.to_stringnameletenv_filename="environment"letenvironmentta=metata/-env_filenameletenv_relative_to_prefixpfx=pfx/meta_dirname/-env_filenameletinstalled_opamsta=metata/"packages"letinstalled_opams_cacheta=metata/"packages"//"cache"letinstalled_package_dirtanv=installed_opamsta/OpamPackage.to_stringnvletinstalled_opamtanv=installed_package_dirtanv/-"opam"letinstalled_opam_files_dirtanv=installed_package_dirtanv/"files"moduleDefaultF(L:LAYOUT)=structletlib_dir=L.lib_dirletlibtan=L.lib_dirta/OpamPackage.Name.to_stringnletstublibsta=L.lib_dirta/"stublibs"lettoplevelta=L.lib_dirta/"toplevel"letdoc_dirta=L.rootta/"doc"letman_dir?numta=matchnumwith|None->L.rootta/"man"|Somen->L.rootta/"man"/("man"^n)letshare_dirta=L.rootta/"share"letsharetan=share_dirta/OpamPackage.Name.to_stringnletetc_dirta=L.rootta/"etc"letetctan=etc_dirta/OpamPackage.Name.to_stringnletdoctan=doc_dirta/OpamPackage.Name.to_stringnletbinta=L.rootta/"bin"letsbinta=L.rootta/"sbin"end(** Visible files that can be redirected using
[config/global-config.config] *)moduleDefault=structincludeDefaultF(structtypectx=switchletroot=rootletlib_dirta=rootta/"lib"end)endletlookupstdpathrelative_todefaultconfig=letdir=OpamStd.Option.defaultdefault(OpamFile.Switch_config.pathconfigstdpath)inifFilename.is_relativedirthenifdir=""thenrelative_toelserelative_to/direlseOpamFilename.Dir.of_stringdirletprefixtac=lookupPrefix(rootta)""cletlib_dirtac=lookupLib(prefixtac)"lib"cletlibtacn=lib_dirtac/OpamPackage.Name.to_stringnletstublibstac=lookupStublibs(lib_dirtac)"stublibs"clettopleveltac=lookupToplevel(lib_dirtac)"toplevel"cletdoc_dirtac=lookupDoc(prefixtac)"doc"cletdoctacn=doc_dirtac/OpamPackage.Name.to_stringnletman_dir?numtac=letbase=lookupMan(prefixtac)"man"cinmatchnumwith|None->base|Somen->base/("man"^n)letshare_dirtac=lookupShare(prefixtac)"share"cletsharetacn=share_dirtac/OpamPackage.Name.to_stringnletetc_dirtac=lookupEtc(prefixtac)"etc"cletetctacn=etc_dirtac/OpamPackage.Name.to_stringnletbintac=lookupBin(prefixtac)"bin"cletsbintac=lookupSbin(prefixtac)"sbin"cletget_stdpathtac=function|Prefix->prefixtac|Lib->lib_dirtac|Bin->bintac|Sbin->sbintac|Share->share_dirtac|Doc->doc_dirtac|Etc->etc_dirtac|Man->man_dirtac|Toplevel->topleveltac|Stublibs->stublibstacmoduleOverlay=structletdirta=metata/"overlay"letpackagetan=dirta/OpamPackage.Name.to_stringnletopamtan=packagetan/-"opam"lettmp_opamtan=packagetan/-"opam_"leturltan=packagetan/-"url"letdescrtan=packagetan/-"descr"letfilestan=packagetan/"files"endendmoduleBuilddir=structletinstallbuilddirnv=builddir/-(OpamPackage.Name.to_stringnv.name^".install")letconfigbuilddirnv=builddir/-(OpamPackage.Name.to_stringnv.name^".config")end