зеркало из https://github.com/mono/ikvm-fork.git
Added a mechanism to prevent accidentally introducing new dependencies in the OpenJDK assemblies.
This commit is contained in:
Родитель
f6cbd1dd50
Коммит
cb4e9c37ca
|
@ -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" />
|
||||
|
|
|
@ -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
|
|
@ -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" />
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
|
Загрузка…
Ссылка в новой задаче