diff options
-rw-r--r-- | .gitignore | 8 | ||||
-rw-r--r-- | configure.ac | 19 | ||||
-rw-r--r-- | hadrian/src/Base.hs | 7 | ||||
-rw-r--r-- | hadrian/src/Rules/Generate.hs | 48 | ||||
-rw-r--r-- | hadrian/src/Rules/Register.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Builders/Cabal.hs | 3 | ||||
-rw-r--r-- | hadrian/src/Settings/Builders/Ghc.hs | 4 | ||||
-rw-r--r-- | rts/.gitignore | 18 | ||||
-rw-r--r-- | rts/ghcversion.h.bottom | 10 | ||||
-rw-r--r-- | rts/ghcversion.h.top | 3 | ||||
-rw-r--r-- | rts/include/ghc.mk | 46 |
11 files changed, 69 insertions, 99 deletions
diff --git a/.gitignore b/.gitignore index cbf1429c23..f0121e6936 100644 --- a/.gitignore +++ b/.gitignore @@ -80,8 +80,6 @@ _darcs/ /libraries/*/dist-install/ /libraries/*/dist-newstyle/ /libraries/dist-haddock/ -/rts/dist/ -/rts/dist-*/ /utils/*/dist*/ /compiler/stage1/ /compiler/stage2/ @@ -187,11 +185,6 @@ _darcs/ /mk/project.mk /mk/project.mk.old /mk/validate.mk -/rts/rts.cabal -/rts/package.conf.inplace -/rts/package.conf.inplace.raw -/rts/package.conf.install -/rts/package.conf.install.raw /stage3.package.conf /testsuite_summary*.txt /testsuite*.xml @@ -205,7 +198,6 @@ _darcs/ /utils/ghc-pkg/ghc-pkg.cabal utils/lndir/fs.* utils/unlit/fs.* -rts/fs.* libraries/base/include/fs.h libraries/base/cbits/fs.c missing-win32-tarballs diff --git a/configure.ac b/configure.ac index 8bab372e81..560e8d6cb6 100644 --- a/configure.ac +++ b/configure.ac @@ -53,6 +53,23 @@ FP_PROG_SORT dnl ---------------------------------------------------------- FP_SETUP_PROJECT_VERSION +dnl Don't use AC_DEFINE because it will make C-style comments invalid for +dnl Haskell. + +> rts/include/ghcversion.h + +cat rts/ghcversion.h.top >> rts/include/ghcversion.h + +echo "#define __GLASGOW_HASKELL__ ${ProjectVersionInt}" >> rts/include/ghcversion.h +echo "#define __GLASGOW_HASKELL_FULL_VERSION__ \"${ProjectVersion}\"" >> rts/include/ghcversion.h +echo >> rts/include/ghcversion.h +AS_IF([test x"${ProjectPatchLevel1}" != x], + [echo "#define __GLASGOW_HASKELL_PATCHLEVEL1__ ${ProjectPatchLevel1}" >> rts/include/ghcversion.h]) +AS_IF([test x"${ProjectPatchLevel2}" != x], + [echo "#define __GLASGOW_HASKELL_PATCHLEVEL2__ ${ProjectPatchLevel2}" >> rts/include/ghcversion.h]) + +cat rts/ghcversion.h.bottom >> rts/include/ghcversion.h + # Hmmm, we fix the RPM release number to 1 here... Is this convenient? AC_SUBST([release], [1]) @@ -76,6 +93,8 @@ AC_PREREQ([2.69]) AC_CONFIG_HEADER(mk/config.h) # This one is manually maintained. AC_CONFIG_HEADER(compiler/ghc-llvm-version.h) +dnl manually outputted above, for reasons described there. +dnl AC_CONFIG_HEADER(rts/include/ghcversion.h) # No, semi-sadly, we don't do `--srcdir'... if test x"$srcdir" != 'x.' ; then diff --git a/hadrian/src/Base.hs b/hadrian/src/Base.hs index 205bd7518f..253a436ea9 100644 --- a/hadrian/src/Base.hs +++ b/hadrian/src/Base.hs @@ -21,7 +21,7 @@ module Base ( module Way, -- * Files - configH, ghcVersionH, + configH, -- * Paths hadrianPath, configPath, configFile, sourcePath, shakeFilesDir, @@ -74,9 +74,6 @@ sourcePath = hadrianPath -/- "src" configH :: FilePath configH = "mk/config.h" -ghcVersionH :: Stage -> Action FilePath -ghcVersionH stage = stageLibPath stage <&> (-/- "ghcversion.h") - -- | The directory in 'buildRoot' containing the Shake database and other -- auxiliary files generated by Hadrian. shakeFilesDir :: FilePath @@ -123,7 +120,7 @@ includesDependencies :: Stage -> Action [FilePath] includesDependencies stage = do p <- stageLibPath stage pure $ (p -/-) <$> - [ "ghcautoconf.h", "ghcplatform.h", "ghcversion.h" ] + [ "ghcautoconf.h", "ghcplatform.h" ] -- | Files the `haddock` binary depends on haddockDeps :: Stage -> Action [FilePath] diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs index 13147aeec9..eb7a780d97 100644 --- a/hadrian/src/Rules/Generate.hs +++ b/hadrian/src/Rules/Generate.hs @@ -133,7 +133,6 @@ generatePackageCode context@(Context stage pkg _) = do (root -/- "**" -/- dir -/- "DerivedConstants.h") <~ stageLibPath stage (root -/- "**" -/- dir -/- "ghcautoconf.h") <~ stageLibPath stage (root -/- "**" -/- dir -/- "ghcplatform.h") <~ stageLibPath stage - (root -/- "**" -/- dir -/- "ghcversion.h") <~ stageLibPath stage where pattern <~ mdir = pattern %> \file -> do dir <- mdir @@ -184,7 +183,6 @@ generateRules = do (prefix -/- "ghcplatform.h") %> go generateGhcPlatformH (prefix -/- "settings") %> go generateSettings (prefix -/- "ghcautoconf.h") %> go generateGhcAutoconfH - (prefix -/- "ghcversion.h") %> go generateGhcVersionH -- TODO: simplify, get rid of fake rts context for_ (fst <$> deriveConstantsPairs) $ \constantsFile -> prefix -/- constantsFile %> \file -> do @@ -193,7 +191,6 @@ generateRules = do need [ prefix -/- "ghcplatform.h" , prefix -/- "ghcautoconf.h" - , prefix -/- "ghcversion.h" ] withTempDir $ \dir -> build $ target (rtsContext stage) DeriveConstants [] [file, dir] @@ -395,7 +392,7 @@ generateConfigHs = do generateGhcAutoconfH :: Expr String generateGhcAutoconfH = do trackGenerateHs - configHContents <- expr $ map undefinePackage <$> readFileLines configH + configHContents <- expr $ mapMaybe undefinePackage <$> readFileLines configH return . unlines $ [ "#if !defined(__GHCAUTOCONF_H__)" , "#define __GHCAUTOCONF_H__" ] @@ -404,43 +401,12 @@ generateGhcAutoconfH = do where undefinePackage s | "#define PACKAGE_" `isPrefixOf` s - = "/* #undef " ++ takeWhile (/=' ') (drop 8 s) ++ " */" - | otherwise = s - --- | Generate @ghcversion.h@ header. -generateGhcVersionH :: Expr String -generateGhcVersionH = do - trackGenerateHs - fullVersion <- getSetting ProjectVersion - version <- getSetting ProjectVersionInt - patchLevel1 <- getSetting ProjectPatchLevel1 - patchLevel2 <- getSetting ProjectPatchLevel2 - return . unlines $ - [ "#if !defined(__GHCVERSION_H__)" - , "#define __GHCVERSION_H__" - , "" - , "#if !defined(__GLASGOW_HASKELL__)" - , "#define __GLASGOW_HASKELL__ " ++ version - , "#endif" - , "#if !defined(__GLASGOW_HASKELL_FULL_VERSION__)" - , "#define __GLASGOW_HASKELL_FULL_VERSION__ \"" ++ fullVersion ++ "\"" - , "#endif" - , ""] - ++ - [ "#define __GLASGOW_HASKELL_PATCHLEVEL1__ " ++ patchLevel1 | patchLevel1 /= "" ] - ++ - [ "#define __GLASGOW_HASKELL_PATCHLEVEL2__ " ++ patchLevel2 | patchLevel2 /= "" ] - ++ - [ "" - , "#define MIN_VERSION_GLASGOW_HASKELL(ma,mi,pl1,pl2) (\\" - , " ((ma)*100+(mi)) < __GLASGOW_HASKELL__ || \\" - , " ((ma)*100+(mi)) == __GLASGOW_HASKELL__ \\" - , " && (pl1) < __GLASGOW_HASKELL_PATCHLEVEL1__ || \\" - , " ((ma)*100+(mi)) == __GLASGOW_HASKELL__ \\" - , " && (pl1) == __GLASGOW_HASKELL_PATCHLEVEL1__ \\" - , " && (pl2) <= __GLASGOW_HASKELL_PATCHLEVEL2__ )" - , "" - , "#endif /* __GHCVERSION_H__ */" ] + = 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 diff --git a/hadrian/src/Rules/Register.hs b/hadrian/src/Rules/Register.hs index 6bbae7e0bd..6b603c6858 100644 --- a/hadrian/src/Rules/Register.hs +++ b/hadrian/src/Rules/Register.hs @@ -128,7 +128,7 @@ buildConf _ context@Context {..} _conf = do need [ path -/- "DerivedConstants.h" , path -/- "ghcautoconf.h" , path -/- "ghcplatform.h" - , path -/- "ghcversion.h" ] + ] -- we need to generate this file for GMP when (package == ghcBignum) $ do diff --git a/hadrian/src/Settings/Builders/Cabal.hs b/hadrian/src/Settings/Builders/Cabal.hs index e3361d3fe9..e38eba1cf0 100644 --- a/hadrian/src/Settings/Builders/Cabal.hs +++ b/hadrian/src/Settings/Builders/Cabal.hs @@ -129,7 +129,8 @@ configureArgs = do , conf "--with-curses-libraries" $ arg =<< getSetting CursesLibDir , conf "--host" $ arg =<< getSetting TargetPlatformFull , conf "--with-cc" $ arg =<< getBuilderPath . (Cc CompileC) =<< getStage - , notStage0 ? (arg =<< ("--ghc-option=-ghcversion-file=" ++) <$> expr ((-/-) <$> topDirectory <*> ghcVersionH stage))] + , notStage0 ? arg "--ghc-option=-ghcversion-file=rts/include/ghcversion.h" + ] bootPackageConstraints :: Args bootPackageConstraints = stage0 ? do diff --git a/hadrian/src/Settings/Builders/Ghc.hs b/hadrian/src/Settings/Builders/Ghc.hs index 3d5a96efe4..b4c129562e 100644 --- a/hadrian/src/Settings/Builders/Ghc.hs +++ b/hadrian/src/Settings/Builders/Ghc.hs @@ -195,9 +195,7 @@ commonGhcArgs :: Args commonGhcArgs = do way <- getWay path <- getBuildPath - stage <- getStage useColor <- shakeColor <$> expr getShakeOptions - ghcVersion <- expr $ ghcVersionH stage mconcat [ arg "-hisuf", arg $ hisuf way , arg "-osuf" , arg $ osuf way , arg "-hcsuf", arg $ hcsuf way @@ -208,7 +206,7 @@ commonGhcArgs = do -- in the package database. We therefore explicitly supply the path -- to the @ghc-version@ file, to prevent GHC from trying to open the -- RTS package in the package database and failing. - , package rts ? notStage0 ? arg ("-ghcversion-file=" ++ ghcVersion) + , package rts ? notStage0 ? arg "-ghcversion-file=rts/include/ghcversion.h" , map ("-optc" ++) <$> getStagedSettingList ConfCcArgs , map ("-optP" ++) <$> getStagedSettingList ConfCppArgs , map ("-optP" ++) <$> getContextData cppOpts diff --git a/rts/.gitignore b/rts/.gitignore new file mode 100644 index 0000000000..a0fafa79ab --- /dev/null +++ b/rts/.gitignore @@ -0,0 +1,18 @@ +# Specific generated files +/dist/ +/dist-*/ + +/rts.cabal + +/include/ghcversion.h + +/package.conf.inplace +/package.conf.inplace.raw +/package.conf.install +/package.conf.install.raw +/fs.* + +/autom4te.cache/ +/config.log +/config.status +/configure diff --git a/rts/ghcversion.h.bottom b/rts/ghcversion.h.bottom new file mode 100644 index 0000000000..b9a8fc29c6 --- /dev/null +++ b/rts/ghcversion.h.bottom @@ -0,0 +1,10 @@ + +#define MIN_VERSION_GLASGOW_HASKELL(ma,mi,pl1,pl2) ( \ + ((ma)*100+(mi)) < __GLASGOW_HASKELL__ || \ + ((ma)*100+(mi)) == __GLASGOW_HASKELL__ \ + && (pl1) < __GLASGOW_HASKELL_PATCHLEVEL1__ || \ + ((ma)*100+(mi)) == __GLASGOW_HASKELL__ \ + && (pl1) == __GLASGOW_HASKELL_PATCHLEVEL1__ \ + && (pl2) <= __GLASGOW_HASKELL_PATCHLEVEL2__ ) + +#endif /* __GHCVERSION_H__ */ diff --git a/rts/ghcversion.h.top b/rts/ghcversion.h.top new file mode 100644 index 0000000000..788dba3f40 --- /dev/null +++ b/rts/ghcversion.h.top @@ -0,0 +1,3 @@ +#if !defined(__GHCVERSION_H__) +#define __GHCVERSION_H__ + diff --git a/rts/include/ghc.mk b/rts/include/ghc.mk index 11e72c3daa..7bc4fc2d8b 100644 --- a/rts/include/ghc.mk +++ b/rts/include/ghc.mk @@ -19,9 +19,6 @@ includes_2_H_CONFIG = $(includes_1_H_CONFIG) includes_1_H_PLATFORM = rts/dist-install/build/include/ghcplatform.h includes_2_H_PLATFORM = $(includes_1_H_PLATFORM) -includes_1_H_VERSION = rts/dist-install/build/include/ghcversion.h -includes_2_H_VERSION = $(includes_1_H_VERSION) - BUILD_0_INCLUDE_DIR = rts/dist/build/include BUILD_1_INCLUDE_DIR = rts/dist-install/build/include BUILD_2_INCLUDE_DIR = $(BUILD_1_INCLUDE_DIR) @@ -41,8 +38,7 @@ includes_H_FILES := $(subst /./,/,$(includes_H_FILES)) includes_H_FILES_GENERATED = \ ghcautoconf.h \ - ghcplatform.h \ - ghcversion.h + ghcplatform.h # Unlike above, include generated files. We still need the previous list # without the generated files separtely and not just as part of this due to @@ -76,40 +72,6 @@ ifneq "$(GhcWithSMP)" "YES" includes_CC_OPTS += -DNOSMP endif -define includesHeaderVersion -# $1 = stage -$$(includes_$1_H_VERSION) : mk/project.mk | $$$$(dir $$$$@)/. - $$(call removeFiles,$$@) - @echo "Creating $$@..." - @echo "#if !defined(__GHCVERSION_H__)" > $$@ - @echo "#define __GHCVERSION_H__" >> $$@ - @echo >> $$@ - @echo "#define __GLASGOW_HASKELL__ $$(ProjectVersionInt)" >> $$@ - @echo "#define __GLASGOW_HASKELL_FULL_VERSION__ \"$$(ProjectVersion)\"" >> $$@ - @echo >> $$@ - @if [ -n "$$(ProjectPatchLevel1)" ]; then \ - echo "#define __GLASGOW_HASKELL_PATCHLEVEL1__ $$(ProjectPatchLevel1)" >> $$@; \ - fi - @if [ -n "$$(ProjectPatchLevel2)" ]; then \ - echo "#define __GLASGOW_HASKELL_PATCHLEVEL2__ $$(ProjectPatchLevel2)" >> $$@; \ - fi - @echo >> $$@ - @echo '#define MIN_VERSION_GLASGOW_HASKELL(ma,mi,pl1,pl2) (\' >> $$@ - @echo ' ((ma)*100+(mi)) < __GLASGOW_HASKELL__ || \' >> $$@ - @echo ' ((ma)*100+(mi)) == __GLASGOW_HASKELL__ \' >> $$@ - @echo ' && (pl1) < __GLASGOW_HASKELL_PATCHLEVEL1__ || \' >> $$@ - @echo ' ((ma)*100+(mi)) == __GLASGOW_HASKELL__ \' >> $$@ - @echo ' && (pl1) == __GLASGOW_HASKELL_PATCHLEVEL1__ \' >> $$@ - @echo ' && (pl2) <= __GLASGOW_HASKELL_PATCHLEVEL2__ )' >> $$@ - @echo >> $$@ - @echo "#endif /* __GHCVERSION_H__ */" >> $$@ - @echo "Done." - -endef - -$(eval $(call includesHeaderVersion,0)) -$(eval $(call includesHeaderVersion,1)) - ifneq "$(BINDIST)" "YES" define includesHeaderConfig @@ -123,7 +85,11 @@ $$(includes_$1_H_CONFIG) : mk/config.h mk/config.mk rts/include/ghc.mk | $$$$(di # Copy the contents of mk/config.h, turning '#define PACKAGE_FOO # "blah"' into '/* #undef PACKAGE_FOO */' to avoid clashes. # - @sed 's,^\([ ]*\)#[ ]*define[ ][ ]*\(PACKAGE_[A-Z]*\)[ ][ ]*".*".*$$$$,\1/* #undef \2 */,' mk/config.h >> $$@ + @sed mk/config.h \ + -e 's,^\([ ]*\)#[ ]*define[ ][ ]*\(PACKAGE_[A-Z]*\)[ ][ ]*".*".*$$$$,\1/* #undef \2 */,' \ + -e '/__GLASGOW_HASKELL/d' \ + -e '/REMOVE ME/d' \ + >> $$@ # @echo "#endif /* __GHCAUTOCONF_H__ */" >> $$@ @echo "Done." |