@@ -17,11 +17,15 @@ module TypeSet = Set.Make (struct
1717 let compare = compare
1818end )
1919
20- let destdir = " autogen-out/src"
20+ let destdir = " autogen-out"
21+
22+ let srcdir = " autogen-out/src"
2123
2224let templdir = " templates"
2325
24- type cmdlet = {filename : string ; content : string }
26+ type cmdlet = {cmdletname : string ; content : string }
27+
28+ let cmdlets_to_export = ref []
2529
2630let api =
2731 Datamodel_utils. named_self := true ;
@@ -68,6 +72,21 @@ let maps = ref TypeSet.empty
6872let generated x =
6973 not (List. mem x.name [" blob" ; " session" ; " debug" ; " event" ; " vtpm" ])
7074
75+ let rec is_last x list =
76+ match list with
77+ | [] ->
78+ false
79+ | hd :: [] ->
80+ if hd = x then
81+ true
82+ else
83+ false
84+ | hd :: tl ->
85+ if hd = x then
86+ false
87+ else
88+ is_last x tl
89+
7190let rec main () =
7291 let json =
7392 `O
@@ -91,7 +110,7 @@ let rec main () =
91110 in
92111 render_file
93112 (" ConvertTo-XenRef.mustache" , " ConvertTo-XenRef.cs" )
94- json templdir destdir ;
113+ json templdir srcdir ;
95114
96115 http_actions
97116 |> List. filter (fun (_ , (_ , _ , sdk , _ , _ , _ )) -> sdk)
@@ -100,9 +119,45 @@ let rec main () =
100119 let filtered_classes = List. filter generated classes in
101120 let cmdlets = List. concat_map gen_cmdlets filtered_classes in
102121
103- List. iter (fun x -> write_file x.filename x.content) cmdlets ;
122+ List. iter (fun x -> write_file x.cmdletname x.content) cmdlets ;
104123
105- filtered_classes |> List. iter gen_destructor
124+ filtered_classes |> List. iter gen_destructor ;
125+
126+ cmdlets_to_export :=
127+ [
128+ " Connect-XenServer"
129+ ; " Disconnect-XenServer"
130+ ; " Get-XenSession"
131+ ; " Receive-XenPoolPatch"
132+ ; " Send-XenOemPatchStream"
133+ ; " Wait-XenTask"
134+ ; " ConvertTo-XenRef"
135+ ]
136+ @ ! cmdlets_to_export ;
137+
138+ cmdlets_to_export := List. sort String. compare ! cmdlets_to_export ;
139+
140+ let module_json =
141+ `O
142+ [
143+ ( " cmdlets_to_export"
144+ , `A
145+ (List. map
146+ (fun x ->
147+ `O
148+ [
149+ (" cmdlet_to_export" , `String x)
150+ ; (" is_last" , `Bool (is_last x ! cmdlets_to_export))
151+ ]
152+ )
153+ ! cmdlets_to_export
154+ )
155+ )
156+ ]
157+ in
158+ render_file
159+ (" XenServerPSModule.mustache" , " XenServerPSModule.psd1" )
160+ module_json templdir destdir
106161
107162(* ***************)
108163(* Http actions *)
@@ -161,9 +216,11 @@ and gen_http_action action =
161216 )
162217 ]
163218 in
219+ let cmdlet_name = sprintf " %s-Xen%s" commonVerb stem in
164220 render_file
165- (" HttpAction.mustache" , sprintf " %s-Xen%s.cs" commonVerb stem)
166- json templdir destdir
221+ (" HttpAction.mustache" , sprintf " %s.cs" cmdlet_name)
222+ json templdir srcdir ;
223+ cmdlets_to_export := cmdlet_name :: ! cmdlets_to_export
167224
168225(* ************************)
169226(* Autogenerated cmdlets *)
@@ -174,39 +231,41 @@ and gen_cmdlets obj =
174231
175232 let cmdlets =
176233 [
177- {filename = sprintf " Get-Xen%s.cs " stem; content= gen_class obj classname}
234+ {cmdletname = sprintf " Get-Xen%s" stem; content= gen_class obj classname}
178235 ; {
179- filename = sprintf " New-Xen%s.cs " stem
236+ cmdletname = sprintf " New-Xen%s" stem
180237 ; content=
181238 gen_constructor obj classname (List. filter is_constructor messages)
182239 }
183240 ; {
184- filename = sprintf " Remove-Xen%sProperty.cs " stem
241+ cmdletname = sprintf " Remove-Xen%sProperty" stem
185242 ; content= gen_remover obj classname (List. filter is_remover messages)
186243 }
187244 ; {
188- filename = sprintf " Add-Xen%s.cs " stem
245+ cmdletname = sprintf " Add-Xen%s" stem
189246 ; content= gen_adder obj classname (List. filter is_adder messages)
190247 }
191248 ; {
192- filename = sprintf " Set-Xen%s.cs " stem
249+ cmdletname = sprintf " Set-Xen%s" stem
193250 ; content= gen_setter obj classname (List. filter is_setter messages)
194251 }
195252 ; {
196- filename = sprintf " Get-Xen%sProperty.cs " stem
253+ cmdletname = sprintf " Get-Xen%sProperty" stem
197254 ; content= gen_getter obj classname (List. filter is_getter messages)
198255 }
199256 ; {
200- filename = sprintf " Invoke-Xen%s.cs " stem
257+ cmdletname = sprintf " Invoke-Xen%s" stem
201258 ; content= gen_invoker obj classname (List. filter is_invoke messages)
202259 }
203260 ]
204261 in
205262
206263 cmdlets |> List. filter (fun x -> x.content <> " " )
207264
208- and write_file filename content =
209- let fn = Filename. concat destdir filename in
265+ and write_file cmdletname content =
266+ let filename = sprintf " %s.cs" cmdletname in
267+ let fn = Filename. concat srcdir filename in
268+ cmdlets_to_export := cmdletname :: ! cmdlets_to_export ;
210269 with_output fn (fun x -> output_string x content)
211270
212271(* ********************************)
@@ -617,11 +676,13 @@ and gen_destructor obj =
617676 ; (" has_name" , `Bool (has_name obj))
618677 ]
619678 in
679+ let cmdlet_name =
680+ sprintf " Remove-Xen%s" (ocaml_class_to_csharp_class classname)
681+ in
620682 render_file
621- ( " Remove-XenObject.mustache"
622- , sprintf " Remove-Xen%s.cs" (ocaml_class_to_csharp_class classname)
623- )
624- json templdir destdir
683+ (" Remove-XenObject.mustache" , sprintf " %s.cs" cmdlet_name)
684+ json templdir srcdir ;
685+ cmdlets_to_export := cmdlet_name :: ! cmdlets_to_export
625686 | _ ->
626687 assert false
627688
0 commit comments