Skip to content

Commit 350b976

Browse files
authored
fix: generate a better test target for packages with (dir ..) (#13778)
Limit the test target to the package's directory Signed-off-by: Rudi Grinberg <me@rgrinberg.com>
1 parent d5e8164 commit 350b976

File tree

3 files changed

+63
-8
lines changed

3 files changed

+63
-8
lines changed

doc/changes/fixed/13778.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- Improve opam file generation for packages that set `(dir ..)`. Such packages
2+
will now have a test target that is limited to this directory. (#13778, @rgrinberg)

src/dune_rules/opam_create.ml

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,59 @@ let default_build_command =
9191
subst
9292
promote_install_files
9393
install)))
94+
and from_3_23 ~with_subst ~with_sites ~runtest =
95+
let subst = if with_subst then {| [ "dune" "subst" ] {dev} |} else "" in
96+
let promote_install_files =
97+
if with_sites then {| "--promote-install-files=false" |} else ""
98+
in
99+
let install =
100+
if with_sites
101+
then {| [ "dune" "install" "-p" name "--create-install-files" name ] |}
102+
else ""
103+
in
104+
lazy
105+
(Opam_file.parse_value
106+
(Lexbuf.from_string
107+
~fname:"<internal>"
108+
(Printf.sprintf
109+
{|
110+
[
111+
%s
112+
[ "dune" "build" "-p" name "-j" jobs %s
113+
"%s" {with-test}
114+
"@doc" {with-doc}
115+
]
116+
%s
117+
]
118+
|}
119+
subst
120+
promote_install_files
121+
runtest
122+
install)))
94123
in
95-
fun project ->
124+
fun project package ->
125+
let version = Dune_project.dune_version project in
126+
let with_subst = Toggle.enabled (snd (Dune_project.subst_config project)) in
127+
let with_sites = Dune_project.(is_extension_set project dune_site_extension) in
96128
Lazy.force
97-
(let version = Dune_project.dune_version project in
98-
if version < (1, 11)
129+
(if version < (1, 11)
99130
then before_1_11
100131
else if version < (2, 7)
101132
then from_1_11_before_2_7
102133
else if version < (2, 9)
103134
then from_2_7
104135
else if version < (3, 0)
105136
then from_2_9
106-
else
107-
from_3_0
108-
~with_subst:(Toggle.enabled (snd (Dune_project.subst_config project)))
109-
~with_sites:Dune_project.(is_extension_set project dune_site_extension))
137+
else if version < (3, 23)
138+
then from_3_0 ~with_subst ~with_sites
139+
else (
140+
match Package.exclusive_dir package with
141+
| None -> from_3_0 ~with_subst ~with_sites
142+
| Some (_loc, dir) ->
143+
from_3_23
144+
~with_subst
145+
~with_sites
146+
~runtest:("@runtest/" ^ Path.Source.to_string dir)))
110147
;;
111148

112149
let var_of_sw sw : Package_constraint.Value.t =
@@ -291,7 +328,9 @@ let opam_fields project (package : Package.t) =
291328
| None | Some [] -> None
292329
| Some (_ :: _ as v) -> Some (k, string_list v))
293330
in
294-
let fields = [ "opam-version", string "2.0"; "build", default_build_command project ] in
331+
let fields =
332+
[ "opam-version", string "2.0"; "build", default_build_command project package ]
333+
in
295334
let fields = List.concat [ fields; list_fields; optional_fields; package_fields ] in
296335
if dune_version < (1, 11) then fields else Opam_file.Create.normalise_field_order fields
297336
;;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Test that we generate a directory specific runtest alias if dir is set for
2+
a package:
3+
4+
$ cat > dune-project << EOF
5+
> (lang dune 3.23)
6+
> (generate_opam_files true)
7+
> (package
8+
> (name foo)
9+
> (dir foo))
10+
> EOF
11+
12+
$ dune build @check
13+
$ cat foo.opam | grep -o '"@runtest/foo" {with-test}'
14+
"@runtest/foo" {with-test}

0 commit comments

Comments
 (0)