@@ -551,6 +551,7 @@ let library_rules
551551 ~compile_info
552552 ~ctx_dir
553553 ~for_merlin
554+ ~merlin_ident
554555 =
555556 let modules = Compilation_context. modules cctx in
556557 let obj_dir = Compilation_context. obj_dir cctx in
@@ -640,18 +641,22 @@ let library_rules
640641 let + requires_hidden = Compilation_context. requires_hidden cctx
641642 and + parameters = Compilation_context. parameters cctx in
642643 let flags = Compilation_context. flags cctx in
644+ let preprocess =
645+ match for_ with
646+ | Ocaml -> lib.buildable.preprocess.config
647+ | Melange -> lib.buildable.melange_preprocess.config
648+ in
643649 Merlin. make
644650 ~requires_compile
645651 ~requires_hidden
646652 ~stdlib_dir: lib_config.stdlib_dir
647653 ~flags
648654 ~modules
649- ~preprocess:
650- (Preprocess.Per_module. without_instrumentation lib.buildable.preprocess.config)
655+ ~preprocess: (Preprocess.Per_module. without_instrumentation preprocess)
651656 ~libname: (Some (snd lib.name))
652657 ~obj_dir
653658 ~dialects: (Dune_project. dialects (Scope. project scope))
654- ~ident: ( Merlin_ident. for_lib ( Library. best_name lib))
659+ ~ident: merlin_ident
655660 ~for_
656661 ~parameters
657662 in
@@ -701,7 +706,7 @@ let compile_context (lib : Library.t) ~sctx ~dir_contents ~expander ~scope ~for_
701706let rules (lib : Library.t ) ~sctx ~dir_contents ~expander ~scope =
702707 let dir = Dir_contents. dir dir_contents in
703708 let buildable = lib.buildable in
704- let f ~for_ ~for_merlin =
709+ let f ~for_ ~for_merlin ~ merlin_ident =
705710 let * local_lib, compile_info, source_modules, parameters =
706711 compile_context_data lib ~dir_contents ~scope ~for_
707712 in
@@ -735,6 +740,7 @@ let rules (lib : Library.t) ~sctx ~dir_contents ~expander ~scope =
735740 ~compile_info
736741 ~ctx_dir: dir
737742 ~for_merlin
743+ ~merlin_ident
738744 in
739745 cctx, merlin
740746 in
@@ -751,10 +757,14 @@ let rules (lib : Library.t) ~sctx ~dir_contents ~expander ~scope =
751757 ~dir
752758 ~lib_config
753759 in
754- let merlin_ident = Merlin_ident. for_lib (Library. best_name lib) in
755760 let { Compilation_mode. for_merlin; modes } =
756761 Compilation_mode. of_mode_set (Lib_info. modes lib_info)
757762 in
763+ let mode_suffix =
764+ match modes with
765+ | _ :: _ :: _ -> true
766+ | [] | [ _ ] -> false
767+ in
758768 Memo. parallel_map modes ~f: (fun for_ ->
759769 let buildable = lib.buildable in
760770 let libs = Scope. libs scope in
@@ -769,14 +779,17 @@ let rules (lib : Library.t) ~sctx ~dir_contents ~expander ~scope =
769779 ~allow_overlaps: buildable.allow_overlapping_dependencies
770780 in
771781 let * () = Buildable_rules. gen_select_rules sctx compile_info ~dir ~for_ in
782+ let merlin_ident =
783+ Merlin_ident. for_lib (Library. best_name lib) ~for_ ~mode_suffix
784+ in
772785 let + r =
773786 Buildable_rules. with_lib_deps
774787 (Super_context. context sctx)
775788 merlin_ident
776789 ~dir
777790 ~f: (fun () ->
778791 let for_merlin = Compilation_mode. equal for_ for_merlin in
779- f ~for_ ~for_merlin )
792+ f ~for_ ~for_merlin ~merlin_ident )
780793 in
781794 for_, Some r)
782795 in
0 commit comments