Skip to content

Commit dd85035

Browse files
committed
Update Setup.hs for new x-optparse
1 parent 2f33a4d commit dd85035

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

Setup.hs

+34-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
#!/usr/bin/env runhaskell
22

3-
import Data.Char (isDigit)
4-
import Data.List (intercalate)
3+
import Data.Char (isDigit, toLower)
4+
import Data.Function (on)
5+
import Data.List (intercalate, sortBy)
56
import Data.Monoid ((<>))
67
import Data.Version (showVersion)
78

9+
import Distribution.InstalledPackageInfo
810
import Distribution.PackageDescription
9-
import Distribution.Verbosity
1011
import Distribution.Simple
1112
import Distribution.Simple.Setup (BuildFlags(..), ReplFlags(..), TestFlags(..), fromFlag)
1213
import Distribution.Simple.LocalBuildInfo
14+
import Distribution.Simple.PackageIndex
1315
import Distribution.Simple.BuildPaths (autogenModulesDir)
1416
import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile, rawSystemStdout)
17+
import Distribution.Verbosity
1518

1619
main :: IO ()
1720
main =
@@ -25,12 +28,15 @@ main =
2528
(sDistHook hooks) pd mlbi uh flags
2629
, buildHook = \pd lbi uh flags -> do
2730
genBuildInfo (fromFlag $ buildVerbosity flags) pd
31+
genDependencyInfo (fromFlag $ buildVerbosity flags) pd lbi
2832
(buildHook hooks) pd lbi uh flags
2933
, replHook = \pd lbi uh flags args -> do
3034
genBuildInfo (fromFlag $ replVerbosity flags) pd
35+
genDependencyInfo (fromFlag $ replVerbosity flags) pd lbi
3136
(replHook hooks) pd lbi uh flags args
3237
, testHook = \args pd lbi uh flags -> do
3338
genBuildInfo (fromFlag $ testVerbosity flags) pd
39+
genDependencyInfo (fromFlag $ testVerbosity flags) pd lbi
3440
(testHook hooks) args pd lbi uh flags
3541
}
3642

@@ -57,6 +63,31 @@ genBuildInfo verbosity pkg = do
5763
]
5864
rewriteFile targetText buildVersion
5965

66+
genDependencyInfo :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
67+
genDependencyInfo verbosity pkg info = do
68+
let
69+
(PackageName pname) = pkgName . package $ pkg
70+
name = "DependencyInfo_" ++ (map (\c -> if c == '-' then '_' else c) pname)
71+
targetHs = autogenModulesDir info ++ "/" ++ name ++ ".hs"
72+
render p =
73+
let
74+
n = unPackageName $ pkgName p
75+
v = intercalate "." . fmap show . versionBranch $ pkgVersion p
76+
in
77+
n ++ "-" ++ v
78+
deps = fmap (render . sourcePackageId) . allPackages $ installedPkgs info
79+
sdeps = sortBy (compare `on` fmap toLower) deps
80+
strs = flip fmap sdeps $ \d -> "\"" ++ d ++ "\""
81+
82+
createDirectoryIfMissingVerbose verbosity True (autogenModulesDir info)
83+
84+
rewriteFile targetHs $ unlines [
85+
"module " ++ name ++ " where"
86+
, "import Prelude"
87+
, "dependencyInfo :: [String]"
88+
, "dependencyInfo = [\n " ++ intercalate "\n , " strs ++ "\n ]"
89+
]
90+
6091
gitVersion :: Verbosity -> IO String
6192
gitVersion verbosity = do
6293
ver <- rawSystemStdout verbosity "git" ["log", "--pretty=format:%h", "-n", "1"]

0 commit comments

Comments
 (0)