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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
module ICurry.Build(
generateFlatCurryEdges, generateFlatCurryEdge,
generateICurryEdges, generateICurryEdge,
generateEdges,
tfcyRule, icyRule,
curryToFlatPath
) where
import List
import Maybe
import FilePath
import System.CurryPath
import ICurry.DependencyResolution
import ICurry.Files
import Ninja.Types
generateFlatCurryEdges :: [ModuleDep] -> [Decl]
generateFlatCurryEdges deps = map (generateFlatCurryEdge deps) deps
generateFlatCurryEdge :: [ModuleDep] -> ModuleDep -> Decl
generateFlatCurryEdge allDeps (ModuleDep modname path deps) =
Edge "tfcy" [curryToFlatPath modname path]
[]
[path]
(map transDep deps)
[]
[]
where
transDep d = curryToFlatPath d $
modulePath $
fromJust $
find ((d ==) . moduleName)
allDeps
curryToFlatPath :: String -> FilePath -> FilePath
curryToFlatPath [] p = replaceExtension p "tfcy"
curryToFlatPath m@(_:_) p = replaceExtension (inCurrySubdirModule m p) "tfcy"
generateICurryEdges :: FilePath -> [ModuleDep] -> [Decl]
generateICurryEdges prefix = map (generateICurryEdge prefix)
generateICurryEdge :: FilePath -> ModuleDep -> Decl
generateICurryEdge prefix (ModuleDep modname path deps) =
Edge "icy" [prefix </> modNameToPath modname <.> "icy"]
[prefix </> modNameToPath modname <.> "ictdeps"]
[curryToFlatPath modname path]
(map (\d -> prefix </> modNameToPath d <.> "ictdeps") deps)
[]
[]
generateEdges :: String
-> String
-> String
-> Bool
-> Maybe FilePath
-> FilePath
-> [ModuleDep]
-> [Decl]
generateEdges ruleName srcExt tgExt wantNeighborDep outPrefix prefix =
map generateEdge
where
generateEdge (ModuleDep modname path deps) =
Edge ruleName
[maybe prefix id outPrefix </> modNameToPath modname <.> tgExt]
[]
[prefix </> modNameToPath modname <.> srcExt]
(if wantNeighborDep
then (map (\d -> prefix </> modNameToPath d <.> tgExt) deps)
else [])
[]
[]
tfcyRule :: Decl
tfcyRule = Rule "tfcy"
[("command",
"kics2-frontend --typed-flat -i \"$$(realpath \"$$(dirname \"$$(which kics2-frontend)\")\")/../lib\" $in"
)]
icyRule :: FilePath -> Decl
icyRule path = Rule "icy"
[("command", "icurry f2i -I \"" ++ path ++ "\" $in $out")]
|