this repo has no description
1module C = Configurator.V1
2
3let () =
4 C.main ~name:"discover" (fun c ->
5 let defs =
6 let values =
7 C.C_define.import c ~c_flags:[ "-D_GNU_SOURCE" ]
8 ~includes:[ "fcntl.h" ]
9 C.C_define.Type.
10 [
11 ("O_RDONLY", Int);
12 ("O_WRONLY", Int);
13 ("O_RDWR", Int);
14 ("O_CREAT", Int);
15 ("O_EXCL", Int);
16 ("O_NOCTTY", Int);
17 ("O_TRUNC", Int);
18 ("O_APPEND", Int);
19 ("O_NONBLOCK", Int);
20 ("O_DSYNC", Int);
21 ("O_DIRECT", Int);
22 (* "O_LARGEFILE", Int; *)
23 ("O_DIRECTORY", Int);
24 ("O_NOFOLLOW", Int);
25 ("O_NOATIME", Int);
26 ("O_CLOEXEC", Int);
27 ("O_SYNC", Int);
28 ("O_PATH", Int);
29 ("O_TMPFILE", Int);
30 ]
31 in
32 let defs =
33 List.map
34 (function
35 | name, C.C_define.Value.Int v ->
36 Printf.sprintf "let %s = 0x%x" (String.lowercase_ascii name) v
37 | _ -> assert false)
38 values
39 in
40 let of_string =
41 List.fold_left
42 (fun acc v ->
43 match v with
44 | name, C.C_define.Value.Int v ->
45 let case = Printf.sprintf "| \"%s\" -> 0x%x\n" name v in
46 acc ^ case
47 | _ -> assert false)
48 "let of_string = function\n" values
49 in
50 let to_string =
51 List.fold_left
52 (fun acc v ->
53 match v with
54 | name, C.C_define.Value.Int v ->
55 let case = Printf.sprintf "| 0x%x -> \"%s\"\n" v name in
56 acc ^ case
57 | _ -> assert false)
58 "let to_string = function\n" values
59 in
60 defs
61 @ [
62 of_string ^ "| s -> invalid_arg(\"Unknown flag: \" ^ s)\n";
63 to_string
64 ^ "| s -> invalid_arg(\"Unknown flag: \" ^ string_of_int s)\n";
65 ]
66 in
67 C.Flags.write_lines "config.ml" defs)