sources/build.ps1 (191 lines of code) (raw):
#
# Copyright 2019 Google LLC
#
# 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.
#
$ErrorActionPreference = "stop"
# Use TLS 1.2 for all downloads.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
${env:__BUILD_ENV_INITIALIZED} = "1"
#------------------------------------------------------------------------------
# Remove Cygwin, Msys from PATH
#------------------------------------------------------------------------------
$env:Path = ($env:Path -split ";" `
| Where-Object {!($_ -like "*msys*")} `
| Where-Object {!($_ -like "*cygwin*")}) -join ";"
#------------------------------------------------------------------------------
# Find MSBuild and add to PATH
#------------------------------------------------------------------------------
if ((Get-Command "msbuild.exe" -ErrorAction SilentlyContinue) -eq $null)
{
$MsBuildCandidates = `
"${Env:ProgramFiles}\Microsoft Visual Studio\*\*\MSBuild\*\bin\msbuild.exe",
"${Env:ProgramFiles(x86)}\Microsoft Visual Studio\*\*\MSBuild\*\bin\msbuild.exe",
"c:\VS\MSBuild\Current\Bin\"
$Msbuild = $MsBuildCandidates | Resolve-Path -ErrorAction Ignore | Select-Object -ExpandProperty Path -First 1
if ($Msbuild)
{
$MsbuildDir = (Split-Path $Msbuild -Parent)
$env:Path += ";$MsbuildDir"
}
else
{
Write-Host "Could not find msbuild" -ForegroundColor Red
exit 1
}
}
$env:MSBUILD = $Msbuild
#------------------------------------------------------------------------------
# Find nmake and add to PATH
#------------------------------------------------------------------------------
$Nmake = (Get-Command "nmake.exe" -ErrorAction SilentlyContinue).Source
if ($Nmake -eq $null)
{
$NmakeCandidates = `
"${Env:ProgramFiles}\Microsoft Visual Studio\*\*\VC\Tools\MSVC\*\bin\Hostx86\*\nmake.exe",
"${Env:ProgramFiles(x86)}\Microsoft Visual Studio\*\*\VC\Tools\MSVC\*\bin\Hostx86\*\nmake.exe",
"c:\VS\VC\Tools\MSVC\*\bin\Hostx86\*\nmake.exe"
$Nmake = $NmakeCandidates | Resolve-Path -ErrorAction Ignore | Select-Object -ExpandProperty Path -First 1
if ($Nmake)
{
$NmakeDir = (Split-Path $NMake -Parent)
$env:Path += ";$NmakeDir"
}
else
{
Write-Host "Could not find nmake" -ForegroundColor Red
exit 1
}
}
#------------------------------------------------------------------------------
# Find cmake and add to PATH
#------------------------------------------------------------------------------
$Cmake = (Get-Command "cmake.exe" -ErrorAction SilentlyContinue).Source
if ($Cmake -eq $null)
{
$CmakeCandidates = `
"${Env:ProgramFiles}\Microsoft Visual Studio\*\*\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe",
"${Env:ProgramFiles(x86)}\Microsoft Visual Studio\*\*\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe",
"c:\VS\VC\Tools\MSVC\*\bin\Hostx86\*\nmake.exe"
$Cmake = $CmakeCandidates | Resolve-Path -ErrorAction Ignore | Select-Object -ExpandProperty Path -First 1
if ($Cmake)
{
$CmakeDir = (Split-Path $CMake -Parent)
$env:Path += ";$CmakeDir"
}
else
{
Write-Host "Could not find cmake" -ForegroundColor Red
#
# cmake isn't needed for all targets, so allow build to proceed.
#
}
}
$env:CMAKE = $Cmake
#------------------------------------------------------------------------------
# Find nuget and add to PATH
#------------------------------------------------------------------------------
$Nuget = (Get-Command "nuget.exe" -ErrorAction SilentlyContinue).Source
if ($Nuget -eq $null)
{
$NugetDownloadUrl = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
New-Item -ItemType Directory -Force "${PSScriptRoot}\.tools" | Out-Null
$Nuget = "${PSScriptRoot}\.tools\nuget.exe"
(New-Object System.Net.WebClient).DownloadFile($NugetDownloadUrl, $Nuget)
$env:Path += ";${PSScriptRoot}\.tools"
}
$env:NUGET = $Nuget
#------------------------------------------------------------------------------
# Restore packages and make them available in the environment
#------------------------------------------------------------------------------
if ((Test-Path "*.sln") -and !$args.Contains("clean"))
{
#
# Generate a nuget.config that prioritizes packages from the local feed.
#
if (Test-Path "${env:KOKORO_GFILE_DIR}\NuGetPackages")
{
$LocalFeed = "${env:KOKORO_GFILE_DIR}\NuGetPackages"
}
else
{
$LocalFeed = (Resolve-Path "${PSScriptRoot}\..\dependencies\NuGetPackages").Path
}
$NuGetConfig = @"
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<packageSources>
<clear />
<add key='nuget.org' value='https://api.nuget.org/v3/index.json' protocolVersion='3' />
<add key='dependencies' value='{0}' />
</packageSources>
</configuration>
"@ -f $LocalFeed | Out-File -Encoding ASCII ${PSScriptRoot}\NuGet.config
#
# Restore packages for solution.
#
& $Nmake restore
if ($LastExitCode -ne 0)
{
exit $LastExitCode
}
$PackageReferences = `
Get-ChildItem -Recurse -Include "*.csproj" `
| % { [xml](Get-Content $_) | Select-Xml "//PackageReference" | Select-Object -ExpandProperty Node } `
| sort -Property Include -Unique
#
# Add all tools to PATH.
#
$ToolsDirectories = $PackageReferences | % { "$($env:USERPROFILE)\.nuget\packages\$($_.Include)\$($_.Version)\tools" }
$env:Path += ";" + ($ToolsDirectories -join ";")
#
# Add environment variables indicating package versions, for example
# $env:Google_Apis_Auth = 1.2.3
#
$PackageReferences `
| ForEach-Object { New-Item -Name $_.Include.Replace(".", "_") -value $_.Version -ItemType Variable -Path Env: -Force }
}
Write-Host "PATH: ${Env:PATH}" -ForegroundColor Yellow
#------------------------------------------------------------------------------
# Find Google Cloud credentials and project (for tests)
#------------------------------------------------------------------------------
if (Test-Path "${env:KOKORO_GFILE_DIR}\iapdesktop-kokoro.json")
{
if (!$Env:GOOGLE_APPLICATION_CREDENTIALS)
{
$Env:GOOGLE_APPLICATION_CREDENTIALS = "${env:KOKORO_GFILE_DIR}\iapdesktop-kokoro.json"
}
& gcloud auth activate-service-account --key-file=$Env:GOOGLE_APPLICATION_CREDENTIALS | Out-Default
Write-Host "Google Cloud credentials: ${Env:GOOGLE_APPLICATION_CREDENTIALS}" -ForegroundColor Yellow
}
if (Test-Path "${env:KOKORO_GFILE_DIR}\test-configuration.json")
{
if (!$Env:IAPDESKTOP_CONFIGURATION)
{
$Env:IAPDESKTOP_CONFIGURATION = "${env:KOKORO_GFILE_DIR}\test-configuration.json"
}
Write-Host "Test configuration: ${Env:IAPDESKTOP_CONFIGURATION}" -ForegroundColor Yellow
}
#------------------------------------------------------------------------------
# Run nmake.
#------------------------------------------------------------------------------
& $Nmake $args
if ($LastExitCode -ne 0)
{
exit $LastExitCode
}