
#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