Skip to content

Commit b5c814e

Browse files
committed
fix: plugin loading
Loading using the findlib loader was broken in 3.7.0. This PR restores the functionality Signed-off-by: Antonio Nuno Monteiro <[email protected]>
1 parent 9b50afa commit b5c814e

File tree

3 files changed

+33
-16
lines changed

3 files changed

+33
-16
lines changed

CHANGES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
Unreleased
22
----------
33

4+
- Fix plugin loading with findlib. The functionality was broken in 3.7.0.
5+
(#7556, @anmonteiro)
6+
47
- Introduce a `public_headers` field on libraries. This field is like
58
`install_c_headers`, but it allows to choose the extension and choose the
69
paths for the installed headers. (#7512, @rgrinberg)

src/dune_rules/link_time_code_gen.ml

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ type t = Link_time_code_gen_type.t =
55
; force_linkall : bool
66
}
77

8-
let generate_and_compile_module cctx ~precompiled_cmi ~name ~lib ~code ~requires
9-
=
8+
let generate_and_compile_module cctx ~precompiled_cmi ~obj_name ~name ~lib ~code
9+
~requires =
1010
let sctx = Compilation_context.super_context cctx in
1111
let open Memo.O in
1212
let* module_ =
1313
let+ modules = Dir_contents.modules_of_lib sctx lib in
1414
let obj_name =
15-
Option.map modules ~f:(fun modules ->
16-
let mli_only = Modules.find modules name |> Option.value_exn in
17-
Module.obj_name mli_only)
15+
match obj_name with
16+
| Some _ -> obj_name
17+
| None ->
18+
Option.map modules ~f:(fun modules ->
19+
Modules.find modules name |> Option.value_exn |> Module.obj_name)
1820
in
1921
let src_dir =
2022
let obj_dir = Compilation_context.obj_dir cctx in
@@ -242,6 +244,7 @@ let handle_special_libs cctx =
242244
| Build_info { data_module; api_version } ->
243245
let& module_ =
244246
generate_and_compile_module cctx ~name:data_module ~lib
247+
~obj_name:None
245248
~code:
246249
(Action_builder.of_memo
247250
(build_info_code cctx ~libs:all_libs ~api_version))
@@ -267,8 +270,11 @@ let handle_special_libs cctx =
267270
[ dynlink; findlib ]
268271
in
269272
let& module_ =
270-
generate_and_compile_module cctx ~lib
271-
~name:(Module_name.of_string "findlib_initl")
273+
let name = Module_name.of_string "findlib_initl" in
274+
let obj_name =
275+
Some (Module_name.Unique.of_name_assuming_needs_no_mangling name)
276+
in
277+
generate_and_compile_module ~obj_name cctx ~lib ~name
272278
~code:
273279
(Action_builder.return
274280
(findlib_init_code
@@ -290,7 +296,8 @@ let handle_special_libs cctx =
290296
else Action_builder.return (dune_site_code ())
291297
in
292298
let& module_ =
293-
generate_and_compile_module cctx ~name:data_module ~lib ~code
299+
generate_and_compile_module cctx ~obj_name:None ~name:data_module
300+
~lib ~code
294301
~requires:(Resolve.Memo.return [ lib ])
295302
~precompiled_cmi:true
296303
in

test/blackbox-tests/test-cases/builtin-support-override.t

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,20 @@ Create a library called `findlib.dynload`
77
> EOF
88
$ cat > findlib/dune <<EOF
99
> (library
10-
> (name findlib_dynload)
11-
> (public_name findlib.dynload)
12-
> (wrapped false)
13-
> (special_builtin_support findlib_dynload))
10+
> (name findlib_dynload)
11+
> (public_name findlib.dynload)
12+
> (wrapped false)
13+
> (libraries findlib dynlink)
14+
> (modules fl_dynload)
15+
> (special_builtin_support findlib_dynload))
16+
> (library
17+
> (public_name findlib)
18+
> (modules findlib))
19+
> EOF
20+
$ cat >findlib/findlib.ml <<EOF
21+
> type x = Record_core
22+
> let record_package _ _ = assert false
23+
> let record_package_predicates _ _ = assert false
1424
> EOF
1525
$ touch findlib/fl_dynload.ml
1626

@@ -34,7 +44,4 @@ Create a library called `findlib.dynload`
3444
> EOF
3545
$ touch exe/the_exe.ml
3646

37-
$ dune build --display short ./exe/the_exe.exe 2>&1 | grep crash
38-
I must not crash. Uncertainty is the mind-killer. Exceptions are the
39-
40-
47+
$ dune build

0 commit comments

Comments
 (0)