Hadrian command line doesn't properly escape path separators on Windows
Here's a command I get from Hadrian:
_build/stage0/bin/ghc.exe -Wall -Wcompat -fdiagnostics-color=never -hisuf hi -osuf o -hcsuf hc -static -hide-all-packages -no-user-package-db "-package-env -" "-package-db _build/stage1/lib/package.conf.d" "-this-unit-id base-4.16.0.0" "-package-id ghc-bignum-1.2" "-package-id ghc-prim-0.8.0" "-package-id rts-1.0.2" -i -iC:\Haskell\ghc-src\levity-primops\_build\stage1\libraries\base\build -iC:\Haskell\ghc-src\levity-primops\_build\stage1\libraries\base\build\autogen -iC:\Haskell\ghc-src\levity-primops\libraries\base -Irts/include -I_build/stage1/lib -I_build/stage1/libraries/base/build -I_build/stage1/libraries/base/build/include -Ilibraries/base/include -IC:/Haskell/ghc-src/levity-primops/_build/stage1/lib/x86_64-windows-ghc-9.3.20211028/ghc-bignum-1.2/include -IC:/Haskell/ghc-src/levity-primops/_build/stage1/lib/x86_64-windows-ghc-9.3.20211028/rts-1.0.2/include -I_build/stage1/lib -optc-I_build/stage1/lib -optP-include -optP_build/stage1/libraries/base/build/autogen/cabal_macros.h -optP-D_WIN32_WINNT=0x06010000 -outputdir _build/stage1/libraries/base/build -Wnoncanonical-monad-instances -optc-Wno-error=inline -optP-Wno-nonportable-include-path -c _build/stage1/libraries/base/build/GHC/Event/Windows.hs -o _build/stage1/libraries/base/build/GHC/Event/Windows.o -O -H64m -this-unit-id base -Wcompat -Wnoncanonical-monad-instances -XHaskell2010 -no-global-package-db -package-db=C:/Haskell/ghc-src/levity-primops/_build/stage1/lib/package.conf.d -ghcversion-file=C:/Haskell/ghc-src/levity-primops/_build/stage1/lib/ghcversion.h -dcore-lint -Wno-deprecated-flags -Wno-trustworthy-safe
This doesn't escape the path separators in the includes, which results in errors like:
Could not find module ‘GHC.List’
Locations searched:
C\GHC\List.hi
C\GHC\List.hi-boot
Haskellghc-srclevity-primops_buildstage1librariesbasebuild\GHC\List.hi
Haskellghc-srclevity-primops_buildstage1librariesbasebuild\GHC\List.hi-boot
C\GHC\List.hi
C\GHC\List.hi-boot
Haskellghc-srclevity-primops_buildstage1librariesbasebuildautogen\GHC\List.hi
Haskellghc-srclevity-primops_buildstage1librariesbasebuildautogen\GHC\List.hi-boot
C\GHC\List.hi
C\GHC\List.hi-boot
Haskellghc-srclevity-primopslibrariesbase\GHC\List.hi
Haskellghc-srclevity-primopslibrariesbase\GHC\List.hi-boot
where one can see the path separators are missing. Escaping the separators used for the includes, using \\
instead of \
, fixes the issue.