-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #46 from emillon/select-dune-rules
Select `unsafe.ml` with just dune rules
- Loading branch information
Showing
4 changed files
with
12 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,54 +1,7 @@ | ||
module Config = Configurator.V1 | ||
|
||
let pre407 = | ||
{ocaml|external unsafe_set_uint16 : bytes -> int -> int -> unit = "%caml_string_set16u" [@@noalloc]|ocaml} | ||
|
||
let standard = | ||
{ocaml|external unsafe_set_uint16 : bytes -> int -> int -> unit = "%caml_bytes_set16u" [@@noalloc]|ocaml} | ||
|
||
type t = { major : int; minor : int; patch : int option; extra : string option } | ||
|
||
let v ?patch ?extra major minor = { major; minor; patch; extra } | ||
|
||
let parse s = | ||
try | ||
Scanf.sscanf s "%d.%d.%d+%s" (fun major minor patch extra -> | ||
v ~patch ~extra major minor) | ||
with End_of_file | Scanf.Scan_failure _ -> ( | ||
try | ||
Scanf.sscanf s "%d.%d+%s" (fun major minor extra -> v ~extra major minor) | ||
with End_of_file | Scanf.Scan_failure _ -> ( | ||
try | ||
Scanf.sscanf s "%d.%d.%d" (fun major minor patch -> | ||
v ~patch major minor) | ||
with End_of_file | Scanf.Scan_failure _ -> | ||
Scanf.sscanf s "%d.%d" (fun major minor -> v major minor))) | ||
|
||
let ( >|= ) x f = match x with Some x -> Some (f x) | None -> None | ||
|
||
let ocaml_cp ~src ~dst = | ||
let ic = open_in src in | ||
let oc = open_out dst in | ||
let bf = Bytes.create 0x1000 in | ||
let rec go () = | ||
match input ic bf 0 (Bytes.length bf) with | ||
| 0 -> () | ||
| len -> | ||
output oc bf 0 len ; | ||
go () | ||
| exception End_of_file -> () in | ||
go () ; | ||
close_in ic ; | ||
close_out oc | ||
let parse s = Scanf.sscanf s "%d.%d" (fun major minor -> (major, minor)) | ||
|
||
let () = | ||
Config.main ~name:"config-base64" @@ fun t -> | ||
match Config.ocaml_config_var t "version" >|= parse with | ||
| Some version -> | ||
let dst = "unsafe.ml" in | ||
|
||
if (version.major, version.minor) >= (4, 7) | ||
then ocaml_cp ~src:"unsafe_stable.ml" ~dst | ||
else ocaml_cp ~src:"unsafe_pre407.ml" ~dst | ||
| None -> Config.die "OCaml version is not available" | ||
| exception exn -> Config.die "Got an exception: %s" (Printexc.to_string exn) | ||
let version = parse Sys.ocaml_version in | ||
if version >= (4, 7) | ||
then print_string "unsafe_stable.ml" | ||
else print_string "unsafe_pre407.ml" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,7 @@ | ||
(executable | ||
(name config) | ||
(libraries dune-configurator)) | ||
(name config)) | ||
|
||
(rule | ||
(with-stdout-to | ||
which-unsafe-file | ||
(run ./config.exe))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters