[svn] r6274: nemerle/trunk/ncc/generation/HierarchyEmitter.n

malekith svnadmin at nemerle.org
Sun May 14 18:37:10 CEST 2006


Log:
Use internal mono API for embedding resources on mono and .NET 2.0 when available.

Author: malekith
Date: Sun May 14 18:37:10 2006
New Revision: 6274

Modified:
   nemerle/trunk/ncc/generation/HierarchyEmitter.n

Modified: nemerle/trunk/ncc/generation/HierarchyEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/HierarchyEmitter.n	(original)
+++ nemerle/trunk/ncc/generation/HierarchyEmitter.n	Sun May 14 18:37:10 2006
@@ -137,11 +137,32 @@
 
       /* we can embed resources only on mono or .NET 2.0 */
       foreach (element in Options.EmbeddedResources) {
-        def (file, _) = escape_resource (element);
+        def (file, name) = escape_resource (element);
         try {
           if (File.Exists (file)) {
             def fs = File.OpenRead (file);
-            _module_builder.DefineManifestResource(element, fs, ResourceAttributes.Public);
+
+            def meth = _module_builder.GetType ().GetMethod ("DefineManifestResource");
+            if (meth == null) {
+              def res = array (fs.Length :> int);
+              def loop (pos) {
+                if (res.Length == pos) {}
+                else
+                  loop (pos + fs.Read(res, pos, res.Length - pos));
+              }
+              loop (0);
+
+              def meth = _assembly_builder.GetType ()
+                .GetMethod ("EmbedResource", BindingFlags.NonPublic|BindingFlags.Instance);
+              if (meth == null)
+                Message.Error ("cannot find API for saving resources");
+              else
+                _ = meth.Invoke (_assembly_builder, array [name : object, res, 
+                                                           ResourceAttributes.Public]);
+            } else {
+              _ = meth.Invoke (_module_builder, array [element : object, 
+                                                       fs, ResourceAttributes.Public])
+            }
           }
           else
             Message.Error ("Could not find resource " + file);



More information about the svn mailing list