Source file dune_site_private.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
41
42
43
44
45
46
47
48
49
50
51
let path_sep = if Sys.win32 then ';' else ':'
let dune_dir_locations_env_var = "DUNE_DIR_LOCATIONS"
let dune_ocaml_stdlib_env_var = "DUNE_OCAML_STDLIB"
let dune_ocaml_hardcoded_env_var = "DUNE_OCAML_HARDCODED"
let dune_sourceroot_env_var = "DUNE_SOURCEROOT"
type entry =
{ package : string
; section : Dune_section.t
; dir : string
}
let decode_dune_dir_locations =
let rec aux acc = function
| [] -> Some (List.rev acc)
| package :: section :: dir :: l ->
let section =
match Dune_section.of_string section with
| None -> invalid_arg ("Dune-site: Unknown section " ^ section)
| Some s -> s
in
aux ({ package; section; dir } :: acc) l
| _ -> None
in
fun s ->
let l = String.split_on_char path_sep s in
aux [] l
;;
let encode_dune_dir_locations =
let add b { package; section; dir } =
Buffer.add_string b package;
Buffer.add_char b path_sep;
Buffer.add_string b (Dune_section.to_string section);
Buffer.add_char b path_sep;
Buffer.add_string b dir
in
let rec loop b = function
| [] -> ()
| [ x ] -> add b x
| x :: xs ->
add b x;
Buffer.add_char b path_sep;
loop b xs
in
fun s ->
let b = Buffer.create 16 in
loop b s;
Buffer.contents b
;;