This commit is contained in:
swrup 2025-11-11 02:07:51 +01:00
parent aa2ff7b2f0
commit 2f3113f55d
11742 changed files with 1223940 additions and 0 deletions

View file

@ -0,0 +1,4 @@
(library
(name lib)
(wrapped false)
(default_implementation lib.impl))

View file

@ -0,0 +1,10 @@
Test that trying to specify a default implementation for a non-virtual library results
in an appropriate error message.
$ dune build
File "dune", line 4, characters 25-33:
4 | (default_implementation lib.impl))
^^^^^^^^
Error: Only virtual libraries can specify a default implementation.
[1]

View file

@ -0,0 +1,8 @@
(executable
(name bar)
(libraries vlib))
(rule
(alias default)
(action
(run ./bar.exe)))

View file

@ -0,0 +1,3 @@
(library
(name lib_default)
(implements vlib))

View file

@ -0,0 +1 @@
let run () = Printf.printf "hi from lib.default"

View file

@ -0,0 +1,5 @@
(library
(name vlib)
(virtual_modules vlib)
(wrapped false)
(default_implementation lib_default))

View file

@ -0,0 +1,4 @@
Basic sample selecting implementation according to default library.
$ dune build
hi from lib.default

View file

@ -0,0 +1,4 @@
(library
(name a_default)
(public_name a.default-impl)
(implements a))

View file

@ -0,0 +1,9 @@
(library
(public_name a)
(virtual_modules x)
(default_implementation a_default))
(rule
(with-stdout-to
x.mli
(echo "")))

View file

@ -0,0 +1,90 @@
Check that default implementation data is installed in the dune package file.
$ dune build @install
$ dune_cmd cat _build/install/default/lib/a/dune-package | sed "s/(lang dune .*)/(lang dune <version>)/" | dune_cmd sanitize
(lang dune <version>)
(name a)
(sections (lib .) (libexec .))
(files
(lib
(META
a.cmi
a.cmo
a.cmt
a.cmx
a.ml
a$ext_obj
a__X.cmi
a__X.cmti
default-impl/a.cmi
default-impl/a.cmx
default-impl/a__X.cmi
default-impl/a__X.cmt
default-impl/a__X.cmx
default-impl/a__a_default__.cmi
default-impl/a__a_default__.cmt
default-impl/a__a_default__.cmx
default-impl/a__a_default__.ml
default-impl/a_default$ext_lib
default-impl/a_default.cma
default-impl/a_default.cmxa
default-impl/x.ml
dune-package
opam
x.mli))
(libexec (default-impl/a_default.cmxs)))
(library
(name a)
(kind normal)
(virtual)
(default_implementation a.default-impl)
(main_module_name A)
(modes byte native)
(modules
(wrapped
(group
(alias
(obj_name a)
(visibility public)
(kind alias)
(source (path A) (impl (path a.ml-gen))))
(name A)
(modules
(module
(obj_name a__X)
(visibility public)
(kind virtual)
(source (path X) (intf (path x.mli))))))
(wrapped true))))
(library
(name a.default-impl)
(kind normal)
(archives
(byte default-impl/a_default.cma)
(native default-impl/a_default.cmxa))
(plugins
(byte default-impl/a_default.cma)
(native default-impl/a_default.cmxs))
(native_archives default-impl/a_default$ext_lib)
(requires a)
(implements a)
(main_module_name A)
(modes byte native)
(modules
(wrapped
(group
(alias
(obj_name a__a_default__)
(visibility public)
(kind alias)
(source
(path A__a_default__)
(impl (path default-impl/a__a_default__.ml-gen))))
(name A)
(modules
(module
(obj_name a__X)
(visibility public)
(kind impl_vmodule)
(source (path X) (impl (path default-impl/x.ml))))))
(wrapped true))))

View file

@ -0,0 +1,13 @@
(executable
(name bar)
(libraries vlib))
(rule
(alias default)
(action
(run ./bar.exe)))
(rule
(with-stdout-to
bar.ml
(echo "let () = X.run ()")))

View file

@ -0,0 +1,9 @@
(library
(name vlib_impl)
(public_name vlib.impl)
(implements vlib))
(rule
(with-stdout-to
x.ml
(echo "let run () = Printf.printf \"hey\"")))

View file

@ -0,0 +1,11 @@
(library
(name vlib)
(public_name vlib)
(wrapped false)
(virtual_modules x)
(default_implementation vlib.impl))
(rule
(with-stdout-to
x.mli
(echo "val run : unit -> unit")))

View file

@ -0,0 +1,12 @@
Test default implementation for an external library
First we create an external library and implementation
$ dune build --root lib @install
Entering directory 'lib'
Leaving directory 'lib'
Then we make sure that it works fine.
$ env OCAMLPATH=lib/_build/install/default/lib dune build --root exe --debug-dependency-path
Entering directory 'exe'
hey
Leaving directory 'exe'