xamarin-macios/tools/install-source/PathManglerFactory.cs

136 строки
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 is null)
monoMangler = new MonoPathMangler {
InstallDir = InstallDir,
DestinationDir = DestinationDir,
MonoSourcePath = MonoSourcePath,
XamarinSourcePath = XamarinSourcePath,
};
return monoMangler;
}
}
OpenTKSourceMangler OpenTKSourceMangler {
get {
if (openTKMangler is null)
openTKMangler = new OpenTKSourceMangler {
InstallDir = InstallDir,
DestinationDir = DestinationDir,
OpenTKSourcePath = OpenTKSourcePath
};
return openTKMangler;
}
}
XamarinSourcesPathMangler XamarinSourcesPathMangler {
get {
if (xamarinPathMangler is 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;
}
}
}