/
generate-frameworks.csharp
executable file
·74 lines (63 loc) · 2.27 KB
/
generate-frameworks.csharp
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
#!/usr/bin/env /Library/Frameworks/Mono.framework/Commands/csharp -s
using System.IO;
using System.Text;
try {
var args = Args;
var actualArgumentCount = 6;
if (args.Length != actualArgumentCount) {
Console.WriteLine ($"Need {actualArgumentCount} arguments, got {args.Length} arguments");
Environment.Exit (1);
return;
}
var csharpOutput = args [0];
args = args.Skip (1).ToArray ();
var iosframeworks = args [0].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var macosframeworks = args [1].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var watchosframeworks = args [2].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var tvosframeworks = args [3].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var maccatalystframeworks = args [4].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var allframeworks = new string [] [] {
iosframeworks,
macosframeworks,
watchosframeworks,
tvosframeworks,
maccatalystframeworks,
};
var names = new string [] {
"iosframeworks",
"macosframeworks",
"watchosframeworks",
"tvosframeworks",
"maccatalystframeworks",
};
var all = new HashSet<string> ();
foreach (var fws in allframeworks)
foreach (var fw in fws)
all.Add (fw);
var sb = new StringBuilder ();
sb.AppendLine ("using System.Collections.Generic;");
sb.AppendLine ();
sb.AppendLine ("partial class Frameworks {");
for (int i = 0; i < names.Length; i++) {
var name = names [i];
var frameworks = allframeworks [i];
sb.AppendLine ($"\t// GENERATED FILE - DO NOT EDIT");
sb.AppendLine ($"\tinternal readonly HashSet<string> {name} = new HashSet<string> {{");
foreach (var fw in frameworks.OrderBy (v => v)) {
sb.AppendLine ($"\t\t\"{fw}\",");
}
sb.AppendLine ("\t};");
}
var allArray = all.ToArray ();
Array.Sort (allArray);
foreach (var fw in allArray)
sb.AppendLine ($"\tbool? _{fw.Replace (".", "")};");
foreach (var fw in allArray)
sb.AppendLine ($"\tpublic bool Have{fw} {{ get {{ if (!_{fw}.HasValue) _{fw} = GetValue (\"{fw}\"); return _{fw}.Value; }} }}");
sb.AppendLine ("}");
File.WriteAllText (csharpOutput, sb.ToString ());
Environment.Exit (0);
} catch (Exception e) {
Console.WriteLine ("Failed: {0}", e);
Environment.Exit (1);
}