[GHC] #14312: Head does not build on Windows with the default make config.
GHC
ghc-devs at haskell.org
Wed Oct 4 22:43:12 UTC 2017
#14312: Head does not build on Windows with the default make config.
-------------------------------------+-------------------------------------
Reporter: AndreasK | Owner: (none)
Type: bug | Status: upstream
Priority: normal | Milestone:
Component: Build System | Version: 8.2.1
Resolution: | Keywords:
Operating System: Windows | Architecture:
Type of failure: Building GHC | Unknown/Multiple
failed | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by Phyx-):
* status: new => upstream
Comment:
The first offending command is
{{{
"inplace/bin/ghc-stage1.exe" -hisuf p_hi -osuf p_o -hcsuf p_hc -static
-prof -eventlog -H32m -O -Wall -this-unit-id directory-1.3.1.2
-hide-all-packages -i -ilibraries/directory/. -ilibraries/directory/dist-
install/build -Ilibraries/directory/dist-install/build
-ilibraries/directory/dist-install/build/./autogen -Ilibraries/directory
/dist-install/build/./autogen -Ilibraries/directory/. -optP-include
-optPlibraries/directory/dist-install/build/./autogen/cabal_macros.h
-package-id base-4.11.0.0 -package-id time-1.8.0.2 -package-id
filepath-1.4.1.2 -package-id Win32-2.5.4.1 -Wall -XHaskell2010 -O2 -no-
user-package-db -rtsopts -Wno-unused-imports -Wno-deprecated-flags
-Wnoncanonical-monad-instances -odir libraries/directory/dist-
install/build -hidir libraries/directory/dist-install/build -stubdir
libraries/directory/dist-install/build -split-objs -c
libraries/directory/./System/Directory/Internal/Config.hs -o
libraries/directory/dist-
install/build/System/Directory/Internal/Config.p_o
}}}
which is trying to compile
`libraries/directory/./System/Directory/Internal/Config.hs` which is also
the folder that also contains the `windows.h` dummy implementation for
`directory`.
This corresponds to the following `gcc` command
{{{
"E:\ghc-dev\msys64\home\Tamar\ghc\inplace\lib/../mingw/bin/gcc.exe" "-fno-
stack-protector" "-DTABLES_NEXT_TO_CODE" "-DTRACING" "-DPROFILING" "-x"
"c" "E:\ghc-dev\msys64\tmp\ghc5148_0\ghc_4.c" "-o" "E:\ghc-
dev\msys64\tmp\ghc5148_0\ghc_5.s" "-no-pie" "-Wimplicit" "-S" "-O2"
"-include" "E:/ghc-dev/msys64/home/Tamar/ghc/includes\ghcversion.h"
"-Ilibraries\directory\System\Directory\Internal" "-Ilibraries/directory
/dist-install/build" "-Ilibraries/directory/dist-install/build"
"-Ilibraries/directory/dist-install/build/./autogen"
"-Ilibraries/directory/." "-IE:\ghc-
dev\msys64\home\Tamar\ghc\libraries\time\lib/include" "-IE:\ghc-
dev\msys64\home\Tamar\ghc\libraries\Win32\include" "-IE:\ghc-
dev\msys64\home\Tamar\ghc\libraries\bytestring\include" "-IE:\ghc-
dev\msys64\home\Tamar\ghc\libraries\base\include" "-IE:\ghc-
dev\msys64\home\Tamar\ghc\libraries\integer-gmp\include" "-IE:/ghc-
dev/msys64/home/Tamar/ghc/rts/dist/build" "-IE:/ghc-
dev/msys64/home/Tamar/ghc/includes" "-IE:/ghc-
dev/msys64/home/Tamar/ghc/includes/dist-derivedconstants/header"
}}}
The problem is the `"-Ilibraries\directory\System\Directory\Internal"`
that GCC adds,
this line comes from `let cmdline_include_paths = includePaths dflags` in
`runPhase (RealPhase cc_phase) input_fn dflags`.
This particularly entry comes from a modification we do to the include
paths: `dflags1 { includePaths = current_dir : old_paths ...`
So we always add the current directory to the include paths. Normally this
wouldn't be an issue as system include paths should take precedence over
user ones. The problem however is that Windows doesn't have such a
concept, and I suspect the `mingw` compilers just append extra `-I`.
This can be confirmed by the output of standard search directories for
this call
{{{
GNU C11 (Rev2, Built by MSYS2 project) version 6.3.0 (x86_64-w64-mingw32)
compiled by GNU C version 6.3.0, GMP version 6.1.2, MPFR version
3.1.5-p2, MPC version 1.0.3, isl version 0.15
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory "E:/ghc-
dev/msys64/home/Tamar/ghc/inplace/mingw/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/include"
ignoring duplicate directory "E:/ghc-
dev/msys64/home/Tamar/ghc/inplace/mingw/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0
/include-fixed"
ignoring duplicate directory "E:/ghc-
dev/msys64/home/Tamar/ghc/inplace/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/6.3.0/include"
ignoring nonexistent directory "C:/building/msys64/mingw64/include"
ignoring nonexistent directory "/mingw64/include"
ignoring duplicate directory "E:/ghc-
dev/msys64/home/Tamar/ghc/inplace/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/6.3.0
/include-fixed"
ignoring duplicate directory "E:/ghc-
dev/msys64/home/Tamar/ghc/inplace/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/include"
ignoring nonexistent directory
"C:/building/msys64/mingw64/x86_64-w64-mingw32/include"
ignoring duplicate directory "libraries/directory/dist-install/build"
#include "..." search starts here:
#include <...> search starts here:
libraries\\directory\\System\\Directory\\Internal
libraries/directory/dist-install/build
libraries/directory/dist-install/build/./autogen
libraries/directory/.
E:\\ghc-dev\\msys64\\home\\Tamar\\ghc\\libraries\\time\\lib/include
E:\\ghc-dev\\msys64\\home\\Tamar\\ghc\\libraries\\Win32\\include
E:\\ghc-dev\\msys64\\home\\Tamar\\ghc\\libraries\\bytestring\\include
E:\\ghc-dev\\msys64\\home\\Tamar\\ghc\\libraries\\base\\include
E:\\ghc-dev\\msys64\\home\\Tamar\\ghc\\libraries\\integer-gmp\\include
E:/ghc-dev/msys64/home/Tamar/ghc/rts/dist/build
E:/ghc-dev/msys64/home/Tamar/ghc/includes
E:/ghc-dev/msys64/home/Tamar/ghc/includes/dist-derivedconstants/header
E://ghc-
dev//msys64//home//Tamar//ghc//inplace//mingw//bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/include
E://ghc-
dev//msys64//home//Tamar//ghc//inplace//mingw//bin/../lib/gcc/x86_64-w64-mingw32/6.3.0
/include-fixed
E:/ghc-
dev/msys64/home/Tamar/ghc/inplace/mingw/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../include
E:/ghc-
dev/msys64/home/Tamar/ghc/inplace/mingw/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/include
End of search list.
GNU C11 (Rev2, Built by MSYS2 project) version 6.3.0 (x86_64-w64-mingw32)
compiled by GNU C version 6.3.0, GMP version 6.1.2, MPFR version
3.1.5-p2, MPC version 1.0.3, isl version 0.15
}}}
So the problem seems to be an upstream one. I'm not sure what's the best
way to solve this. Ideally the mingw-w64 compilers should recognize their
own core include directories as system includes.
For now, `directory` can work around this issue by renaming this
`windows.h` file.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14312#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list