···11-module Config = Configurator.V1
22-33-let pre407 =
44- {ocaml|external unsafe_set_uint16 : bytes -> int -> int -> unit = "%caml_string_set16u" [@@noalloc]|ocaml}
55-66-let standard =
77- {ocaml|external unsafe_set_uint16 : bytes -> int -> int -> unit = "%caml_bytes_set16u" [@@noalloc]|ocaml}
88-99-type t = { major : int; minor : int; patch : int option; extra : string option }
1010-1111-let v ?patch ?extra major minor = { major; minor; patch; extra }
1212-1313-let parse s =
1414- try
1515- Scanf.sscanf s "%d.%d.%d+%s" (fun major minor patch extra ->
1616- v ~patch ~extra major minor)
1717- with End_of_file | Scanf.Scan_failure _ -> (
1818- try
1919- Scanf.sscanf s "%d.%d+%s" (fun major minor extra -> v ~extra major minor)
2020- with End_of_file | Scanf.Scan_failure _ -> (
2121- try
2222- Scanf.sscanf s "%d.%d.%d" (fun major minor patch ->
2323- v ~patch major minor)
2424- with End_of_file | Scanf.Scan_failure _ ->
2525- Scanf.sscanf s "%d.%d" (fun major minor -> v major minor)))
2626-2727-let ( >|= ) x f = match x with Some x -> Some (f x) | None -> None
2828-2929-let ocaml_cp ~src ~dst =
3030- let ic = open_in src in
3131- let oc = open_out dst in
3232- let bf = Bytes.create 0x1000 in
3333- let rec go () =
3434- match input ic bf 0 (Bytes.length bf) with
3535- | 0 -> ()
3636- | len ->
3737- output oc bf 0 len ;
3838- go ()
3939- | exception End_of_file -> () in
4040- go () ;
4141- close_in ic ;
4242- close_out oc
11+let parse s = Scanf.sscanf s "%d.%d" (fun major minor -> (major, minor))
432443let () =
4545- Config.main ~name:"config-base64" @@ fun t ->
4646- match Config.ocaml_config_var t "version" >|= parse with
4747- | Some version ->
4848- let dst = "unsafe.ml" in
4949-5050- if (version.major, version.minor) >= (4, 7)
5151- then ocaml_cp ~src:"unsafe_stable.ml" ~dst
5252- else ocaml_cp ~src:"unsafe_pre407.ml" ~dst
5353- | None -> Config.die "OCaml version is not available"
5454- | exception exn -> Config.die "Got an exception: %s" (Printexc.to_string exn)
44+ let version = parse Sys.ocaml_version in
55+ if version >= (4, 7)
66+ then print_string "unsafe_stable.ml"
77+ else print_string "unsafe_pre407.ml"