SkiaSharp/build.cake

701 строка
32 KiB
Plaintext
Исходник Обычный вид История

2017-12-14 08:58:33 +03:00
#addin nuget:?package=Cake.Xamarin&version=2.0.1
#addin nuget:?package=Cake.XCode&version=3.0.0
#addin nuget:?package=Cake.FileHelpers&version=2.0.0
#reference "tools/SharpCompress/lib/net45/SharpCompress.dll"
using System.Linq;
2017-03-18 16:03:10 +03:00
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
2017-03-18 16:03:10 +03:00
#load "cake/Utils.cake"
var TARGET = Argument ("t", Argument ("target", Argument ("Target", "Default")));
2017-02-12 01:50:22 +03:00
var VERBOSITY = (Verbosity) Enum.Parse (typeof(Verbosity), Argument ("v", Argument ("verbosity", Argument ("Verbosity", "Verbose"))), true);
var NuGetSources = new [] { MakeAbsolute (Directory ("./output")).FullPath, "https://api.nuget.org/v3/index.json", "https://www.myget.org/F/xunit/api/v3/index.json" };
var NugetToolPath = GetToolPath ("nuget.exe");
2017-06-06 05:10:52 +03:00
var XamarinComponentToolPath = GetToolPath ("XamarinComponent/tools/xamarin-component.exe");
var CakeToolPath = GetToolPath ("Cake/Cake.exe");
var GenApiToolPath = GetToolPath ("Microsoft.DotNet.BuildTools.GenAPI/tools/GenAPI.exe");
2017-12-14 08:58:33 +03:00
var MDocPath = GetToolPath ("mdoc/tools/mdoc.exe");
2017-03-12 16:24:40 +03:00
var SNToolPath = GetSNToolPath (EnvironmentVariable ("SN_EXE"));
2017-05-12 19:25:21 +03:00
var MSBuildToolPath = GetMSBuildToolPath (EnvironmentVariable ("MSBUILD_EXE"));
var PythonToolPath = EnvironmentVariable ("PYTHON_EXE") ?? "python";
var VERSION_ASSEMBLY = "1.60.0.0";
var VERSION_FILE = "1.60.0.0";
var VERSION_SONAME = VERSION_FILE.Substring(VERSION_FILE.IndexOf(".") + 1);
var ANGLE_VERSION_SOURCE = "2.1.13";
2017-05-12 10:53:26 +03:00
var HARFBUZZ_VERSION_SOURCE = "1.4.6";
var HARFBUZZ_VERSION_ASSEMBLY = "1.0.0.0";
2017-05-12 10:53:26 +03:00
var HARFBUZZ_VERSION_FILE = "1.4.6.0";
2017-05-02 16:21:30 +03:00
var HARFBUZZ_VERSION_SONAME = HARFBUZZ_VERSION_FILE.Substring(0, HARFBUZZ_VERSION_FILE.LastIndexOf("."));
var VERSION_PACKAGES = new Dictionary<string, string> {
{ "SkiaSharp", "1.60.0-beta" },
{ "SkiaSharp.Views", "1.60.0-beta" },
{ "SkiaSharp.Views.Forms", "1.60.0-beta" },
{ "SkiaSharp.HarfBuzz", "1.60.0-beta" },
2017-05-12 10:53:26 +03:00
{ "HarfBuzzSharp", "1.4.6" },
};
var CI_TARGETS = new string[] { "CI", "WINDOWS-CI", "LINUX-CI", "MAC-CI" };
var IS_ON_CI = CI_TARGETS.Contains (TARGET.ToUpper ());
var IS_ON_FINAL_CI = TARGET.ToUpper () == "CI";
string ANDROID_HOME = EnvironmentVariable ("ANDROID_HOME") ?? EnvironmentVariable ("HOME") + "/Library/Developer/Xamarin/android-sdk-macosx";
string ANDROID_SDK_ROOT = EnvironmentVariable ("ANDROID_SDK_ROOT") ?? ANDROID_HOME;
string ANDROID_NDK_HOME = EnvironmentVariable ("ANDROID_NDK_HOME") ?? EnvironmentVariable ("HOME") + "/Library/Developer/Xamarin/android-ndk";
2016-05-06 18:39:38 +03:00
DirectoryPath ROOT_PATH = MakeAbsolute(Directory("."));
DirectoryPath DEPOT_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/depot_tools"));
DirectoryPath SKIA_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/skia"));
DirectoryPath ANGLE_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/angle"));
DirectoryPath HARFBUZZ_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/harfbuzz"));
2016-10-19 01:46:12 +03:00
DirectoryPath DOCS_PATH = MakeAbsolute(ROOT_PATH.Combine("docs/en"));
#load "cake/UtilsManaged.cake"
#load "cake/UtilsMSBuild.cake"
#load "cake/UtilsNative.cake"
#load "cake/BuildExternals.cake"
////////////////////////////////////////////////////////////////////////////////////////////////////
// EXTERNALS - the native C and C++ libraries
////////////////////////////////////////////////////////////////////////////////////////////////////
// this builds all the externals
Task ("externals")
.IsDependentOn ("externals-native")
.Does (() =>
{
});
2016-09-12 23:29:14 +03:00
////////////////////////////////////////////////////////////////////////////////////////////////////
// LIBS - the managed C# libraries
////////////////////////////////////////////////////////////////////////////////////////////////////
2016-09-15 10:25:05 +03:00
Task ("libs")
.IsDependentOn ("externals")
.IsDependentOn ("set-versions")
.Does (() =>
{
// create all the directories
2018-01-29 23:02:27 +03:00
EnsureDirectoryExists ("./output/wpf/");
EnsureDirectoryExists ("./output/uwp/");
EnsureDirectoryExists ("./output/android/");
EnsureDirectoryExists ("./output/ios/");
EnsureDirectoryExists ("./output/tvos/");
EnsureDirectoryExists ("./output/watchos/");
EnsureDirectoryExists ("./output/osx/");
EnsureDirectoryExists ("./output/portable/");
EnsureDirectoryExists ("./output/mac/");
EnsureDirectoryExists ("./output/netstandard/");
EnsureDirectoryExists ("./output/linux/");
EnsureDirectoryExists ("./output/interactive/");
EnsureDirectoryExists ("./output/desktop/");
2018-01-29 23:02:27 +03:00
EnsureDirectoryExists ("./output/gtk/");
// .NET Standard / .NET Core
RunNuGetRestore ("source/SkiaSharpSource.NetStandard.sln");
RunMSBuild ("source/SkiaSharpSource.NetStandard.sln");
2017-06-29 23:27:21 +03:00
// copy to output
CopyFileToDirectory ("./binding/SkiaSharp.NetStandard/bin/Release/SkiaSharp.dll", "./output/netstandard/");
CopyFileToDirectory ("./binding/HarfBuzzSharp.NetStandard/bin/Release/HarfBuzzSharp.dll", "./output/netstandard/");
CopyFileToDirectory ("./source/SkiaSharp.HarfBuzz/SkiaSharp.HarfBuzz.NetStandard/bin/Release/SkiaSharp.HarfBuzz.dll", "./output/netstandard/");
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.NetStandard/bin/Release/SkiaSharp.Views.Forms.dll", "./output/netstandard/");
// Generate the portable code - we can't do it automatically as there are issues on linux
RunGenApi ("./binding/SkiaSharp.NetStandard/bin/Release/SkiaSharp.dll", "binding/SkiaSharp.Portable/SkiaPortable.cs");
RunGenApi ("./binding/HarfBuzzSharp.NetStandard/bin/Release/HarfBuzzSharp.dll", "binding/HarfBuzzSharp.Portable/HarfBuzzPortable.cs");
// .NET Framework / Xamarin
if (IsRunningOnWindows ()) {
RunNuGetRestore ("./source/SkiaSharpSource.Windows.sln");
RunMSBuild ("./source/SkiaSharpSource.Windows.sln");
// SkiaSharp
2016-09-15 10:25:05 +03:00
CopyFileToDirectory ("./binding/SkiaSharp.UWP/bin/Release/SkiaSharp.dll", "./output/uwp/");
CopyFileToDirectory ("./binding/SkiaSharp.UWP/bin/Release/SkiaSharp.pri", "./output/uwp/");
// HarfBuzzSharp
2017-05-01 11:25:10 +03:00
CopyFileToDirectory ("./binding/HarfBuzzSharp.UWP/bin/Release/HarfBuzzSharp.dll", "./output/uwp/");
CopyFileToDirectory ("./binding/HarfBuzzSharp.UWP/bin/Release/HarfBuzzSharp.pri", "./output/uwp/");
// SkiaSharp.Views
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.UWP/bin/Release/SkiaSharp.Views.UWP.dll", "./output/uwp/");
2018-01-29 23:02:27 +03:00
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.WPF/bin/Release/SkiaSharp.Views.WPF.dll", "./output/wpf/");
// SkiaSharp.Views.Forms
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.UWP/bin/Release/SkiaSharp.Views.Forms.dll", "./output/uwp/");
} else if (IsRunningOnMac ()) {
// fix for old MSBuild
RunMSBuildRestore ("source/SkiaSharpSource.Mac.sln");
RunMSBuild ("source/SkiaSharpSource.Mac.sln");
// SkiaSharp
2016-09-15 10:25:05 +03:00
CopyFileToDirectory ("./binding/SkiaSharp.Android/bin/Release/SkiaSharp.dll", "./output/android/");
CopyFileToDirectory ("./binding/SkiaSharp.iOS/bin/Release/SkiaSharp.dll", "./output/ios/");
CopyFileToDirectory ("./binding/SkiaSharp.tvOS/bin/Release/SkiaSharp.dll", "./output/tvos/");
CopyFileToDirectory ("./binding/SkiaSharp.watchOS/bin/Release/SkiaSharp.dll", "./output/watchos/");
2016-09-15 10:25:05 +03:00
CopyFileToDirectory ("./binding/SkiaSharp.OSX/bin/Release/SkiaSharp.dll", "./output/osx/");
// HarfBuzzSharp
2017-04-29 00:19:14 +03:00
CopyFileToDirectory ("./binding/HarfBuzzSharp.Android/bin/Release/HarfBuzzSharp.dll", "./output/android/");
2017-04-28 23:05:31 +03:00
CopyFileToDirectory ("./binding/HarfBuzzSharp.iOS/bin/Release/HarfBuzzSharp.dll", "./output/ios/");
CopyFileToDirectory ("./binding/HarfBuzzSharp.tvOS/bin/Release/HarfBuzzSharp.dll", "./output/tvos/");
CopyFileToDirectory ("./binding/HarfBuzzSharp.watchOS/bin/Release/HarfBuzzSharp.dll", "./output/watchos/");
2017-04-28 23:05:31 +03:00
CopyFileToDirectory ("./binding/HarfBuzzSharp.OSX/bin/Release/HarfBuzzSharp.dll", "./output/osx/");
// SkiaSharp.Views
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Android/bin/Release/SkiaSharp.Views.Android.dll", "./output/android/");
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.iOS/bin/Release/SkiaSharp.Views.iOS.dll", "./output/ios/");
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Mac/bin/Release/SkiaSharp.Views.Mac.dll", "./output/osx/");
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.tvOS/bin/Release/SkiaSharp.Views.tvOS.dll", "./output/tvos/");
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.watchOS/bin/Release/SkiaSharp.Views.watchOS.dll", "./output/watchos/");
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Gtk/bin/Release/SkiaSharp.Views.Gtk.dll", "./output/gtk/");
// SkiaSharp.Views.Forms
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Android/bin/Release/SkiaSharp.Views.Forms.dll", "./output/android/");
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.iOS/bin/Release/SkiaSharp.Views.Forms.dll", "./output/ios/");
2017-04-23 22:28:32 +03:00
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Mac/bin/Release/SkiaSharp.Views.Forms.dll", "./output/osx/");
} else if (IsRunningOnLinux ()) {
RunNuGetRestore ("./source/SkiaSharpSource.Linux.sln");
2017-05-12 19:25:21 +03:00
RunMSBuild ("./source/SkiaSharpSource.Linux.sln");
// SkiaSharp.Views
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Gtk/bin/Release/SkiaSharp.Views.Gtk.dll", "./output/gtk/");
}
// SkiaSharp
2017-06-24 14:52:09 +03:00
CopyFileToDirectory ("./binding/SkiaSharp.Desktop/bin/Release/SkiaSharp.dll", "./output/desktop/");
CopyFileToDirectory ("./binding/SkiaSharp.Desktop/bin/Release/nuget/build/net45/SkiaSharp.dll.config", "./output/desktop/");
CopyFileToDirectory ("./binding/SkiaSharp.Desktop/bin/Release/nuget/build/net45/SkiaSharp.Desktop.targets", "./output/desktop/");
CopyFileToDirectory ("./binding/SkiaSharp.Portable/bin/Release/SkiaSharp.dll", "./output/portable/");
2018-01-29 23:02:27 +03:00
// SkiaSharp.Views
CopyFileToDirectory ("./source/SkiaSharp.Views/SkiaSharp.Views.Desktop/bin/Release/SkiaSharp.Views.Desktop.dll", "./output/desktop/");
// SkiaSharp.Views.Forms
CopyFileToDirectory ("./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms/bin/Release/SkiaSharp.Views.Forms.dll", "./output/portable/");
// HarfBuzzSharp
2017-06-24 14:52:09 +03:00
CopyFileToDirectory ("./binding/HarfBuzzSharp.Desktop/bin/Release/HarfBuzzSharp.dll", "./output/desktop/");
CopyFileToDirectory ("./binding/HarfBuzzSharp.Desktop/bin/Release/nuget/build/net45/HarfBuzzSharp.dll.config", "./output/desktop/");
CopyFileToDirectory ("./binding/HarfBuzzSharp.Desktop/bin/Release/nuget/build/net45/HarfBuzzSharp.Desktop.targets", "./output/desktop/");
CopyFileToDirectory ("./binding/HarfBuzzSharp.Portable/bin/Release/HarfBuzzSharp.dll", "./output/portable/");
// SkiaSharp.HarfBuzz
CopyFileToDirectory ("./source/SkiaSharp.HarfBuzz/SkiaSharp.HarfBuzz/bin/Release/SkiaSharp.HarfBuzz.dll", "./output/portable/");
// SkiaSharp.Workbooks
CopyFileToDirectory ("./source/SkiaSharp.Workbooks/bin/Release/SkiaSharp.Workbooks.dll", "./output/interactive/");
2017-06-29 23:27:21 +03:00
// make sure everything is signed and strong named
// (msbuild on non-Windows can't sign as part of the build process, so use sn)
var excludedAssemblies = new string[] {
"/SkiaSharp.Views.Forms.dll", // Xamarin.Forms is not sigend, so we can't sign
"/SkiaSharp.Workbooks.dll" // Workbooks integration library is not signed, so we can't sign
};
foreach (var f in GetFiles("./output/*/*.dll")) {
// skip the excluded assemblies
var excluded = false;
foreach (var assembly in excludedAssemblies) {
if (f.FullPath.EndsWith (assembly)) {
excluded = true;
break;
}
}
// sign and verify
if (!excluded) {
Information("Making sure that '{0}' is signed.", f);
RunSNReSign(f, "mono.snk");
RunSNVerify(f);
}
}
});
////////////////////////////////////////////////////////////////////////////////////////////////////
// TESTS - some test cases to make sure it works
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("tests")
2017-04-28 23:00:05 +03:00
.IsDependentOn ("libs")
.IsDependentOn ("nuget")
.Does (() =>
{
2017-01-22 01:27:08 +03:00
ClearSkiaSharpNuGetCache ();
RunNuGetRestore ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln");
// Windows (x86 and x64)
if (IsRunningOnWindows ()) {
EnsureDirectoryExists ("./output/tests/windows/x86");
2017-05-12 19:25:21 +03:00
RunMSBuildWithPlatform ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln", "x86");
2018-01-25 02:56:57 +03:00
RunTests ("./tests/SkiaSharp.Desktop.Tests/bin/x86/Release/SkiaSharp.Tests.dll", null, true);
2017-05-13 18:35:15 +03:00
CopyFileToDirectory ("./tests/SkiaSharp.Desktop.Tests/bin/x86/Release/TestResult.xml", "./output/tests/windows/x86");
EnsureDirectoryExists ("./output/tests/windows/x64");
2017-05-12 19:25:21 +03:00
RunMSBuildWithPlatform ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln", "x64");
2018-01-25 02:56:57 +03:00
RunTests ("./tests/SkiaSharp.Desktop.Tests/bin/x64/Release/SkiaSharp.Tests.dll", null, false);
2017-05-13 18:35:15 +03:00
CopyFileToDirectory ("./tests/SkiaSharp.Desktop.Tests/bin/x64/Release/TestResult.xml", "./output/tests/windows/x64");
}
2017-05-13 18:35:15 +03:00
// Mac OSX (Any CPU)
2017-01-25 01:33:42 +03:00
if (IsRunningOnMac ()) {
EnsureDirectoryExists ("./output/tests/mac/AnyCPU");
2017-05-12 19:25:21 +03:00
RunMSBuild ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln");
2018-01-25 02:56:57 +03:00
RunTests ("./tests/SkiaSharp.Desktop.Tests/bin/AnyCPU/Release/SkiaSharp.Tests.dll", null, false);
2017-05-13 18:35:15 +03:00
CopyFileToDirectory ("./tests/SkiaSharp.Desktop.Tests/bin/AnyCPU/Release/TestResult.xml", "./output/tests/mac/AnyCPU");
}
2017-05-13 18:35:15 +03:00
// Linux (x64)
if (IsRunningOnLinux ()) {
EnsureDirectoryExists ("./output/tests/linux/x64");
RunMSBuildWithPlatform ("./tests/SkiaSharp.Desktop.Tests/SkiaSharp.Desktop.Tests.sln", "x64");
2018-01-25 02:56:57 +03:00
RunTests ("./tests/SkiaSharp.Desktop.Tests/bin/x64/Release/SkiaSharp.Tests.dll", null, false);
CopyFileToDirectory ("./tests/SkiaSharp.Desktop.Tests/bin/x64/Release/TestResult.xml", "./output/tests/linux/x64");
}
2017-01-22 01:27:08 +03:00
// .NET Core
EnsureDirectoryExists ("./output/tests/netcore");
RunNuGetRestore ("./tests/SkiaSharp.NetCore.Tests/SkiaSharp.NetCore.Tests.sln");
2018-01-25 02:56:57 +03:00
RunNetCoreTests ("./tests/SkiaSharp.NetCore.Tests/SkiaSharp.NetCore.Tests.csproj", null);
CopyFileToDirectory ("./tests/SkiaSharp.NetCore.Tests/TestResult.xml", "./output/tests/netcore");
});
////////////////////////////////////////////////////////////////////////////////////////////////////
// SAMPLES - the demo apps showing off the work
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("samples")
.IsDependentOn ("libs")
.IsDependentOn ("nuget")
.Does (() =>
{
2016-09-14 23:50:26 +03:00
ClearSkiaSharpNuGetCache ();
CleanDirectories ("./samples/*/*/*/packages/SkiaSharp.*");
2016-11-08 23:43:25 +03:00
// zip the samples for the GitHub release notes
if (IS_ON_CI) {
2016-11-08 23:43:25 +03:00
Zip ("./samples", "./output/samples.zip");
}
// BASIC samples
RunNuGetRestore ("./samples/Basic/NetCore/SkiaSharpSample.sln");
RunMSBuild ("./samples/Basic/NetCore/SkiaSharpSample.sln");
2018-01-31 05:50:39 +03:00
RunNuGetRestore ("./samples/Basic/Desktop/SkiaSharpSample.sln");
RunMSBuild ("./samples/Basic/Desktop/SkiaSharpSample.sln");
// GALLERY samples
2017-01-11 07:35:43 +03:00
if (IsRunningOnLinux ()) {
// BASIC samples
2018-01-30 12:59:28 +03:00
RunNuGetRestore ("./samples/Basic/Gtk/SkiaSharpSample.sln");
RunMSBuild ("./samples/Basic/Gtk/SkiaSharpSample.sln");
2017-01-11 07:35:43 +03:00
// GALLERY samples
2017-01-11 07:35:43 +03:00
}
if (IsRunningOnMac ()) {
// BASIC samples
RunNuGetRestore ("./samples/Basic/Android/SkiaSharpSample.sln");
RunMSBuild ("./samples/Basic/Android/SkiaSharpSample.sln");
RunNuGetRestore ("./samples/Basic/iOS/SkiaSharpSample.sln");
RunMSBuildWithPlatform ("./samples/Basic/iOS/SkiaSharpSample.sln", "iPhone");
RunNuGetRestore ("./samples/Basic/macOS/SkiaSharpSample.sln");
2018-01-30 18:20:47 +03:00
RunMSBuild ("./samples/Basic/macOS/SkiaSharpSample.sln");
RunNuGetRestore ("./samples/Basic/tvOS/SkiaSharpSample.sln");
RunMSBuildWithPlatform ("./samples/Basic/tvOS/SkiaSharpSample.sln", "iPhoneSimulator");
2018-01-30 12:59:28 +03:00
RunNuGetRestore ("./samples/Basic/Gtk/SkiaSharpSample.sln");
RunMSBuild ("./samples/Basic/Gtk/SkiaSharpSample.sln");
// GALLERY samples
RunNuGetRestore ("./samples/Gallery/MacSample/MacSample.sln");
RunMSBuildWithPlatform ("./samples/Gallery/MacSample/MacSample.sln", "x86");
RunNuGetRestore ("./samples/Gallery/FormsSample/FormsSample.Mac.sln");
RunMSBuildWithPlatform ("./samples/Gallery/FormsSample/FormsSample.Mac.sln", "iPhone");
RunNuGetRestore ("./samples/Gallery/TvSample/TvSample.sln");
RunMSBuildWithPlatform ("./samples/Gallery/TvSample/TvSample.sln", "iPhoneSimulator");
}
if (IsRunningOnWindows ()) {
// BASIC samples
2018-01-31 05:50:39 +03:00
RunNuGetRestore ("./samples/Basic/WPF/SkiaSharpSample.sln");
RunMSBuild ("./samples/Basic/WPF/SkiaSharpSample.sln");
RunNuGetRestore ("./samples/Basic/UWP/SkiaSharpSample.sln");
RunMSBuildWithPlatformTarget ("./samples/Basic/UWP/SkiaSharpSample.sln", "x86");
// GALLERY samples
RunNuGetRestore ("./samples/Gallery/WPFSample/WPFSample.sln");
RunMSBuild ("./samples/Gallery/WPFSample/WPFSample.sln");
RunNuGetRestore ("./samples/Gallery/UWPSample/UWPSample.sln");
RunMSBuildWithPlatformTarget ("./samples/Gallery/UWPSample/UWPSample.sln", "x86");
RunNuGetRestore ("./samples/Gallery/FormsSample/FormsSample.Windows.sln");
RunMSBuildWithPlatformTarget ("./samples/Gallery/FormsSample/FormsSample.Windows.sln", "x86");
RunNuGetRestore ("./samples/Gallery/WindowsSample/WindowsSample.sln");
RunMSBuild ("./samples/Gallery/WindowsSample/WindowsSample.sln");
}
});
2016-02-23 13:57:08 +03:00
////////////////////////////////////////////////////////////////////////////////////////////////////
// DOCS - building the API documentation
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("docs")
.Does (() =>
{
2016-10-19 23:49:25 +03:00
// log TODOs
2016-10-21 00:50:32 +03:00
var docFiles = GetFiles ("./docs/**/*.xml");
float typeCount = 0;
float memberCount = 0;
float totalTypes = 0;
float totalMembers = 0;
foreach (var file in docFiles) {
var xdoc = XDocument.Load (file.ToString ());
var typesWithDocs = xdoc.Root
.Elements ("Docs");
2016-11-03 06:00:38 +03:00
totalTypes += typesWithDocs.Count ();
var currentTypeCount = typesWithDocs.Where (m => m.Value != null && m.Value.IndexOf ("To be added.") >= 0).Count ();
typeCount += currentTypeCount;
2016-10-21 00:50:32 +03:00
var membersWithDocs = xdoc.Root
.Elements ("Members")
.Elements ("Member")
2016-11-03 06:00:38 +03:00
.Where (m => m.Attribute ("MemberName") != null && m.Attribute ("MemberName").Value != "Dispose" && m.Attribute ("MemberName").Value != "Finalize")
2016-10-21 00:50:32 +03:00
.Elements ("Docs");
totalMembers += membersWithDocs.Count ();
2016-11-03 06:00:38 +03:00
var currentMemberCount = membersWithDocs.Where (m => m.Value != null && m.Value.IndexOf ("To be added.") >= 0).Count ();
memberCount += currentMemberCount;
currentMemberCount += currentTypeCount;
if (currentMemberCount > 0) {
var fullName = xdoc.Root.Attribute ("FullName");
if (fullName != null)
Information ("Docs missing on {0} = {1}", fullName.Value, currentMemberCount);
}
2016-10-21 00:50:32 +03:00
}
Information (
"Documentation missing in {0}/{1} ({2:0.0%}) types and {3}/{4} ({5:0.0%}) members.",
typeCount, totalTypes, typeCount / totalTypes,
memberCount, totalMembers, memberCount / totalMembers);
2016-10-19 23:49:25 +03:00
EnsureDirectoryExists ("./output/docs/msxml/");
2016-10-19 01:46:12 +03:00
RunMdocMSXml (DOCS_PATH, "./output/docs/msxml/");
2016-05-05 04:24:31 +03:00
EnsureDirectoryExists ("./output/docs/mdoc/");
2016-10-19 01:46:12 +03:00
RunMdocAssemble (DOCS_PATH, "./output/docs/mdoc/SkiaSharp");
2016-10-19 01:50:16 +03:00
CopyFileToDirectory ("./docs/SkiaSharp.source", "./output/docs/mdoc/");
2016-02-23 13:57:08 +03:00
});
Task ("update-docs")
.IsDependentOn ("libs")
.Does (() =>
{
// the reference folders to locate assemblies
var refAssemblies = "C:/Program Files (x86)/Microsoft Visual Studio/*/*/Common7/IDE/ReferenceAssemblies/Microsoft/Framework/";
var refNetNative = "C:/Program Files (x86)/MSBuild/15.0/.Net/.NetNative/*/x86/ilc/lib/Private";
var refs = new List<DirectoryPath> ();
refs.AddRange (GetDirectories (refNetNative));
refs.AddRange (GetDirectories (refAssemblies + "MonoAndroid/v1.0"));
refs.AddRange (GetDirectories (refAssemblies + "MonoAndroid/v4.0.3"));
refs.AddRange (GetDirectories (refAssemblies + "Xamarin.iOS/v1.0"));
refs.AddRange (GetDirectories (refAssemblies + "Xamarin.TVOS/v1.0"));
refs.AddRange (GetDirectories (refAssemblies + "Xamarin.WatchOS/v1.0"));
refs.AddRange (GetDirectories (refAssemblies + "Xamarin.Mac/v2.0"));
// the assemblies to generate docs for
var assemblies = new FilePath [] {
// SkiaSharp
"./output/netstandard/SkiaSharp.dll",
// SkiaSharp.Views
"./output/android/SkiaSharp.Views.Android.dll",
"./output/desktop/SkiaSharp.Views.Desktop.dll",
"./output/gtk/SkiaSharp.Views.Gtk.dll",
"./output/ios/SkiaSharp.Views.iOS.dll",
"./output/osx/SkiaSharp.Views.Mac.dll",
"./output/tvos/SkiaSharp.Views.tvOS.dll",
"./output/uwp/SkiaSharp.Views.UWP.dll",
"./output/watchos/SkiaSharp.Views.watchOS.dll",
"./output/wpf/SkiaSharp.Views.WPF.dll",
// SkiaSharp.Views.Forms
"./output/netstandard/SkiaSharp.Views.Forms.dll",
// HarfBuzzSharp
"./output/netstandard/HarfBuzzSharp.dll",
// SkiaSharp.HarfBuzz
"./output/netstandard/SkiaSharp.HarfBuzz.dll",
};
// print out the assemblies
foreach (var r in refs) {
Information ("Reference Directory: {0}", r);
}
foreach (var a in assemblies) {
Information ("Processing {0}...", a);
}
// generate doc files
RunMdocUpdate (assemblies, DOCS_PATH, refs.ToArray ());
2016-11-08 07:46:26 +03:00
// apply some formatting
var docFiles = GetFiles ("./docs/**/*.xml");
foreach (var file in docFiles) {
var xdoc = XDocument.Load (file.ToString ());
2018-02-06 05:18:47 +03:00
// if (xdoc.Root.Elements ("AssemblyInfo").Elements ("AssemblyVersion").All ( v => v.Value != VERSION_ASSEMBLY )) {
// DeleteFile(file);
// continue;
// }
// xdoc.Root
// .Elements ("Members")
// .Elements ("Member")
// .Where (e => e.Elements ("AssemblyInfo").Elements ("AssemblyVersion").All ( v => v.Value != VERSION_ASSEMBLY ))
// .Remove ();
2016-11-08 07:46:26 +03:00
// remove IComponent docs as this is just designer
xdoc.Root
2016-11-08 07:46:26 +03:00
.Elements ("Members")
.Elements ("Member")
.Where (e => e.Attribute ("MemberName") != null && e.Attribute ("MemberName").Value.StartsWith ("System.ComponentModel.IComponent."))
.Remove ();
2016-11-08 07:46:26 +03:00
// get the whitespaces right
var settings = new XmlWriterSettings {
Encoding = new UTF8Encoding (),
Indent = true,
NewLineChars = "\n",
OmitXmlDeclaration = true,
};
using (var writer = XmlWriter.Create (file.ToString (), settings)) {
xdoc.Save (writer);
writer.Flush ();
}
// empty line at the end
System.IO.File.AppendAllText (file.ToString (), "\n");
}
});
////////////////////////////////////////////////////////////////////////////////////////////////////
// NUGET - building the package for NuGet.org
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("nuget")
.IsDependentOn ("libs")
2016-05-05 04:24:31 +03:00
.IsDependentOn ("docs")
.Does (() =>
{
// we can only build the combined package on CI
if (IS_ON_FINAL_CI) {
2016-05-05 04:24:31 +03:00
PackageNuGet ("./nuget/SkiaSharp.nuspec", "./output/");
PackageNuGet ("./nuget/HarfBuzzSharp.nuspec", "./output/");
PackageNuGet ("./nuget/SkiaSharp.Views.nuspec", "./output/");
2016-09-15 10:25:05 +03:00
PackageNuGet ("./nuget/SkiaSharp.Views.Forms.nuspec", "./output/");
} else {
if (IsRunningOnWindows ()) {
PackageNuGet ("./nuget/SkiaSharp.Windows.nuspec", "./output/");
PackageNuGet ("./nuget/HarfBuzzSharp.Windows.nuspec", "./output/");
PackageNuGet ("./nuget/SkiaSharp.Views.Windows.nuspec", "./output/");
2016-09-15 10:25:05 +03:00
PackageNuGet ("./nuget/SkiaSharp.Views.Forms.Windows.nuspec", "./output/");
}
2017-01-11 07:35:43 +03:00
if (IsRunningOnMac ()) {
PackageNuGet ("./nuget/SkiaSharp.Mac.nuspec", "./output/");
PackageNuGet ("./nuget/HarfBuzzSharp.Mac.nuspec", "./output/");
PackageNuGet ("./nuget/SkiaSharp.Views.Mac.nuspec", "./output/");
2016-09-15 10:25:05 +03:00
PackageNuGet ("./nuget/SkiaSharp.Views.Forms.Mac.nuspec", "./output/");
}
2017-01-11 07:35:43 +03:00
if (IsRunningOnLinux ()) {
2017-01-25 01:33:42 +03:00
PackageNuGet ("./nuget/SkiaSharp.Linux.nuspec", "./output/");
PackageNuGet ("./nuget/HarfBuzzSharp.Linux.nuspec", "./output/");
2018-01-29 23:02:27 +03:00
PackageNuGet ("./nuget/SkiaSharp.Views.Linux.nuspec", "./output/");
2017-01-11 07:35:43 +03:00
}
2016-09-15 10:25:05 +03:00
}
// HarfBuzz is a PCL
PackageNuGet ("./nuget/SkiaSharp.HarfBuzz.nuspec", "./output/");
2016-09-15 10:25:05 +03:00
});
////////////////////////////////////////////////////////////////////////////////////////////////////
// COMPONENT - building the package for components.xamarin.com
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("component")
.IsDependentOn ("nuget")
.Does (() =>
{
// TODO: Not yet ready
// EnsureDirectoryExists ("./output/");
// FilePath yaml = "./component/component.yaml";
// var yamlDir = yaml.GetDirectory ();
// PackageComponent (yamlDir, new XamarinComponentSettings {
// ToolPath = XamarinComponentToolPath
// });
// MoveFiles (yamlDir.FullPath.TrimEnd ('/') + "/*.xam", "./output/");
});
////////////////////////////////////////////////////////////////////////////////////////////////////
// VERSIONS - update all packages and references to the new version
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("set-versions")
.Does (() =>
{
// set the SHA on the assembly info
var sha = EnvironmentVariable ("GIT_COMMIT") ?? string.Empty;
if (!string.IsNullOrEmpty (sha) && sha.Length >= 6) {
sha = sha.Substring (0, 6);
} else {
sha = "{GIT_SHA}";
}
var files = new List<string> ();
var add = new Action<string> (glob => {
files.AddRange (GetFiles (glob).Select (p => MakeAbsolute (p).ToString ()));
});
// nuspecs
add ("./nuget/*.nuspec");
// packages files
add ("./source/*/*/packages.config");
add ("./source/*/*/project.json");
// project files
add ("./source/*/*/*.nuget.targets");
add ("./source/*/*/*.csproj");
// sample packages files
add ("./samples/*/*/*/packages.config");
add ("./samples/*/*/*/project.json");
// sample project files
add ("./samples/*/*/*/*.nuget.targets");
add ("./samples/*/*/*/*.csproj");
// tests packages files
add ("./tests/*/packages.config");
add ("./tests/*/project.json");
// tests project files
add ("./tests/*/*.nuget.targets");
add ("./tests/*/*.csproj");
// update
foreach (var file in files) {
UpdateSkiaSharpVersion (file, VERSION_PACKAGES);
}
// assembly infos
UpdateAssemblyInfo (
"./binding/Binding/Properties/SkiaSharpAssemblyInfo.cs",
VERSION_ASSEMBLY, VERSION_FILE, sha);
UpdateAssemblyInfo (
"./source/SkiaSharp.Views/SkiaSharp.Views.Shared/Properties/SkiaSharpViewsAssemblyInfo.cs",
VERSION_ASSEMBLY, VERSION_FILE, sha);
UpdateAssemblyInfo (
"./source/SkiaSharp.Views.Forms/SkiaSharp.Views.Forms.Shared/Properties/SkiaSharpViewsFormsAssemblyInfo.cs",
VERSION_ASSEMBLY, VERSION_FILE, sha);
UpdateAssemblyInfo (
"./source/SkiaSharp.HarfBuzz/SkiaSharp.HarfBuzz.Shared/Properties/SkiaSharpHarfBuzzAssemblyInfo.cs",
VERSION_ASSEMBLY, VERSION_FILE, sha);
UpdateAssemblyInfo (
"./binding/HarfBuzzSharp.Shared/Properties/HarfBuzzSharpAssemblyInfo.cs",
HARFBUZZ_VERSION_ASSEMBLY, HARFBUZZ_VERSION_FILE, sha);
UpdateAssemblyInfo (
"./source/SkiaSharp.Workbooks/Properties/SkiaSharpWorkbooksAssemblyInfo.cs",
VERSION_ASSEMBLY, VERSION_FILE, sha);
});
////////////////////////////////////////////////////////////////////////////////////////////////////
// CLEAN - remove all the build artefacts
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("clean")
.IsDependentOn ("clean-externals")
2016-06-08 02:20:27 +03:00
.IsDependentOn ("clean-managed")
.Does (() =>
{
2016-06-08 02:20:27 +03:00
});
Task ("clean-managed").Does (() =>
{
CleanDirectories ("./binding/*/bin");
CleanDirectories ("./binding/*/obj");
2017-01-25 16:36:10 +03:00
DeleteFiles ("./binding/*/project.lock.json");
2016-06-08 02:20:27 +03:00
CleanDirectories ("./samples/*/*/bin");
CleanDirectories ("./samples/*/*/obj");
2016-09-15 05:57:22 +03:00
CleanDirectories ("./samples/*/*/AppPackages");
CleanDirectories ("./samples/*/*/*/bin");
CleanDirectories ("./samples/*/*/*/obj");
DeleteFiles ("./samples/*/*/*/project.lock.json");
CleanDirectories ("./samples/*/*/*/AppPackages");
CleanDirectories ("./samples/*/*/packages");
CleanDirectories ("./tests/**/bin");
CleanDirectories ("./tests/**/obj");
CleanDirectories ("./tests/**/artifacts");
2017-01-25 16:36:10 +03:00
DeleteFiles ("./tests/**/project.lock.json");
CleanDirectories ("./source/*/*/bin");
CleanDirectories ("./source/*/*/obj");
2017-01-25 16:36:10 +03:00
DeleteFiles ("./source/*/*/project.lock.json");
CleanDirectories ("./source/*/*/Generated Files");
CleanDirectories ("./source/packages");
2016-09-09 05:40:29 +03:00
CleanDirectories ("./externals/Windows.Foundation.UniversalApiContract/bin");
CleanDirectories ("./externals/Windows.Foundation.UniversalApiContract/obj");
if (DirectoryExists ("./output"))
DeleteDirectory ("./output", true);
});
////////////////////////////////////////////////////////////////////////////////////////////////////
// DEFAULT - target for common development
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("Default")
.IsDependentOn ("externals")
.IsDependentOn ("libs");
Task ("Everything")
.IsDependentOn ("externals")
.IsDependentOn ("libs")
.IsDependentOn ("docs")
.IsDependentOn ("nuget")
.IsDependentOn ("component")
.IsDependentOn ("tests")
.IsDependentOn ("samples");
////////////////////////////////////////////////////////////////////////////////////////////////////
// CI - the master target to build everything
////////////////////////////////////////////////////////////////////////////////////////////////////
Task ("CI")
.IsDependentOn ("externals")
.IsDependentOn ("libs")
2016-02-23 13:57:08 +03:00
.IsDependentOn ("docs")
.IsDependentOn ("nuget")
.IsDependentOn ("component")
.IsDependentOn ("tests")
.IsDependentOn ("samples");
Task ("Mac-CI")
.IsDependentOn ("CI");
2016-05-05 04:24:31 +03:00
Task ("Windows-CI")
.IsDependentOn ("CI");
2016-05-05 04:24:31 +03:00
2017-02-21 23:38:18 +03:00
Task ("Linux-CI")
.IsDependentOn ("CI");
2017-02-21 23:38:18 +03:00
////////////////////////////////////////////////////////////////////////////////////////////////////
// BUILD NOW
////////////////////////////////////////////////////////////////////////////////////////////////////
Information ("Cake.exe ToolPath: {0}", CakeToolPath);
Information ("NuGet.exe ToolPath: {0}", NugetToolPath);
Information ("Xamarin-Component.exe ToolPath: {0}", XamarinComponentToolPath);
Information ("genapi.exe ToolPath: {0}", GenApiToolPath);
Information ("sn.exe ToolPath: {0}", SNToolPath);
2017-05-12 19:25:21 +03:00
Information ("msbuild.exe ToolPath: {0}", MSBuildToolPath);
if (IS_ON_CI) {
Information ("Detected that we are building on CI, {0}.", IS_ON_FINAL_CI ? "and on FINAL CI" : "but NOT on final CI");
} else {
Information ("Detected that we are {0} on CI.", "NOT");
}
ListEnvironmentVariables ();
RunTarget (TARGET);