blob: 940fc35a557915747e4b5a1ca3b20f3fd090995d [file] [log] [blame]
#
# 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
}