304 lines
8.4 KiB
PowerShell
304 lines
8.4 KiB
PowerShell
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
#
|
|
#
|
|
# NOTICE: This script could mess up your development box. Use with extreme
|
|
# caution. Better yet, test this on a non-production env vm before attempting
|
|
# to use it on any box you consider important.
|
|
#
|
|
#
|
|
# This is essentially a devopts script for installing tools that are needed for
|
|
# the Lucene.NEt build scripts to run CI on windows.
|
|
#
|
|
# The script could use some refactoring and has the need to
|
|
# increase its functionality for version & better error checking.
|
|
#
|
|
# However it is a good alternative to having to remember where to
|
|
# certain download software packages from or what to execute after the install.
|
|
#
|
|
# This could also be handy for setting up new dev machines on windows 8 previews.
|
|
#
|
|
# When Co-App is finally released and is considered stable, we could potentially
|
|
# replace this script with that.
|
|
# http://coapp.org/
|
|
|
|
function Get-ScriptDirectory
|
|
{
|
|
$script = (Get-Variable MyInvocation -Scope 1).Value
|
|
Split-Path $script.MyCommand.Path
|
|
}
|
|
|
|
$cd = Get-ScriptDirectory;
|
|
|
|
$Folder64 = $Env:ProgramFiles;
|
|
$Folder32 = ${Env:ProgramFiles(x86)};
|
|
|
|
$RequireWin7_1 = $false;
|
|
$RequireFxCop10 = $false;
|
|
$RequireSHFB = $false;
|
|
$RequireNCover = $false;
|
|
|
|
echo $Folder32;
|
|
|
|
$FindWin7_1 = Test-Path ($Folder64 + "\Microsoft SDKs\Windows\v7.1");
|
|
if($FindWin7_1 -eq $false) {
|
|
$FindWin7_1 = Test-Path ($Folder32 + "\Microsoft SDKs\Windows\v7.1");
|
|
}
|
|
|
|
if($FindWin7_1 -eq $false) {
|
|
echo "Windows 7.1 SDK ..Not installed in its expected location.";
|
|
$RequireWin7_1 = $true;
|
|
} else {
|
|
echo "Windows 7.1 SDK ..Found.";
|
|
}
|
|
|
|
$FindFxCop10 = Test-Path($Folder32 + "\Microsoft Fxcop 10.0");
|
|
|
|
if($FindFxCop10 -eq $false) {
|
|
echo "Fx Cop 10 is not installed in its expected location.";
|
|
$RequireFxCop10 = $true;
|
|
} else {
|
|
echo "Fx Cop 10 ..Found.";
|
|
}
|
|
|
|
$FindNCover = Test-Path ($Folder32 + "\NCover\NCover.Console.exe");
|
|
if($FindNCover -eq $false) {
|
|
echo "NCover is not installed in its expected location.";
|
|
$RequireNCover = $true;
|
|
} else {
|
|
echo "NCover ..Found.";
|
|
}
|
|
|
|
$FindSHFB = Test-Path ($Folder32 + "\EWSoftware\Sandcastle Help File Builder");
|
|
|
|
if($FindSHFB -eq $false) {
|
|
echo "Sandcastle Help File Builder is not installed in its expected location.";
|
|
$RequireSFHB = $true;
|
|
} else {
|
|
echo "Sandcastle Help File Builder ..Found.";
|
|
}
|
|
|
|
Function PromptForSHFBInstall
|
|
{
|
|
$process = read-host "Do you want to download and install SandCastle Help File Builder ? (Y) or (N)";
|
|
if($process -eq "Y")
|
|
{
|
|
|
|
$license = Read-Host "Do you agree to reading and accepting the ms-pl license http://www.opensource.org/licenses/MS-PL ? (Y) or (N)";
|
|
|
|
if($license -eq "Y")
|
|
{
|
|
[System.Reflection.Assembly]::LoadFrom((Join-Path ($cd) "..\..\lib\ICSharpCode\SharpZipLib\0.85\ICSharpCode.SharpZipLib.dll"));
|
|
$zip = New-Object ICSharpCode.SharpZipLib.Zip.FastZip
|
|
$client = new-object System.Net.WebClient;
|
|
$SHFBUrl = "http://download.codeplex.com/Download?ProjectName=shfb&DownloadId=214182&FileTime=129456589216470000&Build=18101";
|
|
$SHFBFileName = Join-Path $home Downloads\SHFBGuidedInstallation.zip;
|
|
$SHFBFileNameExtract = Join-Path $home Downloads\SHFBGuidedInstallation;
|
|
[System.Net.GlobalProxySelection]::Select = [System.Net.GlobalProxySelection]::GetEmptyWebProxy();
|
|
trap { $error[0].Exception.ToString() }
|
|
|
|
$exists = Test-Path $SHFBFileName;
|
|
if($exists -eq $false)
|
|
{
|
|
echo ("Downloading SHFB to " + $SHFBFileName);
|
|
$client.DownloadFile($SHFBUrl,$SHFBFileName);
|
|
}
|
|
|
|
$exists = Test-Path $SHFBFileNameExtract;
|
|
if($exists -eq $false)
|
|
{
|
|
echo ("Extracting SHFB to " + $SHFBFileNameExtract);
|
|
$zip.ExtractZip($SHFBFileName, $SHFBFileNameExtract, $null);
|
|
}
|
|
|
|
|
|
echo ("Installing SHFB...");
|
|
$installer = Join-Path $HOME Downloads\SHFBGuidedInstallation\SandCastleInstaller.exe
|
|
|
|
|
|
trap [Exception] {
|
|
echo $_.Exception.Message;
|
|
return;
|
|
}
|
|
& $installer | Out-Null
|
|
|
|
if($LASTEXITCODE -eq 0)
|
|
{
|
|
echo "SHFB was installed" ;
|
|
} else {
|
|
echo "SHFB installation failed.";
|
|
return;
|
|
}
|
|
|
|
echo ("Deleting SHFB Zip");
|
|
del $SHFBFileName;
|
|
|
|
echo ("Deleteing Extracted Files...");
|
|
del $SHFBFileNameExtract;
|
|
}
|
|
else
|
|
{
|
|
echo "SandCastle Help File Builder install aborted.";
|
|
}
|
|
}
|
|
}
|
|
|
|
Function PromptForWinSdk7_1Install
|
|
{
|
|
$process = read-host "Do you want to download and install Windows Sdk 7.1 ? (Y) or (N)";
|
|
if($process -eq "Y")
|
|
{
|
|
$client = new-object System.Net.WebClient;
|
|
$WinSdk7_1Url = "http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe";
|
|
$WinSdk7_1FileName = Join-Path $home Downloads\winsdk_web.exe;
|
|
[System.Net.GlobalProxySelection]::Select = [System.Net.GlobalProxySelection]::GetEmptyWebProxy();
|
|
trap { $error[0].Exception.ToString() }
|
|
|
|
$exists = Test-Path $WinSdk7_1FileName;
|
|
if($exists -eq $false)
|
|
{
|
|
echo ("Downloading Win Sdk 7.1 to " + $WinSdk7_1FileName);
|
|
$client.DownloadFile($WinSdk7_1Url,$WinSdk7_1FileName);
|
|
}
|
|
|
|
|
|
echo ("Installing Win Sdk 7.1 ...");
|
|
$installer = $WinSdk7_1FileName;
|
|
trap [Exception] {
|
|
echo $_.Exception.Message;
|
|
return;
|
|
}
|
|
|
|
& $installer
|
|
|
|
echo "Attempting to setup Win Sdk Version...";
|
|
$verExe = "C:\Program Files\Microsoft SDKs\Windows\v7.1\Setup\WindowsSdkVer.exe";
|
|
$verExeExists = Test-Path $verExe;
|
|
|
|
|
|
echo "Say yes to the next next two prompts if you wish to set WindowsSdkVer to -version:v7.1 ...";
|
|
if($verExeExists)
|
|
{
|
|
$p = [diagnostics.process]::Start($verExe, " -version:v7.1");
|
|
|
|
trap [Exception] {
|
|
echo ("Most likely this action was cancelled by you.: " + $_.Exception.Message);
|
|
return;
|
|
}
|
|
|
|
$p.WaitForExit() | out-null
|
|
if($LASTEXITCODE -eq 0)
|
|
{
|
|
echo "Win Sdk 7.1 was installed" ;
|
|
} else {
|
|
echo "Win Sdk 7.1 failed.";
|
|
return;
|
|
}
|
|
|
|
|
|
} else {
|
|
echo ($verExe + "was not found.")
|
|
}
|
|
|
|
echo ("Deleteing installer...");
|
|
del $WinSdk7_1FileName;
|
|
$RequireWin7_1 = $false;
|
|
|
|
}
|
|
else
|
|
{
|
|
echo "Win Sdk 7.1 install aborted.";
|
|
}
|
|
|
|
}
|
|
|
|
Function PromptForFxCop10Install()
|
|
{
|
|
$process = read-host "Do you want to install FxCop 10.0 (WinSdk 7.1 is required)? (Y) or (N)";
|
|
if($process -eq "Y")
|
|
{
|
|
$fxCopExe = "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\FXCop\FxCopSetup.exe";
|
|
$fxCopExeExists = Test-Path $fxCopExe;
|
|
|
|
if($fxCopExeExists -eq $true)
|
|
{
|
|
trap [Exception] {
|
|
echo $_.Exception.Message;
|
|
return;
|
|
}
|
|
& $fxCopExe;
|
|
|
|
} else {
|
|
echo ("The installer for fxcop 10 was not found at its expected location: " + $fxCopExe);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
Function PromptForNCoverInstall()
|
|
{
|
|
$process = read-host "NCover is not free, you are responsible for obtaining your own license. Do you want to install NCover ? (Y) or (N)";
|
|
|
|
|
|
if($process -eq "Y")
|
|
{
|
|
$client = new-object System.Net.WebClient;
|
|
$download = "http://downloads.ncover.com/NCover-x64-3.4.18.6937.msi";
|
|
$downloadFileName = Join-Path ($home + "Downloads\NCover-x64-3.4.18.6937.msi");
|
|
[System.Net.GlobalProxySelection]::Select = [System.Net.GlobalProxySelection]::GetEmptyWebProxy();
|
|
trap { $error[0].Exception.ToString() }
|
|
|
|
|
|
$exists = Test-Path $downloadFileName;
|
|
if($exists -eq $false)
|
|
{
|
|
echo ("Downloading NCover to " + $downloadFileName);
|
|
$client.DownloadFile($download,$downloadFileName);
|
|
}
|
|
|
|
echo "Installing NCover...";
|
|
trap [Exception] {
|
|
echo $_.Exception.Message;
|
|
return;
|
|
}
|
|
& $fxCopExe;
|
|
|
|
echo "Deleting installer....";
|
|
del $downloadFileName;
|
|
}
|
|
}
|
|
|
|
|
|
if($RequireSFHB -eq $true)
|
|
{
|
|
PromptForSHFBInstall;
|
|
}
|
|
|
|
if($RequireWin7_1 -eq $true)
|
|
{
|
|
PromptForWinSdk7_1Install
|
|
}
|
|
|
|
if($RequireWin7_1 -eq $false -and $RequireFxCop10 -eq $true)
|
|
{
|
|
PromptForFxCop10Install
|
|
}
|
|
|
|
if($RequireNCover -eq $true)
|
|
{
|
|
PromptForNCoverInstall
|
|
} |