diff options
-rw-r--r-- | ikvm.build | 2 | ||||
-rw-r--r-- | openjdk/dependencies.txt | 108 | ||||
-rw-r--r-- | openjdk/openjdk.build | 2 | ||||
-rw-r--r-- | tools/depcheck.cs | 90 | ||||
-rw-r--r-- | tools/tools.build | 6 |
5 files changed, 208 insertions, 0 deletions
@@ -40,8 +40,10 @@ <include name="bin-x86/ikvm-native.dll" /> <include name="bin-x86/JVM.DLL" /> <include name="tools/asmref.exe" /> + <include name="tools/depcheck.exe" /> <include name="tools/pubkey.exe" /> <include name="tools/pubkey.txt" /> + <include name="tools/updbaseaddresses.exe" /> <include name="native/Release-x64/ikvm-native.dll" /> <include name="native/Release-x64/*.obj" /> <include name="native/Release-x86/ikvm-native.dll" /> diff --git a/openjdk/dependencies.txt b/openjdk/dependencies.txt new file mode 100644 index 00000000..208cefa3 --- /dev/null +++ b/openjdk/dependencies.txt @@ -0,0 +1,108 @@ +# This file declares the dependencies of the OpenJDK assemblies. +# It exists to prevent accidentally introducing new dependencies. +# +# Note that mscorlib, System, IKVM.Runtime and IKVM.OpenJDK.Core are not very interesting, +# so these dependencies are ignored by the dependency checker. + +IKVM.OpenJDK.Core +->System.Core +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.Security +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.XML.API + +IKVM.OpenJDK.Corba +->IKVM.OpenJDK.Misc +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.SwingAWT +->IKVM.OpenJDK.Text + +IKVM.OpenJDK.XML.API + +IKVM.OpenJDK.XML.Parse +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.Misc + +IKVM.OpenJDK.XML.Transform +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.XML.Parse +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Text + +IKVM.OpenJDK.XML.Bind +->IKVM.OpenJDK.Misc +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.SwingAWT +->IKVM.OpenJDK.XML.RelaxNG + +IKVM.OpenJDK.XML.WebServices +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.Misc +->IKVM.OpenJDK.SwingAWT +->IKVM.OpenJDK.XML.Parse +->IKVM.OpenJDK.XML.Bind +->IKVM.OpenJDK.Security + +IKVM.OpenJDK.XML.RelaxNG +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Text + +IKVM.OpenJDK.XML.Crypto +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Security +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.XML.Parse + +IKVM.OpenJDK.SwingAWT +->System.Drawing +->IKVM.OpenJDK.Misc +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Charsets + +IKVM.OpenJDK.Charsets + +IKVM.OpenJDK.Util +->IKVM.OpenJDK.Security +->IKVM.OpenJDK.Misc +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.XML.API + +IKVM.OpenJDK.Text +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.SwingAWT + +IKVM.OpenJDK.Security +->IKVM.OpenJDK.Misc +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.SwingAWT +->IKVM.OpenJDK.Util + +IKVM.OpenJDK.Management +->IKVM.OpenJDK.Misc +->IKVM.OpenJDK.Security +->IKVM.OpenJDK.Corba +->IKVM.OpenJDK.Util + +IKVM.OpenJDK.Misc +->System.Drawing +->IKVM.OpenJDK.SwingAWT +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Util +->IKVM.OpenJDK.Corba +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.Security + +IKVM.OpenJDK.Jdbc +->System.Data +->IKVM.OpenJDK.Text +->IKVM.OpenJDK.Misc +->IKVM.OpenJDK.XML.API +->IKVM.OpenJDK.Util diff --git a/openjdk/openjdk.build b/openjdk/openjdk.build index f5ef4160..eebc5c80 100644 --- a/openjdk/openjdk.build +++ b/openjdk/openjdk.build @@ -142,6 +142,8 @@ <exec program="peverify" commandline="-nologo IKVM.OpenJDK.XML.Transform.dll" /> <exec program="peverify" commandline="-nologo IKVM.OpenJDK.XML.WebServices.dll" /> </if> + <!-- make sure that we haven't accidentally introduced new dependencies --> + <exec program="${project::get-base-directory()}/../tools/depcheck.exe" commandline="response.txt dependencies.txt" useruntimeengine="true" /> <copy todir="../bin"> <fileset basedir="."> <include name="IKVM.OpenJDK.*.dll" /> diff --git a/tools/depcheck.cs b/tools/depcheck.cs new file mode 100644 index 00000000..ee86e43a --- /dev/null +++ b/tools/depcheck.cs @@ -0,0 +1,90 @@ +/* + Copyright (C) 2009 Jeroen Frijters + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jeroen Frijters + jeroen@frijters.net + +*/ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Reflection; + +class DependencyChecker +{ + static int Main(string[] args) + { + Dictionary<string, List<string>> deps = new Dictionary<string, List<string>>(); + string dep = null; + foreach (string line in File.ReadAllLines(args[1])) + { + if (line.Trim().Length == 0 || line.StartsWith("#")) + { + // comment + } + else if (line.StartsWith("->")) + { + deps[dep].Add(line.Substring(2)); + } + else + { + dep = line; + deps.Add(dep, new List<string>()); + } + } + List<string> whitelist = new List<string>(new string[] { "mscorlib", "System", "IKVM.Runtime", "IKVM.OpenJDK.Core" }); + bool fail = false; + foreach (string line in File.ReadAllLines(args[0])) + { + if (line.Contains("-out:")) + { + string file = line.Trim().Substring(5); + Assembly asm = Assembly.ReflectionOnlyLoadFrom(Path.Combine(Path.GetDirectoryName(args[0]), file)); + if (!deps.ContainsKey(asm.GetName().Name)) + { + fail = true; + Console.WriteLine(asm.GetName().Name); + foreach (AssemblyName asmdep in asm.GetReferencedAssemblies()) + { + if (!whitelist.Contains(asmdep.Name)) + { + Console.WriteLine("->{0}", asmdep.Name); + } + } + } + else + { + foreach (AssemblyName asmdep in asm.GetReferencedAssemblies()) + { + if (!whitelist.Contains(asmdep.Name)) + { + if (!deps[asm.GetName().Name].Contains(asmdep.Name)) + { + fail = true; + Console.WriteLine("Error: Assembly {0} has an undeclared dependency on {1}", asm.GetName().Name, asmdep.Name); + } + } + } + } + } + } + return fail ? 1 : 0; + } +} diff --git a/tools/tools.build b/tools/tools.build index df76059a..aa4d56ab 100644 --- a/tools/tools.build +++ b/tools/tools.build @@ -13,6 +13,12 @@ </sources> </csc> + <csc target="exe" output="depcheck.exe" optimize="true"> + <sources> + <include name="depcheck.cs" /> + </sources> + </csc> + <if test="${property::exists('signed')}"> <property name="defs" value="${signed}" /> </if> |