@@ -5,13 +5,15 @@ import Data.List (intercalate)
5
5
import Data.Monoid ((<>) )
6
6
import Data.Version (showVersion )
7
7
8
+ import Distribution.InstalledPackageInfo
8
9
import Distribution.PackageDescription
9
- import Distribution.Verbosity
10
10
import Distribution.Simple
11
11
import Distribution.Simple.Setup (BuildFlags (.. ), ReplFlags (.. ), TestFlags (.. ), fromFlag )
12
12
import Distribution.Simple.LocalBuildInfo
13
+ import Distribution.Simple.PackageIndex
13
14
import Distribution.Simple.BuildPaths (autogenModulesDir )
14
15
import Distribution.Simple.Utils (createDirectoryIfMissingVerbose , rewriteFile , rawSystemStdout )
16
+ import Distribution.Verbosity
15
17
16
18
main :: IO ()
17
19
main =
@@ -25,12 +27,15 @@ main =
25
27
(sDistHook hooks) pd mlbi uh flags
26
28
, buildHook = \ pd lbi uh flags -> do
27
29
genBuildInfo (fromFlag $ buildVerbosity flags) pd
30
+ genDependencyInfo (fromFlag $ buildVerbosity flags) pd lbi
28
31
(buildHook hooks) pd lbi uh flags
29
32
, replHook = \ pd lbi uh flags args -> do
30
33
genBuildInfo (fromFlag $ replVerbosity flags) pd
34
+ genDependencyInfo (fromFlag $ replVerbosity flags) pd lbi
31
35
(replHook hooks) pd lbi uh flags args
32
36
, testHook = \ args pd lbi uh flags -> do
33
37
genBuildInfo (fromFlag $ testVerbosity flags) pd
38
+ genDependencyInfo (fromFlag $ testVerbosity flags) pd lbi
34
39
(testHook hooks) args pd lbi uh flags
35
40
}
36
41
@@ -57,6 +62,30 @@ genBuildInfo verbosity pkg = do
57
62
]
58
63
rewriteFile targetText buildVersion
59
64
65
+ genDependencyInfo :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
66
+ genDependencyInfo verbosity pkg info = do
67
+ let
68
+ (PackageName pname) = pkgName . package $ pkg
69
+ name = " DependencyInfo_" ++ (map (\ c -> if c == ' -' then ' _' else c) pname)
70
+ targetHs = autogenModulesDir info ++ " /" ++ name ++ " .hs"
71
+ render p =
72
+ let
73
+ n = unPackageName $ pkgName p
74
+ v = intercalate " ." . fmap show . versionBranch $ pkgVersion p
75
+ in
76
+ n ++ " -" ++ v
77
+ deps = fmap (render . sourcePackageId) . allPackages $ installedPkgs info
78
+ strs = flip fmap deps $ \ d -> " \" " ++ d ++ " \" "
79
+
80
+ createDirectoryIfMissingVerbose verbosity True (autogenModulesDir info)
81
+
82
+ rewriteFile targetHs $ unlines [
83
+ " module " ++ name ++ " where"
84
+ , " import Prelude"
85
+ , " dependencyInfo :: [String]"
86
+ , " dependencyInfo = [\n " ++ intercalate " \n , " strs ++ " \n ]"
87
+ ]
88
+
60
89
gitVersion :: Verbosity -> IO String
61
90
gitVersion verbosity = do
62
91
ver <- rawSystemStdout verbosity " git" [" log" , " --pretty=format:%h" , " -n" , " 1" ]
0 commit comments