ModuleCabal-3.12.1.0Haskell2010
Distribution.Simple.GHC
This is a fairly large module. It contains most of the GHC-specific code for
configuring, building and installing packages. It also exports a function
for finding out what packages are already installed. Configuring involves
finding the ghc and ghc-pkg programs, finding what language extensions
this version of ghc supports and returning a Compiler value.
getInstalledPackages involves calling the ghc-pkg program to find out
what packages are installed.
Building is somewhat complex as there is quite a bit of information to take
into account. We have to build libs and programs, possibly for profiling and
shared libs. We have to support building libraries that will be usable by
GHCi and also ghc's -split-objs feature. We have to compile any C files
using ghc. Linking, especially for split-objs is remarkably complex,
partly because there tend to be 1,000's of .o files and this can often be
more than we can pass to the ld or ar programs in one go.
Installing for libs and exes involves finding the right files and copying them to the right places. One of the more tricky things about this module is remembering the layout of files in the build directory (which is not explicitly documented) and thus what search dirs are used for various kinds of files.
- 3 types
- 32 values
- PackageCabal-3.12.1.0
- Exports35
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceGHC.hs
Given a package DB stack, return all installed packages.
Given a single package DB, return all installed packages.
Build a foreign library
Build an executable with GHC.
Start a REPL without loading any source files.
installLib :: Verbosity-> LocalBuildInfo-> FilePathinstall location
-> FilePathinstall location for dynamic libraries
-> FilePathBuild location
-> PackageDescription-> Library-> ComponentLocalBuildInfo-> IO ()
Install for ghc, .hi, .a and, if --with-ghci given, .o
installFLib :: Verbosity-> LocalBuildInfo-> FilePathinstall location
-> FilePathBuild location
-> PackageDescription-> ForeignLib-> IO ()
Install foreign library for GHC.
installExe :: Verbosity-> LocalBuildInfo-> FilePathWhere to copy the files to
-> FilePathBuild location
-> (FilePath, FilePath)Executable (prefix,suffix)
-> PackageDescription-> Executable-> IO ()
Install executables for GHC.
Extracts a String representing a hash of the ABI of a built library. It can fail if the library has not yet been built.
Return the FilePath to the GHC application data directory.
Is this compiler's RTS dynamically linked?
Return the FilePath to the global GHC package database.
Constructing and deconstructing GHC environment files
8 declarationsThe kinds of entries we can stick in a .ghc.environment file.
Constructors
GhcEnvFileComment String-- a commentGhcEnvFilePackageId UnitIdpackage-id foo-1.0-4fe301a...GhcEnvFilePackageDb PackageDBglobal-package-db,user-package-dborpackage-db blahpackage.conf.dGhcEnvFileClearPackageDbStackclear-package-db
Instances3Eq, Ord, Show
Eq GhcEnvironmentFileEntryDefined in Cabal-3.12.1.0 · Distribution.Simple.GHC.InternalOrd GhcEnvironmentFileEntryDefined in Cabal-3.12.1.0 · Distribution.Simple.GHC.InternalShow GhcEnvironmentFileEntryDefined in Cabal-3.12.1.0 · Distribution.Simple.GHC.Internal
Make entries for a GHC environment file based on a PackageDBStack and a bunch of package (unit) ids.
If you need to do anything more complicated then either use this as a basis and add more entries, or just make all the entries directly.
Render a bunch of GHC environment file entries
GHC's rendering of its platform and compiler version string as used in
certain file locations (such as user package db location).
For example x86_64-linux-7.10.4
Constructors
Instances2Show, Exception
Show ParseErrorExcDefined in Cabal-3.12.1.0 · Distribution.Simple.GHC.EnvironmentParserException ParseErrorExcDefined in Cabal-3.12.1.0 · Distribution.Simple.GHC.EnvironmentParser
Version-specific implementation quirks
2 declarationsInformation about features and quirks of a GHC-based implementation.
Compiler flavors based on GHC behave similarly enough that some of the support code for them is shared. Every implementation has its own peculiarities, that may or may not be a direct result of the underlying GHC version. This record keeps track of these differences.
All shared code (i.e. everything not in the Distribution.Simple.FLAVOR module) should use implementation info rather than version numbers to test for supported features.
Constructors
GhcImplInfosupportsHaskell2010 :: BoolXHaskell2010 and -XHaskell98 flags
supportsGHC2021 :: BoolXGHC2021 flag
supportsGHC2024 :: BoolXGHC2024 flag
reportsNoExt :: Bool-supported-languages gives Ext and NoExt
alwaysNondecIndent :: BoolNondecreasingIndentation is always on
flagGhciScript :: Boolghci-script flag supported
flagProfAuto :: Boolnew style -fprof-auto* flags
flagProfLate :: Boolfprof-late flag
flagPackageConf :: Booluse package-conf instead of package-db
flagDebugInfo :: Boolg flag supported
flagHie :: Boolhiedir flag supported
supportsDebugLevels :: Boolsupports numeric
-glevelssupportsPkgEnvFiles :: Boolpicks up
.ghc.environmentfilesflagWarnMissingHomeModules :: BoolWmissing-home-modules is supported
unitIdForExes :: BoolPass -this-unit-id flag when building executables