File: Setup.hs

package info (click to toggle)
haskell-twitter-conduit 0.2.1-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 316 kB
  • ctags: 4
  • sloc: haskell: 2,247; makefile: 6
file content (46 lines) | stat: -rw-r--r-- 2,039 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env runhaskell

-- This code is mostly borrowed from
-- https://github.com/ekmett/lens/blob/4b032a0047f9ecf687947541211487c9d6244f3e/Setup.lhs

import Data.List (nub)
import Data.Version (showVersion)
import Distribution.Package (PackageName(PackageName), PackageId, InstalledPackageId, packageVersion, packageName)
import Distribution.PackageDescription (PackageDescription(), TestSuite(..))
import Distribution.Simple (defaultMainWithHooks, UserHooks(..), simpleUserHooks)
import Distribution.Simple.Utils (rewriteFile, createDirectoryIfMissingVerbose)
import Distribution.Simple.BuildPaths (autogenModulesDir)
import Distribution.Simple.Setup (BuildFlags(buildVerbosity), fromFlag)
import Distribution.Simple.LocalBuildInfo (withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps))
import Distribution.Verbosity (Verbosity)
import System.FilePath ((</>))

main :: IO ()
main = defaultMainWithHooks hooks

hooks :: UserHooks
hooks =
    simpleUserHooks
    { buildHook = \pkg lbi hooks flags -> do
           generateBuildModule (fromFlag (buildVerbosity flags)) pkg lbi
           buildHook simpleUserHooks pkg lbi hooks flags
    }

generateBuildModule :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
generateBuildModule verbosity pkg lbi = do
  let dir = autogenModulesDir lbi
  createDirectoryIfMissingVerbose verbosity True dir
  withLibLBI pkg lbi $ \_ libcfg ->
    withTestLBI pkg lbi $ \suite suitecfg ->
      rewriteFile (dir </> "Build_" ++ testName suite ++ ".hs") $ unlines
        [ "module Build_" ++ testName suite ++ " where"
        , "deps :: [String]"
        , "deps = " ++ show (formatdeps (testDeps libcfg suitecfg))
        ]
  where
    formatdeps = map (formatone . snd)
    formatone p = case packageName p of
      PackageName n -> n ++ "-" ++ showVersion (packageVersion p)

testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)]
testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys