3 // grep -h "#if" /svn
/mono
/external
/rx
/Rx
/NET
/Source
/System.Reactive.
*/*.cs
/svn
/mono
/external
/rx
/Rx
/NET
/Source
/System.Reactive.
*/*/*.cs
/svn
/mono
/external
/rx
/Rx
/NET
/Source
/System.Reactive.
*/*/*/*.cs |
sort |
uniq
5 using System.Diagnostics
;
8 using System.Xml.XPath
;
10 var template_android
= File.ReadAllText
("project_template_android.txt");
11 var template_ios
= File.ReadAllText
("project_template_ios.txt");
13 var guids_android
= new string
[] {
15 "5F7F40B6-19D3-48C7-8E15-AE1F976F60E1", "065F2411-7610-4AD6-9513-A1EFFCE576C0",
16 "C4037060-1692-4423-B29E-76F3A74A72A5",
18 "4fa878dc-6e88-43c4-b37b-8c1151cec56f", "fef62c23-10cd-4def-a5ae-54a8b309e970", "d263c126-9d3c-4299-a0c1-f25c703d07c9", "ec704077-ea31-4852-ad24-6732244174c0", "9360e845-d79d-4288-9100-63a80fad2bf0", "00dc3654-e373-4e3f-80fe-109f795adf1f", "e662282b-4341-4f86-aaaa-a942335b47fb", "a153a379-670c-42c2-9018-fc0d933a4f7f", "b29d45a6-0b8c-49c5-82a2-457e4d3cbc33", "3a3b5e76-029f-46b0-9ccf-fefe06eb61e7", "328e4291-92f0-49de-a0fd-fbc714a47f53", "cb2ab716-bfcb-43bc-a03b-a3bda427746c", "73c5260f-8972-4e7c-822b-1a3a0358fa0b" };
19 var guids_ios
= new string
[] {
21 "AD6FCBE9-0F6A-4F27-8147-17AB1C8799A2", "220AD2F1-FEE9-4514-8F36-6BE37F0AAD7F",
22 "4779C7FF-6969-4715-9389-DF6C43655D6F",
24 "6f2675f5-fcc7-4a28-9dc3-657b4613dcc5", "a67f34b5-75c1-4319-a93e-93df87e728a4", "79a43ceb-1a18-49ea-aac4-b72b9c90bf5a", "0a977063-0796-4cd4-84b8-aedb2d648b26", "b41cb61a-dca0-4539-8f99-7b3499e18e6d", "24f995bd-7075-489c-b7a5-7fde08c304b6", "894021ec-14fb-430a-8572-bea9569ae435", "92857c8e-0e83-4d02-a831-8af3fed43336", "912e14a2-7bdf-4600-8d55-e8c4f33a2063", "0f6c2933-8d0c-41e6-9f77-e8714ab8c4ab", "1a476d81-f91a-448f-8790-f55498e013d2", "47d85a91-e8e2-4088-bf5a-68a161754d48", "45377009-1425-47fc-985e-05f98022f9e3" };
26 var asses
= new string
[] {
28 "System.Interactive.Async",
29 "System.Interactive.Providers",
30 "System.Reactive.Interfaces",
31 "System.Reactive.Core",
32 "System.Reactive.PlatformServices",
33 "System.Reactive.Linq",
34 "System.Reactive.Debugger", // maybe needed
for testing assembly.
35 "System.Reactive.Experimental", // needed
for testing assembly.
36 "System.Reactive.Providers",
37 "System.Reactive.Runtime.Remoting",
38 "System.Reactive.Windows.Forms",
39 "System.Reactive.Windows.Threading",
40 "System.Reactive.Observable.Aliases",
41 "Microsoft.Reactive.Testing",
42 "Tests.System.Reactive",
45 var excluded_android_asses
= new string
[] {
46 "System.Reactive.Windows.Forms",
47 "System.Reactive.Windows.Threading",
49 var excluded_ios_asses
= new string
[] {
50 "System.Reactive.Providers",
51 "System.Reactive.Windows.Forms",
52 "System.Reactive.Windows.Threading",
55 var blacklist
= new string
[] {
56 // WPF Dispatcher.Invoke
() is not implemented.
57 "DispatcherSchedulerTest.cs",
58 // This is not limited to Dispatcher
, but many of them are relevant to it
, or Winforms
(we filter it out by not defining HAS_WINFORMS
)
59 "ObservableConcurrencyTest.cs",
63 foreach
(var ass
in asses
) {
65 var ix
= ass.Contains
("Interactive");
67 var dstAndroid
= ix ?
"../../external/rx/Ix/NET/Ix_Xamarin/android" :
68 "../../external/rx/Rx/NET/Source/Rx_Xamarin/android";
69 var dstIOS
= ix ?
"../../external/rx/Ix/NET/Ix_Xamarin/iOS" :
70 "../../external/rx/Rx/NET/Source/Rx_Xamarin/iOS";
73 var monoass
= ass
== "Microsoft.Reactive.Testing" ?
74 "Mono.Reactive.Testing" : ass
;
75 var basePath
= ix ?
"../../external/rx/Ix/NET" :
76 "../../external/rx/Rx/NET/Source";
77 var csproj
= Path.Combine
(basePath
, ass
, ass
+ ".csproj");
78 var pathPrefix
= ass
== "Tests.System.Reactive" ?
"../" : "";
80 var category
= ix ?
"Ix_Xamarin" : "Rx_Xamarin";
81 var category2
= ix ?
"ix" : "rx";
82 var android_dir
= Path.GetFullPath
(Path.Combine
(csproj
, "..", "..", category
, "android", category2
, monoass
));
83 var ios_dir
= Path.GetFullPath
(Path.Combine
(csproj
, "..", "..", category
, "iOS", category2
, monoass
));
84 var android_proj
= Path.Combine
(android_dir
, "android_" + monoass
+ ".csproj");
85 var ios_proj
= Path.Combine
(ios_dir
, "ios_" + monoass
+ ".csproj");
86 if (!Directory.Exists
(android_dir
))
87 Directory.CreateDirectory
(android_dir
);
88 if (!Directory.Exists
(ios_dir
))
89 Directory.CreateDirectory
(ios_dir
);
91 // tests are built under Mono.Reactive.Testing directory.
94 monoass
== "Tests.System.Reactive" ?
95 Path.Combine
("Mono.Reactive.Testing", "Mono.Reactive.Testing_test.dll.sources") :
96 Path.Combine
(monoass
, monoass
+ ".dll.sources");
98 var assdir
= Path.Combine
(monoass
, "Assembly");
99 var assinfo
= Path.Combine
(monoass
, "Assembly", "AssemblyInfo.cs");
101 var projectRefs
= "";
103 if (monoass
!= "Tests.System.Reactive") {
104 if (!Directory.Exists
(assdir
))
105 Directory.CreateDirectory
(assdir
);
106 using
(var tw
= File.CreateText
(assinfo
)) {
107 //tw.WriteLine
("[assembly:System.Reflection.AssemblyVersion (\"2.1.30214.0\")]");
108 //tw.WriteLine
("[assembly:System.Reflection.AssemblyFileVersion (\"2.1.30214.0\")]");
113 var projectRefsXml
= "";
114 var resourcesXml
= "";
116 var doc
= XDocument.Load
(csproj
);
117 var rootNS
= doc.XPathSelectElement
("//*[local-name()='RootNamespace']").Value
;
118 var guid
= doc.XPathSelectElement
("//*[local-name()='ProjectGuid']").Value
;
120 foreach
(var e
in doc.XPathSelectElements
("//*[local-name()='ProjectReference']"))
123 Console.WriteLine
("Writing " + sources
+ " ...");
124 using
(var tw
= File.CreateText
(sources
)) {
125 if (monoass
!= "Tests.System.Reactive")
126 tw.WriteLine
("Assembly/AssemblyInfo.cs");
127 foreach
(var path
in doc.XPathSelectElements
("//*[local-name()='Compile']")
128 .Select
(el
=> el.Attribute
("Include").Value
)
129 .Select
(s
=> s.Replace
("\\", "/"))) {
130 if (!blacklist.Any
(b
=> path.Contains
(b
))) {
131 var p
= Path.Combine
(ass
, path
);
132 var p2
= Path.Combine
("..", basePath
, ass
, path
);
133 tw.WriteLine
(Path.Combine
(pathPrefix
, p2
));
134 sourcesXml
+= " <Compile Include=\"..\\..\\..\\..\\" + p.Replace
('/', '\\') + "\">\n <Link>" + path.Replace
('/', '\\') + "</Link>\n </Compile>\n";
139 Console.WriteLine
("Writing more_build_args...");
140 var argsPath
= Path.Combine
(Path.GetDirectoryName
(sources
), "more_build_args");
141 using
(var tw
= File.CreateText
(argsPath
)) {
142 if (ass.StartsWith
("System")) {
143 tw.WriteLine
("-d:SIGNED");
144 tw.WriteLine
("-delaysign");
145 tw.WriteLine
("-keyfile:../reactive.pub");
148 foreach
(var path
in doc.XPathSelectElements
("//*[local-name()='EmbeddedResource']")) {
149 var res
= path.Attribute
("Include").Value
;
150 var resx
= Path.Combine
(basePath
, ass
, res
);
151 var resFileName
= res.Replace
("resx", "resources");
152 var resxDest
= Path.Combine
(monoass
, res
);
153 var resPath
= Path.Combine
(monoass
, resFileName
);
154 if (File.Exists
(resxDest
))
155 File.Delete
(resxDest
);
156 File.Copy
(resx
, resxDest
);
157 //Process.Start
("resgen", String.Format
("{0} {1}", resx
, resPath
));
158 tw.WriteLine
("-resource:{0},{1}.{2}", resFileName
, rootNS
, resFileName
);
159 var p
= Path.Combine
("..", basePath
, ass
, res
);
160 resourcesXml
+= " <EmbeddedResource Include='..\\..\\..\\..\\..\\..\\" + p
+ "'>\n <Link>" + res
+ "</Link>\n </EmbeddedResource>\n";
163 foreach
(var f
in new string
[] { android_proj
, ios_proj
}) {
165 string template
, prj_prefix
, nunitProjRef
, nunitRef
;
166 var androidNUnit
= "<ProjectReference Include=\"..\\..\\Andr.Unit\\Android.NUnitLite\\Android.NUnitLite.csproj\"><Project>{6A005891-A3D6-4398-A729-F645397D573A}</Project><Name>Android.NUnitLite</Name></ProjectReference>";
167 if (f
== android_proj
) {
168 prj_guid
= guids_android
[guid_idx
].ToUpper
();
169 template
= template_android
;
170 prj_prefix
="android_";
171 nunitProjRef
= ass.Contains
("Test") ? androidNUnit
: "";
174 prj_guid
= guids_ios
[guid_idx
].ToUpper
();
175 template
= template_ios
;
178 nunitRef
= ass.Contains
("Test") ?
"<Reference Include='MonoTouch.NUnitLite' />" : "";
180 using
(var tw
= File.CreateText
(f
)) {
182 .Replace
("PROJECT_GUID_GOES_HERE", '{' + prj_guid
+ '}')
183 .Replace
("ASSEMBLY_NAME_GOES_HERE", monoass
)
184 .Replace
("OPTIONAL_ANDROID_NUNITLITE", nunitProjRef
)
185 .Replace
("OPTIONAL_MONOTOUCH_NUNITLITE", nunitRef
)
186 .Replace
("PROJECT_REFERENCES_GO_HERE",
188 .Replace
(" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"", "")
189 .Replace
("Microsoft.Reactive.Testing", "Mono.Reactive.Testing")
190 .Replace
("System", prj_prefix
+ "System")
191 .Replace
("Mono", prj_prefix
+ "Mono")
192 .Replace
("Include=\"..\\" + prj_prefix
, "Include=\"..\\"))
193 .Replace
("RESOURCES_GO_HERE", resourcesXml.Replace
('\\', f
== ios_proj ?
'/' : '\\')) // whoa
, BACKSLASH doesn
't work only on android on MD/mac...!
194 .Replace ("SOURCES_GO_HERE", sourcesXml.Replace ('\\', f == ios_proj ? '/' : '\\'))); // whoa, BACKSLASH doesn't work only on android on MD
/mac...
!