Source file opamSwitch.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
include OpamStd.AbstractString
let unset = of_string "#unset#"
let is_external s =
OpamStd.String.starts_with ~prefix:"." s ||
OpamStd.String.contains ~sub:Filename.dir_sep s
let external_dirname = "_opam"
let of_string s =
if is_external s then OpamFilename.Dir.(to_string (of_string s))
else s
let of_dirname d =
let s = OpamFilename.Dir.to_string d in
try
let swdir = Unix.readlink (Filename.concat s external_dirname) in
let swdir =
if Filename.is_relative swdir then Filename.concat s swdir else swdir
in
let r = OpamSystem.real_path swdir in
if Filename.basename r = external_dirname then Filename.dirname r else s
with Unix.Unix_error _ -> s
let get_root root s =
if is_external s
then OpamFilename.Dir.of_string (Filename.concat s external_dirname)
else OpamFilename.Op.(root / s)