summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2021-10-27 01:12:02 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-11-17 05:11:03 -0500
commit4cec6cf284d65449bbdaf015fadd7768770ec52b (patch)
tree0ca7fc7caa2f64c1cfc9a2d86e5e041e1f676a56
parent20a4f2513d67a454edaa207bac97a9dd6f4db757 (diff)
downloadhaskell-4cec6cf284d65449bbdaf015fadd7768770ec52b.tar.gz
hadrian: Ensure that term.h is in include search path
terminfo now requires term.h but previously neither build system offered any way to add the containing directory to the include search path. Fix this in Hadrian. Also adds libnuma includes to global include search path as it was inexplicably missing earlier.
-rw-r--r--hadrian/cfg/system.config.in3
-rw-r--r--hadrian/src/Oracles/Setting.hs2
-rw-r--r--hadrian/src/Settings/Builders/Common.hs13
-rw-r--r--hadrian/src/Settings/Packages.hs7
-rw-r--r--m4/fp_curses.m46
5 files changed, 25 insertions, 6 deletions
diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in
index 2c341230cf..e8a300d401 100644
--- a/hadrian/cfg/system.config.in
+++ b/hadrian/cfg/system.config.in
@@ -177,7 +177,8 @@ target-arm-version = @ARM_ISA@
# Include and library directories:
#=================================
-curses-lib-dir = @CURSES_LIB_DIRS@
+curses-lib-dir = @CURSES_LIB_DIRS@
+curses-include-dir = @CURSES_INCLUDE_DIRS@
iconv-include-dir = @ICONV_INCLUDE_DIRS@
iconv-lib-dir = @ICONV_LIB_DIRS@
diff --git a/hadrian/src/Oracles/Setting.hs b/hadrian/src/Oracles/Setting.hs
index b1db240f34..e58851057a 100644
--- a/hadrian/src/Oracles/Setting.hs
+++ b/hadrian/src/Oracles/Setting.hs
@@ -36,6 +36,7 @@ data Setting = BuildArch
| BuildOs
| BuildPlatform
| BuildVendor
+ | CursesIncludeDir
| CursesLibDir
| DynamicExtension
| FfiIncludeDir
@@ -133,6 +134,7 @@ setting key = lookupValueOrError configFile $ case key of
BuildOs -> "build-os"
BuildPlatform -> "build-platform"
BuildVendor -> "build-vendor"
+ CursesIncludeDir -> "curses-include-dir"
CursesLibDir -> "curses-lib-dir"
DynamicExtension -> "dynamic-extension"
FfiIncludeDir -> "ffi-include-dir"
diff --git a/hadrian/src/Settings/Builders/Common.hs b/hadrian/src/Settings/Builders/Common.hs
index 11b6f20ef5..4ffca988a0 100644
--- a/hadrian/src/Settings/Builders/Common.hs
+++ b/hadrian/src/Settings/Builders/Common.hs
@@ -25,15 +25,18 @@ cIncludeArgs = do
incDirs <- getContextData includeDirs
depDirs <- getContextData depIncludeDirs
stage <- getStage
- iconvIncludeDir <- getSetting IconvIncludeDir
- gmpIncludeDir <- getSetting GmpIncludeDir
- ffiIncludeDir <- getSetting FfiIncludeDir
- libdwIncludeDir <- getSetting FfiIncludeDir
+ -- TODO: Why is any of this necessary? We should have already told Cabal about these paths.
+ iconvIncludeDir <- getSetting IconvIncludeDir
+ gmpIncludeDir <- getSetting GmpIncludeDir
+ ffiIncludeDir <- getSetting FfiIncludeDir
+ libdwIncludeDir <- getSetting LibdwIncludeDir
+ numaIncludeDir <- getSetting LibnumaIncludeDir
+ cursesIncludeDir <- getSetting CursesIncludeDir
libPath <- expr $ stageLibPath stage
mconcat [ notStage0 ? arg "-Irts/include"
, arg $ "-I" ++ libPath
, arg $ "-I" ++ path
- , pure . map ("-I"++) . filter (/= "") $ [iconvIncludeDir, gmpIncludeDir]
+ , pure . map ("-I"++) . filter (/= "") $ [iconvIncludeDir, gmpIncludeDir, numaIncludeDir, cursesIncludeDir]
, flag UseSystemFfi ? if not (null ffiIncludeDir) then arg ("-I" ++ ffiIncludeDir) else mempty
, flag WithLibdw ? if not (null libdwIncludeDir) then arg ("-I" ++ libdwIncludeDir) else mempty
-- Add @incDirs@ in the build directory, since some files generated
diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs
index 416e3bd430..3be0b92050 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -24,6 +24,9 @@ packageArgs = do
-- are building. This is used to build cross-compilers
bootCross = (==) <$> ghcVersionStage Stage0 <*> ghcVersionStage Stage1
+ cursesIncludeDir <- getSetting CursesIncludeDir
+ cursesLibraryDir <- getSetting CursesLibDir
+
mconcat
--------------------------------- base ---------------------------------
[ package base ? mconcat
@@ -159,6 +162,10 @@ packageArgs = do
, package haskeline ?
builder (Cabal Flags) ? notM cross `cabalFlag` "terminfo"
+ -------------------------------- terminfo ------------------------------
+ , package terminfo ?
+ builder (Cabal Setup) ? cabalExtraDirs cursesIncludeDir cursesLibraryDir
+
-------------------------------- hsc2hs --------------------------------
, package hsc2hs ?
builder (Cabal Flags) ? arg "in-ghc-tree"
diff --git a/m4/fp_curses.m4 b/m4/fp_curses.m4
index a0c30637cb..36303f8937 100644
--- a/m4/fp_curses.m4
+++ b/m4/fp_curses.m4
@@ -6,10 +6,16 @@ AC_DEFUN([FP_CURSES],
dnl * Deal with arguments telling us curses is somewhere odd
dnl--------------------------------------------------------------------
+ AC_ARG_WITH([curses-includes],
+ [AS_HELP_STRING([--with-curses-includes],
+ [directory containing curses headers])],
+ [CURSES_INCLUDE_DIRS=$withval])
+
AC_ARG_WITH([curses-libraries],
[AS_HELP_STRING([--with-curses-libraries],
[directory containing curses libraries])],
[CURSES_LIB_DIRS=$withval])
+ AC_SUBST(CURSES_INCLUDE_DIRS)
AC_SUBST(CURSES_LIB_DIRS)
])# FP_CURSES