Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadek Doulik <rodo@xamarin.com>2015-05-28 22:30:41 +0300
committerRadek Doulik <rodo@xamarin.com>2015-06-05 14:53:56 +0300
commitdf5314261a10bd8b604abe6583053ce4c816281a (patch)
tree62d03c92644adf10055db1b0b682107d79de9bc3
parent5b6de39a5034db82997b03ee58e76bfb462c7357 (diff)
Support linker descriptor files embedded in the assemblies being linked.
[merged from monodroid by rodo] commit 3e19b22eb24ff9faeebe1ace7461d8f91f807041 Author: Alex Rønne Petersen <alexrp@xamarin.com> Date: Mon Jul 1 15:34:26 2013 +0200 This is in addition to those files that are already embedded in the linker assembly itself (such as mscorlib.xml). People can use this feature to tell the linker that certain methods/fields/types must be kept if a particular assembly is being referenced by embedding a descriptor file in it.
-rw-r--r--mcs/tools/linker/Mono.Linker.Steps/BlacklistStep.cs22
1 files changed, 22 insertions, 0 deletions
diff --git a/mcs/tools/linker/Mono.Linker.Steps/BlacklistStep.cs b/mcs/tools/linker/Mono.Linker.Steps/BlacklistStep.cs
index 08761871fd6..47864f7917e 100644
--- a/mcs/tools/linker/Mono.Linker.Steps/BlacklistStep.cs
+++ b/mcs/tools/linker/Mono.Linker.Steps/BlacklistStep.cs
@@ -26,6 +26,7 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+using System.Linq;
using System.IO;
using System.Reflection;
using System.Xml.XPath;
@@ -49,6 +50,15 @@ namespace Mono.Linker.Steps {
Context.Pipeline.AddStepAfter (typeof (TypeMapStep), GetResolveStep (name));
}
+
+ foreach (var rsc in Context.GetAssemblies ()
+ .SelectMany (asm => asm.Modules)
+ .SelectMany (mod => mod.Resources)
+ .Where (res => res.ResourceType == ResourceType.Embedded)
+ .Where (res => IsReferenced (GetAssemblyName (res.Name)))
+ .Cast<EmbeddedResource> ()) {
+ Context.Pipeline.AddStepAfter (typeof (TypeMapStep), GetExternalResolveStep (rsc));
+ }
}
static string GetAssemblyName (string descriptor)
@@ -69,11 +79,23 @@ namespace Mono.Linker.Steps {
return false;
}
+ static ResolveFromXmlStep GetExternalResolveStep (EmbeddedResource resource)
+ {
+ return new ResolveFromXmlStep (GetExternalDescriptor (resource));
+ }
+
static ResolveFromXmlStep GetResolveStep (string descriptor)
{
return new ResolveFromXmlStep (GetDescriptor (descriptor));
}
+ static XPathDocument GetExternalDescriptor (EmbeddedResource resource)
+ {
+ using (var sr = new StreamReader (resource.GetResourceStream ())) {
+ return new XPathDocument (new StringReader (sr.ReadToEnd ()));
+ }
+ }
+
static XPathDocument GetDescriptor (string descriptor)
{
using (StreamReader sr = new StreamReader (GetResource (descriptor))) {