un/dosifyPath in SysTools.lhs bug?

Simon Peyton-Jones simonpj@microsoft.com
Mon, 14 Apr 2003 12:34:38 +0100


I always configure with

	--with-gcc=3Dc:/mingw/bin/gcc

and everything is fine.  I see that the Building Guide suggests=20
	--with-gcc=3D/mingw/bin/gcc
which I suspect is plain wrong. =20

Try with the path syntax I use, and see if that helps.  Meanwhile I'll
modify the building guide.

Simon

| -----Original Message-----
| From: glasgow-haskell-users-admin@haskell.org
[mailto:glasgow-haskell-users-admin@haskell.org]
| On Behalf Of Dominic Cooney
| Sent: 14 April 2003 09:38
| To: glasgow-haskell-users@haskell.org
|=20
| I'm trying to build ghc (the 5.04.3 source tarball) on Windows, but
right
| after the ghc-inplace is written and is used to build something, ghc
fails.
| If I cut and paste the command* and run it with -v, it's evident that
ghc is
| trying to execute /cygdrive/c/mingw/bin/gcc, which is the gcc that I
| ./configured --with-gcc.
|=20
| But ghc is a mingw executable! So I think runSomething in
SysTools.lhs, or
| whatever calls it, might have a bug. From the comments of runSomething
it is
| clear that it expects a 'native' program. Anyway, the problem can be
fixed
| by changing:
|=20
| cmd_line =3D pgm ++ ...
|=20
| to:
|=20
| cmd_line =3D (dosifyPath pgm) ++ ...
|=20
| And dosifyPath and undosifyPath (#if defined(mingw32_HOST_OS)) have no
| regard for drive letters! Shouldn't they be something like:
|=20
| unDosifyPath xs =3D
| 	case (subst '\\' '/' xs) of
| 		drive : ':' : rest -> "/cygdrive/" ++ (drive : rest)
| 		xs'			 -> xs'
|=20
| dosifyPath stuff
|   =3D subst '/' '\\' real_stuff
|  where
|    -- fully convince myself that /cygdrive/ prefixes cannot
|    -- really appear here.
|   cygdrive_prefix =3D "/cygdrive/"
|=20
|   real_stuff
|     | cygdrive_prefix `isPrefixOf` stuff =3D
| 		case (dropList cygdrive_prefix stuff) of
| 			drive : rest -> drive : ':' : rest
|     | otherwise =3D stuff
|=20
| That comment re: cygdrive in dosifyPath is rather ominous... but those
| changes at least allow ghc-inplace to start compiling the next
thing...
|=20
| The build then barfed in rts doing:
|=20
| ../../ghc/compiler/ghc-inplace -O2 -package-name rts -O -Rghc-timing
-c
| Exception.hc -o Exception.o
|=20
| Because Exception.hc couldn't #include "Stg.h"; it seems the GHC
include
| path was specified as a couple of Options instead of a single
FileOption,
| which meant showOptions didn't dosify it.
|=20
| Doing a quick hack in showOptions to peek at Options for the
/cygdrive/
| prefix keeps the build going. What I'm wondering is:
|=20
| Is anyone building GHC on Windows, and if so, how do you do it?
|=20
| Thanks,
|=20
| Dominic Cooney
|=20
| * The command is:
|=20
| ../../ghc/compiler/ghc-inplace -optc-mno-cygwin -optc-O -optc-Wall
-optc-W
| -optc-Wstrict-prototypes -optc-Wmissing-prototypes
| -optc-Wmissing-declarations -optc-Winline -optc-Waggregate-return
| -optc-Wbad-function-cast -optc-Wcast-align -optc-I../includes -optc-I.
| -optc-Iparallel -optc-DCOMPILING_RTS -optc-fomit-frame-pointer
| -optc-DDLLized -O2 -package-name rts -O -Rghc-timing  -hisuf dll_hi
-hcsuf
| dll_hc -osuf dll_o    -c Main.c -o Main.dll_o
|=20
|=20
| _______________________________________________
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users@haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users