a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
103 lines
2.9 KiB
C#
103 lines
2.9 KiB
C#
//
|
|
// LoadI18nAssemblies.cs
|
|
//
|
|
// Author:
|
|
// Jb Evain (jbevain@novell.com)
|
|
//
|
|
// (C) 2007 Novell, Inc.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining
|
|
// a copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
// permit persons to whom the Software is furnished to do so, subject to
|
|
// the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
using System;
|
|
|
|
using Mono.Cecil;
|
|
|
|
namespace Mono.Linker.Steps {
|
|
|
|
public class LoadI18nAssemblies : BaseStep {
|
|
|
|
static readonly byte [] _pktoken = new byte [] {0x07, 0x38, 0xeb, 0x9f, 0x13, 0x2e, 0xd7, 0x56};
|
|
|
|
I18nAssemblies _assemblies;
|
|
|
|
public LoadI18nAssemblies (I18nAssemblies assemblies)
|
|
{
|
|
_assemblies = assemblies;
|
|
}
|
|
|
|
protected override bool ConditionToProcess ()
|
|
{
|
|
return _assemblies != I18nAssemblies.None &&
|
|
Type.GetType ("System.MonoType") != null;
|
|
}
|
|
|
|
protected override void Process()
|
|
{
|
|
LoadAssembly (GetAssemblyName (I18nAssemblies.Base));
|
|
|
|
LoadI18nAssembly (I18nAssemblies.CJK);
|
|
LoadI18nAssembly (I18nAssemblies.MidEast);
|
|
LoadI18nAssembly (I18nAssemblies.Other);
|
|
LoadI18nAssembly (I18nAssemblies.Rare);
|
|
LoadI18nAssembly (I18nAssemblies.West);
|
|
}
|
|
|
|
bool ShouldCopyAssembly (I18nAssemblies current)
|
|
{
|
|
return (current & _assemblies) != 0;
|
|
}
|
|
|
|
void LoadI18nAssembly (I18nAssemblies asm)
|
|
{
|
|
if (!ShouldCopyAssembly (asm))
|
|
return;
|
|
|
|
AssemblyNameReference name = GetAssemblyName (asm);
|
|
LoadAssembly (name);
|
|
}
|
|
|
|
void LoadAssembly (AssemblyNameReference name)
|
|
{
|
|
AssemblyDefinition assembly = Context.Resolve (name);
|
|
ResolveFromAssemblyStep.ProcessLibrary (Context, assembly);
|
|
}
|
|
|
|
AssemblyNameReference GetAssemblyName (I18nAssemblies assembly)
|
|
{
|
|
AssemblyNameReference name = new AssemblyNameReference ("I18N", GetCorlibVersion ());
|
|
if (assembly != I18nAssemblies.Base)
|
|
name.Name += "." + assembly;
|
|
|
|
name.PublicKeyToken = _pktoken;
|
|
return name;
|
|
}
|
|
|
|
Version GetCorlibVersion ()
|
|
{
|
|
foreach (AssemblyDefinition assembly in Context.GetAssemblies ())
|
|
if (assembly.Name.Name == "mscorlib")
|
|
return assembly.Name.Version;
|
|
|
|
return new Version ();
|
|
}
|
|
}
|
|
}
|