Skip to content

Commit a0d23b2

Browse files
authored
Merge pull request #21 from mjambon/subdir
Add support for the 'subdir' stanza by simply inlining their contents.
2 parents 48897a3 + cd68f16 commit a0d23b2

File tree

5 files changed

+71
-6
lines changed

5 files changed

+71
-6
lines changed

src/lib/Dune.ml

+33-6
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,41 @@ let read_node path get_index sexp_entry =
7878
{ Dep_graph.Node.name; kind; deps; loc }
7979
) names
8080

81+
(*
82+
'subdir' stanzas are inlined, and subdirectory names are discarded since
83+
we don't need them.
84+
85+
(subdir
86+
foo
87+
(executable
88+
(name foo)
89+
)
90+
)
91+
92+
becomes:
93+
94+
(executable
95+
(name foo)
96+
)
97+
*)
98+
let inline_subdirs orig_sexp_entries =
99+
orig_sexp_entries
100+
|> List.map (function
101+
| List (Atom "subdir" :: Atom _dirname :: contents) -> contents
102+
| x -> [x]
103+
)
104+
|> List.flatten
105+
81106
let load_file path =
82107
let sexp_entries =
83-
try Sexplib.Sexp.load_sexps path
84-
with e ->
85-
failwith (
86-
sprintf "Cannot parse dune file %s: exception %s"
87-
path (Printexc.to_string e)
88-
)
108+
(try Sexplib.Sexp.load_sexps path
109+
with e ->
110+
failwith (
111+
sprintf "Cannot parse dune file %s: exception %s"
112+
path (Printexc.to_string e)
113+
)
114+
)
115+
|> inline_subdirs
89116
in
90117
let index = ref (-1) in
91118
let get_index () =

test/proj-no-exe.dot.expected

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ digraph {
22
"lib:ext1" [label="ext1",style=filled]
33
"lib:ext2" [label="ext2",style=filled]
44
"lib:ext3" [label="ext3",style=filled]
5+
"lib:foosubdirlib" [label="foosubdirlib"]
6+
"lib:foosubdirlib-dep" [label="foosubdirlib-dep",style=filled]
57
"lib:lib-or-exe" [label="lib-or-exe"]
68
"lib:lib1" [label="lib1"]
79
"lib:lib1-alt" [label="lib1-alt",style=filled]
@@ -10,6 +12,7 @@ digraph {
1012
"lib:lib4" [label="lib4"]
1113
"lib:lib5" [label="lib5"]
1214
"lib:more" [label="more"]
15+
"lib:foosubdirlib" -> "lib:foosubdirlib-dep"
1316
"lib:lib2" -> "lib:lib4"
1417
"lib:lib2" -> "lib:lib5"
1518
"lib:lib2" -> "lib:ext2"

test/proj-no-ext.dot.expected

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ digraph {
88
"exe:proj/dune:3" [label="prog4",shape=diamond]
99
"exe:proj/dune:11" [label="test<proj>",shape=diamond]
1010
"exe:proj/dune:12" [label="test<proj>",shape=diamond]
11+
"exe:proj/with-subdir/dune:2" [label="barnotsubdir",shape=diamond]
12+
"exe:proj/with-subdir/dune:0" [label="foosubdir",shape=diamond]
13+
"lib:foosubdirlib" [label="foosubdirlib"]
1114
"lib:lib-or-exe" [label="lib-or-exe"]
1215
"lib:lib1" [label="lib1"]
1316
"lib:lib2" [label="lib2"]
@@ -27,6 +30,8 @@ digraph {
2730
"exe:proj/dune:2" -> "lib:lib3"
2831
"exe:proj/dune:3" -> "lib:lib4"
2932
"exe:proj/dune:11" -> "lib:lib1"
33+
"exe:proj/with-subdir/dune:2" -> "lib:foosubdirlib"
34+
"exe:proj/with-subdir/dune:0" -> "lib:foosubdirlib"
3035
"lib:lib2" -> "lib:lib4"
3136
"lib:lib2" -> "lib:lib5"
3237
"lib:lib3" -> "lib:lib4"

test/proj.dot.expected

+7
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@ digraph {
99
"exe:proj/dune:3" [label="prog4",shape=diamond]
1010
"exe:proj/dune:11" [label="test<proj>",shape=diamond]
1111
"exe:proj/dune:12" [label="test<proj>",shape=diamond]
12+
"exe:proj/with-subdir/dune:2" [label="barnotsubdir",shape=diamond]
13+
"exe:proj/with-subdir/dune:0" [label="foosubdir",shape=diamond]
1214
"lib:ext1" [label="ext1",style=filled]
1315
"lib:ext2" [label="ext2",style=filled]
1416
"lib:ext3" [label="ext3",style=filled]
17+
"lib:foosubdirlib" [label="foosubdirlib"]
18+
"lib:foosubdirlib-dep" [label="foosubdirlib-dep",style=filled]
1519
"lib:lib-or-exe" [label="lib-or-exe"]
1620
"lib:lib1" [label="lib1"]
1721
"lib:lib1-alt" [label="lib1-alt",style=filled]
@@ -35,6 +39,9 @@ digraph {
3539
"exe:proj/dune:3" -> "lib:lib4"
3640
"exe:proj/dune:11" -> "lib:lib1"
3741
"exe:proj/dune:12" -> "lib:lib1-alt"
42+
"exe:proj/with-subdir/dune:2" -> "lib:foosubdirlib"
43+
"exe:proj/with-subdir/dune:0" -> "lib:foosubdirlib"
44+
"lib:foosubdirlib" -> "lib:foosubdirlib-dep"
3845
"lib:lib2" -> "lib:lib4"
3946
"lib:lib2" -> "lib:lib5"
4047
"lib:lib2" -> "lib:ext2"

test/proj/with-subdir/dune

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
; Check support for the 'subdir' stanza
2+
3+
(subdir
4+
foosubdir
5+
(executable
6+
(name foosubdir)
7+
(libraries foosubdirlib)
8+
)
9+
(library
10+
(name foosubdirlib)
11+
(libraries foosubdirlib-dep)
12+
(flags
13+
(:standard --hello))
14+
(preprocess
15+
(pps ppx_trace))
16+
(inline_tests)
17+
)
18+
)
19+
20+
(executable
21+
(name barnotsubdir)
22+
(libraries foosubdirlib)
23+
)

0 commit comments

Comments
 (0)