189 lines
5.9 KiB
PowerShell

<#
.SYNOPSIS
Build all dlls of psqlodbc project using MSbuild.
.DESCRIPTION
Build psqlodbc35w.dll, psqlodbc30a.dll, pgenlist.dll, pgenlista.dll
and pgxalib.dll for both x86 and x64 platforms.
.PARAMETER Target
Specify the target of MSBuild. "Build"(default), "Rebuild" or
"Clean" is available.
.PARAMETER VCVersion
Visual Studio version is determined automatically unless this
option is specified.
.PARAMETER Platform
Specify build platforms, "both"(default), "Win32" or "x64" is
available.
.PARAMETER AlongWithInstallers
Specify when you'd like to build installers after building drivers.
.PARAMETER Toolset
MSBuild PlatformToolset is determined automatically unless this
option is specified. Currently "v100", "Windows7.1SDK", "v110",
"v110_xp", "v120", "v120_xp", "v140" or "v140_xp" is available.
.PARAMETER MSToolsVersion
MSBuild ToolsVersion is detemrined automatically unless this
option is specified. Currently "4.0", "12.0" or "14.0" is available.
.PARAMETER Configuration
Specify "Release"(default) or "Debug".
.PARAMETER BuildConfigPath
Specify the configuration xml file name if you want to use
the configuration file other than standard one.
The relative path is relative to the current directory.
.EXAMPLE
> .\BuildAll
Build with default or automatically selected parameters.
.EXAMPLE
> .\BuildAll Clean
Clean all generated files.
.EXAMPLE
> .\BuildAll -V(CVersion) 11.0
Build using Visual Studio 11.0 environment.
.EXAMPLE
> .\BuildAll -P(latform) x64
Build only 64bit dlls.
.EXAMPLE
> .\BuildAll -A(longWithInstallers)
Build installers as well after building drivers.
.NOTES
Author: Hiroshi Inoue
Date: Febrary 1, 2014
#>
#
# build 32bit & 64bit dlls for VC10 or later
#
Param(
[ValidateSet("Build", "Rebuild", "Clean", "info")]
[string]$Target="Build",
[string]$VCVersion,
[ValidateSet("Win32", "x64", "both")]
[string]$Platform="both",
[string]$Toolset,
[ValidateSet("", "4.0", "12.0", "14.0", "15.0")]
[string]$MSToolsVersion,
[ValidateSet("Debug", "Release")]
[String]$Configuration="Release",
[string]$BuildConfigPath,
[switch]$AlongWithInstallers
)
function buildPlatform([xml]$configInfo, [string]$Platform)
{
if ($Platform -ieq "x64") {
$platinfo=$configInfo.Configuration.x64
} else {
$platinfo=$configInfo.Configuration.x86
}
$BUILD_MACROS=$platinfo.build_macros
$PG_INC=getPGDir $configInfo $Platform "include"
$PG_LIB=getPGDir $configInfo $Platform "lib"
$PG_BIN=getPGDir $configInfo $Platform "bin"
Write-Host "USE LIBPQ : ($PG_INC $PG_LIB $PG_BIN)"
if (-not (Test-Path $PG_INC)) {
throw("`n!!!! include directory $PG_INC does not exist`nplease specify the correct folder name using editConfiguration")
}
if (-not (Test-Path $PG_LIB)) {
throw("`n!!!! lib directory $PG_LIB does not exist`nplease specify the correct folder name using editConfiguration")
}
if (-not (Test-Path $PG_BIN)) {
throw("`n!!!! bin directory $PG_BIN does not exist`nplease specify the correct folder name using editConfiguration")
}
$useSplit=$true
if ($useSplit) {
$macroList = -split $BUILD_MACROS
} else {
$BUILD_MACROS = $BUILD_MACROS -replace ';', '`;'
$BUILD_MACROS = $BUILD_MACROS -replace '"', '`"'
$macroList = iex "write-output $BUILD_MACROS"
}
& ${msbuildexe} ./platformbuild.vcxproj /tv:$MSToolsVersion "/p:Platform=$Platform;Configuration=$Configuration;PlatformToolset=${Toolset}" /t:$target /p:VisualStudioVersion=${VCVersion} /p:DRIVERVERSION=$DRIVERVERSION /p:PG_INC=$PG_INC /p:PG_LIB=$PG_LIB /p:PG_BIN=$PG_BIN $macroList
}
$scriptPath = (Split-Path $MyInvocation.MyCommand.Path)
Import-Module ${scriptPath}\Psqlodbc-config.psm1
$configInfo = LoadConfiguration $BuildConfigPath $scriptPath
$DRIVERVERSION=$configInfo.Configuration.version
pushd $scriptPath
$path_save = ${env:PATH}
Import-Module ${scriptPath}\MSProgram-Get.psm1
try {
$msbuildexe=Find-MSBuild ([ref]$VCVersion) ([ref]$MSToolsVersion) ([ref]$Toolset) $configInfo
} catch [Exception] {
if ("$_.Exception.Message" -ne "") {
Write-Host $_.Exception.Message -ForegroundColor Red
} else {
echo $_.Exception | Format-List -Force
}
popd
Remove-Module Psqlodbc-config
return
} finally {
Remove-Module MSProgram-Get
}
$recordResult = $true
try {
#
# build 32bit dlls
#
if ($Platform -ieq "Win32" -or $Platform -ieq "both") {
buildPlatform $configInfo "Win32"
if ($LastExitCode -ne 0) {
$recordResult = $false
}
}
#
# build 64bit dlls
#
if ($recordResult -and ($Platform -ieq "x64" -or $Platform -ieq "both")) {
buildPlatform $configInfo "x64"
if ($LastExitCode -ne 0) {
$recordResult = $false
}
}
#
# Write the result to configuration xml
#
$resultText="successful"
if ($recordResult) {
$configInfo.Configuration.BuildResult.Date=[string](Get-Date)
$configInfo.Configuration.BuildResult.VisualStudioVersion=$VCVersion
$configInfo.Configuration.BuildResult.PlatformToolset=$Toolset
$configInfo.Configuration.BuildResult.ToolsVersion=$MSToolsVersion
$configInfo.Configuration.BuildResult.Platform=$Platform
SaveConfiguration $configInfo
} else {
$resultText="failed"
}
Write-Host "ToolsVersion=$MSToolsVersion VisualStudioVersion=$VCVersion PlatformToolset=$Toolset Platform=$Platform $resultText`n"
#
# build installers as well
#
if ($AlongWithInstallers) {
if (-not $recordResult) {
throw("compilation failed")
}
$cpu = $Platform
if ($Platform -eq "win32") {
$cpu = "x86"
}
..\installer\buildInstallers.ps1 -cpu $cpu -BuildConfigPath $BuildConfigPath
if ($LASTEXITCODE -ne 0) {
throw "Failed to build installers"
}
}
} catch [Exception] {
if ("$_.Exception.Message" -ne "") {
Write-Host $_.Exception.Message -ForegroundColor Red
} else {
echo $_.Exception | Format-List -Force
}
} finally {
$env:PATH = $path_save
popd
Remove-Module Psqlodbc-config
}