Hello community,

here is the log from the commit of package ocaml-dune for openSUSE:Factory 
checked in at 2019-05-16 22:09:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ocaml-dune (Old)
 and      /work/SRC/openSUSE:Factory/.ocaml-dune.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ocaml-dune"

Thu May 16 22:09:48 2019 rev:10 rq:703289 version:1.9.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/ocaml-dune/ocaml-dune.changes    2019-04-12 
09:15:38.481722695 +0200
+++ /work/SRC/openSUSE:Factory/.ocaml-dune.new.5148/ocaml-dune.changes  
2019-05-16 22:09:51.478292577 +0200
@@ -1,0 +2,12 @@
+Thu May 16 05:47:29 UTC 2019 - Andy <[email protected]>
+
+- Update to version 1.9.3:
+  * Put back library variants in development mode.
+  * Fix a bug where dune install would install man pages to
+    incorrect paths when compared to opam-installer.
+  * Do not fail when a findlib directory doesn't exist.
+  * Rename (coqlib ...) to (coq.theory ...).
+  * Fix crash when calculating library dependency closure.
+  * Fix .install files not being generated.
+
+-------------------------------------------------------------------

Old:
----
  ocaml-dune-1.9.1.tar.xz

New:
----
  ocaml-dune-1.9.3.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ocaml-dune.spec ++++++
--- /var/tmp/diff_new_pack.n3wTPt/_old  2019-05-16 22:09:52.354291781 +0200
+++ /var/tmp/diff_new_pack.n3wTPt/_new  2019-05-16 22:09:52.354291781 +0200
@@ -12,12 +12,12 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 Name:           ocaml-dune
-Version:        1.9.1
+Version:        1.9.3
 Release:        0
 %{?ocaml_preserve_bytecode}
 Summary:        A composable build system for OCaml

++++++ _service ++++++
--- /var/tmp/diff_new_pack.n3wTPt/_old  2019-05-16 22:09:52.382291756 +0200
+++ /var/tmp/diff_new_pack.n3wTPt/_new  2019-05-16 22:09:52.386291752 +0200
@@ -3,7 +3,7 @@
     <param name="url">git://github.com/ocaml/dune.git</param>
     <param name="scm">git</param>
     <param name="versionformat">@PARENT_TAG@</param>
-    <param name="revision">1.9.1</param>
+    <param name="revision">1.9.3</param>
     <param name="filename">ocaml-dune</param>
   </service>
   <service name="recompress" mode="disabled">

