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,104 @@
$ ocaml test.ml
impl: true. modules_without_implementation: true. virtual_modules: true. private_modules: true
File "dune", line 4, characters 18-19:
4 | (virtual_modules m)
^
Error: The following modules are declared as virtual and private:
- M
This is not possible.
-------------------------
impl: true. modules_without_implementation: true. virtual_modules: false. private_modules: true
File "dune", line 3, characters 33-34:
3 | (modules_without_implementation m)
^
Error: The following modules have an implementation, they cannot be listed as
modules_without_implementation:
- M
-------------------------
impl: true. modules_without_implementation: false. virtual_modules: true. private_modules: true
File "dune", line 3, characters 18-19:
3 | (virtual_modules m)
^
Error: The following modules are declared as virtual and private:
- M
This is not possible.
-------------------------
impl: true. modules_without_implementation: false. virtual_modules: false. private_modules: true
-------------------------
impl: false. modules_without_implementation: true. virtual_modules: true. private_modules: true
File "dune", line 4, characters 18-19:
4 | (virtual_modules m)
^
Error: The following modules are declared as virtual and private:
- M
This is not possible.
-------------------------
impl: false. modules_without_implementation: true. virtual_modules: false. private_modules: true
-------------------------
impl: false. modules_without_implementation: false. virtual_modules: true. private_modules: true
File "dune", line 3, characters 18-19:
3 | (virtual_modules m)
^
Error: The following modules are declared as virtual and private:
- M
This is not possible.
-------------------------
impl: false. modules_without_implementation: false. virtual_modules: false. private_modules: true
File "dune", lines 1-3, characters 0-42:
1 | (library
2 | (name foo)
3 | (private_modules m))
Error: Some modules don't have an implementation.
You need to add the following field to this stanza:
(modules_without_implementation m)
-------------------------
impl: true. modules_without_implementation: true. virtual_modules: true. private_modules: false
File "dune", line 4, characters 18-19:
4 | (virtual_modules m))
^
Error: These modules appear in the virtual_libraries and
modules_without_implementation fields:
- M
This is not possible.
-------------------------
impl: true. modules_without_implementation: true. virtual_modules: false. private_modules: false
File "dune", line 3, characters 33-34:
3 | (modules_without_implementation m))
^
Error: The following modules have an implementation, they cannot be listed as
modules_without_implementation:
- M
-------------------------
impl: true. modules_without_implementation: false. virtual_modules: true. private_modules: false
File "dune", line 3, characters 18-19:
3 | (virtual_modules m))
^
Error: The following modules have an implementation, they cannot be listed as
virtual:
- M
-------------------------
impl: true. modules_without_implementation: false. virtual_modules: false. private_modules: false
-------------------------
impl: false. modules_without_implementation: true. virtual_modules: true. private_modules: false
File "dune", line 4, characters 18-19:
4 | (virtual_modules m))
^
Error: These modules appear in the virtual_libraries and
modules_without_implementation fields:
- M
This is not possible.
-------------------------
impl: false. modules_without_implementation: true. virtual_modules: false. private_modules: false
-------------------------
impl: false. modules_without_implementation: false. virtual_modules: true. private_modules: false
-------------------------
impl: false. modules_without_implementation: false. virtual_modules: false. private_modules: false
File "dune", lines 1-2, characters 0-21:
1 | (library
2 | (name foo))
Error: Some modules don't have an implementation.
You need to add the following field to this stanza:
(modules_without_implementation m)
-------------------------

View file

@ -0,0 +1,71 @@
module List = ListLabels
open Printf
let write_file ~file ~contents =
let ch = open_out file in
output_string ch contents;
close_out_noerr ch
let lib_stanza ~modules_without_implementation ~virtual_modules
~private_modules =
sprintf "(library\n (name foo)%s%s%s)"
(if modules_without_implementation then
"\n (modules_without_implementation m)"
else
"")
(if virtual_modules then
"\n (virtual_modules m)"
else
"")
(if private_modules then
"\n (private_modules m)"
else
"")
let chdir dir ~f =
let old_dir = Sys.getcwd () in
begin try
Sys.chdir dir;
f ()
with e ->
Sys.chdir old_dir;
raise e
end;
Sys.chdir old_dir
let gen_test ~impl ~modules_without_implementation ~virtual_modules
~private_modules =
printf "impl: %b. modules_without_implementation: %b. \
virtual_modules: %b. private_modules: %b\n%!"
impl modules_without_implementation virtual_modules private_modules;
let dir =
sprintf "%b-%b-%b-%b" impl modules_without_implementation virtual_modules
private_modules
in
let _ = Sys.command (sprintf "mkdir -p %s" dir) in
chdir dir ~f:(fun () ->
write_file ~file:"dune-project"
~contents:"(lang dune 1.7)\n";
write_file ~file:"m.mli" ~contents:"";
if impl then
write_file ~file:"m.ml" ~contents:"";
write_file ~file:"dune" ~contents:(
lib_stanza ~modules_without_implementation ~virtual_modules
~private_modules);
ignore (Sys.command "dune build");
print_endline "-------------------------"
)
let bools = [true; false]
let () =
List.iter bools ~f:(fun private_modules ->
List.iter bools ~f:(fun impl ->
List.iter bools ~f:(fun modules_without_implementation ->
List.iter bools ~f:(fun virtual_modules ->
gen_test ~impl ~modules_without_implementation ~virtual_modules
~private_modules
)
)
)
)