diff --git a/hadrian/bindist/Makefile b/hadrian/bindist/Makefile
index 845189f5526396cc4e8fc5d22425a6f00f004109..1a898cb6613bef974b338fd7a1028df4b77aee95 100644
--- a/hadrian/bindist/Makefile
+++ b/hadrian/bindist/Makefile
@@ -169,7 +169,7 @@ install_bin_direct:
 install_lib: lib/settings
 	@echo "Copying libraries to $(DESTDIR)$(ActualLibsDir)"
 	$(INSTALL_DIR) "$(DESTDIR)$(ActualLibsDir)"
-	
+
 	@dest="$(DESTDIR)$(ActualLibsDir)"; \
 	cd lib; \
 	for i in `$(FIND) . -type f`; do \
@@ -185,6 +185,8 @@ install_lib: lib/settings
 		    $(INSTALL_SHLIB) $$i "$$dest/`dirname $$i`" ;; \
 		  *.dylib) \
 		    $(INSTALL_SHLIB) $$i "$$dest/`dirname $$i`" ;; \
+		  *.mjs) \
+		    $(INSTALL_SCRIPT) $$i "$$dest/`dirname $$i`" ;; \
 		  *) \
 		    $(INSTALL_DATA) $$i "$$dest/`dirname $$i`" ;; \
 		esac; \
diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs
index 9185710b3c90b94e2505a6e13fcb100e1b8acfd3..5d2460fafeb1ed77b81c54bec026b10a2c44b8d4 100644
--- a/hadrian/src/Rules/Generate.hs
+++ b/hadrian/src/Rules/Generate.hs
@@ -211,7 +211,10 @@ copyRules = do
         prefix -/- "ghc-interp.js"     <~ return "."
         prefix -/- "template-hsc.h" <~ return (pkgPath hsc2hs -/- "data")
 
-        prefix -/- "post-link.mjs"     <~ pure "utils/jsffi"
+        prefix -/- "post-link.mjs" %> \file -> do
+            copyFile ("utils/jsffi" -/- makeRelative prefix file) file
+            makeExecutable file
+
         prefix -/- "prelude.js"        <~ pure "utils/jsffi"
 
         prefix -/- "html/**"           <~ return "utils/haddock/haddock-api/resources"