138 строки
4.4 KiB
C#
138 строки
4.4 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace InstallSources
|
|
{
|
|
public class PathManglerFactory
|
|
{
|
|
public bool Verbose { get; set; }
|
|
public string InstallDir { get; set; }
|
|
public string DestinationDir { get; set; }
|
|
public string MonoSourcePath { get; set; }
|
|
public string XamarinSourcePath { get; set; }
|
|
public string FrameworkPath { get; set; }
|
|
public string OpenTKSourcePath { get; set; }
|
|
|
|
MonoPathMangler monoMangler;
|
|
OpenTKSourceMangler openTKMangler;
|
|
XamarinSourcesPathMangler xamarinPathMangler;
|
|
|
|
readonly string srcSubPath = "src";
|
|
readonly string runtimeSubPath = "runtime";
|
|
readonly string xamariniOSDir = "Xamarin.iOS";
|
|
readonly string xamarinMacDir = "Xamarin.Mac";
|
|
|
|
MonoPathMangler MonoPathMangler {
|
|
get {
|
|
if (monoMangler == null)
|
|
monoMangler = new MonoPathMangler {
|
|
InstallDir = InstallDir,
|
|
DestinationDir = DestinationDir,
|
|
MonoSourcePath = MonoSourcePath,
|
|
XamarinSourcePath = XamarinSourcePath,
|
|
};
|
|
return monoMangler;
|
|
}
|
|
}
|
|
|
|
OpenTKSourceMangler OpenTKSourceMangler {
|
|
get {
|
|
if (openTKMangler == null)
|
|
openTKMangler = new OpenTKSourceMangler {
|
|
InstallDir = InstallDir,
|
|
DestinationDir = DestinationDir,
|
|
OpenTKSourcePath = OpenTKSourcePath
|
|
};
|
|
return openTKMangler;
|
|
}
|
|
}
|
|
|
|
XamarinSourcesPathMangler XamarinSourcesPathMangler {
|
|
get {
|
|
if (xamarinPathMangler == null)
|
|
xamarinPathMangler = new XamarinSourcesPathMangler {
|
|
InstallDir = InstallDir,
|
|
DestinationDir = DestinationDir,
|
|
XamarinSourcePath = XamarinSourcePath,
|
|
FrameworkPath = FrameworkPath
|
|
};
|
|
return xamarinPathMangler;
|
|
}
|
|
}
|
|
|
|
public bool IsMonoPath (string path)
|
|
{
|
|
// remove the intall dir and append the mono source path
|
|
if (path.StartsWith(MonoPathMangler.iOSFramework, StringComparison.Ordinal) || path.StartsWith(MonoPathMangler.MacFramework, StringComparison.Ordinal)) {
|
|
// dealing with the jenkins paths
|
|
if (Verbose) {
|
|
Console.WriteLine($"Install dir is {InstallDir}");
|
|
Console.WriteLine($"Original path os {path}");
|
|
}
|
|
|
|
var srcDir = path.Contains (xamariniOSDir) ? MonoPathMangler.iOSFramework : MonoPathMangler.MacFramework;
|
|
if (Verbose)
|
|
Console.WriteLine($"Src path to remove {srcDir}");
|
|
var relative = path.Remove(0, srcDir.Length);
|
|
if (Verbose)
|
|
Console.WriteLine($"Relative path is {relative}");
|
|
if (relative.StartsWith("/", StringComparison.Ordinal))
|
|
relative = relative.Remove(0, 1);
|
|
var monoPath = Path.Combine(MonoSourcePath, relative);
|
|
if (Verbose)
|
|
Console.WriteLine($"Mono path is {monoPath}");
|
|
return File.Exists(monoPath);
|
|
}
|
|
// check if the path is the xamarin source path + the mono external submodule
|
|
var monoSubmodule = Path.Combine (XamarinSourcePath.Replace ("src/", ""), "external", "mono");
|
|
if (path.StartsWith (monoSubmodule, StringComparison.Ordinal))
|
|
return true;
|
|
if (path.StartsWith (XamarinSourcePath, StringComparison.Ordinal))
|
|
return false;
|
|
var xamarinRuntimePath = XamarinSourcePath.Replace($"/{srcSubPath}/", $"/{runtimeSubPath}/");
|
|
if (path.StartsWith (xamarinRuntimePath, StringComparison.Ordinal))
|
|
return false;
|
|
return path.StartsWith (MonoSourcePath, StringComparison.Ordinal);
|
|
}
|
|
|
|
public bool IsOpenTKPath (string path)
|
|
{
|
|
if (path.StartsWith(InstallDir, StringComparison.Ordinal)) {
|
|
// dealing with the jenkins paths
|
|
var srcDir = Path.Combine (InstallDir, srcSubPath,
|
|
(InstallDir.Contains(xamariniOSDir) ? xamariniOSDir : xamarinMacDir));
|
|
var relative = path.Remove (0, srcDir.Length);
|
|
if (relative.StartsWith("/", StringComparison.Ordinal))
|
|
relative = relative.Remove (0, 1);
|
|
var openTKPath = Path.Combine (OpenTKSourcePath, relative);
|
|
return File.Exists(openTKPath);
|
|
} else {
|
|
return path.Contains(OpenTKSourcePath);
|
|
}
|
|
}
|
|
|
|
public bool IsIgnored (string path)
|
|
{
|
|
return path.Contains ("/mcs/mcs/") ||
|
|
path.Contains ("xammac-parser.cs") || // this would require adding sources to the Mono mac archive
|
|
path.Contains ("xammac_net_4_5-parser.cs"); // which would add a lot of duplicate files, so just ignore these
|
|
}
|
|
|
|
public IPathMangler GetMangler (string path)
|
|
{
|
|
if (IsIgnored(path))
|
|
return null;
|
|
|
|
if (IsOpenTKPath (path)) {
|
|
return OpenTKSourceMangler;
|
|
}
|
|
|
|
if (IsMonoPath(path)) {
|
|
return MonoPathMangler;
|
|
}
|
|
|
|
return XamarinSourcesPathMangler;
|
|
}
|
|
}
|
|
}
|