Commit eb5a6b91 authored by John Ericson's avatar John Ericson Committed by Marge Bot
Browse files

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.
parent ab0d5cda
Pipeline #61804 canceled with stages
in 43 seconds
......@@ -63,7 +63,7 @@ def autoreconf():
else:
reconf_cmd = 'autoreconf'
for dir_ in ['.'] + glob.glob('libraries/*/'):
for dir_ in ['.', 'rts'] + glob.glob('libraries/*/'):
if os.path.isfile(os.path.join(dir_, 'configure.ac')):
print("Booting %s" % dir_)
# Update config.sub in submodules
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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"
......
......@@ -19,4 +19,3 @@
/include/EventConfig.h
/include/HsBaseConfig.h
/include/HsBaseConfig.h.in
......@@ -48,9 +48,6 @@ AC_DEFUN([FP_FIND_LIBDW],
AC_SUBST(UseLibdw)
if test $UseLibdw = "YES" ; then
USE_LIBDW=1
AC_SUBST([CabalHaveLibdw],[True])
else
AC_SUBST([CabalHaveLibdw],[False])
fi
AC_DEFINE_UNQUOTED([USE_LIBDW], [$USE_LIBDW], [Set to 1 to use libdw])
])
......
......@@ -12,7 +12,12 @@
/package.conf.install.raw
/fs.*
/aclocal.m4
/autom4te.cache/
/config.log
/config.status
/configure
/ghcautoconf.h.autoconf.in
/ghcautoconf.h.autoconf
/include/ghcautoconf.h
# Configure script template for the Run-time System of GHC
#
# Process with 'autoreconf' to get a working configure script.
#
# For the generated configure script, do "./configure --help" to
# see what flags are available. (Better yet, read the documentation!)
#
AC_INIT([GHC run-time system], [1.0.2], [libraries@haskell.org], [rts])
AC_CONFIG_MACRO_DIRS([../m4])
# Safety check: Ensure that we are in the correct source directory.
AC_CONFIG_SRCDIR([include/rts/Constants.h])
dnl * We require autoconf version 2.69 due to
dnl https://bugs.ruby-lang.org/issues/8179. Also see #14910.
dnl * We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
dnl * We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
dnl * Using autoconf 2.59 started to give nonsense like this
dnl #define SIZEOF_CHAR 0
dnl recently.
AC_PREREQ([2.69])
AC_CONFIG_HEADERS([ghcautoconf.h.autoconf])
# We have to run these unconditionally, but we may discard their
# results in the following code
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
GHC_CONVERT_PLATFORM_PARTS([host], [Host])
FPTOOLS_SET_PLATFORM_VARS([host], [Host])
FPTOOLS_SET_HASKELL_PLATFORM_VARS([Host])
AC_OUTPUT
dnl ######################################################################
dnl Generate ghcautoconf.h
dnl ######################################################################
[
mkdir -p include
touch include/ghcautoconf.h
> include/ghcautoconf.h
echo "#if !defined(__GHCAUTOCONF_H__)" >> include/ghcautoconf.h
echo "#define __GHCAUTOCONF_H__" >> include/ghcautoconf.h
# Copy the contents of $srcdir/../mk/config.h, turning '#define PACKAGE_FOO
# "blah"' into '/* #undef PACKAGE_FOO */' to avoid clashes.
cat $srcdir/../mk/config.h ghcautoconf.h.autoconf | sed \
-e 's,^\([ ]*\)#[ ]*define[ ][ ]*\(PACKAGE_[A-Z]*\)[ ][ ]*".*".*$,\1/* #undef \2 */,' \
-e '/__GLASGOW_HASKELL/d' \
-e '/REMOVE ME/d' \
>> include/ghcautoconf.h
echo "#endif /* __GHCAUTOCONF_H__ */" >> include/ghcautoconf.h
]
cabal-version: 3.0
name: rts
version: 1.0.2
synopsis: The GHC runtime system
description:
The GHC runtime system.
Code produced by GHC links this library to provide missing functionality
that cannot be written in Haskell itself.
license: BSD-3-Clause
maintainer: glasgow-haskell-users@haskell.org
build-type: Simple
build-type: Configure
extra-source-files:
configure
configure.ac
extra-tmp-files:
autom4te.cache
config.log
config.status
source-repository head
type: git
......@@ -206,6 +221,7 @@ library
include-dirs: include
includes: Rts.h
autogen-includes: ghcautoconf.h
install-includes: Cmm.h HsFFI.h MachDeps.h Rts.h RtsAPI.h Stg.h
ghcautoconf.h ghcconfig.h ghcplatform.h ghcversion.h
-- ^ from include
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment