summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2021-10-27 01:12:02 -0400
committerBen Gamari <ben@smart-cactus.org>2021-10-27 01:56:37 -0400
commit1337e2c0a29f8264f6328069396ef31486d34ad8 (patch)
treea4134bbe1b90600054debfd5350eab029a0ad005
parent8d179f658c4718c840f89552337ceaa6085de5d6 (diff)
downloadhaskell-1337e2c0a29f8264f6328069396ef31486d34ad8.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.
-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 e23c79a81d..89f223e7d6 100644
--- a/hadrian/cfg/system.config.in
+++ b/hadrian/cfg/system.config.in
@@ -176,7 +176,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 73fd1ce273..c10e3fc44d 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 5421972659..89735c7f39 100644
--- a/hadrian/src/Settings/Builders/Common.hs
+++ b/hadrian/src/Settings/Builders/Common.hs
@@ -26,15 +26,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 ||^ package compiler ? arg "-Iincludes"
, arg $ "-I" ++ libPath
, arg $ "-I" ++ path
- , pure . map ("-I"++) . filter (/= "") $ [iconvIncludeDir, gmpIncludeDir]
+ , pure . map ("-I"++) . filter (/= "") $ [iconvIncludeDir, gmpIncludeDir, numaIncludeDir, cursesIncludeDir]
, flag UseSystemFfi ? arg ("-I" ++ ffiIncludeDir)
, 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 13181c42c1..7dcc460474 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -22,6 +22,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
@@ -163,6 +166,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