Add fields for variants (#1148)

Add variants fields but guard them behind an extension
This commit is contained in:
Rudi Grinberg 2018-08-29 15:41:28 +03:00 committed by GitHub
parent 4518c79f42
commit 265adc8eae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 67 additions and 0 deletions

View File

@ -848,6 +848,17 @@ module Library = struct
]
end
module Variants = struct
let syntax =
let syntax =
Syntax.create ~name:"in_development_do_not_use_variants"
~desc:"the experimental variants feature"
[ (0, 0) ]
in
Dune_project.Extension.register syntax (Dsexp.Of_sexp.return []);
syntax
end
type t =
{ name : Lib_name.Local.t
; public : Public_lib.t option
@ -872,6 +883,8 @@ module Library = struct
; sub_systems : Sub_system_info.t Sub_system_name.Map.t
; no_keep_locs : bool
; dune_version : Syntax.Version.t
; virtual_modules : Ordered_set_lang.t option
; implements : (Loc.t * string) option
}
let dparse =
@ -906,6 +919,14 @@ module Library = struct
Sub_system_info.record_parser ()
and project = Dune_project.get_exn ()
and dune_version = Syntax.get_exn Stanza.syntax
and virtual_modules =
field_o "virtual_modules" (
Syntax.since Variants.syntax (0, 1)
>>= fun () -> Ordered_set_lang.dparse)
and implements =
field_o "implements" (
Syntax.since Variants.syntax (0, 1)
>>= fun () -> (located string))
in
let name =
let open Syntax.Version.Infix in
@ -934,6 +955,12 @@ module Library = struct
"name field is missing"
)
in
Option.both virtual_modules implements
|> Option.iter ~f:(fun (virtual_modules, (_, impl)) ->
of_sexp_errorf
(Ordered_set_lang.loc virtual_modules
|> Option.value_exn)
"A library cannot be both virtual and implement %s" impl);
{ name
; public
; synopsis
@ -957,6 +984,8 @@ module Library = struct
; sub_systems
; no_keep_locs
; dune_version
; virtual_modules
; implements
})
let has_stubs t =

View File

@ -240,6 +240,8 @@ module Library : sig
; sub_systems : Sub_system_info.t Sub_system_name.Map.t
; no_keep_locs : bool
; dune_version : Syntax.Version.t
; virtual_modules : Ordered_set_lang.t option
; implements : (Loc.t * string) option
}
val has_stubs : t -> bool

View File

@ -812,6 +812,14 @@
test-cases/utop-default
(progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected)))))
(alias
(name variants)
(deps (package dune) (source_tree test-cases/variants))
(action
(chdir
test-cases/variants
(progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected)))))
(alias
(name windows-diff)
(deps (package dune) (source_tree test-cases/windows-diff))
@ -928,6 +936,7 @@
(alias use-meta)
(alias utop)
(alias utop-default)
(alias variants)
(alias windows-diff)
(alias workspaces)))
@ -1018,6 +1027,7 @@
(alias too-many-parens)
(alias use-meta)
(alias utop-default)
(alias variants)
(alias windows-diff)
(alias workspaces)))

View File

@ -0,0 +1,16 @@
Variant feature is auto enabled when virtual_modules is used
$ dune build --root variants-without-using
File "dune", line 3, characters 1-25:
(virtual_modules foobar))
^^^^^^^^^^^^^^^^^^^^^^^^
Error: 'virtual_modules' is only available since version 0.1 of the experimental variants feature
[1]
$ dune build --root variants-using
File "dune-project", line 2, characters 42-45:
2:
Error: Version 0.1 of in_development_do_not_use_variants is not supported.
Supported versions:
- 0.0
[1]

View File

@ -0,0 +1,3 @@
(library
(public_name foo)
(virtual_modules bar))

View File

@ -0,0 +1,3 @@
(lang dune 1.1)
(using in_development_do_not_use_variants 0.1)

View File

@ -0,0 +1,3 @@
(library
(public_name foo)
(virtual_modules foobar))

View File

@ -0,0 +1 @@
(lang dune 1.1)