Remove directories from include paths
authorBen Gamari <bgamari.foss@gmail.com>
Fri, 16 Sep 2016 15:49:24 +0000 (11:49 -0400)
committerBen Gamari <ben@smart-cactus.org>
Fri, 16 Sep 2016 15:49:25 +0000 (11:49 -0400)
Previously this was a relative path which worked in the GHC tree, but
failed elsewhere. This caused trouble for out-of-tree users as well as
Hadrian, which wants to move build artifacts out of the working
directory. Fixes #8040.

Test Plan: Validate

Reviewers: thomie, austin, snowleopard, hvr

Reviewed By: snowleopard, hvr

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2530

GHC Trac Issues: #8040

compiler/HsVersions.h
compiler/ghc.mk
compiler/main/DynFlags.hs
compiler/main/PlatformConstants.hs
rules/build-dependencies.mk

index 6d5716d..83cbcf1 100644 (file)
@@ -20,7 +20,7 @@ you will screw up the layout where they are used in case expressions!
  * ghcconfig.h, because that will include ghcplatform.h which has the
  * wrong platform settings for the compiler (it has the platform
  * settings for the target plat instead). */
-#include "../includes/ghcautoconf.h"
+#include "ghcautoconf.h"
 
 #define GLOBAL_VAR(name,value,ty)  \
 {-# NOINLINE name #-};             \
index 5aeda53..38eae0e 100644 (file)
@@ -259,6 +259,11 @@ PRIMOP_BITS_STAGE3 = $(addprefix compiler/stage3/build/,$(PRIMOP_BITS_NAMES))
 compiler_CPP_OPTS += $(addprefix -I,$(GHC_INCLUDE_DIRS))
 compiler_CPP_OPTS += ${GhcCppOpts}
 
+# We add these paths to the Haskell compiler's #include search path list since
+# we must avoid #including files by paths relative to the source file as Hadrian
+# moves the build artifacts out of the source tree. See #8040.
+compiler_HC_OPTS += $(addprefix -I,$(GHC_INCLUDE_DIRS))
+
 define preprocessCompilerFiles
 # $0 = stage
 compiler/stage$1/build/primops.txt: compiler/prelude/primops.txt.pp compiler/stage$1/$$(PLATFORM_H)
index 7546936..b642bea 100644 (file)
@@ -4765,7 +4765,8 @@ compilerInfo dflags
     showBool False = "NO"
     isWindows = platformOS (targetPlatform dflags) == OSMinGW32
 
-#include "../includes/dist-derivedconstants/header/GHCConstantsHaskellWrappers.hs"
+-- Produced by deriveConstants
+#include "GHCConstantsHaskellWrappers.hs"
 
 bLOCK_SIZE_W :: DynFlags -> Int
 bLOCK_SIZE_W dflags = bLOCK_SIZE dflags `quot` wORD_SIZE dflags
index b2ca32b..c9a4072 100644 (file)
@@ -10,5 +10,6 @@
 
 module PlatformConstants (PlatformConstants(..)) where
 
-#include "../includes/dist-derivedconstants/header/GHCConstantsHaskellType.hs"
+-- Produced by deriveConstants
+#include "GHCConstantsHaskellType.hs"
 
index 8152691..1905a0e 100644 (file)
@@ -24,6 +24,7 @@ $1_$2_C_FILES_DEPS = $$(filter-out $$($1_$2_C_FILES_NODEPS),$$($1_$2_C_FILES))
 
 $1_$2_MKDEPENDHS_FLAGS = -dep-makefile $$($1_$2_depfile_haskell).tmp $$(foreach way,$$($1_$2_WAYS),-dep-suffix "$$(patsubst %o,%,$$($$(way)_osuf))")
 $1_$2_MKDEPENDHS_FLAGS += -include-pkg-deps
+$1_$2_MKDEPENDHS_FLAGS += $(addprefix -I,$($1_INCLUDE_DIRS))
 
 ifneq "$$(NO_GENERATED_MAKEFILE_RULES)" "YES"