this repo has no description
at main 2.2 kB view raw
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)