@@ -25,43 +25,47 @@ def parsePackageSpec (ws : Workspace) (spec : String) : Except CliError Package
25
25
| none => throw <| CliError.unknownPackage spec
26
26
27
27
open Module in
28
- def resolveModuleTarget (ws : Workspace) (mod : Module) (facet : String ) : Except CliError OpaqueTarget :=
29
- if facet.isEmpty || facet == " bin" then
28
+ def resolveModuleTarget (ws : Workspace) (mod : Module) (facet : WfName ) : Except CliError OpaqueTarget :=
29
+ if facet.isAnonymous || facet == & ` bin then
30
30
return mod.facetTarget leanBinFacet
31
- else if facet == " ilean" then
31
+ else if facet == & ` ilean then
32
32
return mod.facetTarget ileanFacet
33
- else if facet == " olean" then
33
+ else if facet == & ` olean then
34
34
return mod.facetTarget oleanFacet
35
- else if facet == "c" then
35
+ else if facet == &`c then
36
36
return mod.facetTarget cFacet
37
- else if facet == "o" then
37
+ else if facet == &`o then
38
38
return mod.facetTarget oFacet
39
- else if facet == " dynlib" then
39
+ else if facet == & ` dynlib then
40
40
return mod.facetTarget dynlibFacet
41
41
else if let some config := ws.findModuleFacetConfig? facet then
42
- return mod.facetTarget config.name
42
+ if let some (.up ⟨_, h⟩) := config.result_eq_target? then
43
+ have := config.familyDefTarget h
44
+ return mod.facetTarget facet
45
+ else
46
+ throw <| CliError.nonTargetFacet "module" facet
43
47
else
44
48
throw <| CliError.unknownFacet "module" facet
45
49
46
- def resolveLibTarget (lib : LeanLib) (facet : String ) : Except CliError OpaqueTarget :=
47
- if facet.isEmpty || facet == " lean" || facet == "oleans" then
50
+ def resolveLibTarget (lib : LeanLib) (facet : WfName ) : Except CliError OpaqueTarget :=
51
+ if facet.isAnonymous || facet == & ` lean then
48
52
return lib.leanTarget
49
- else if facet == " static" then
53
+ else if facet == & ` static then
50
54
return lib.staticLibTarget |>.withoutInfo
51
- else if facet == " shared" then
55
+ else if facet == & ` shared then
52
56
return lib.sharedLibTarget |>.withoutInfo
53
57
else
54
58
throw <| CliError.unknownFacet "library" facet
55
59
56
- def resolveExeTarget (exe : LeanExe) (facet : String ) : Except CliError OpaqueTarget :=
57
- if facet.isEmpty || facet == " exe" then
60
+ def resolveExeTarget (exe : LeanExe) (facet : WfName ) : Except CliError OpaqueTarget :=
61
+ if facet.isAnonymous || facet == & ` exe then
58
62
return exe.target |>.withoutInfo
59
63
else
60
64
throw <| CliError.unknownFacet "executable" facet
61
65
62
- def resolveTargetInPackage (ws : Workspace) (pkg : Package) (target : Name ) (facet : String ) : Except CliError OpaqueTarget :=
66
+ def resolveTargetInPackage (ws : Workspace) (pkg : Package) (target : WfName ) (facet : WfName ) : Except CliError OpaqueTarget :=
63
67
if let some config := pkg.findTargetConfig? target then
64
- if !facet.isEmpty then
68
+ if !facet.isAnonymous then
65
69
throw <| CliError.invalidFacet target facet
66
70
else if h : pkg.name = config.package then
67
71
have : FamilyDef CustomData (pkg.name, config.name) (ActiveBuildTarget config.resultType) :=
@@ -72,7 +76,7 @@ def resolveTargetInPackage (ws : Workspace) (pkg : Package) (target : Name) (fac
72
76
else if let some exe := pkg.findLeanExe? target then
73
77
resolveExeTarget exe facet
74
78
else if let some lib := pkg.findExternLib? target then
75
- if facet.isEmpty then
79
+ if facet.isAnonymous then
76
80
return lib.target.withoutInfo
77
81
else
78
82
throw <| CliError.invalidFacet target facet
@@ -88,27 +92,31 @@ def resolveDefaultPackageTarget (ws : Workspace) (pkg : Package) : Except CliErr
88
92
return pkg.defaultTarget
89
93
else
90
94
return Target.collectOpaqueArray <| ←
91
- pkg.defaultTargets.mapM (resolveTargetInPackage ws pkg · "" )
95
+ pkg.defaultTargets.mapM (resolveTargetInPackage ws pkg · .anonymous )
92
96
93
- def resolvePackageTarget (ws : Workspace) (pkg : Package) (facet : String ) : Except CliError OpaqueTarget :=
94
- if facet.isEmpty then
97
+ def resolvePackageTarget (ws : Workspace) (pkg : Package) (facet : WfName ) : Except CliError OpaqueTarget :=
98
+ if facet.isAnonymous then
95
99
resolveDefaultPackageTarget ws pkg
96
- else if facet == " exe" || facet == "bin" then
100
+ else if facet == & ` exe then
97
101
return pkg.exeTarget.withoutInfo
98
- else if facet == " staticLib" then
102
+ else if facet == & ` staticLib then
99
103
return pkg.staticLibTarget.withoutInfo
100
- else if facet == " sharedLib" then
104
+ else if facet == & ` sharedLib then
101
105
return pkg.sharedLibTarget.withoutInfo
102
- else if facet == " leanLib" || facet == "oleans" then
106
+ else if facet == & ` leanLib then
103
107
return pkg.leanLibTarget.withoutInfo
104
108
else if let some config := ws.findPackageFacetConfig? facet then
105
- return pkg.facet config.name |>.target
109
+ if let some (.up ⟨_, h⟩) := config.result_eq_target? then
110
+ have := config.familyDefTarget h
111
+ return pkg.facet facet |>.target
112
+ else
113
+ throw <| CliError.nonTargetFacet "package" facet
106
114
else
107
115
throw <| CliError.unknownFacet "package" facet
108
116
109
- def resolveTargetInWorkspace (ws : Workspace) (target : Name) (facet : String ) : Except CliError OpaqueTarget :=
117
+ def resolveTargetInWorkspace (ws : Workspace) (target : Name) (facet : WfName ) : Except CliError OpaqueTarget :=
110
118
if let some (pkg, config) := ws.findTargetConfig? target then
111
- if !facet.isEmpty then
119
+ if !facet.isAnonymous then
112
120
throw <| CliError.invalidFacet config.name facet
113
121
else if h : pkg.name = config.package then
114
122
have : FamilyDef CustomData (pkg.name, config.name) (ActiveBuildTarget config.resultType) :=
@@ -119,7 +127,7 @@ def resolveTargetInWorkspace (ws : Workspace) (target : Name) (facet : String) :
119
127
else if let some exe := ws.findLeanExe? target then
120
128
resolveExeTarget exe facet
121
129
else if let some lib := ws.findExternLib? target then
122
- if facet.isEmpty then
130
+ if facet.isAnonymous then
123
131
return lib.target.withoutInfo
124
132
else
125
133
throw <| CliError.invalidFacet target facet
@@ -132,7 +140,7 @@ def resolveTargetInWorkspace (ws : Workspace) (target : Name) (facet : String) :
132
140
else
133
141
throw <| CliError.unknownTarget target
134
142
135
- def resolveTargetBaseSpec (ws : Workspace) (spec : String) (facet := "" ) : Except CliError OpaqueTarget := do
143
+ def resolveTargetBaseSpec (ws : Workspace) (spec : String) (facet : WfName ) : Except CliError OpaqueTarget := do
136
144
match spec.splitOn "/" with
137
145
| [spec] =>
138
146
if spec.isEmpty then
@@ -158,15 +166,15 @@ def resolveTargetBaseSpec (ws : Workspace) (spec : String) (facet := "") : Excep
158
166
else
159
167
throw <| CliError.unknownModule mod
160
168
else
161
- resolveTargetInPackage ws pkg spec facet
169
+ resolveTargetInPackage ws pkg (WfName.ofName targetSpec) facet
162
170
| _ =>
163
171
throw <| CliError.invalidTargetSpec spec '/'
164
172
165
173
def parseTargetSpec (ws : Workspace) (spec : String) : Except CliError OpaqueTarget := do
166
174
match spec.splitOn ":" with
167
175
| [spec] =>
168
- resolveTargetBaseSpec ws spec
176
+ resolveTargetBaseSpec ws spec .anonymous
169
177
| [rootSpec, facet] =>
170
- resolveTargetBaseSpec ws rootSpec facet
178
+ resolveTargetBaseSpec ws rootSpec (WfName.ofString facet)
171
179
| _ =>
172
180
throw <| CliError.invalidTargetSpec spec ':'
0 commit comments