Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / tools / nuget-hash-extractor / nuget-hash-extractor.cs
index b1fd6cf401de330583fd0de919574e9beccba118..56e150e8676726da9ab53b2aa99d4c174a137357 100644 (file)
@@ -33,7 +33,17 @@ class Driver {
                        LoadAndDump (et, version);
                }
        }
+
+       static bool dump_asm, dump_ver, dump_guids_for_msbuild;
        static void Main (string[] args) {
+
+               if (args.Length > 1) {
+                       dump_asm = args [1].Equals ("asm");
+                       dump_ver = args [1].Equals ("ver");
+                       dump_guids_for_msbuild = args [1].Equals ("guids_for_msbuild");
+               } else {
+                       dump_asm = true;
+               }
                foreach (var f in Directory.GetFiles (args [0], "*.nupkg")) {
                        DumpNuget (f);
                }
@@ -52,12 +62,13 @@ class Driver {
                var data = StreamToArray (entry.Open ());
                AppDomain ad = AppDomain.CreateDomain ("parse_" + ++domain_id);
                DoParse p = (DoParse)ad.CreateInstanceAndUnwrap (typeof (DoParse).Assembly.FullName, typeof (DoParse).FullName);
-               p.ParseAssembly (data, version, entry.Name, entry.FullName);
+               p.ParseAssembly (data, version, entry.Name, entry.FullName, dump_asm, dump_ver, dump_guids_for_msbuild);
                AppDomain.Unload (ad);
        }
 }
 
 class DoParse : MarshalByRefObject {
+
        static int Hash (string str) {
                int h = 5381;
         for (int i = 0;  i < str.Length; ++i)
@@ -72,6 +83,7 @@ class DoParse : MarshalByRefObject {
                case "System.Net.Http.dll": return "SYS_NET_HTTP";
                case "System.Text.Encoding.CodePages.dll": return "SYS_TEXT_ENC_CODEPAGES";
                case "System.Reflection.DispatchProxy.dll": return "SYS_REF_DISP_PROXY";
+               case "System.Threading.Overlapped.dll": return "SYS_THREADING_OVERLAPPED";
                default: throw new Exception ($"No idea what to do with {name}");
                }
        }
@@ -81,7 +93,7 @@ class DoParse : MarshalByRefObject {
                return parts[parts.Length - 2];
        }
 
-       public void ParseAssembly (byte[] data, string version, string name, string fullname) {
+       public void ParseAssembly (byte[] data, string version, string name, string fullname, bool dump_asm, bool dump_ver, bool dump_guids_for_msbuild) {
                var a = Assembly.ReflectionOnlyLoad (data);
                var m = a.GetModules ()[0];
                var id = m.ModuleVersionId.ToString ().ToUpper ();
@@ -89,6 +101,18 @@ class DoParse : MarshalByRefObject {
                var str = FileToEnum (name);
 
                string ver_str = version + " " + FileToMoniker (fullname);      
-               Console.WriteLine ($"IGNORED_ASSEMBLY (0x{hash_code}, {str}, \"{id}\", \"{ver_str}\"),");
+
+               if (dump_asm)
+                       Console.WriteLine ($"IGNORED_ASSEMBLY (0x{hash_code}, {str}, \"{id}\", \"{ver_str}\"),");
+
+               //IGNORED_ASM_VER (SYS_IO_COMPRESSION, 4, 1, 2, 0),
+               var ver = a.GetName ().Version;
+               if (dump_ver) {
+                       Console.WriteLine ($"IGNORED_ASM_VER ({str}, {ver.Major}, {ver.Minor}, {ver.Build}, {ver.Revision}),");
+               } else if (dump_guids_for_msbuild) {
+                       // This needs to be kept in sync with FilterDeniedAssemblies msbuild task in msbuild
+                       Console.WriteLine ($"{name},{id},{ver.Major},{ver.Minor},{ver.Build},{ver.Revision}");
+               }
+               
        }
-}
\ No newline at end of file
+}