diff options
author | Ben Gamari <ben@smart-cactus.org> | 2021-10-27 01:12:02 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2021-10-27 01:55:40 -0400 |
commit | 9b6aa05c68537bc14bf99be74920129ddd804639 (patch) | |
tree | 521fd37eec6b7e02e92cf7168c0e3d812da5e559 | |
parent | 5ccff22d66c20e9bd9ba5a9166613967b9b329cb (diff) | |
download | haskell-wip/terminfo-header-path.tar.gz |
hadrian: Ensure that term.h is in include search pathwip/terminfo-header-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.in | 3 | ||||
-rw-r--r-- | hadrian/src/Oracles/Setting.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Builders/Common.hs | 13 | ||||
-rw-r--r-- | hadrian/src/Settings/Packages.hs | 7 | ||||
-rw-r--r-- | m4/fp_curses.m4 | 6 |
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 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 8daa8a1f88..b6464fe357 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 "-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 c8258db82f..e3c6b92dbc 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 |