Move CheckPrereqs to MSBuild (#3895)

* Move CheckPrereqs to MSBuild

* Tabs to Spaces

* PR feedback
This commit is contained in:
Piotr Puszkiewicz 2016-07-20 23:42:23 -04:00 committed by GitHub
parent 24d2e638d5
commit 9446a81a25
9 changed files with 126 additions and 278 deletions

View file

@ -2,7 +2,6 @@
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="GetCurrentRuntimeInformation" AssemblyFile="$(CLIBuildDll)" />
<UsingTask TaskName="GenerateBuildVersionInfo" AssemblyFile="$(CLIBuildDll)" />
<UsingTask TaskName="CheckPrereqs" AssemblyFile="$(CLIBuildDll)" />
<UsingTask TaskName="SetEnvVar" AssemblyFile="$(CLIBuildDll)" />
<UsingTask TaskName="DotNetBuild" AssemblyFile="$(CLIBuildDll)" />
<UsingTask TaskName="DotNetPack" AssemblyFile="$(CLIBuildDll)" />
@ -12,11 +11,20 @@
<UsingTask TaskName="ExtractArchive" AssemblyFile="$(CLIBuildDll)" />
<UsingTask TaskName="ArchiveDirectory" AssemblyFile="$(CLIBuildDll)" />
<Import Project="prepare/CheckPrereqs.targets" />
<Target Name="Prepare"
DependsOnTargets="Init;DownloadHostAndSharedFxArtifacts;RestorePackages;ZipTemplates" />
<Target Name="Init"
DependsOnTargets="BuildDotnetCliBuildFramework">
DependsOnTargets="InitializeCommonProps;
BuildDotnetCliBuildFramework;
CheckPrereqs;">
</Target>
<Target Name="InitializeCommonProps"
DependsOnTargets="BuildDotnetCliBuildFramework" >
<!-- Current Runtime Information -->
<GetCurrentRuntimeInformation>
<Output TaskParameter="Rid" PropertyName="Rid" />
@ -41,7 +49,7 @@
<OutputDirectory>$(Stage2Directory)/</OutputDirectory>
<Stage2CompilationDirectory>$(BaseOutputDirectory)/stage2compilation</Stage2CompilationDirectory>
<IntermediateDirectory>$(BaseOutputDirectory)/intermediate</IntermediateDirectory>
<PackagesDirectory>$(BaseOutputDirectory)/packages</PackagesDirectory>
<PackagesDirectory>$(BaseOutputDirectory)/packages</PackagesDirectory>
<SharedFrameworkPublishDirectory>$(IntermediateDirectory)/sharedFrameworkPublish</SharedFrameworkPublishDirectory>
</PropertyGroup>
@ -64,7 +72,7 @@
<PropertyGroup>
<VersionBadge>$(BaseOutputDirectory)/$(VersionBadgeMoniker)_$(Configuration)_version_badge.svg</VersionBadge>
<SdkVersion>$(NugetVersion)</SdkVersion>
<SdkNugetVersion>$(VersionMajor).$(VersionMinor).$(VersionPatch)-preview3-$(CommitCount)</SdkNugetVersion>
<ProjectModelNugetVersion>$(VersionMajor).$(VersionMinor).$(VersionPatch)-rc4-$(CommitCount)</ProjectModelNugetVersion>
<DependencyModelAndInternalAbstractionsNugetVersion>$(VersionMajor).$(VersionMinor).1-beta-$(CommitCount)</DependencyModelAndInternalAbstractionsNugetVersion>
@ -106,8 +114,6 @@
<CombinedFrameworkHostCompressedFileName>dotnet-$(ProductMonikerRid).$(SharedFrameworkVersion)$(ArchiveExtension)</CombinedFrameworkHostCompressedFileName>
</PropertyGroup>
<CheckPrereqs />
<!-- SetTelemetryProfile -->
<SetEnvVar Name="DOTNET_CLI_TELEMETRY_PROFILE" Value="$(DOTNET_CLI_TELEMETRY_PROFILE);https://github.com/dotnet/cli;$(CommitHash)" />
</Target>
@ -164,7 +170,7 @@
InputFile="%(_DownloadAndExtractItem.DownloadFileName)"
DestinationDirectory="%(_DownloadAndExtractItem.ExtractDestintation)" />
</Target>
<Target Name="RestorePackages"
DependsOnTargets="SetupRestorePackagesInputsOutputs;Init"
Inputs="@(RestorePackagesInput)"
@ -180,7 +186,7 @@
<ItemGroup>
<SrcToolsLockFiles Include="$(RepoRoot)/src/**/project.lock.json;$(RepoRoot)/tools/**/project.lock.json" />
</ItemGroup>
<Delete Files="@(SrcToolsLockFiles)" />
<Delete Files="@(SrcToolsLockFiles)" />
</Target>
<Target Name="SetupRestorePackagesInputsOutputs">
@ -196,7 +202,7 @@
</PropertyGroup>
<ItemGroup>
<DotNetNewArchive Include="$([System.IO.Directory]::GetDirectories($(_DotNetNewFolder)))" />
<ZipTemplatesInput Include="$(_DotNetNewFolder)/**" Exclude="$(_DotNetNewFolder)/*.zip" />
<ZipTemplatesOutput Include="@(DotNetNewArchive->'%(RelativeDir)/$([System.IO.Path]::GetFileName('%(DotNetNewArchive.FullPath)')).zip')" />
</ItemGroup>
@ -206,7 +212,7 @@
DependsOnTargets="SetupZipTemplatesInputsOutputs"
Inputs="@(ZipTemplatesInput)"
Outputs="@(ZipTemplatesOutput)">
<ArchiveDirectory InputDirectory="%(DotNetNewArchive.FullPath)"
FileName="$([System.IO.Path]::GetFileName(%(DotNetNewArchive.FullPath)))"
OutputDirectory="%(DotNetNewArchive.RelativeDir)"

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<CentosCoreclrAndCoreFxDependencies Include="unzip" />
<CentosCoreclrAndCoreFxDependencies Include="libunwind" />
<CentosCoreclrAndCoreFxDependencies Include="gettext" />
<CentosCoreclrAndCoreFxDependencies Include="libcurl-devel" />
<CentosCoreclrAndCoreFxDependencies Include="openssl-devel" />
<CentosCoreclrAndCoreFxDependencies Include="zlib" />
<CentosCoreclrAndCoreFxDependencies Include="libicu-devel" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="UbuntuCoreclrAndCoreFxDependencies.props" />
<Import Project="DebianPackageBuildDependencies.props" />
<Import Project="CentosCoreclrAndCoreFxDependencies.props" />
<Target Name="CheckPrereqs"
DependsOnTargets="InitializeCommonProps;
CheckUbuntuAptGetDependencies;
CheckCentOsYumDependencies;">
<Message Text="Using Stage0 version:" />
<Exec Command="$(DotnetStage0) --version" />
</Target>
<Target Name="CheckUbuntuAptGetDependencies"
Condition=" '$(Rid)' == 'ubuntu.14.04-x64' ">
<Exec Command="dpkg -s %(UbuntuCoreclrAndCoreFxDependencies.Identity)" />
<Exec Command="dpkg -s %(DebianPackageBuildDependencies.Identity)" />
<OnError ExecuteTargets="ShowAptGetUsage" />
</Target>
<Target Name="ShowAptGetUsage">
<Message Text="Install the missing dependency with `sudo apt-get install {package}`." />
</Target>
<Target Name="CheckCentOsYumDependencies"
Condition=" '$(OSName)' == 'centos' ">
<Exec Command="yum list installed %(CentosCoreclrAndCoreFxDependencies.Identity)" />
<OnError ExecuteTargets="ShowYumUsage" />
</Target>
<Target Name="ShowYumUsage">
<Message Text="Install the missing dependency with `yum install {package}`." />
</Target>
</Project>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<DebianPackageBuildDependencies Include="devscripts" />
<DebianPackageBuildDependencies Include="debhelper" />
<DebianPackageBuildDependencies Include="build-essential" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<UbuntuCoreclrAndCoreFxDependencies Include="libc6" />
<UbuntuCoreclrAndCoreFxDependencies Include="libedit2" />
<UbuntuCoreclrAndCoreFxDependencies Include="libffi6" />
<UbuntuCoreclrAndCoreFxDependencies Include="libgcc1" />
<UbuntuCoreclrAndCoreFxDependencies Include="libicu52" />
<UbuntuCoreclrAndCoreFxDependencies Include="liblldb-3.6" />
<UbuntuCoreclrAndCoreFxDependencies Include="libllvm3.6" />
<UbuntuCoreclrAndCoreFxDependencies Include="liblttng-ust0" />
<UbuntuCoreclrAndCoreFxDependencies Include="liblzma5" />
<UbuntuCoreclrAndCoreFxDependencies Include="libncurses5" />
<UbuntuCoreclrAndCoreFxDependencies Include="libpython2.7" />
<UbuntuCoreclrAndCoreFxDependencies Include="libstdc++6" />
<UbuntuCoreclrAndCoreFxDependencies Include="libtinfo5" />
<UbuntuCoreclrAndCoreFxDependencies Include="libunwind8" />
<UbuntuCoreclrAndCoreFxDependencies Include="liburcu1" />
<UbuntuCoreclrAndCoreFxDependencies Include="libuuid1" />
<UbuntuCoreclrAndCoreFxDependencies Include="zlib1g" />
<UbuntuCoreclrAndCoreFxDependencies Include="libasn1-8-heimdal" />
<UbuntuCoreclrAndCoreFxDependencies Include="libcomerr2" />
<UbuntuCoreclrAndCoreFxDependencies Include="libcurl3" />
<UbuntuCoreclrAndCoreFxDependencies Include="libgcrypt11" />
<UbuntuCoreclrAndCoreFxDependencies Include="libgnutls26" />
<UbuntuCoreclrAndCoreFxDependencies Include="libgpg-error0" />
<UbuntuCoreclrAndCoreFxDependencies Include="libgssapi3-heimdal" />
<UbuntuCoreclrAndCoreFxDependencies Include="libgssapi-krb5-2" />
<UbuntuCoreclrAndCoreFxDependencies Include="libhcrypto4-heimdal" />
<UbuntuCoreclrAndCoreFxDependencies Include="libheimbase1-heimdal" />
<UbuntuCoreclrAndCoreFxDependencies Include="libheimntlm0-heimdal" />
<UbuntuCoreclrAndCoreFxDependencies Include="libhx509-5-heimdal" />
<UbuntuCoreclrAndCoreFxDependencies Include="libidn11" />
<UbuntuCoreclrAndCoreFxDependencies Include="libk5crypto3" />
<UbuntuCoreclrAndCoreFxDependencies Include="libkeyutils1" />
<UbuntuCoreclrAndCoreFxDependencies Include="libkrb5-26-heimdal" />
<UbuntuCoreclrAndCoreFxDependencies Include="libkrb5-3" />
<UbuntuCoreclrAndCoreFxDependencies Include="libkrb5support0" />
<UbuntuCoreclrAndCoreFxDependencies Include="libldap-2.4-2" />
<UbuntuCoreclrAndCoreFxDependencies Include="libp11-kit0" />
<UbuntuCoreclrAndCoreFxDependencies Include="libroken18-heimdal" />
<UbuntuCoreclrAndCoreFxDependencies Include="librtmp0" />
<UbuntuCoreclrAndCoreFxDependencies Include="libsasl2-2" />
<UbuntuCoreclrAndCoreFxDependencies Include="libsqlite3-0" />
<UbuntuCoreclrAndCoreFxDependencies Include="libssl1.0.0" />
<UbuntuCoreclrAndCoreFxDependencies Include="libtasn1-6" />
<UbuntuCoreclrAndCoreFxDependencies Include="libwind0-heimdal" />
</ItemGroup>
</Project>

View file

@ -1,127 +0,0 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.Build.Utilities;
using Microsoft.DotNet.Cli.Build.Framework;
namespace Microsoft.DotNet.Cli.Build
{
public class CheckPrereqs : Task
{
public override bool Execute()
{
return CheckCoreclrPlatformDependencies() &&
CheckInstallerBuildPlatformDependencies() &&
LocateStage0();
}
private bool CheckCoreclrPlatformDependencies()
{
return CheckUbuntuCoreclrAndCoreFxDependencies() &&
CheckCentOSCoreclrAndCoreFxDependencies();
}
private bool CheckInstallerBuildPlatformDependencies()
{
return CheckUbuntuDebianPackageBuildDependencies();
}
private bool CheckUbuntuCoreclrAndCoreFxDependencies()
{
bool isSuccessful = true;
if (CurrentPlatform.IsPlatform(BuildPlatform.Ubuntu, "14.04"))
{
var stage0 = DotNetCli.Stage0.BinPath;
foreach (var package in PackageDependencies.UbuntuCoreclrAndCoreFxDependencies)
{
if (!AptDependencyUtility.PackageIsInstalled(package))
{
isSuccessful = false;
Log.LogError($"Coreclr package dependency {package} missing. Install with `apt-get install {package}`");
}
}
}
return isSuccessful;
}
private bool CheckCentOSCoreclrAndCoreFxDependencies()
{
var isSuccessful = true;
if (CurrentPlatform.IsPlatform(BuildPlatform.CentOS))
{
foreach (var package in PackageDependencies.CentosCoreclrAndCoreFxDependencies)
{
if (!YumDependencyUtility.PackageIsInstalled(package))
{
isSuccessful = false;
Log.LogError($"Coreclr package dependency {package} missing. Install with yum install {package}");
}
}
}
return isSuccessful;
}
private bool CheckUbuntuDebianPackageBuildDependencies()
{
var isSuccessful = true;
if (CurrentPlatform.IsPlatform(BuildPlatform.Ubuntu, "14.04"))
{
var aptDependencyUtility = new AptDependencyUtility();
foreach (var package in PackageDependencies.DebianPackageBuildDependencies)
{
if (!AptDependencyUtility.PackageIsInstalled(package))
{
isSuccessful = false;
Log.LogError($"Debian package build dependency {package} missing. Install with apt-get install {package}");
}
}
}
return isSuccessful;
}
private bool LocateStage0()
{
// We should have been run in the repo root, so locate the stage 0 relative to current directory
var stage0 = DotNetCli.Stage0.BinPath;
if (!Directory.Exists(stage0))
{
Log.LogError($"Stage 0 directory does not exist: {stage0}");
return false;
}
// Identify the version
string versionFile = Directory.GetFiles(stage0, ".version", SearchOption.AllDirectories).FirstOrDefault();
if (string.IsNullOrEmpty(versionFile))
{
Log.LogError($"'.version' file not found in '{stage0}' folder");
return false;
}
var version = File.ReadAllLines(versionFile);
Log.LogMessage($"Using Stage 0 Version: {version[1]}");
return true;
}
}
}

View file

@ -1,96 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Microsoft.DotNet.Cli.Build
{
public class PackageDependencies
{
public static string[] DebianPackageBuildDependencies
{
get
{
return new string[]
{
"devscripts",
"debhelper",
"build-essential"
};
}
}
public static string[] UbuntuCoreclrAndCoreFxDependencies
{
get
{
return new string[]
{
"libc6",
"libedit2",
"libffi6",
"libgcc1",
"libicu52",
"liblldb-3.6",
"libllvm3.6",
"liblttng-ust0",
"liblzma5",
"libncurses5",
"libpython2.7",
"libstdc++6",
"libtinfo5",
"libunwind8",
"liburcu1",
"libuuid1",
"zlib1g",
"libasn1-8-heimdal",
"libcomerr2",
"libcurl3",
"libgcrypt11",
"libgnutls26",
"libgpg-error0",
"libgssapi3-heimdal",
"libgssapi-krb5-2",
"libhcrypto4-heimdal",
"libheimbase1-heimdal",
"libheimntlm0-heimdal",
"libhx509-5-heimdal",
"libidn11",
"libk5crypto3",
"libkeyutils1",
"libkrb5-26-heimdal",
"libkrb5-3",
"libkrb5support0",
"libldap-2.4-2",
"libp11-kit0",
"libroken18-heimdal",
"librtmp0",
"libsasl2-2",
"libsqlite3-0",
"libssl1.0.0",
"libtasn1-6",
"libwind0-heimdal"
};
}
}
public static string[] CentosCoreclrAndCoreFxDependencies
{
get
{
return new string[]
{
"unzip",
"libunwind",
"gettext",
"libcurl-devel",
"openssl-devel",
"zlib",
"libicu-devel"
};
}
}
}
}

View file

@ -1,24 +0,0 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.DotNet.Cli.Build.Framework;
namespace Microsoft.DotNet.Cli.Build
{
public class AptDependencyUtility
{
public static bool PackageIsInstalled(string packageName)
{
var result = Command.Create("dpkg", "-s", packageName)
.CaptureStdOut()
.CaptureStdErr()
.QuietBuildReporter()
.Execute();
return result.ExitCode == 0;
}
}
}

View file

@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.DotNet.Cli.Build.Framework;
namespace Microsoft.DotNet.Cli.Build
{
public class YumDependencyUtility
{
public static bool PackageIsInstalled(string packageName)
{
var result = Command.Create("yum", "list", "installed", packageName)
.CaptureStdOut()
.CaptureStdErr()
.Execute();
return result.ExitCode == 0;
}
}
}