From fb7a840d2400b3e09c2a8c178d538fbce98f68f9 Mon Sep 17 00:00:00 2001 From: Duncan Coutts <duncan@community.haskell.org> Date: Fri, 3 Jul 2015 16:35:34 +0100 Subject: [PATCH] Use the version macros when building Setup.hs The design called for allowing deps to be specified, and for the Setup.hs to be able to use the same version macros as in other code. This patch completes that second part. --- .../Distribution/Client/SetupWrapper.hs | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/cabal-install/Distribution/Client/SetupWrapper.hs b/cabal-install/Distribution/Client/SetupWrapper.hs index 90ca68c92c..8f4c2b8194 100644 --- a/cabal-install/Distribution/Client/SetupWrapper.hs +++ b/cabal-install/Distribution/Client/SetupWrapper.hs @@ -46,6 +46,8 @@ import Distribution.Simple.Compiler ( Compiler(compilerId), compilerFlavor, PackageDB(..), PackageDBStack ) import Distribution.Simple.PreProcess ( runSimplePreProcessor, ppUnlit ) +import Distribution.Simple.Build.Macros + ( generatePackageVersionMacros ) import Distribution.Simple.Program ( ProgramConfiguration, emptyProgramConfiguration , getProgramSearchPath, getDbProgramOutput, runDbProgram, ghcProgram @@ -57,6 +59,7 @@ import Distribution.Simple.Program.Run import qualified Distribution.Simple.Program.Strip as Strip import Distribution.Simple.BuildPaths ( defaultDistPref, exeExtension ) + import Distribution.Simple.Command ( CommandUI(..), commandShowOptions ) import Distribution.Simple.Program.GHC @@ -548,7 +551,16 @@ externalSetupMethod verbosity options pkg bt mkargs = do _ -> (ghcProgram, ["-threaded"]) cabalDep = maybe [] (\ipkgid -> [(ipkgid, cabalPkgid)]) maybeCabalLibInstalledPkgId + + -- We do a few things differently once packages opt-in and declare + -- a custom-settup stanza. In particular we then enforce the deps + -- specified, but also let the Setup.hs use the version macros. + newPedanticDeps = useDependenciesExclusive options' + selectedDeps + | newPedanticDeps = useDependencies options' + | otherwise = useDependencies options' ++ cabalDep addRenaming (ipid, pid) = (ipid, pid, defaultRenaming) + cppMacrosFile = setupDir </> "setup_macros.h" ghcOptions = mempty { ghcOptVerbosity = Flag verbosity , ghcOptMode = Flag GhcModeMake @@ -559,16 +571,17 @@ externalSetupMethod verbosity options pkg bt mkargs = do , ghcOptSourcePathClear = Flag True , ghcOptSourcePath = toNubListR [workingDir] , ghcOptPackageDBs = usePackageDB options'' - , ghcOptHideAllPackages = Flag (useDependenciesExclusive options') - , ghcOptPackages = toNubListR $ - map addRenaming $ - if useDependenciesExclusive options' - then useDependencies options' - else useDependencies options' - ++ cabalDep + , ghcOptHideAllPackages = Flag newPedanticDeps + , ghcOptCabal = Flag newPedanticDeps + , ghcOptPackages = toNubListR $ map addRenaming selectedDeps + , ghcOptCppIncludes = toNubListR [ cppMacrosFile + | newPedanticDeps ] , ghcOptExtra = toNubListR extraOpts } let ghcCmdLine = renderGhcOptions compiler ghcOptions + when newPedanticDeps $ + rewriteFile cppMacrosFile (generatePackageVersionMacros + [ pid | (_ipid, pid) <- selectedDeps ]) case useLoggingHandle options of Nothing -> runDbProgram verbosity program conf ghcCmdLine -- GitLab