Skip to content

Call writeAutogenFiles in configure #6441

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 1 addition & 43 deletions Cabal/Distribution/Simple/Build.hs
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,12 @@ import qualified Distribution.Simple.UHC as UHC
import qualified Distribution.Simple.HaskellSuite as HaskellSuite
import qualified Distribution.Simple.PackageIndex as Index

import Distribution.Simple.Build.Macros (generateCabalMacrosHeader)
import Distribution.Simple.Build.PathsModule (generatePathsModule)
import qualified Distribution.Simple.Program.HcPkg as HcPkg

import Distribution.Simple.Compiler hiding (Flag)
import Distribution.PackageDescription hiding (Flag)
import qualified Distribution.InstalledPackageInfo as IPI
import Distribution.InstalledPackageInfo (InstalledPackageInfo)
import qualified Distribution.ModuleName as ModuleName

import Distribution.Simple.Setup
import Distribution.Simple.BuildTarget
Expand All @@ -86,7 +83,7 @@ import Distribution.Compat.Graph (IsNode(..))

import Control.Monad
import qualified Data.Set as Set
import System.FilePath ( (</>), (<.>), takeDirectory )
import System.FilePath ( (</>), (<.>) )
import System.Directory ( getCurrentDirectory )

-- -----------------------------------------------------------------------------
Expand Down Expand Up @@ -687,42 +684,3 @@ componentInitialBuildSteps _distPref pkg_descr lbi clbi verbosity = do
createDirectoryIfMissingVerbose verbosity True (componentBuildDir lbi clbi)

writeAutogenFiles verbosity pkg_descr lbi clbi

-- | Generate and write out the Paths_<pkg>.hs and cabal_macros.h files
--
writeAutogenFiles :: Verbosity
-> PackageDescription
-> LocalBuildInfo
-> ComponentLocalBuildInfo
-> IO ()
writeAutogenFiles verbosity pkg lbi clbi = do
createDirectoryIfMissingVerbose verbosity True (autogenComponentModulesDir lbi clbi)

let pathsModulePath = autogenComponentModulesDir lbi clbi
</> ModuleName.toFilePath (autogenPathsModuleName pkg) <.> "hs"
pathsModuleDir = takeDirectory pathsModulePath
-- Ensure that the directory exists!
createDirectoryIfMissingVerbose verbosity True pathsModuleDir
rewriteFileEx verbosity pathsModulePath (generatePathsModule pkg lbi clbi)

--TODO: document what we're doing here, and move it to its own function
case clbi of
LibComponentLocalBuildInfo { componentInstantiatedWith = insts } ->
-- Write out empty hsig files for all requirements, so that GHC
-- has a source file to look at it when it needs to typecheck
-- a signature. It's harmless to write these out even when
-- there is a real hsig file written by the user, since
-- include path ordering ensures that the real hsig file
-- will always be picked up before the autogenerated one.
for_ (map fst insts) $ \mod_name -> do
let sigPath = autogenComponentModulesDir lbi clbi
</> ModuleName.toFilePath mod_name <.> "hsig"
createDirectoryIfMissingVerbose verbosity True (takeDirectory sigPath)
rewriteFileEx verbosity sigPath $
"{-# OPTIONS_GHC -w #-}\n" ++
"{-# LANGUAGE NoImplicitPrelude #-}\n" ++
"signature " ++ prettyShow mod_name ++ " where"
_ -> return ()

