diff --git a/share/Makefile.dynamic b/share/Makefile.dynamic
index ab4f3647d3332669b6ba0eb414654b49d27ef231..47819bc939fdb58a026f4360e6c65dbf16d04c1a 100644
--- a/share/Makefile.dynamic
+++ b/share/Makefile.dynamic
@@ -247,14 +247,24 @@ endif # PLUGIN_ENABLE <> no
 # Merlin #
 ##########
 
-.PHONY: merlin_plugin
-merlin_plugin::
-	echo "B $(FRAMAC_LIBDIR)" > .merlin
+.PHONY: create_merlin
+create_merlin:
+#create Merlin file for external plug-in
+	$(PRINT_MAKING) .merlin
+	echo "FLG -c $(FLAGS) $(FRAMAC_USER_MERLIN_FLAGS)" > .merlin
+	echo "B $(FRAMAC_LIBDIR)" >> .merlin
 	echo "B $(FRAMAC_LIBDIR)/plugins" >> .merlin
 	echo "B $(FRAMAC_LIBDIR)/plugins/gui" >> .merlin
-	echo "PKG ocamlgraph" >> .merlin
-	echo "PKG zarith" >> .merlin
-	echo "PKG lablgtk2" >> .merlin
+	for PKG in $(LIBRARY_NAMES); do echo PKG $$PKG >> .merlin; done
+	for PKG in $(LIBRARY_NAMES_GUI); do echo PKG $$PKG >> .merlin; done
+	for PKG in $(MERLIN_PACKAGES); do echo PKG $$PKG >> .merlin; done
+	for DIR in $(patsubst %/,%,$(sort $(dir $(PLUGIN_ML_SRC) $(PLUGIN_TESTS_LIB)))); do echo S $$DIR>> .merlin; echo B $$DIR >> .merlin; done
+
+# To allow completion of .merlin file
+.PHONY: merlin
+merlin:: create_merlin
+
+.merlin: merlin
 
 ############
 # Cleaning #