Skip to content

Commit

Permalink
versioning
Browse files Browse the repository at this point in the history
  • Loading branch information
emillon committed Jul 22, 2024
1 parent 92cc340 commit ec420a4
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 14 deletions.
11 changes: 9 additions & 2 deletions src/dune_rules/dune_project.ml
Original file line number Diff line number Diff line change
Expand Up @@ -163,14 +163,20 @@ let get_dune_lang () =
{ (Lang.get_exn "dune") with version = !default_dune_language_version }
;;

module Extension_package_dependency = struct
type t = Package_dependency.t * Syntax.Version.t

let make dep ~since = dep, since
end

module Extension = struct
type 'a t = 'a Univ_map.Key.t

type 'a poly_info =
{ syntax : Dune_lang.Syntax.t
; stanzas : ('a * Stanza.Parser.t list) Dune_lang.Decoder.t
; key : 'a t
; package_deps : Package_dependency.t list
; package_deps : Extension_package_dependency.t list
}

type packed_extension = Packed : 'a poly_info -> packed_extension
Expand Down Expand Up @@ -890,7 +896,8 @@ let parse ~dir ~(lang : Lang.Instance.t) ~file =
let extension_package_deps =
String.Map.values explicit_extensions
|> List.concat_map ~f:(fun { Extension.extension = Packed e; _ } ->
e.package_deps)
List.filter_map e.package_deps ~f:(fun (p, min_ver) ->
Option.some_if (dune_version >= min_ver) p))
in
{ name
; file_key
Expand Down
20 changes: 17 additions & 3 deletions src/dune_rules/dune_project.mli
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ module Lang : sig
val register : Dune_lang.Syntax.t -> Dune_lang.Stanza.Parser.t list -> unit
end

module Extension_package_dependency : sig
type t

val make : Package_dependency.t -> since:Syntax.Version.t -> t
end

module Extension : sig
type 'a t

Expand All @@ -69,14 +75,22 @@ module Extension : sig
: Dune_lang.Syntax.t
-> ('a * Dune_lang.Stanza.Parser.t list) Dune_lang.Decoder.t
-> ('a -> Dyn.t)
-> Package_dependency.t list
-> Extension_package_dependency.t list
-> 'a t

val register_unit : ?pkgs:Package_dependency.t list -> Dune_lang.Syntax.t -> Dune_lang.Stanza.Parser.t list -> unit t
val register_unit
: ?pkgs:Extension_package_dependency.t list
-> Dune_lang.Syntax.t
-> Dune_lang.Stanza.Parser.t list
-> unit t

(** A simple version where the arguments are not used through
[find_extension_args]. *)
val register_simple :?pkgs:Package_dependency.t list -> Dune_lang.Syntax.t -> Dune_lang.Stanza.Parser.t list -> unit
val register_simple
: ?pkgs:Extension_package_dependency.t list
-> Dune_lang.Syntax.t
-> Dune_lang.Stanza.Parser.t list
-> unit

(** Register experimental extensions that were deleted *)
val register_deleted : name:string -> deleted_in:Dune_lang.Syntax.Version.t -> unit
Expand Down
10 changes: 6 additions & 4 deletions src/dune_rules/mdx.ml
Original file line number Diff line number Diff line change
Expand Up @@ -272,10 +272,12 @@ let () =
let open Dune_lang.Decoder in
let decode = Dune_lang.Syntax.since Stanza.syntax (2, 4) >>> decode in
let mdx_dep =
{ Package_dependency.name = Package.Name.of_string "mdx"
; constraint_ =
Some (Uop (Gte, Package_constraint.Value.String_literal mdx_version_required))
}
Dune_project.Extension_package_dependency.make
{ Package_dependency.name = Package.Name.of_string "mdx"
; constraint_ =
Some (Uop (Gte, Package_constraint.Value.String_literal mdx_version_required))
}
~since:(3, 17)
in
Dune_project.Extension.register_simple
~pkgs:[ mdx_dep ]
Expand Down
38 changes: 33 additions & 5 deletions test/blackbox-tests/test-cases/opam-constraints-extensions.t
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
TODO:
- version in extensions themselves (each extension declares in which version of
dune lang the constraint is generated)
- test versioning
- can an extension push different constraints based on the extension version?
- what to do if constraint is already present?

$ cat > dune-project << EOF
> (lang dune 3.17)
$ gen_project () {
> cat > dune-project << EOF
> (lang dune $1)
> (using mdx 0.3)
> (generate_opam_files)
> (package
> (name n)
> (allow_empty))
> EOF
> }

$ gen_project 3.17

$ dune build

$ cat n.opam
# This file is generated by dune, edit dune-project instead
opam-version: "2.0"
depends: [
"mdx" {>= "1.6.0"}
"dune" {>= "3.17"}
"odoc" {with-doc}
]
Expand All @@ -37,3 +39,29 @@ TODO:
"@doc" {with-doc}
]
]

$ gen_project 3.16

$ dune build

$ cat n.opam
# This file is generated by dune, edit dune-project instead
opam-version: "2.0"
depends: [
"dune" {>= "3.16"}
"odoc" {with-doc}
]
build: [
["dune" "subst"] {dev}
[
"dune"
"build"
"-p"
name
"-j"
jobs
"@install"
"@runtest" {with-test}
"@doc" {with-doc}
]
]

0 comments on commit ec420a4

Please sign in to comment.