let cppHeaderPath = autogenComponentModulesDir lbi clbi </> cppHeaderName
rewriteFileEx verbosity cppHeaderPath (generateCabalMacrosHeader pkg lbi clbi)
52 changes: 50 additions & 2 deletions Cabal/Distribution/Simple/Configure.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
module Distribution.Simple.Configure
( configure
, writePersistBuildConfig
, writeAutogenFiles
, getConfigStateFile
, getPersistBuildConfig
, checkPersistBuildConfigOutdated
Expand Down Expand Up @@ -72,6 +73,10 @@ import Distribution.Types.PackageDescription as PD
import Distribution.PackageDescription.PrettyPrint
import Distribution.PackageDescription.Configuration
import Distribution.PackageDescription.Check hiding (doesFileExist)
import qualified Distribution.ModuleName as ModuleName
import Distribution.Simple.BuildPaths
import Distribution.Simple.Build.Macros (generateCabalMacrosHeader)
import Distribution.Simple.Build.PathsModule (generatePathsModule)
import Distribution.Simple.BuildToolDepends
import Distribution.Simple.Program
import Distribution.Simple.Setup as Setup
Expand Down Expand Up @@ -128,7 +133,7 @@ import System.Directory
( canonicalizePath, createDirectoryIfMissing, doesFileExist
, getTemporaryDirectory, removeFile)
import System.FilePath
( (</>), isAbsolute, takeDirectory )
( (</>), (<.>), isAbsolute, takeDirectory )
import Distribution.Compat.Directory
( doesPathExist )
import qualified System.Info
Expand Down Expand Up @@ -828,9 +833,13 @@ configure (pkg_descr0, pbi) cfg = do
dirinfo "Documentation" (docdir dirs) (docdir relative)
dirinfo "Configuration files" (sysconfdir dirs) (sysconfdir relative)

forM_ buildComponents $ \bc -> writeAutogenFiles verbosity pkg_descr lbi bc

sequence_ [ reportProgram verbosity prog configuredProg
| (prog, configuredProg) <- knownPrograms programDb'' ]



return lbi

where
Expand Down Expand Up @@ -967,7 +976,7 @@ dependencySatisfiable
installedPackageSet pn vr cn
where
cn | pn == depName
= LMainLibName
= LMainLibName
| otherwise
-- Reinterpret the "package name" as an unqualified component
-- name
Expand Down Expand Up @@ -2116,3 +2125,42 @@ checkForeignLibSupported comp platform flib = go (compilerFlavor comp)

unsupported :: [String] -> Maybe String
unsupported = Just . concat

-- | Generate and write out the Paths_<pkg>.hs and cabal_macros.h files
--
writeAutogenFiles :: Verbosity
-> PackageDescription
-> LocalBuildInfo
-> ComponentLocalBuildInfo
-> IO ()
writeAutogenFiles verbosity pkg lbi clbi = do
createDirectoryIfMissingVerbose verbosity True (autogenComponentModulesDir lbi clbi)

let pathsModulePath = autogenComponentModulesDir lbi clbi
</> ModuleName.toFilePath (autogenPathsModuleName pkg) <.> "hs"
pathsModuleDir = takeDirectory pathsModulePath
-- Ensure that the directory exists!
createDirectoryIfMissingVerbose verbosity True pathsModuleDir
rewriteFileEx verbosity pathsModulePath (generatePathsModule pkg lbi clbi)

--TODO: document what we're doing here, and move it to its own function
case clbi of
LibComponentLocalBuildInfo { componentInstantiatedWith = insts } ->
-- Write out empty hsig files for all requirements, so that GHC
-- has a source file to look at it when it needs to typecheck
-- a signature. It's harmless to write these out even when
-- there is a real hsig file written by the user, since
-- include path ordering ensures that the real hsig file
-- will always be picked up before the autogenerated one.
for_ (map fst insts) $ \mod_name -> do
let sigPath = autogenComponentModulesDir lbi clbi
</> ModuleName.toFilePath mod_name <.> "hsig"
createDirectoryIfMissingVerbose verbosity True (takeDirectory sigPath)
rewriteFileEx verbosity sigPath $
"{-# OPTIONS_GHC -w #-}\n" ++
"{-# LANGUAGE NoImplicitPrelude #-}\n" ++
"signature " ++ prettyShow mod_name ++ " where"
_ -> return ()

let cppHeaderPath = autogenComponentModulesDir lbi clbi </> cppHeaderName
rewriteFileEx verbosity cppHeaderPath (generateCabalMacrosHeader pkg lbi clbi)