diff --git a/cabal-install/Distribution/Client/SetupWrapper.hs b/cabal-install/Distribution/Client/SetupWrapper.hs index 90ca68c92c6640161a06b02f7be50cb0d0f150c6..8f4c2b8194170c796f74bf7e2f9ab827550b7194 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