winbuild/Psqlodbc-config.psm1 (183 lines of code) (raw):

$configurationXmlPath="" $configurationTemplatePath="" function InitConfiguration([string]$savePath) { $configInfo = [xml](Get-Content $configurationTemplatePath) if ($env:PROCESSOR_ARCHITECTURE -ieq "x86") { $x64info = $configInfo.Configuration.x64 $x64info.libpq.include = "" $x64info.libpq.lib = "" $x64info.libpq.bin = "" } $configInfo.save($savePath) return $configInfo } function GetConfiguration([string]$loadPath) { $configInfo = [xml] (Get-Content $loadPath) set-variable -name xmlFormatVersion -value "0.4" -option constant if ($configInfo.Configuration.formatVersion -ne $xmlFormatVersion) { $xmlDoc2 = [xml](Get-Content $configurationTemplatePath) $root2 = $XmlDoc2.get_DocumentElement() $root1 = $configInfo.get_DocumentElement() unifyNodes $root1 $root2 $root1.formatVersion = $xmlFormatVersion $configInfo.save($loadPath) } return $configInfo } function LoadConfiguration([string]$configPath, [string]$configDir) { Write-Debug "configPath=$configPath" set-variable -name configurationTemplatePath -scope 1 -value "$configDir\configuration_template.xml" if ("$configPath" -eq "") { if ("$env:PSQLODBC_WCONFIG" -eq "") { $configPath = "$configDir\configuration.xml" } else { $configPath = $env:PSQLODBC_WCONFIG } } set-variable -name configurationXmlPath -scope 1 -value $configPath if (!(Test-Path -path $configPath)) { return InitConFiguration $configPath } else { return GetConfiguration $configPath } } function SaveConfiguration([xml]$configInfo, [string]$savePath) { if ("$savePath" -eq "") { $savePath = $configurationXmlPath } $configInfo.save($savePath) } function unifyNodes($node1, $node2) { $attributes2 = $node2.get_Attributes() if ($attributes2.Count -gt 0) { $attributes1 = $node1.get_Attributes() foreach ($attrib in $attributes2) { $attribname = $attrib.name if (($attributes1.Count -eq 0) -or ($attributes1.GetNamedItem($attribname) -eq $null)) { Write-Debug " Adding attribute=$attribname" $addattr = $node1.OwnerDocument.ImportNode($attrib, $true) $added = $attributes1.Append($addattr) } } } if (!$node2.get_HasChildNodes()) { return } foreach ($child2 in $node2.get_ChildNodes()) { $nodename = $child2.get_Name() if ($nodename -eq "#text"){ continue } $matchnode = $node1.SelectSingleNode($nodename) if ($matchnode -eq $null) { Write-Debug "Adding node=$nodename" $addnode = $node1.OwnerDocument.ImportNode($child2, $true) $added = $node1.AppendChild($addnode) continue } unifyNodes $matchnode $child2 } } function getPGDir([xml]$configInfo, [string]$Platform, [string]$kind) { if ($Platform -ieq "x64") { $platinfo=$configInfo.Configuration.x64 } else { $platinfo=$configInfo.Configuration.x86 } $LIBPQVER=$platinfo.libpq.version if ($kind -eq "include") { $result=$platinfo.libpq.include } elseif ($kind -eq "lib") { $result=$platinfo.libpq.lib } else { $result=$platinfo.libpq.bin } if ($result -ne "default") { return $result } if ($Platform -ieq "x64") { if ($env:PROCESSOR_ARCHITECTURE -ieq "x86") { $pgmfs = $env:ProgramW6432 } else { $pgmfs = $env:ProgramFiles } } else { if ($env:PROCESSOR_ARCHITECTURE -ieq "x86") { $pgmfs = $env:ProgramFiles } else { $pgmfs = ${env:ProgramFiles(x86)} } } if ("$pgmfs" -eq "") { $result = $null } else { $lslist = $null $result = $null if (-not (Test-Path "$pgmfs\PostgreSQL")) { throw("default Postgres Directory not found`nPlease specify the directories other than default") } $lslist = @(Get-ChildItem "$pgmfs\PostgreSQL") if ($null -eq $lslist) { throw("default Postgres Directory not found") } else { [decimal]$vernum = 0 if ("$LIBPQVER" -eq "") { foreach ($l in $lslist) { $ver = [decimal]$l.Name if ($ver -gt $vernum) { $result = $l.FullName + "\$kind" $vernum = $ver } } } else { foreach ($l in $lslist) { if ($LIBPQVER -eq $l.Name) { $result = $l.FullName + "\$kind" break } } } } } return $result } function GetPackageVersion([xml]$configInfo, [string]$srcpath) { $version_no = $configInfo.Configuration.version if ("$version_no" -eq "") { pushd "$srcpath" $splitItem = Get-Content ".\version.h" | Where-Object {($_.IndexOf("#define") -ge 0) -and ($_.IndexOf("POSTGRESDRIVERVERSION") -ge 0) -and ($_.IndexOF("`"") -ge 0)} | ForEach-Object {$_.split("`"")} $version_no = $splitItem[1] popd } return $version_no } function GetObjbase([string] $stdDir, [string] $addPath = "") { if ("$env:PSQLODBC_OBJBASE" -eq "") { return $stdDir } else { if ("$addPath" -eq "") { return $env:PSQLODBC_OBJBASE } else { return $env:PSQLODBC_OBJBASE + "\" + $addPath } } } Export-ModuleMember -function LoadConfiguration, SaveConfiguration, unifyNodes, getPGDir, getPackageVersion, GetObjbase -variable LIBPQ_VERSION