dune/src/dune_project.ml

43 lines
871 B
OCaml
Raw Normal View History

open Import
open Sexp.Of_sexp
type t =
{ name : string
; version : string option
}
let filename = "dune-project"
type lang =
| Dune_0_1
let lang =
2018-05-02 13:58:24 +00:00
let name =
enum
[ ("dune", ()) ]
in
let version ver =
match string ver with
| "0.1" -> Dune_0_1
| _ ->
of_sexp_error ver "unsupported version of the dune language"
in
2018-05-02 13:58:24 +00:00
field_multi "lang" (name @> version @> nil) (fun () v -> v)
2018-05-02 13:58:24 +00:00
let name ~dir =
field_o "name" string >>= function
| Some s -> return s
| None -> return ("_" ^ String.concat ~sep:"_" (Path.explode_exn dir))
2018-05-02 13:58:24 +00:00
let parse ~dir =
record
(lang >>= fun Dune_0_1 ->
name ~dir >>= fun name ->
field_o "version" string >>= fun version ->
return { name; version })
let load ~dir =
let fname = Path.relative dir filename in
2018-05-02 13:58:24 +00:00
let sexp = Io.Sexp.load_many_as_one fname in
parse ~dir sexp