Configure changes to make testsuite work better on MSys
authorManuel M T Chakravarty <chak@cse.unsw.edu.au>
Mon, 7 Aug 2006 00:05:18 +0000 (00:05 +0000)
committerManuel M T Chakravarty <chak@cse.unsw.edu.au>
Mon, 7 Aug 2006 00:05:18 +0000 (00:05 +0000)
Fri Jul 28 06:49:35 EDT 2006  simonpj@microsoft.com

compiler/Makefile
configure.ac

index 4d4723b..653f4d1 100644 (file)
@@ -702,10 +702,47 @@ SRC_LD_OPTS += -no-link-chk
 
 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
index 3b6cc97..7d27a37 100644 (file)
@@ -615,7 +615,12 @@ case $HostPlatform in
             hardtop=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@/@g'`
             hardtop_plat=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@\\\\\\\\@g'`
           else
-            hardtop_plat=${hardtop}
+dnl OK, so we're in the MSYS case.  hardtop looks like /c/....
+dnl We want to make hardtop_plat into c:/...
+dnl Stop using [] for quotes temporarily, so we can use [] in the sed regexp
+changequote(, )dnl
+               hardtop_plat=`echo ${hardtop} | sed -e 's@^/\\([a-zA-Z]\\)/@\\1:/@g'`
+changequote([, ])dnl
         fi
         ;;
   *)