[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