diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2021-10-22 00:05:54 +0000 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-01-18 22:24:10 -0500 |
commit | eb5a6b91e02b48f9171217743e3417cb33eb92e3 (patch) | |
tree | c071a5cffa3d9b6a8d09495fc72e1295fdea71a9 /hadrian/src | |
parent | ab0d5cdaa5505e5b774b04b9f68dcbbc7ce1071e (diff) | |
download | haskell-eb5a6b91e02b48f9171217743e3417cb33eb92e3.tar.gz |
Give the RTS it's own configure script
Currently it doesn't do much anything, we are just trying to introduce
it without breaking the build. Later, we will move functionality from
the top-level configure script over to it.
We need to bump Cabal for https://github.com/haskell/cabal/pull/8649; to
facilitate and existing hack of skipping some configure checks for the
RTS we now need to skip just *part* not *all* of the "post configure"
hook, as running the configure script (which we definitely want to do)
is also implemented as part of the "post configure" hook. But doing this
requires exposing functionality that wasn't exposed before.
Diffstat (limited to 'hadrian/src')
-rw-r--r-- | hadrian/src/Base.hs | 8 | ||||
-rw-r--r-- | hadrian/src/Rules/Generate.hs | 23 | ||||
-rw-r--r-- | hadrian/src/Rules/Lint.hs | 8 | ||||
-rw-r--r-- | hadrian/src/Rules/Register.hs | 6 | ||||
-rw-r--r-- | hadrian/src/Rules/SourceDist.hs | 4 |
5 files changed, 12 insertions, 37 deletions
diff --git a/hadrian/src/Base.hs b/hadrian/src/Base.hs index 72baba6aaa..623a5bae8b 100644 --- a/hadrian/src/Base.hs +++ b/hadrian/src/Base.hs @@ -28,9 +28,6 @@ module Base ( module Stage, module Way, - -- * Files - configH, - -- * Paths hadrianPath, configPath, configFile, sourcePath, shakeFilesDir, stageBinPath, stageLibPath, templateHscPath, @@ -87,11 +84,6 @@ configFile = configPath -/- "system.config" sourcePath :: FilePath sourcePath = hadrianPath -/- "src" --- TODO: Change @mk/config.h@ to @shake-build/cfg/config.h@. --- | Path to the generated @mk/config.h@ file. -configH :: FilePath -configH = "mk/config.h" - -- | The directory in 'buildRoot' containing the Shake database and other -- auxiliary files generated by Hadrian. shakeFilesDir :: FilePath diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs index 2c02407d31..b156c9dfdf 100644 --- a/hadrian/src/Rules/Generate.hs +++ b/hadrian/src/Rules/Generate.hs @@ -147,7 +147,8 @@ generatePackageCode context@(Context stage pkg _ _) = do root -/- "**" -/- dir -/- "cmm/AutoApply.cmm" %> \file -> build $ target context GenApply [] [file] let go gen file = generate file (semiEmptyTarget stage) gen - root -/- "**" -/- dir -/- "include/ghcautoconf.h" %> go generateGhcAutoconfH + root -/- "**" -/- dir -/- "include/ghcautoconf.h" %> \_ -> + need . pure =<< pkgSetupConfigFile context root -/- "**" -/- dir -/- "include/ghcplatform.h" %> go generateGhcPlatformH root -/- "**" -/- dir -/- "include/DerivedConstants.h" %> genPlatformConstantsHeader context root -/- "**" -/- dir -/- "include/rts/EventLogConstants.h" %> genEventTypes "--event-types-defines" @@ -486,26 +487,6 @@ generateConfigHs = do stageString (Stage0 GlobalLibs) = error "stageString: StageBoot" --- | Generate @ghcautoconf.h@ header. -generateGhcAutoconfH :: Expr String -generateGhcAutoconfH = do - trackGenerateHs - configHContents <- expr $ mapMaybe undefinePackage <$> readFileLines configH - return . unlines $ - [ "#if !defined(__GHCAUTOCONF_H__)" - , "#define __GHCAUTOCONF_H__" ] - ++ configHContents ++ - [ "#endif /* __GHCAUTOCONF_H__ */" ] - where - undefinePackage s - | "#define PACKAGE_" `isPrefixOf` s - = Just $ "/* #undef " ++ takeWhile (/=' ') (drop 8 s) ++ " */" - | "#define __GLASGOW_HASKELL" `isPrefixOf` s - = Nothing - | "/* REMOVE ME */" == s - = Nothing - | otherwise = Just s - -- | Generate @Version.hs@ files. generateVersionHs :: Expr String generateVersionHs = do diff --git a/hadrian/src/Rules/Lint.hs b/hadrian/src/Rules/Lint.hs index fa279fa836..0928ec02eb 100644 --- a/hadrian/src/Rules/Lint.hs +++ b/hadrian/src/Rules/Lint.hs @@ -11,13 +11,15 @@ lintRules :: Rules () lintRules = do "lint:base" ~> lint base "lint:compiler" ~> lint compiler + + -- Ensure that autoconf scripts, which are usually run by Cabal, are run to + -- avoid depending upon Cabal from the stage0 compiler.. "libraries" -/- "base" -/- "include" -/- "HsBaseConfig.h" %> \_ -> -- ./configure is called here manually because we need to generate -- HsBaseConfig.h, which is created from HsBaseConfig.h.in. ./configure - -- is usually run by Cabal which generates this file but if we do that - -- then hadrian thinks it needs to build the stage0 compiler before - -- attempting to configure. Therefore we just run it directly here. cmd_ (Cwd "libraries/base") "./configure" + "rts" -/- "include" -/- "ghcautoconf.h" %> \_ -> + cmd_ (Cwd "rts") "./configure" lint :: Action () -> Action () lint lintAction = do diff --git a/hadrian/src/Rules/Register.hs b/hadrian/src/Rules/Register.hs index bfd8538cb0..8543576215 100644 --- a/hadrian/src/Rules/Register.hs +++ b/hadrian/src/Rules/Register.hs @@ -48,11 +48,9 @@ configurePackageRules = do when (pkg == rts) $ do -- Rts.h is a header listed in the cabal file, and configuring -- therefore wants to ensure that the header "works" post-configure. - -- But it (transitively) includes these, so we must ensure they exist + -- But it (transitively) includes this, so we must ensure it exists -- for that check to work. - need [ buildP -/- "include/ghcautoconf.h" - , buildP -/- "include/ghcplatform.h" - ] + need [buildP -/- "include/ghcplatform.h"] Cabal.configurePackage ctx root -/- "**/autogen/cabal_macros.h" %> \out -> do diff --git a/hadrian/src/Rules/SourceDist.hs b/hadrian/src/Rules/SourceDist.hs index 598b6fdcc9..640b06a47d 100644 --- a/hadrian/src/Rules/SourceDist.hs +++ b/hadrian/src/Rules/SourceDist.hs @@ -142,7 +142,9 @@ prepareTree dest = do moveFile (dest -/- "boot") (dest -/- "boot.source") bootFiles = - [ pkgPath process -/- "include" -/- "HsProcessConfig.h.in" + [ pkgPath rts -/- "configure" + , pkgPath rts -/- "ghcautoconf.h.autoconf.in" + , pkgPath process -/- "include" -/- "HsProcessConfig.h.in" , pkgPath process -/- "configure" , pkgPath ghcBignum -/- "configure" , pkgPath base -/- "configure" |