++++++ ocaml-dune-1.9.1.tar.xz -> ocaml-dune-1.9.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/CHANGES.md 
new/ocaml-dune-1.9.3/CHANGES.md
--- old/ocaml-dune-1.9.1/CHANGES.md     2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/CHANGES.md     2019-05-06 05:59:29.000000000 +0200
@@ -1,3 +1,35 @@
+1.9.3 (06/05/2019)
+------------------
+
+- Fix `.install` files not being generated (#2124, fixes #2123, @rgrinberg)
+
+1.9.2 (02/05/2019)
+------------------
+
+- Put back library variants in development mode. We discovered a
+  serious unexpected issue and we might need to adjust the design of
+  this feature before we are ready to commit to a final version. Users
+  will need to write `(using library_variants 0.1)` in their
+  `dune-project` file if they want to use it before the design is
+  finalized. (#2116, @diml)
+
+- Forbid to attach a variant to a library that implements a virtual
+  library outside the current project (#2104, @rgrinberg)
+
+- Fix a bug where `dune install` would install man pages to incorrect
+  paths when compared to `opam-installer`. For example dune now
+  installs `(foo.1 as man1/foo.1)` correctly and previously that was
+  installed to `man1/man1/foo.1`. (#2105, @aalekseyev)
+
+- Do not fail when a findlib directory doesn't exist (#2101, fix #2099, @diml)
+
+- [coq] Rename `(coqlib ...)` to `(coq.theory ...)`, support for
+  `coqlib` will be dropped in the 1.0 version of the Coq language
+  (#2055, @ejgallego)
+
+- Fix crash when calculating library dependency closure (#2090, fixes #2085,
+  @rgrinberg)
+
 1.9.1 (11/04/2019)
 ------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/bin/install_uninstall.ml 
new/ocaml-dune-1.9.3/bin/install_uninstall.ml
--- old/ocaml-dune-1.9.1/bin/install_uninstall.ml       2019-04-11 
06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/bin/install_uninstall.ml       2019-05-06 
05:59:29.000000000 +0200
@@ -225,7 +225,6 @@
             List.iter entries ~f:(fun { Install.Entry. src; dst; section } ->
               let dst =
                 dst
-                |> Option.value ~default:(Path.basename src)
                 |> Install.Section.Paths.install_path paths section
                 |> interpret_destdir ~destdir
               in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/doc/coq.rst 
new/ocaml-dune-1.9.3/doc/coq.rst
--- old/ocaml-dune-1.9.1/doc/coq.rst    2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/doc/coq.rst    2019-05-06 05:59:29.000000000 +0200
@@ -14,9 +14,9 @@
 
     (using coq 0.1)
 
-This will enable support for the ``coqlib`` stanza in the current project. If 
the
+This will enable support for the ``coq.theory`` stanza in the current project. 
If the
 language version is absent, dune will automatically add this line with the
-latest Coq version to the project file once a ``(coqlib ...)`` stanza is used 
anywhere.
+latest Coq version to the project file once a ``(coq.theory ...)`` stanza is 
used anywhere.
 
 
 Basic Usage
@@ -26,7 +26,7 @@
 
 .. code:: scheme
 
-    (coqlib
+    (coq.theory
      (name <module_prefix>)
      (public_name <package.lib_name>)
      (synopsis <text>)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/doc/variants.rst 
new/ocaml-dune-1.9.3/doc/variants.rst
--- old/ocaml-dune-1.9.1/doc/variants.rst       2019-04-11 06:25:21.000000000 
+0200
+++ new/ocaml-dune-1.9.3/doc/variants.rst       2019-05-06 05:59:29.000000000 
+0200
@@ -79,6 +79,10 @@
 Variants
 ========
 
+This feature is still under development and may change with new dune
+releases. You need to write ``(using library_variants 0.1)`` in your
+``dune-project`` file to unlock it.
+
 When building a binary, implementations can be selected using a set of variants
 rather than individually specifying implementations.
 
@@ -107,6 +111,8 @@
 Default implementation
 ======================
 
+This feature is also guarded by ``(using library_variants ...)``.
+
 A virtual library may select a default implementation, which is enabled after
 variant resolution, if no suitable implementation has been found.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/src/dune_file.ml 
new/ocaml-dune-1.9.3/src/dune_file.ml
--- old/ocaml-dune-1.9.1/src/dune_file.ml       2019-04-11 06:25:21.000000000 
+0200
+++ new/ocaml-dune-1.9.3/src/dune_file.ml       2019-05-06 05:59:29.000000000 
+0200
@@ -50,9 +50,20 @@
     else
       of_sexp_errorf loc "relative filename expected")
 
+
+let library_variants =
+  let syntax =
+    Syntax.create ~name:"library_variants"
+      ~desc:"the experimental library variants feature."
+      [ (0, 1) ]
+  in
+  Dune_project.Extension.register_simple ~experimental:true
+    syntax (Dune_lang.Decoder.return []);
+  syntax
+
 let variants_field =
   field_o "variants" (
-    let* () = Syntax.since Stanza.syntax (1, 9) in
+    let* () = Syntax.since library_variants (0, 1) in
     located (list Variant.decode >>| Variant.Set.of_list))
 
 (* Parse and resolve "package" fields *)
@@ -913,11 +924,11 @@
            located Lib_name.decode)
        and+ variant =
          field_o "variant" (
-           Syntax.since Stanza.syntax (1, 9) >>>
+           Syntax.since library_variants (0, 1) >>>
            located Variant.decode)
        and+ default_implementation =
          field_o "default_implementation" (
-           Syntax.since Stanza.syntax (1, 9) >>>
+           Syntax.since library_variants (0, 1) >>>
            located Lib_name.decode)
        and+ private_modules =
          field_o "private_modules" (
@@ -1867,8 +1878,17 @@
 
   let unit_to_sexp () = Sexp.List []
 
+  let coqlib_warn x =
+    Errors.warn x.loc
+      "(coqlib ...) is deprecated and will be removed in the Coq \
+       language version 1.0, please use (coq.theory ...) instead";
+    x
+
+  let coqlib_p = "coqlib", decode >>| fun x -> [T (coqlib_warn x)]
+  let coqtheory_p = "coq.theory", decode >>| fun x -> [T x]
+
   let unit_stanzas =
-    let+ r = return ["coqlib", decode >>| fun x -> [T x]] in
+    let+ r = return [coqlib_p; coqtheory_p] in
     ((), r)
 
   let key =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/src/file_binding.ml 
new/ocaml-dune-1.9.3/src/file_binding.ml
--- old/ocaml-dune-1.9.1/src/file_binding.ml    2019-04-11 06:25:21.000000000 
+0200
+++ new/ocaml-dune-1.9.3/src/file_binding.ml    2019-05-06 05:59:29.000000000 
+0200
@@ -6,7 +6,7 @@
   }
 
 module Expanded = struct
-  type nonrec t = (Loc.t * Path.t, Loc.t * Path.Local.t) t
+  type nonrec t = (Loc.t * Path.t, Loc.t * string) t
 
   let src t = snd t.src
   let dst t = Option.map ~f:snd t.dst
@@ -21,10 +21,9 @@
       let basename = Path.basename src in
       String.drop_suffix basename ~suffix:".exe"
       |> Option.value ~default:basename
-      |> Path.Local.of_string
 
   let dst_path t ~dir =
-    Path.append_local dir (dst_basename t)
+    Path.relative dir (dst_basename t)
 end
 
 module Unexpanded = struct
@@ -47,7 +46,7 @@
     ; dst =
         let f sw =
           let (loc, p) = f sw in
-          (loc, Path.Local.of_string p)
+          (loc, p)
         in
         Option.map ~f t.dst
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/src/file_binding.mli 
new/ocaml-dune-1.9.3/src/file_binding.mli
--- old/ocaml-dune-1.9.1/src/file_binding.mli   2019-04-11 06:25:21.000000000 
+0200
+++ new/ocaml-dune-1.9.3/src/file_binding.mli   2019-05-06 05:59:29.000000000 
+0200
@@ -4,7 +4,7 @@
   type t
 
   val src : t -> Path.t
-  val dst : t -> Path.Local.t option
+  val dst : t -> string option
 
   val src_loc : t -> Loc.t
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/src/findlib.ml 
new/ocaml-dune-1.9.3/src/findlib.ml
--- old/ocaml-dune-1.9.1/src/findlib.ml 2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/src/findlib.ml 2019-05-06 05:59:29.000000000 +0200
@@ -438,12 +438,15 @@
 let root_packages t =
   let pkgs =
     List.concat_map t.paths ~f:(fun dir ->
-      Path.readdir_unsorted dir
-      |> List.filter_map ~f:(fun name ->
-        if Path.exists (Path.relative dir (name ^ "/META")) then
-          Some (Lib_name.of_string_exn ~loc:None name)
-        else
-          None))
+      if not (Path.exists dir) then
+        []
+      else
+        Path.readdir_unsorted dir
+        |> List.filter_map ~f:(fun name ->
+          if Path.exists (Path.relative dir (name ^ "/META")) then
+            Some (Lib_name.of_string_exn ~loc:None name)
+          else
+            None))
     |> Lib_name.Set.of_list
   in
   let builtins = Lib_name.Set.of_list (Lib_name.Map.keys t.builtins) in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/src/install.ml 
new/ocaml-dune-1.9.3/src/install.ml
--- old/ocaml-dune-1.9.1/src/install.ml 2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/src/install.ml 2019-05-06 05:59:29.000000000 +0200
@@ -1,30 +1,91 @@
 open! Stdune
 open Import
 
-module Section = struct
-  module T = struct
-    type t =
-      | Lib
-      | Lib_root
-      | Libexec
-      | Libexec_root
-      | Bin
-      | Sbin
-      | Toplevel
-      | Share
-      | Share_root
-      | Etc
-      | Doc
-      | Stublibs
-      | Man
-      | Misc
+module Section0 = struct
+  type t =
+    | Lib
+    | Lib_root
+    | Libexec
+    | Libexec_root
+    | Bin
+    | Sbin
+    | Toplevel
+    | Share
+    | Share_root
+    | Etc
+    | Doc
+    | Stublibs
+    | Man
+    | Misc
 
-    let compare : t -> t -> Ordering.t = compare
-  end
+  let compare : t -> t -> Ordering.t = compare
+end
+
+(* The path after the man section mangling done by opam-installer.
+   This roughly follows [add_man_section_dir] in [src/format/opamFile.ml] in 
opam. *)
+module Dst : sig
+  type t
+
+  val to_string : t -> string
+
+  val to_install_file : t -> src_basename:string -> section:Section0.t -> 
string option
+  val of_install_file : string option -> src_basename:string -> 
section:Section0.t -> t
 
-  include T
+  val explicit : string -> t
+  val compare : t -> t -> Ordering.t
+  val infer : src_basename:string -> Section0.t -> t
+end = struct
 
-  module Map = Map.Make(T)
+  type t = string
+
+  let to_string t = t
+  let explicit t = t
+
+  let compare = compare
+
+  let man_subdir s =
+    let s = match String.drop_suffix ~suffix:".gz" s with
+      | Some s -> s
+      | None -> s
+    in
+    match String.rsplit2 ~on:'.' s with
+    | None -> None
+    | Some (_, "") -> None
+    | Some (_, r) ->
+      match r.[0] with
+      | '1'..'8' as c -> Some (sprintf "man%c" c)
+      | _ ->  None
+
+  let infer ~src_basename:p section =
+    match section with
+    | Section0.Man ->
+      begin
+        match man_subdir p with
+        | Some subdir -> Filename.concat subdir p
+        | None -> p
+      end
+    | _ -> p
+
+  let of_install_file t ~src_basename ~section = match t with
+    | None -> infer ~src_basename section
+    | Some s -> s
+
+  let to_install_file t ~src_basename ~section =
+    match t with
+    | s ->
+      let s' = infer ~src_basename section in
+      if String.equal s s'
+      then
+        None
+      else
+        Some s
+
+end
+
+module Section = struct
+  include Section0
+
+  module Map = Map.Make(Section0)
 
   let to_string = function
     | Lib          -> "lib"
@@ -152,28 +213,15 @@
       | Man          -> t.man
       | Misc         -> Exn.code_error "Install.Paths.get" []
 
-    let man_subdir p =
-      match Filename.split_extension_after_dot p with
-      | (_, "") -> None
-      | (_, man_section) -> Some ("man" ^ man_section)
-
     let install_path t section p =
-      let section_path = get t section in
-      match section with
-      | Man ->
-          begin
-            match man_subdir p with
-            | Some subdir -> Path.L.relative section_path [subdir; p]
-            | None -> Path.relative section_path p
-          end
-      | _ -> Path.relative section_path p
+      Path.relative (get t section) (Dst.to_string p)
   end
 end
 
 module Entry = struct
   type t =
     { src     : Path.t
-    ; dst     : string option
+    ; dst     : Dst.t
     ; section : Section.t
     }
 
@@ -181,7 +229,7 @@
     let c = Path.compare x.src y.src in
     if c <> Eq then c
     else
-      let c = Option.compare String.compare x.dst y.dst in
+      let c = Dst.compare x.dst y.dst in
       if c <> Eq then c
       else
         Section.compare x.section y.section
@@ -205,6 +253,12 @@
       else
         dst
     in
+    let dst = match dst with
+      | None ->
+        Dst.infer ~src_basename:(Path.basename src) section
+      | Some s ->
+        Dst.explicit s
+    in
     { src
     ; dst
     ; section
@@ -214,19 +268,7 @@
 
   let relative_installed_path t ~paths =
     let main_dir = Section.Paths.get paths t.section in
-    let dst =
-      match t.dst with
-      | Some x -> x
-      | None ->
-        let dst = Path.basename t.src in
-        match t.section with
-        | Man -> begin
-            match String.rsplit2 dst ~on:'.' with
-            | None -> dst
-            | Some (_, sec) -> sprintf "man%s/%s" sec dst
-          end
-        | _ -> dst
-    in
+    let dst = Dst.to_string t.dst in
     Path.relative main_dir dst
 
   let add_install_prefix t ~paths ~prefix =
@@ -238,7 +280,14 @@
       Path.reach i_want_to_install_the_file_as
         ~from:opam_will_install_in_this_dir
     in
-    { t with dst = Some dst }
+    { t with dst = Dst.explicit dst }
+
+  let of_install_file ~src ~dst ~section =
+    { src;
+      section;
+      dst = Dst.of_install_file ~section ~src_basename:(Path.basename src) dst;
+    }
+
 end
 
 let files entries =
@@ -257,7 +306,9 @@
     List.sort ~compare:Entry.compare entries
     |> List.iter ~f:(fun (e : Entry.t) ->
       let src = Path.to_string e.src in
-      match e.dst with
+      match
+        Dst.to_install_file ~src_basename:(Path.basename e.src) 
~section:e.section e.dst
+      with
       | None     -> pr "  %S"      src
       | Some dst -> pr "  %S {%S}" src dst);
     pr "]");
@@ -299,18 +350,12 @@
             | List (_, l) ->
               List.map l ~f:(function
                 | String (_, src) ->
-                  { Entry.
-                    src = Path.of_string src
-                  ; dst = None
-                  ; section
-                  }
+                  let src = Path.of_string src in
+                  Entry.of_install_file ~src ~dst:None ~section
                 | Option (_, String (_, src),
                           [String (_, dst)]) ->
-                  { Entry.
-                    src = Path.of_string src
-                  ; dst = Some dst
-                  ; section
-                  }
+                  let src = Path.of_string src in
+                  Entry.of_install_file ~src ~dst:(Some dst) ~section
                 | v ->
                   fail (pos_of_opam_value v)
                     "Invalid value in .install file")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/src/install.mli 
new/ocaml-dune-1.9.3/src/install.mli
--- old/ocaml-dune-1.9.1/src/install.mli        2019-04-11 06:25:21.000000000 
+0200
+++ new/ocaml-dune-1.9.3/src/install.mli        2019-05-06 05:59:29.000000000 
+0200
@@ -2,6 +2,10 @@
 
 open! Stdune
 
+module Dst : sig
+  type t
+end
+
 module Section : sig
   type t =
     | Lib
@@ -51,14 +55,15 @@
       -> unit
       -> t
 
-    val install_path : t -> section -> string -> Path.t
+    val install_path : t -> section -> Dst.t -> Path.t
   end with type section := t
 end
 
 module Entry : sig
+
   type t = private
     { src     : Path.t
-    ; dst     : string option
+    ; dst     : Dst.t
     ; section : Section.t
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/src/install_rules.ml 
new/ocaml-dune-1.9.3/src/install_rules.ml
--- old/ocaml-dune-1.9.1/src/install_rules.ml   2019-04-11 06:25:21.000000000 
+0200
+++ new/ocaml-dune-1.9.3/src/install_rules.ml   2019-05-06 05:59:29.000000000 
+0200
@@ -365,8 +365,7 @@
               List.map files ~f:(fun fb ->
                 let loc = File_binding.Expanded.src_loc fb in
                 let src = File_binding.Expanded.src fb in
-                let dst = Option.map ~f:Path.Local.to_string
-                            (File_binding.Expanded.dst fb) in
+                let dst = File_binding.Expanded.dst fb in
                 ( Some loc
                 , Install.Entry.make section src ?dst
                 )))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/src/lib.ml 
new/ocaml-dune-1.9.3/src/lib.ml
--- old/ocaml-dune-1.9.1/src/lib.ml     2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/src/lib.ml     2019-05-06 05:59:29.000000000 +0200
@@ -205,8 +205,9 @@
     ; resolved_selects  : Resolved_select.t list
     ; user_written_deps : Dune_file.Lib_deps.t
     ; implements        : t Or_exn.t option
-    ; (* this field cannot be forced until the library is instantiated *)
+    ; (* these fields cannot be forced until the library is instantiated *)
       default_implementation : t Or_exn.t Lazy.t option
+    ; implementations   : t Or_exn.t list Variant.Map.t Lazy.t option
     ; (* This is mutable to avoid this error:
 
          {[
@@ -752,25 +753,27 @@
 end
 
 (* Find implementation that matches given variants *)
-let rec find_implementation_for db lib ~variants =
+let find_implementation_for lib ~variants =
+  assert (Option.is_some lib.info.virtual_);
   match variants with
   | None -> Ok None
   | Some (loc, variants_set) ->
-    let available_implementations = db.find_implementations lib.name in
-    Variant.Set.fold variants_set
-      ~init:[]
-      ~f:(fun variant acc ->
-        List.rev_append acc
-          (Variant.Map.Multi.find available_implementations variant))
-    |> List.sort_uniq ~compare:(fun (a:Lib_info.t) (b:Lib_info.t) ->
-      match Lib_name.compare a.name b.name with
-      | Eq -> Path.compare a.src_dir b.src_dir
-      | x -> x)
-    |> fun x -> match x, db.parent with
-    | [], None -> Ok None
-    | [], Some db -> find_implementation_for db lib ~variants
-    | [elem], _ -> Ok (Some elem)
-    | conflict, _ ->
+    let available_implementations =
+      Lazy.force (Option.value_exn lib.implementations)
+    in
+    let* candidates =
+      Variant.Set.fold variants_set
+        ~init:[]
+        ~f:(fun variant acc ->
+          List.rev_append acc
+            (Variant.Map.Multi.find available_implementations variant))
+      |> Result.List.all
+    in
+    match candidates with
+    | [] -> Ok None
+    | [elem] -> Ok (Some elem)
+    | conflict ->
+      let conflict = List.map conflict ~f:(fun lib -> lib.info) in
       Error (Error (Multiple_implementations_for_virtual_lib
                       { lib = lib.info
                       ; loc
@@ -778,6 +781,16 @@
                       ; conflict
                       }))
 
+let find_implementations db name =
+  let rec loop acc db =
+    let implementations = db.find_implementations name in
+    let acc = Variant.Map.Multi.rev_union acc implementations in
+    match db.parent with
+    | None -> acc
+    | Some db -> loop acc db
+  in
+  loop Variant.Map.empty db
+
 let rec instantiate db name (info : Lib_info.t) ~stack ~hidden =
   let id, stack =
     Dep_stack.create_and_push stack name info.src_dir
@@ -803,6 +816,23 @@
   in
   let default_implementation =
     Option.map info.default_implementation ~f:(fun l -> lazy (resolve l)) in
+  let implementations =
+    Option.map info.virtual_ ~f:(fun _ -> lazy (
+      let available_implementations = find_implementations db name in
+      let seen_libs = ref Set.empty in
+      Variant.Map.map available_implementations ~f:(
+        List.filter_map ~f:(fun (impl : Lib_info.t) ->
+          match resolve (impl.loc, impl.name) with
+          | Error _ as e -> Some e
+          | Ok lib ->
+            if Set.mem !seen_libs lib then
+              None
+            else begin
+              seen_libs := Set.add !seen_libs lib;
+              Some (Ok lib)
+            end
+        ))))
+  in
   let requires, pps, resolved_selects =
     resolve_user_deps db info.requires ~allow_private_deps ~pps:info.pps ~stack
   in
@@ -835,6 +865,7 @@
     ; sub_systems       = Sub_system_name.Map.empty
     ; implements
     ; default_implementation
+    ; implementations
     }
   in
   t.sub_systems <-
@@ -1026,7 +1057,7 @@
 
    Assertion: libraries is a list of virtual libraries with no implementation.
    The goal is to find which libraries can safely be defaulted. *)
-and resolve_default_libraries db libraries ~variants =
+and resolve_default_libraries libraries ~variants =
   (* Map from a vlib to vlibs that are implemented in the transitive closure of
      its default impl. *)
   let vlib_status = Vlib_visit.create () in
@@ -1037,23 +1068,20 @@
     | None -> Ok true
     | Some x -> let+ x = x in x <> vlib
   in
-  let name_to_lib (loc, name) =
-    resolve_dep db name ~allow_private_deps:true ~loc
-      ~stack:Dep_stack.empty
-  in
   (* Either by variants or by default. *)
   let impl_for vlib =
-    find_implementation_for db vlib ~variants
-    >>| function
-    | Some x -> Some (name_to_lib (x.loc, x.name))
-    | None -> Option.map ~f:Lazy.force vlib.default_implementation
+    find_implementation_for vlib ~variants >>= function
+    | Some impl -> Ok (Some impl)
+    | None ->
+      begin match vlib.default_implementation with
+      | None -> Ok None
+      | Some d -> Result.map ~f:Option.some (Lazy.force d)
+      end
   in
   let impl_different_from_vlib_default vlib (impl : lib) =
-    impl_for vlib >>= function
-    | None -> Ok true
-    | Some lib ->
-      let+ lib = lib in
-      lib <> impl
+    impl_for vlib >>| function
+    | None -> true
+    | Some lib -> lib <> impl
   in
   let library_is_default lib =
     match Map.find !vlib_default_parent lib with
@@ -1096,11 +1124,16 @@
                handling virtual lib. *)
             Ok ())
       in
-      (* If the library has an implementation according to variants. *)
-      let* impl = impl_for lib in
-      Result.Option.iter impl ~f:(visit ~stack:(lib.info :: stack) (Some lib))
-      (* If the library is a virtual library with a default
-         implementation. *)
+      (* If the library has an implementation according to variants or default
+         impl. *)
+      if Option.is_none lib.info.virtual_ then
+        Ok ()
+      else
+        let* impl = impl_for lib in
+        begin match impl with
+        | None -> Ok ()
+        | Some impl -> visit ~stack:(lib.info :: stack) (Some lib) impl
+        end
     )
   in
   (* For each virtual library we know which vlibs will be implemented when
@@ -1109,10 +1142,6 @@
   List.filter_map ~f:library_is_default libraries
 
 and closure_with_overlap_checks db ts ~stack:orig_stack ~linking ~variants =
-  let name_to_lib name loc =
-    resolve_dep (Option.value_exn db) name
-      ~allow_private_deps:true ~loc ~stack:Dep_stack.empty
-  in
   let visited = ref Map.empty in
   let unimplemented = ref Vlib.Unimplemented.empty in
   let res = ref [] in
@@ -1165,14 +1194,13 @@
         !unimplemented
         |> Vlib.Unimplemented.fold ~init:([], []) ~f:(fun lib (lst, def) ->
           let* impl =
-            find_implementation_for (Option.value_exn db) lib ~variants in
+            find_implementation_for lib ~variants in
           match impl, lib.default_implementation with
           | None, Some _ ->
             Ok (lst, (lib :: def))
           | None, None ->
             Ok (lst, def)
-          | Some (impl_info : Lib_info.t), _ ->
-            let* impl = name_to_lib impl_info.name impl_info.loc in
+          | Some (impl : lib), _ ->
             Ok (impl :: lst, def))
       in
       (* Manage unimplemented libraries that have a default implementation. *)
@@ -1180,7 +1208,7 @@
       | [], [] ->
         Ok ()
       | [], def ->
-        resolve_default_libraries (Option.value_exn db) def ~variants
+        resolve_default_libraries def ~variants
         >>= handle ~stack
       | lst, _ ->
         handle lst ~stack
@@ -1278,6 +1306,24 @@
       (virtual_lib, Variant.Map.of_list_exn [content]))
     |> Lib_name.Map.of_list_reduce ~f:Variant.Map.Multi.rev_union
 
+  (* implementations tagged with a variant are only variant when the they
+     implement a virtual library from the same project. *)
+  let check_valid_implementations (libmap : resolve_result Lib_name.Map.t) =
+    Lib_name.Map.iter libmap ~f:(function
+      | Found (lib : Lib_info.t) ->
+        begin match lib.implements, lib.variant with
+        | Some (loc, implements), Some variant ->
+          if not (Lib_name.Map.mem libmap implements) then
+            Errors.fail loc
+              "Library implementation %a for variant %a implements a library \
+               outside the project. This is forbidden."
+              Lib_name.pp implements Variant.pp variant
+        | _, _ -> ()
+        end
+      | Redirect (_, _) (* skip b/c [Found] covers *) -> ()
+      | Hidden (_, _) -> assert false
+      | Not_found -> assert false)
+
   let create_from_library_stanzas ?parent ~lib_config stanzas =
     let variant_map =
       List.map stanzas ~f:(fun (dir, (conf : Dune_file.Library.t)) ->
@@ -1320,6 +1366,7 @@
             (Loc.to_file_colon_line loc1)
             (Loc.to_file_colon_line loc2)
     in
+    check_valid_implementations map;
     create () ?parent
       ~resolve:(fun name ->
         Lib_name.Map.find map name
@@ -1330,11 +1377,11 @@
       ~all:(fun () -> Lib_name.Map.keys map)
 
   let create_from_findlib ?(external_lib_deps_mode=false) findlib =
-    let variant_map =
+    let variant_map = lazy (
       Findlib.all_packages findlib
       |> List.map ~f:Lib_info.of_dune_lib
       |> create_variant_map
-    in
+    ) in
     create ()
       ~resolve:(fun name ->
         match Findlib.find findlib name with
@@ -1350,7 +1397,7 @@
           | Hidden pkg ->
             Hidden (Lib_info.of_dune_lib pkg, "unsatisfied 'exist_if'"))
       ~find_implementations:(fun virt ->
-        Lib_name.Map.find variant_map virt
+        Lib_name.Map.find (Lazy.force variant_map) virt
         |> Option.value ~default:Variant.Map.empty)
       ~all:(fun () ->
         Findlib.all_packages findlib
@@ -1649,3 +1696,5 @@
     ~modules:(Some lib_modules)
     ~main_module_name:(Result.ok_exn (main_module_name lib))
     ~sub_systems:(Sub_system.dump_config lib)
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ocaml-dune-1.9.1/test/blackbox-tests/dune.inc 
new/ocaml-dune-1.9.3/test/blackbox-tests/dune.inc
--- old/ocaml-dune-1.9.1/test/blackbox-tests/dune.inc   2019-04-11 
06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/dune.inc   2019-05-06 
05:59:29.000000000 +0200
@@ -604,6 +604,14 @@
    (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected)))))
 
 (alias
+ (name github2123)
+ (deps (package dune) (source_tree test-cases/github2123))
+ (action
+  (chdir
+   test-cases/github2123
+   (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected)))))
+
+(alias
  (name github24)
  (deps (package dune) (source_tree test-cases/github24))
  (action
@@ -1337,6 +1345,14 @@
    (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected)))))
 
 (alias
+ (name variants-multi-project)
+ (deps (package dune) (source_tree test-cases/variants-multi-project))
+ (action
+  (chdir
+   test-cases/variants-multi-project
+   (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected)))))
+
+(alias
  (name vlib)
  (deps (package dune) (source_tree test-cases/vlib))
  (action
@@ -1462,6 +1478,7 @@
   (alias github1946)
   (alias github20)
   (alias github2033)
+  (alias github2123)
   (alias github24)
   (alias github25)
   (alias github534)
@@ -1549,6 +1566,7 @@
   (alias utop)
   (alias utop-default)
   (alias variants)
+  (alias variants-multi-project)
   (alias vlib)
   (alias vlib-default-impl)
   (alias windows-diff)
@@ -1627,6 +1645,7 @@
   (alias github1946)
   (alias github20)
   (alias github2033)
+  (alias github2123)
   (alias github24)
   (alias github25)
   (alias github534)
@@ -1695,6 +1714,7 @@
   (alias unreadable-src)
   (alias upgrader)
   (alias variants)
+  (alias variants-multi-project)
   (alias vlib)
   (alias vlib-default-impl)
   (alias windows-diff)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/coq/base/dune 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/coq/base/dune
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/coq/base/dune   
2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/coq/base/dune   
2019-05-06 05:59:29.000000000 +0200
@@ -1,4 +1,4 @@
-(coqlib
+(coq.theory
  (name basic)
  (public_name base.basic)
  (modules :standard)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/coq/ml_lib/theories/dune 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/coq/ml_lib/theories/dune
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/coq/ml_lib/theories/dune    
    2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/coq/ml_lib/theories/dune    
    2019-05-06 05:59:29.000000000 +0200
@@ -1,4 +1,4 @@
-(coqlib
+(coq.theory
  (name Plugin)
  (public_name ml_lib.Plugin)
  (synopsis "Test Plugin")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/coq/rec_module/dune 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/coq/rec_module/dune
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/coq/rec_module/dune     
2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/coq/rec_module/dune     
2019-05-06 05:59:29.000000000 +0200
@@ -1,4 +1,4 @@
-(coqlib
+(coq.theory
  (name rec_module)
  (public_name rec.module)
  (modules :standard)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/coq/run.t 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/coq/run.t
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/coq/run.t       
2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/coq/run.t       
2019-05-06 05:59:29.000000000 +0200
@@ -32,9 +32,9 @@
   $ dune build --root base --display short --debug-dependency-path @default
   Entering directory 'base'
   lib: [
-    "_build/install/default/lib/base/META" {"META"}
-    "_build/install/default/lib/base/dune-package" {"dune-package"}
-    "_build/install/default/lib/base/opam" {"opam"}
+    "_build/install/default/lib/base/META"
+    "_build/install/default/lib/base/dune-package"
+    "_build/install/default/lib/base/opam"
   ]
   lib_root: [
     "_build/install/default/lib/coq/user-contrib/basic/bar.vo" 
{"coq/user-contrib/basic/bar.vo"}
@@ -44,9 +44,9 @@
   $ dune build --root rec_module --display short --debug-dependency-path 
@default
   Entering directory 'rec_module'
   lib: [
-    "_build/install/default/lib/rec/META" {"META"}
-    "_build/install/default/lib/rec/dune-package" {"dune-package"}
-    "_build/install/default/lib/rec/opam" {"opam"}
+    "_build/install/default/lib/rec/META"
+    "_build/install/default/lib/rec/dune-package"
+    "_build/install/default/lib/rec/opam"
   ]
   lib_root: [
     "_build/install/default/lib/coq/user-contrib/rec_module/a/bar.vo" 
{"coq/user-contrib/rec_module/a/bar.vo"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/gen-opam-install-file/run.t 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/gen-opam-install-file/run.t
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/gen-opam-install-file/run.t 
    2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/gen-opam-install-file/run.t 
    2019-05-06 05:59:29.000000000 +0200
@@ -6,9 +6,9 @@
   Warning: jbuild files are deprecated, please convert this file to a dune 
file instead.
   Note: You can use "dune upgrade" to convert your project to dune.
   lib: [
-    "_build/install/default/lib/foo/META" {"META"}
-    "_build/install/default/lib/foo/dune-package" {"dune-package"}
-    "_build/install/default/lib/foo/opam" {"opam"}
+    "_build/install/default/lib/foo/META"
+    "_build/install/default/lib/foo/dune-package"
+    "_build/install/default/lib/foo/opam"
     
"_build/install/default/lib/foo/ppx_rewriter_dune/foo_ppx_rewriter_dune$ext_lib"
 {"ppx_rewriter_dune/foo_ppx_rewriter_dune$ext_lib"}
     
"_build/install/default/lib/foo/ppx_rewriter_dune/foo_ppx_rewriter_dune.cma" 
{"ppx_rewriter_dune/foo_ppx_rewriter_dune.cma"}
     
"_build/install/default/lib/foo/ppx_rewriter_dune/foo_ppx_rewriter_dune.cmi" 
{"ppx_rewriter_dune/foo_ppx_rewriter_dune.cmi"}
@@ -36,20 +36,20 @@
   $ dune build --root stubs
   Entering directory 'stubs'
   lib: [
-    "_build/install/default/lib/foo/META" {"META"}
-    "_build/install/default/lib/foo/cfoo.h" {"cfoo.h"}
-    "_build/install/default/lib/foo/dune-package" {"dune-package"}
-    "_build/install/default/lib/foo/foo$ext_lib" {"foo$ext_lib"}
-    "_build/install/default/lib/foo/foo.cma" {"foo.cma"}
-    "_build/install/default/lib/foo/foo.cmi" {"foo.cmi"}
-    "_build/install/default/lib/foo/foo.cmt" {"foo.cmt"}
-    "_build/install/default/lib/foo/foo.cmx" {"foo.cmx"}
-    "_build/install/default/lib/foo/foo.cmxa" {"foo.cmxa"}
-    "_build/install/default/lib/foo/foo.cmxs" {"foo.cmxs"}
-    "_build/install/default/lib/foo/foo.js" {"foo.js"}
-    "_build/install/default/lib/foo/foo.ml" {"foo.ml"}
-    "_build/install/default/lib/foo/libfoo_stubs$ext_lib" 
{"libfoo_stubs$ext_lib"}
-    "_build/install/default/lib/foo/opam" {"opam"}
+    "_build/install/default/lib/foo/META"
+    "_build/install/default/lib/foo/cfoo.h"
+    "_build/install/default/lib/foo/dune-package"
+    "_build/install/default/lib/foo/foo$ext_lib"
+    "_build/install/default/lib/foo/foo.cma"
+    "_build/install/default/lib/foo/foo.cmi"
+    "_build/install/default/lib/foo/foo.cmt"
+    "_build/install/default/lib/foo/foo.cmx"
+    "_build/install/default/lib/foo/foo.cmxa"
+    "_build/install/default/lib/foo/foo.cmxs"
+    "_build/install/default/lib/foo/foo.js"
+    "_build/install/default/lib/foo/foo.ml"
+    "_build/install/default/lib/foo/libfoo_stubs$ext_lib"
+    "_build/install/default/lib/foo/opam"
   ]
   stublibs: [
     "_build/install/default/lib/stublibs/dllfoo_stubs$ext_dll"
@@ -60,12 +60,12 @@
   $ dune build --root install-stanza
   Entering directory 'install-stanza'
   lib: [
-    "_build/install/default/lib/foo/META" {"META"}
-    "_build/install/default/lib/foo/dune-package" {"dune-package"}
-    "_build/install/default/lib/foo/opam" {"opam"}
+    "_build/install/default/lib/foo/META"
+    "_build/install/default/lib/foo/dune-package"
+    "_build/install/default/lib/foo/opam"
   ]
   share: [
-    "_build/install/default/share/foo/foobar" {"foobar"}
+    "_build/install/default/share/foo/foobar"
     "_build/install/default/share/foo/share1"
   ]
 
@@ -74,12 +74,12 @@
   $ dune build --root exe
   Entering directory 'exe'
   lib: [
-    "_build/install/default/lib/foo/META" {"META"}
-    "_build/install/default/lib/foo/dune-package" {"dune-package"}
-    "_build/install/default/lib/foo/opam" {"opam"}
+    "_build/install/default/lib/foo/META"
+    "_build/install/default/lib/foo/dune-package"
+    "_build/install/default/lib/foo/opam"
   ]
   bin: [
-    "_build/install/default/bin/bar" {"bar"}
+    "_build/install/default/bin/bar"
   ]
 
 mld files are installed
@@ -87,9 +87,9 @@
   $ dune build --root mld
   Entering directory 'mld'
   lib: [
-    "_build/install/default/lib/foo/META" {"META"}
-    "_build/install/default/lib/foo/dune-package" {"dune-package"}
-    "_build/install/default/lib/foo/opam" {"opam"}
+    "_build/install/default/lib/foo/META"
+    "_build/install/default/lib/foo/dune-package"
+    "_build/install/default/lib/foo/opam"
   ]
   doc: [
     "_build/install/default/doc/foo/odoc-pages/doc.mld" {"odoc-pages/doc.mld"}
@@ -100,19 +100,19 @@
   $ dune build --root lib-unwrapped
   Entering directory 'lib-unwrapped'
   lib: [
-    "_build/install/default/lib/foo/META" {"META"}
-    "_build/install/default/lib/foo/dune-package" {"dune-package"}
-    "_build/install/default/lib/foo/foo$ext_lib" {"foo$ext_lib"}
-    "_build/install/default/lib/foo/foo.cma" {"foo.cma"}
-    "_build/install/default/lib/foo/foo.cmi" {"foo.cmi"}
-    "_build/install/default/lib/foo/foo.cmt" {"foo.cmt"}
-    "_build/install/default/lib/foo/foo.cmti" {"foo.cmti"}
-    "_build/install/default/lib/foo/foo.cmx" {"foo.cmx"}
-    "_build/install/default/lib/foo/foo.cmxa" {"foo.cmxa"}
-    "_build/install/default/lib/foo/foo.cmxs" {"foo.cmxs"}
-    "_build/install/default/lib/foo/foo.ml" {"foo.ml"}
-    "_build/install/default/lib/foo/foo.mli" {"foo.mli"}
-    "_build/install/default/lib/foo/opam" {"opam"}
+    "_build/install/default/lib/foo/META"
+    "_build/install/default/lib/foo/dune-package"
+    "_build/install/default/lib/foo/foo$ext_lib"
+    "_build/install/default/lib/foo/foo.cma"
+    "_build/install/default/lib/foo/foo.cmi"
+    "_build/install/default/lib/foo/foo.cmt"
+    "_build/install/default/lib/foo/foo.cmti"
+    "_build/install/default/lib/foo/foo.cmx"
+    "_build/install/default/lib/foo/foo.cmxa"
+    "_build/install/default/lib/foo/foo.cmxs"
+    "_build/install/default/lib/foo/foo.ml"
+    "_build/install/default/lib/foo/foo.mli"
+    "_build/install/default/lib/foo/opam"
   ]
 
 wrapped lib with lib interface module
@@ -120,27 +120,27 @@
   $ dune build --root lib-wrapped-alias
   Entering directory 'lib-wrapped-alias'
   lib: [
-    "_build/install/default/lib/foo/META" {"META"}
-    "_build/install/default/lib/foo/bar.ml" {"bar.ml"}
-    "_build/install/default/lib/foo/bar.mli" {"bar.mli"}
-    "_build/install/default/lib/foo/dune-package" {"dune-package"}
-    "_build/install/default/lib/foo/foo$ext_lib" {"foo$ext_lib"}
-    "_build/install/default/lib/foo/foo.cma" {"foo.cma"}
-    "_build/install/default/lib/foo/foo.cmi" {"foo.cmi"}
-    "_build/install/default/lib/foo/foo.cmt" {"foo.cmt"}
-    "_build/install/default/lib/foo/foo.cmx" {"foo.cmx"}
-    "_build/install/default/lib/foo/foo.cmxa" {"foo.cmxa"}
-    "_build/install/default/lib/foo/foo.cmxs" {"foo.cmxs"}
-    "_build/install/default/lib/foo/foo.ml" {"foo.ml"}
-    "_build/install/default/lib/foo/foo__.cmi" {"foo__.cmi"}
-    "_build/install/default/lib/foo/foo__.cmt" {"foo__.cmt"}
-    "_build/install/default/lib/foo/foo__.cmx" {"foo__.cmx"}
-    "_build/install/default/lib/foo/foo__.ml" {"foo__.ml"}
-    "_build/install/default/lib/foo/foo__Bar.cmi" {"foo__Bar.cmi"}
-    "_build/install/default/lib/foo/foo__Bar.cmt" {"foo__Bar.cmt"}
-    "_build/install/default/lib/foo/foo__Bar.cmti" {"foo__Bar.cmti"}
-    "_build/install/default/lib/foo/foo__Bar.cmx" {"foo__Bar.cmx"}
-    "_build/install/default/lib/foo/opam" {"opam"}
+    "_build/install/default/lib/foo/META"
+    "_build/install/default/lib/foo/bar.ml"
+    "_build/install/default/lib/foo/bar.mli"
+    "_build/install/default/lib/foo/dune-package"
+    "_build/install/default/lib/foo/foo$ext_lib"
+    "_build/install/default/lib/foo/foo.cma"
+    "_build/install/default/lib/foo/foo.cmi"
+    "_build/install/default/lib/foo/foo.cmt"
+    "_build/install/default/lib/foo/foo.cmx"
+    "_build/install/default/lib/foo/foo.cmxa"
+    "_build/install/default/lib/foo/foo.cmxs"
+    "_build/install/default/lib/foo/foo.ml"
+    "_build/install/default/lib/foo/foo__.cmi"
+    "_build/install/default/lib/foo/foo__.cmt"
+    "_build/install/default/lib/foo/foo__.cmx"
+    "_build/install/default/lib/foo/foo__.ml"
+    "_build/install/default/lib/foo/foo__Bar.cmi"
+    "_build/install/default/lib/foo/foo__Bar.cmt"
+    "_build/install/default/lib/foo/foo__Bar.cmti"
+    "_build/install/default/lib/foo/foo__Bar.cmx"
+    "_build/install/default/lib/foo/opam"
   ]
 
 wrapped lib without lib interface module
@@ -148,21 +148,21 @@
   $ dune build --root lib-wrapped-no-alias
   Entering directory 'lib-wrapped-no-alias'
   lib: [
-    "_build/install/default/lib/foo/META" {"META"}
-    "_build/install/default/lib/foo/bar.ml" {"bar.ml"}
-    "_build/install/default/lib/foo/bar.mli" {"bar.mli"}
-    "_build/install/default/lib/foo/dune-package" {"dune-package"}
-    "_build/install/default/lib/foo/foo$ext_lib" {"foo$ext_lib"}
-    "_build/install/default/lib/foo/foo.cma" {"foo.cma"}
-    "_build/install/default/lib/foo/foo.cmi" {"foo.cmi"}
-    "_build/install/default/lib/foo/foo.cmt" {"foo.cmt"}
-    "_build/install/default/lib/foo/foo.cmx" {"foo.cmx"}
-    "_build/install/default/lib/foo/foo.cmxa" {"foo.cmxa"}
-    "_build/install/default/lib/foo/foo.cmxs" {"foo.cmxs"}
-    "_build/install/default/lib/foo/foo.ml" {"foo.ml"}
-    "_build/install/default/lib/foo/foo__Bar.cmi" {"foo__Bar.cmi"}
-    "_build/install/default/lib/foo/foo__Bar.cmt" {"foo__Bar.cmt"}
-    "_build/install/default/lib/foo/foo__Bar.cmti" {"foo__Bar.cmti"}
-    "_build/install/default/lib/foo/foo__Bar.cmx" {"foo__Bar.cmx"}
-    "_build/install/default/lib/foo/opam" {"opam"}
+    "_build/install/default/lib/foo/META"
+    "_build/install/default/lib/foo/bar.ml"
+    "_build/install/default/lib/foo/bar.mli"
+    "_build/install/default/lib/foo/dune-package"
+    "_build/install/default/lib/foo/foo$ext_lib"
+    "_build/install/default/lib/foo/foo.cma"
+    "_build/install/default/lib/foo/foo.cmi"
+    "_build/install/default/lib/foo/foo.cmt"
+    "_build/install/default/lib/foo/foo.cmx"
+    "_build/install/default/lib/foo/foo.cmxa"
+    "_build/install/default/lib/foo/foo.cmxs"
+    "_build/install/default/lib/foo/foo.ml"
+    "_build/install/default/lib/foo/foo__Bar.cmi"
+    "_build/install/default/lib/foo/foo__Bar.cmt"
+    "_build/install/default/lib/foo/foo__Bar.cmti"
+    "_build/install/default/lib/foo/foo__Bar.cmx"
+    "_build/install/default/lib/foo/opam"
   ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/github2123/dune 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/github2123/dune
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/github2123/dune 
1970-01-01 01:00:00.000000000 +0100
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/github2123/dune 
2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1,3 @@
+(install
+ (section lib)
+ (files (mirage-xen.pc as ../pkgconfig/mirage-xen.pc)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/github2123/dune-project 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/github2123/dune-project
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/github2123/dune-project 
1970-01-01 01:00:00.000000000 +0100
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/github2123/dune-project 
2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1 @@
+(lang dune 1.9)
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/github2123/run.t 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/github2123/run.t
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/github2123/run.t        
1970-01-01 01:00:00.000000000 +0100
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/github2123/run.t        
2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1,3 @@
+  $ dune build @install
+  $ cat foo.install | grep mirage-xen
+    "_build/install/default/lib/pkgconfig/mirage-xen.pc" 
{"../pkgconfig/mirage-xen.pc"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/install-with-var/dune 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/install-with-var/dune
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/install-with-var/dune   
2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/install-with-var/dune   
1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-(install
- (section man)
- (files (a-man-page.1 as a-man-page.%{context_name}.1) another-man-page.3)
-)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/install-with-var/run.t 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/install-with-var/run.t
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/install-with-var/run.t  
2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/install-with-var/run.t  
2019-05-06 05:59:29.000000000 +0200
@@ -1,10 +1,26 @@
 `dune install` should handle destination directories that don't exist
 
+  $ cat > dune <<EOF
+  > (install
+  >  (section man)
+  >  (files
+  >     (man-page-a.1 as man-page-a.%{context_name}.1) ; incorrect usage!
+  >     (man-page-b.1 as man1/man-page-b.%{context_name}.1)
+  >     another-man-page.3)
+  > )
+  > EOF
+
   $ dune build @install
   $ dune install --prefix install --libdir lib
   Installing install/lib/foo/META
   Installing install/lib/foo/dune-package
   Installing install/lib/foo/opam
-  Installing install/man/man1/a-man-page.default.1
+  Installing install/man/man-page-a.default.1
+  Installing install/man/man1/man-page-b.default.1
   Installing install/man/man3/another-man-page.3
 
+  $ cat foo.install | grep man
+  man: [
+    "_build/install/default/man/man-page-a.default.1" {"man-page-a.default.1"}
+    "_build/install/default/man/man1/man-page-b.default.1"
+    "_build/install/default/man/man3/another-man-page.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/private-modules/run.t 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/private-modules/run.t
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/private-modules/run.t   
2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/private-modules/run.t   
2019-05-06 05:59:29.000000000 +0200
@@ -17,6 +17,6 @@
     "_build/install/default/lib/lib/foo/priv2.cmt" {"foo/priv2.cmt"}
     "_build/install/default/lib/lib/foo/priv2.cmx" {"foo/priv2.cmx"}
     "_build/install/default/lib/lib/foo/priv2.ml" {"foo/priv2.ml"}
-    "_build/install/default/lib/lib/lib__Priv.cmt" {"lib__Priv.cmt"}
-    "_build/install/default/lib/lib/lib__Priv.cmx" {"lib__Priv.cmx"}
-    "_build/install/default/lib/lib/priv.ml" {"priv.ml"}
+    "_build/install/default/lib/lib/lib__Priv.cmt"
+    "_build/install/default/lib/lib/lib__Priv.cmx"
+    "_build/install/default/lib/lib/priv.ml"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/reason/run.t 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/reason/run.t
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/reason/run.t    
2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/reason/run.t    
2019-05-06 05:59:29.000000000 +0200
@@ -5,50 +5,50 @@
   Bar
   Foo
   lib: [
-    "_build/install/default/lib/rlib/META" {"META"}
-    "_build/install/default/lib/rlib/bar.mli" {"bar.mli"}
-    "_build/install/default/lib/rlib/bar.re" {"bar.re"}
-    "_build/install/default/lib/rlib/cppome.re" {"cppome.re"}
-    "_build/install/default/lib/rlib/cppome.rei" {"cppome.rei"}
-    "_build/install/default/lib/rlib/dune-package" {"dune-package"}
-    "_build/install/default/lib/rlib/foo.ml" {"foo.ml"}
-    "_build/install/default/lib/rlib/foo.rei" {"foo.rei"}
-    "_build/install/default/lib/rlib/hello.re" {"hello.re"}
-    "_build/install/default/lib/rlib/hello.rei" {"hello.rei"}
-    "_build/install/default/lib/rlib/opam" {"opam"}
-    "_build/install/default/lib/rlib/pped.re" {"pped.re"}
-    "_build/install/default/lib/rlib/pped.rei" {"pped.rei"}
-    "_build/install/default/lib/rlib/rlib$ext_lib" {"rlib$ext_lib"}
-    "_build/install/default/lib/rlib/rlib.cma" {"rlib.cma"}
-    "_build/install/default/lib/rlib/rlib.cmi" {"rlib.cmi"}
-    "_build/install/default/lib/rlib/rlib.cmt" {"rlib.cmt"}
-    "_build/install/default/lib/rlib/rlib.cmx" {"rlib.cmx"}
-    "_build/install/default/lib/rlib/rlib.cmxa" {"rlib.cmxa"}
-    "_build/install/default/lib/rlib/rlib.cmxs" {"rlib.cmxs"}
-    "_build/install/default/lib/rlib/rlib.ml" {"rlib.ml"}
-    "_build/install/default/lib/rlib/rlib__Bar.cmi" {"rlib__Bar.cmi"}
-    "_build/install/default/lib/rlib/rlib__Bar.cmt" {"rlib__Bar.cmt"}
-    "_build/install/default/lib/rlib/rlib__Bar.cmti" {"rlib__Bar.cmti"}
-    "_build/install/default/lib/rlib/rlib__Bar.cmx" {"rlib__Bar.cmx"}
-    "_build/install/default/lib/rlib/rlib__Cppome.cmi" {"rlib__Cppome.cmi"}
-    "_build/install/default/lib/rlib/rlib__Cppome.cmt" {"rlib__Cppome.cmt"}
-    "_build/install/default/lib/rlib/rlib__Cppome.cmti" {"rlib__Cppome.cmti"}
-    "_build/install/default/lib/rlib/rlib__Cppome.cmx" {"rlib__Cppome.cmx"}
-    "_build/install/default/lib/rlib/rlib__Foo.cmi" {"rlib__Foo.cmi"}
-    "_build/install/default/lib/rlib/rlib__Foo.cmt" {"rlib__Foo.cmt"}
-    "_build/install/default/lib/rlib/rlib__Foo.cmti" {"rlib__Foo.cmti"}
-    "_build/install/default/lib/rlib/rlib__Foo.cmx" {"rlib__Foo.cmx"}
-    "_build/install/default/lib/rlib/rlib__Hello.cmi" {"rlib__Hello.cmi"}
-    "_build/install/default/lib/rlib/rlib__Hello.cmt" {"rlib__Hello.cmt"}
-    "_build/install/default/lib/rlib/rlib__Hello.cmti" {"rlib__Hello.cmti"}
-    "_build/install/default/lib/rlib/rlib__Hello.cmx" {"rlib__Hello.cmx"}
-    "_build/install/default/lib/rlib/rlib__Pped.cmi" {"rlib__Pped.cmi"}
-    "_build/install/default/lib/rlib/rlib__Pped.cmt" {"rlib__Pped.cmt"}
-    "_build/install/default/lib/rlib/rlib__Pped.cmti" {"rlib__Pped.cmti"}
-    "_build/install/default/lib/rlib/rlib__Pped.cmx" {"rlib__Pped.cmx"}
+    "_build/install/default/lib/rlib/META"
+    "_build/install/default/lib/rlib/bar.mli"
+    "_build/install/default/lib/rlib/bar.re"
+    "_build/install/default/lib/rlib/cppome.re"
+    "_build/install/default/lib/rlib/cppome.rei"
+    "_build/install/default/lib/rlib/dune-package"
+    "_build/install/default/lib/rlib/foo.ml"
+    "_build/install/default/lib/rlib/foo.rei"
+    "_build/install/default/lib/rlib/hello.re"
+    "_build/install/default/lib/rlib/hello.rei"
+    "_build/install/default/lib/rlib/opam"
+    "_build/install/default/lib/rlib/pped.re"
+    "_build/install/default/lib/rlib/pped.rei"
+    "_build/install/default/lib/rlib/rlib$ext_lib"
+    "_build/install/default/lib/rlib/rlib.cma"
+    "_build/install/default/lib/rlib/rlib.cmi"
+    "_build/install/default/lib/rlib/rlib.cmt"
+    "_build/install/default/lib/rlib/rlib.cmx"
+    "_build/install/default/lib/rlib/rlib.cmxa"
+    "_build/install/default/lib/rlib/rlib.cmxs"
+    "_build/install/default/lib/rlib/rlib.ml"
+    "_build/install/default/lib/rlib/rlib__Bar.cmi"
+    "_build/install/default/lib/rlib/rlib__Bar.cmt"
+    "_build/install/default/lib/rlib/rlib__Bar.cmti"
+    "_build/install/default/lib/rlib/rlib__Bar.cmx"
+    "_build/install/default/lib/rlib/rlib__Cppome.cmi"
+    "_build/install/default/lib/rlib/rlib__Cppome.cmt"
+    "_build/install/default/lib/rlib/rlib__Cppome.cmti"
+    "_build/install/default/lib/rlib/rlib__Cppome.cmx"
+    "_build/install/default/lib/rlib/rlib__Foo.cmi"
+    "_build/install/default/lib/rlib/rlib__Foo.cmt"
+    "_build/install/default/lib/rlib/rlib__Foo.cmti"
+    "_build/install/default/lib/rlib/rlib__Foo.cmx"
+    "_build/install/default/lib/rlib/rlib__Hello.cmi"
+    "_build/install/default/lib/rlib/rlib__Hello.cmt"
+    "_build/install/default/lib/rlib/rlib__Hello.cmti"
+    "_build/install/default/lib/rlib/rlib__Hello.cmx"
+    "_build/install/default/lib/rlib/rlib__Pped.cmi"
+    "_build/install/default/lib/rlib/rlib__Pped.cmt"
+    "_build/install/default/lib/rlib/rlib__Pped.cmti"
+    "_build/install/default/lib/rlib/rlib__Pped.cmx"
   ]
   bin: [
-    "_build/install/default/bin/refmt" {"refmt"}
+    "_build/install/default/bin/refmt"
   ]
 
 virtual libraries in reason
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/toplevel-stanza/variants/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/toplevel-stanza/variants/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/toplevel-stanza/variants/dune-project
   2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/toplevel-stanza/variants/dune-project
   2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/dune-package/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/dune-package/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/dune-package/dune-project
      2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/dune-package/dune-project
      2019-05-06 05:59:29.000000000 +0200
@@ -1,2 +1,3 @@
 (lang dune 1.9)
 (name a)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/external/exe/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/external/exe/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/external/exe/dune-project
      2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/external/exe/dune-project
      2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/external/lib/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/external/lib/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/external/lib/dune-project
      2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/external/lib/dune-project
      2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/multiple-implementations-for-variants/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/multiple-implementations-for-variants/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/multiple-implementations-for-variants/dune-project
     2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/multiple-implementations-for-variants/dune-project
     2019-05-06 05:59:29.000000000 +0200
@@ -1,2 +1,3 @@
 (lang dune 1.9)
 (using fmt 1.1)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/resolution-priority/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/resolution-priority/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/resolution-priority/dune-project
       2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/resolution-priority/dune-project
       2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/same-lib-in-multiple-scopes/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/same-lib-in-multiple-scopes/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/same-lib-in-multiple-scopes/dune-project
       2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/same-lib-in-multiple-scopes/dune-project
       2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/same-lib-in-multiple-scopes/test/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/same-lib-in-multiple-scopes/test/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/same-lib-in-multiple-scopes/test/dune-project
  2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/same-lib-in-multiple-scopes/test/dune-project
  2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/variant-not-implementation/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/variant-not-implementation/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/variant-not-implementation/dune-project
        2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/variant-not-implementation/dune-project
        2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/variant-with-concrete-impl/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/variant-with-concrete-impl/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/variant-with-concrete-impl/dune-project
        2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/variant-with-concrete-impl/dune-project
        2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/variants-base/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/variants-base/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants/variants-base/dune-project
     2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants/variants-base/dune-project
     2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj1/dune
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj1/dune
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj1/dune
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj1/dune
        2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1,4 @@
+(library
+ (name vlibfoo)
+ (public_name vlibfoo)
+ (virtual_modules vlibfoo))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj1/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj1/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj1/dune-project
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj1/dune-project
        2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1,2 @@
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj1/vlibfoo.mli
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj1/vlibfoo.mli
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj1/vlibfoo.mli
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj1/vlibfoo.mli
 2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1 @@
+val implme : unit -> unit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj2/dune
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj2/dune
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj2/dune
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj2/dune
        2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1,5 @@
+(library
+ (name impl)
+ (public_name impl)
+ (implements vlibfoo)
+ (variant somevariant))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj2/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj2/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj2/dune-project
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj2/dune-project
        2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1,2 @@
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj2/vlibfoo.ml
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj2/vlibfoo.ml
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/prj2/vlibfoo.ml
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/prj2/vlibfoo.ml
  2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1 @@
+let implme () = print_endline "foobar"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/run.t
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/run.t
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/variants-multi-project/run.t
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/variants-multi-project/run.t
    2019-05-06 05:59:29.000000000 +0200
@@ -0,0 +1,9 @@
+Implementation of library from another project is not allowed when tagged with
+variant.
+
+  $ dune build
+  File "prj2/dune", line 4, characters 13-20:
+  4 |  (implements vlibfoo)
+                   ^^^^^^^
+  Error: Library implementation vlibfoo for variant "somevariant" implements a 
library outside the project. This is forbidden.
+  [1]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib/run.t 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib/run.t
--- old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib/run.t      
2019-04-11 06:25:21.000000000 +0200
+++ new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib/run.t      
2019-05-06 05:59:29.000000000 +0200
@@ -165,35 +165,35 @@
   $ dune build --root install-file
   Entering directory 'install-file'
   lib: [
-    "_build/install/default/lib/vlib/META" {"META"}
-    "_build/install/default/lib/vlib/dune-package" {"dune-package"}
-    "_build/install/default/lib/vlib/foo.mli" {"foo.mli"}
-    "_build/install/default/lib/vlib/opam" {"opam"}
-    "_build/install/default/lib/vlib/vlib.cmi" {"vlib.cmi"}
-    "_build/install/default/lib/vlib/vlib.cmo" {"vlib.cmo"}
-    "_build/install/default/lib/vlib/vlib.cmt" {"vlib.cmt"}
-    "_build/install/default/lib/vlib/vlib.cmx" {"vlib.cmx"}
-    "_build/install/default/lib/vlib/vlib.ml" {"vlib.ml"}
-    "_build/install/default/lib/vlib/vlib$ext_obj" {"vlib$ext_obj"}
-    "_build/install/default/lib/vlib/vlib__Foo.cmi" {"vlib__Foo.cmi"}
-    "_build/install/default/lib/vlib/vlib__Foo.cmti" {"vlib__Foo.cmti"}
+    "_build/install/default/lib/vlib/META"
+    "_build/install/default/lib/vlib/dune-package"
+    "_build/install/default/lib/vlib/foo.mli"
+    "_build/install/default/lib/vlib/opam"
+    "_build/install/default/lib/vlib/vlib.cmi"
+    "_build/install/default/lib/vlib/vlib.cmo"
+    "_build/install/default/lib/vlib/vlib.cmt"
+    "_build/install/default/lib/vlib/vlib.cmx"
+    "_build/install/default/lib/vlib/vlib.ml"
+    "_build/install/default/lib/vlib/vlib$ext_obj"
+    "_build/install/default/lib/vlib/vlib__Foo.cmi"
+    "_build/install/default/lib/vlib/vlib__Foo.cmti"
   ]
   lib: [
-    "_build/install/default/lib/impl/META" {"META"}
-    "_build/install/default/lib/impl/dune-package" {"dune-package"}
-    "_build/install/default/lib/impl/foo.ml" {"foo.ml"}
-    "_build/install/default/lib/impl/impl$ext_lib" {"impl$ext_lib"}
-    "_build/install/default/lib/impl/impl.cma" {"impl.cma"}
-    "_build/install/default/lib/impl/impl.cmxa" {"impl.cmxa"}
-    "_build/install/default/lib/impl/impl.cmxs" {"impl.cmxs"}
-    "_build/install/default/lib/impl/opam" {"opam"}
-    "_build/install/default/lib/impl/vlib__Foo.cmi" {"vlib__Foo.cmi"}
-    "_build/install/default/lib/impl/vlib__Foo.cmt" {"vlib__Foo.cmt"}
-    "_build/install/default/lib/impl/vlib__Foo.cmx" {"vlib__Foo.cmx"}
-    "_build/install/default/lib/impl/vlib__impl__.cmi" {"vlib__impl__.cmi"}
-    "_build/install/default/lib/impl/vlib__impl__.cmt" {"vlib__impl__.cmt"}
-    "_build/install/default/lib/impl/vlib__impl__.cmx" {"vlib__impl__.cmx"}
-    "_build/install/default/lib/impl/vlib__impl__.ml" {"vlib__impl__.ml"}
+    "_build/install/default/lib/impl/META"
+    "_build/install/default/lib/impl/dune-package"
+    "_build/install/default/lib/impl/foo.ml"
+    "_build/install/default/lib/impl/impl$ext_lib"
+    "_build/install/default/lib/impl/impl.cma"
+    "_build/install/default/lib/impl/impl.cmxa"
+    "_build/install/default/lib/impl/impl.cmxs"
+    "_build/install/default/lib/impl/opam"
+    "_build/install/default/lib/impl/vlib__Foo.cmi"
+    "_build/install/default/lib/impl/vlib__Foo.cmt"
+    "_build/install/default/lib/impl/vlib__Foo.cmx"
+    "_build/install/default/lib/impl/vlib__impl__.cmi"
+    "_build/install/default/lib/impl/vlib__impl__.cmt"
+    "_build/install/default/lib/impl/vlib__impl__.cmx"
+    "_build/install/default/lib/impl/vlib__impl__.ml"
   ]
 
 Implementations may refer to virtual library's modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/default-impl/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/default-impl/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/default-impl/dune-project
     2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/default-impl/dune-project
     2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/default-impl-not-virtual-lib/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/default-impl-not-virtual-lib/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/default-impl-not-virtual-lib/dune-project
     2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/default-impl-not-virtual-lib/dune-project
     2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/dependency-cycle/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/dependency-cycle/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/dependency-cycle/dune-project
 2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/dependency-cycle/dune-project
 2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/dune-package/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/dune-package/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/dune-package/dune-project
     2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/dune-package/dune-project
     2019-05-06 05:59:29.000000000 +0200
@@ -1,2 +1,3 @@
 (lang dune 1.9)
 (name a)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/external/exe/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/external/exe/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/external/exe/dune-project
     2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/external/exe/dune-project
     2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/external/lib/dune-project
 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/external/lib/dune-project
--- 
old/ocaml-dune-1.9.1/test/blackbox-tests/test-cases/vlib-default-impl/external/lib/dune-project
     2019-04-11 06:25:21.000000000 +0200
+++ 
new/ocaml-dune-1.9.3/test/blackbox-tests/test-cases/vlib-default-impl/external/lib/dune-project
     2019-05-06 05:59:29.000000000 +0200
@@ -1 +1,2 @@
-(lang dune 1.9)
\ No newline at end of file
+(lang dune 1.9)
+(using library_variants 0.1)


Reply via email to