copied mono-api-diff.cs from mono-2-2 branch so new patch can be applied and history...
[mono.git] / mcs / tools / corcompare / gen-infos.rb
1 #!/usr/bin/env ruby
2
3 require 'ftools'
4
5 $gac = 'C:/WINDOWS/assembly/GAC_MSIL'
6 $fx =  'C:/WINDOWS/Microsoft.NET/Framework'
7
8 $fx1_1 = File.join $fx, "v1.1.4322"
9 $fx2_0 = File.join $fx, "v2.0.50727"
10 $fx3_0 = 'C:/Program Files/Reference Assemblies/Microsoft/Framework/v3.0'
11 $fx3_5 = 'C:/Program Files/Reference Assemblies/Microsoft/Framework/v3.5'
12 $fx4_0 = 'C:/Program Files/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.0'
13 $sl2_0 = 'C:/Program Files/Microsoft Silverlight/2.0.40115.0'
14 $sl2_0sdk = 'C:/Program Files/Microsoft SDKs/Silverlight/v2.0/Libraries/Client/'
15
16 $net_1_1 = [
17         "mscorlib",
18         "System",
19         "System.Data",
20         "System.Data.OracleClient",
21         "System.DirectoryServices",
22         "System.Drawing",
23         "System.Runtime.Remoting",
24         "System.Runtime.Serialization.Formatters.Soap",
25         "System.Security",
26         "System.ServiceProcess",
27         "System.Web",
28         "System.Web.Services",
29         "System.Windows.Forms",
30         "System.Xml",
31         "cscompmgd",
32         "Microsoft.VisualBasic",
33         "",
34         "System.Configuration.Install",
35         "System.Design",
36         "System.Drawing.Design",
37         "System.EnterpriseServices",
38         "System.Management",
39         "System.Messaging"
40 ]
41
42 $net_2_0 = [
43         "mscorlib",
44         "System",
45         "System.Configuration",
46         "System.Data",
47         "System.Data.OracleClient",
48         "System.DirectoryServices",
49         "System.Drawing",
50         "System.Runtime.Remoting",
51         "System.Runtime.Serialization.Formatters.Soap",
52         "System.Security",
53         "System.ServiceProcess",
54         "System.Transactions",
55         "System.Web",
56         "System.Web.Services",
57         "System.Windows.Forms",
58         "System.Xml",
59         "cscompmgd",
60         "Microsoft.VisualBasic",
61         "",
62         "Microsoft.Build.Engine",
63         "Microsoft.Build.Framework",
64         "Microsoft.Build.Tasks",
65         "Microsoft.Build.Utilities",
66         "",
67         "System.Configuration.Install",
68         "System.Design",
69         "System.Drawing.Design",
70         "System.EnterpriseServices",
71         "System.Management",
72         "System.Messaging",
73 ]
74
75 $net_3_0 = [
76         "PresentationCore",
77
78         "PresentationFramework",
79         "System.Speech",
80         "WindowsBase",
81         "",
82         "System.IdentityModel",
83         "System.IdentityModel.Selectors",
84         "System.IO.Log",
85         "System.Runtime.Serialization",
86         "System.ServiceModel",
87         "",
88         "System.Workflow.Activities",
89         "System.Workflow.ComponentModel",
90         "System.Workflow.Runtime",
91         "",
92         "PresentationBuildTasks",
93         "",
94         "PresentationFramework.Aero",
95         "PresentationFramework.Classic",
96         "PresentationFramework.Luna",
97         "PresentationFramework.Royale",
98         "ReachFramework",
99         "",
100         "System.Printing",
101 ]
102
103 $net_3_5 = [
104         "mscorlib",
105         "System",
106         "System.AddIn",
107         "System.AddIn.Contract",
108         "System.Configuration",
109         "System.Core",
110         "System.Configuration.Install",
111         "System.Data",
112         "System.Data.Linq",
113         "System.Data.OracleClient",
114         "System.DirectoryServices",
115         # "System.DirectoryServices.AccountManagement",
116         # "System.DirectoryServices.Protocols",
117         "System.Drawing",
118         "System.Net",
119         "System.Runtime.Remoting",
120         "System.Security",
121         "System.ServiceProcess",
122         "System.Transactions",
123         "System.Web",
124         "System.Web.Extensions",
125         "System.Web.Extensions.Design",
126         "System.Web.Mobile",
127         "System.Web.RegularExpressions",
128         "System.Web.Services",
129         "System.Windows.Forms",
130         "System.Xml",
131         "System.Xml.Linq",
132         "",
133         "System.Runtime.Serialization.Formatters.Soap",
134         "cscompmgd",
135         "Microsoft.VisualBasic",
136         "",
137         "Microsoft.Build.Engine",
138         "Microsoft.Build.Framework",
139         "Microsoft.Build.Tasks",
140         "Microsoft.Build.Utilities",
141         "",
142         "System.Configuration.Install",
143         "System.Design",
144         "System.Drawing.Design",
145         "System.EnterpriseServices",
146         "System.Management",
147         "System.Management.Instrumentation",
148         "System.Messaging",
149 ]
150
151 $net_4_0 = [
152         "mscorlib",
153
154         "Microsoft.Build.Conversion.v4.0",
155         "Microsoft.Build",
156         "Microsoft.Build.Engine",
157         "Microsoft.Build.Framework",
158         "Microsoft.Build.Tasks.v4.0",
159         "Microsoft.Build.Utilities.v4.0",
160         "Microsoft.CSharp",
161         "Microsoft.Data.Entity.Build.Tasks",
162         "Microsoft.JScript",
163         "Microsoft.VisualBasic.Compatibility.Data",
164         "Microsoft.VisualBasic.Compatibility",
165         "Microsoft.VisualBasic",
166 #       "Microsoft.VisualC.STLCLR",
167
168         "PresentationBuildTasks",
169         "PresentationCore",
170         "PresentationFramework.Aero",
171         "PresentationFramework.Classic",
172         "PresentationFramework",
173         "PresentationFramework.Luna",
174         "PresentationFramework.Royale",
175         "PresentationUI",
176         "ReachFramework",
177
178         "System.Activities",
179         "System.Activities.Core.Presentation",
180         "System.Activities.DurableInstancing",
181         "System.Activities.Presentation",
182         "System.AddIn.Contract",
183         "System.AddIn",
184         "System.ComponentModel.Composition",
185         "System.ComponentModel.DataAnnotations",
186         "System.configuration",
187         "System.Configuration.Install",
188         "System.Core",
189         "System.Data.DataSetExtensions",
190         "System.Data",
191         "System.Data.Entity.Design",
192         "System.Data.Entity",
193         "System.Data.Linq",
194         "System.Data.OracleClient",
195         "System.Data.Services.Client",
196         "System.Data.Services.Design",
197         "System.Data.Services",
198         "System.Data.SqlXml",
199         "System.Deployment",
200         "System.Design",
201         "System.Device",
202         "System.DirectoryServices.AccountManagement",
203         "System.DirectoryServices",
204         "System.DirectoryServices.Protocols",
205         "System",
206         "System.Drawing.Design",
207         "System.Drawing",
208         "System.Dynamic",
209         "System.EnterpriseServices",
210         "System.EnterpriseServices.Thunk",
211         "System.EnterpriseServices.Wrapper",
212         "System.IdentityModel",
213         "System.IdentityModel.Selectors",
214         "System.IO.Log",
215         "System.Management",
216         "System.Management.Instrumentation",
217         "System.Messaging",
218         "System.Net",
219         "System.Numerics",
220         "System.Printing",
221         "System.Runtime",
222         "System.Runtime.Caching",
223         "System.Runtime.Remoting",
224         "System.Runtime.Serialization",
225         "System.Runtime.Serialization.Formatters.Soap",
226         "System.Security",
227         "System.ServiceModel.Activation",
228         "System.ServiceModel.Activities",
229         "System.ServiceModel.Channels",
230         "System.ServiceModel.Discovery",
231         "System.ServiceModel",
232         "System.ServiceModel.Routing",
233         "System.ServiceModel.Web",
234         "System.ServiceProcess",
235         "System.Speech",
236         "System.Transactions",
237         "System.Web.Abstractions",
238         "System.Web.ApplicationServices",
239         "System.Web.DataVisualization.Design",
240         "System.Web.DataVisualization",
241         "System.Web",
242         "System.Web.DynamicData.Design",
243         "System.Web.DynamicData",
244         "System.Web.Entity.Design",
245         "System.Web.Entity",
246         "System.Web.Extensions.Design",
247         "System.Web.Extensions",
248         "System.Web.Mobile",
249         "System.Web.RegularExpressions",
250         "System.Web.Routing",
251         "System.Web.Services",
252         "System.Windows.Forms.DataVisualization.Design",
253         "System.Windows.Forms.DataVisualization",
254         "System.Windows.Forms",
255         "System.Windows.Presentation",
256         "System.Workflow.Activities",
257         "System.Workflow.ComponentModel",
258         "System.Workflow.Runtime",
259         "System.WorkflowServices",
260         "System.Xaml",
261         "System.Xaml.Hosting",
262         "System.XML",
263         "System.Xml.Linq",
264
265         "WindowsBase",
266         "XamlBuildTask"
267 ]
268
269 $sl_2_0 = [
270         "mscorlib",
271         "System.Windows",
272         "Microsoft.VisualBasic",
273         "System",
274         "System.Core",
275         "System.Net",
276         "System.Runtime.Serialization",
277         "System.ServiceModel",
278         "System.Windows.Browser",
279         "System.Xml",
280         "",
281         "System.Xml.Linq",
282         "System.Windows.Controls",
283         "System.Windows.Controls.Data",
284 ]
285
286 def locate(assembly, fxs = nil)
287         if fxs
288                 fxs.each do |fx|
289                         file = File.join fx, assembly + ".dll"
290                         return file if File.file?(file)
291                 end
292         end
293
294         gac = File.join $gac, assembly, "**", "*.dll"
295
296         glob = Dir.glob gac
297
298         return glob.first if glob and glob.length > 0
299 end
300
301 def delete(glob)
302         Dir.glob(glob).each do |file|
303                 File.delete file
304         end
305 end
306
307 def clean(pattern, allow_create = false)
308         if allow_create and not File.directory? "masterinfos"
309                 Dir.mkdir("masterinfos")
310                 return
311         end
312
313         delete(File.join("masterinfos", pattern))
314 end
315
316 def generate(location, assembly)
317         out = File.join "masterinfos", assembly + ".xml"
318         system("./mono-api-info.exe \"#{location}\" > #{out}")
319 end
320
321 def process(profile, assemblies, fxs = nil)
322         clean("*", true)
323
324         assemblies.each do |assembly|
325                 if assembly != nil and assembly.length > 0
326                         #puts assembly
327                         location = locate(assembly, fxs)
328                         if location
329                                 generate(location, assembly)
330                         else
331                                 puts "fail to locate " + assembly
332                         end
333                         #puts "   " + location if location
334                 end
335         end
336
337         clean("*.dll")
338
339         file = "masterinfos-#{profile}.tar"
340
341         system("tar -cf #{file} masterinfos")
342         system("gzip #{file}")
343
344         clean("*")
345
346         Dir.delete("masterinfos")
347 end
348
349 delete("*.tar.gz")
350
351 process("1.1", $net_1_1, [$fx1_1])
352 process("2.0", $net_2_0, [$fx2_0])
353 process("3.0", $net_3_0, [$fx3_0, $fx2_0])
354 process("3.5", $net_3_5, [$fx3_5, $fx2_0])
355 process("4.0", $net_4_0, [$fx4_0])
356 process("SL2", $sl_2_0, [$sl2_0, $sl2_0sdk])