all :: $(odir)/ghc-inplace ghc-inplace
+# MSys notes
+# Note 1
+# I'm exec'ing $(SCRIPT_SHELL), rather than the usual #!/bin/sh, to make
+# sure that the right shell is invoked. If we use /bin/sh, then
+# when ghc-inplace is invoked from a Cygwin Python (which is the only Python
+# that seems to run the test-suite correctly), we get the Cygwin shell,
+# and it in turn interprets the path-names in the second (exec) line
+# differently to the MSys shell. That's bad, because ghc-inplace must
+# also work when invoked from MSys shells
+#
+# To figure out what the MSys shell is, we cd to '/bin' and do 'pwd -W'
+# On MSys, the -W flag prints out the directory in c:/msys/bin format
+# (On other system, -W isn't a pwd flag at all.)
+
+ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
+# MSys
+SCRIPT_SHELL = $(shell cd /bin; pwd -W)/sh
+else
+# Cygwin and Unix
+SCRIPT_SHELL = /bin/sh
+endif
+
+# Note 2
+# On MSys, we must use the following script for ghc-inplace:
+# exec /c/darcs/fc-branch-2/compiler/stage1/ghc -Bc:/darcs/fc-branch-2 "$@"
+# That is,
+# (a) You *must* use the /c/ form for the first arg to exec. Using the
+# c:/ form makes exec complain that it can't find $pwd/c:/darcs/.../ghc
+# The /c/ form is $(FPTOOLS_TOP_ABS)
+# (b) You *must* use the c:/ form for the -B argument, else the testsuite
+# doesn't work. I think that's something to do with ghc-inplace being
+# invoked by Python
+# The c:/ form is $(FPTOOLS_TOP_ABS_PLATFORM)
+
$(odir)/ghc-inplace : $(GHC_PROG)
@$(RM) $@
- echo '#!/bin/sh' >>$@
- echo exec $(GHC_COMPILER_DIR_ABS)/$(GHC_PROG) '-B$(subst \,\\,$(FPTOOLS_TOP_ABS_PLATFORM))' '"$$@"' >>$@
+ echo '#!$(SCRIPT_SHELL)' >>$@
+# Re SCRIPT_SHELL, see note 1 above
+ echo exec $(GHC_COMPILER_DIR_ABS)/$(GHC_PROG) \
+ '-B$(subst \,\\,$(FPTOOLS_TOP_ABS_PLATFORM))' '"$$@"' >>$@
+# Re exec, see note 2 above
chmod 755 $@
ghc-inplace : stage1/ghc-inplace