Targets.hs 3.7 KB
Newer Older
1
module Targets (
2
3
    targetDirectory,
    knownPackages,
4
    customConfigureSettings,
5
6
7
8
    array, base, binPackageDb, binary, bytestring, cabal, compiler, containers,
    deepseq, directory, filepath, ghcPrim, haskeline, hoopl, hpc,
    integerLibrary, parallel, pretty, primitive, process, stm, templateHaskell,
    terminfo, time, transformers, unix, win32, xhtml
9
    ) where
10

11
import Base hiding (arg, args)
12
import Package
Andrey Mokhov's avatar
Andrey Mokhov committed
13
14
import Switches
import Expression
15

16
17
18
19
20
-- Build results will be placed into a target directory with the following
-- typical structure:
-- * build/           : contains compiled object code
-- * doc/             : produced by haddock
-- * package-data.mk  : contains output of ghc-cabal applied to pkgCabal
21
22
targetDirectory :: Stage -> Package -> FilePath
targetDirectory stage package
Andrey Mokhov's avatar
Andrey Mokhov committed
23
    | package == compiler = "stage" ++ show (fromEnum stage + 1)
24
25
    | stage   == Stage0   = "dist-boot"
    | otherwise           = "dist-install"
Andrey Mokhov's avatar
Andrey Mokhov committed
26

27
28
29
30
31
32
33
-- These are all packages we know about. Build rules will be generated for
-- all of them. However, not all of these packages will be built. For example,
-- package 'win32' is built only on Windows.
-- Settings/Packages.hs defines default conditions for building each package,
-- which can be overridden in UserSettings.hs.
knownPackages :: [Package]
knownPackages =
Andrey Mokhov's avatar
Andrey Mokhov committed
34
35
36
37
    [ array, base, binPackageDb, binary, bytestring, cabal, compiler
    , containers, deepseq, directory, filepath, ghcPrim, haskeline
    , hoopl, hpc, integerLibrary, parallel, pretty, primitive, process
    , stm, templateHaskell, terminfo, time, transformers, unix, win32, xhtml ]
38

39
-- Package definitions
Andrey Mokhov's avatar
Andrey Mokhov committed
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
array           = library  "array"
base            = library  "base"
binPackageDb    = library  "bin-package-db"
binary          = library  "binary"
bytestring      = library  "bytestring"
cabal           = library  "Cabal/Cabal" `setCabal` "Cabal.cabal"
compiler        = topLevel "compiler"    `setCabal` "ghc.cabal"
containers      = library  "containers"
deepseq         = library  "deepseq"
directory       = library  "directory"
filepath        = library  "filepath"
ghcPrim         = library  "ghc-prim"
haskeline       = library  "haskeline"
hoopl           = library  "hoopl"
hpc             = library  "hpc"
integerLibrary  = library  integerLibraryName `setCabal` integerLibraryCabal
parallel        = library  "parallel"
pretty          = library  "pretty"
primitive       = library  "primitive"
process         = library  "process"
stm             = library  "stm"
templateHaskell = library  "template-haskell"
terminfo        = library  "terminfo"
time            = library  "time"
transformers    = library  "transformers"
unix            = library  "unix"
win32           = library  "Win32"
xhtml           = library  "xhtml"
68

69
70
71
72
73
74
75
76
77
integerLibraryName :: String
integerLibraryName = case integerLibraryImpl of
    IntegerGmp    -> "integer-gmp"
    IntegerGmp2   -> "integer-gmp2"
    IntegerSimple -> "integer-simple"

-- see Note [Cabal name weirdness]
integerLibraryCabal :: FilePath
integerLibraryCabal = case integerLibraryImpl of
Andrey Mokhov's avatar
Andrey Mokhov committed
78
79
80
    IntegerGmp    -> "integer-gmp.cabal"
    IntegerGmp2   -> "integer-gmp.cabal" -- Indeed, why make life easier?
    IntegerSimple -> "integer-simple.cabal"
81
82

-- Custom configure settings for packages
83
customConfigureSettings :: Settings
Andrey Mokhov's avatar
Andrey Mokhov committed
84
customConfigureSettings = mconcat
Andrey Mokhov's avatar
Andrey Mokhov committed
85
86
87
88
    [ package integerLibrary ?
      windowsHost     ? appendSub "--configure-option" ["--with-intree-gmp"]
    , package base    ? appendSub "--flags" [integerLibraryName]
    , package ghcPrim ? appendSub "--flag"  ["include-ghc-prim"]]
89

90
-- Note [Cabal name weirdness]
91
92
-- Find out if we can move the contents to just Cabal/
-- What is Cabal/cabal-install? Do we need it?
93
-- A related question about gmp2 -- let's rename the cabal file?