winbuild/editConfiguration.ps1 (199 lines of code) (raw):
# Powershell needs to run in STA mode to display WPF windows
Param(
[string]$configPath
)
if ([Threading.Thread]::CurrentThread.GetApartmentState() -eq "MTA"){
PowerShell -Sta -File $MyInvocation.MyCommand.Path
return
}
<#
configuration XAML with WPF
#>
Add-Type -AssemblyName presentationframework
[xml]$XAML = @'
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Windows Build Configuration" Height="470" Width="539" BorderBrush="Black" Margin="30,0,0,0">
<Grid>
<StackPanel Height="600" HorizontalAlignment="Left" Margin="42,29,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="431" Opacity="1">
<StackPanel Orientation="Horizontal" Height="50">
<Label Content="Windows Build Configuration" Height="28" Name="label25" Margin="30,0,0,0" />
<Button Content="save" Height="23" Name="buttonSave" Width="75" Margin="30,0,0,0" />
<Button Content="end" Height="23" Name="buttonEnd" Width="75" Margin="30,0,0,0" />
</StackPanel>
<StackPanel Orientation="Horizontal" Height="30" Width="Auto">
<Label Content="version" Height="28" Name="labelVersion" HorizontalAlignment="Left" />
<TextBox Height="24" Name="versionBox" HorizontalAlignment="Left" Width="100" />
<Label Content="vcversion" Height="28" Name="labelVcversion" HorizontalAlignment="Left" />
<TextBox Height="24" Name="vcversionBox" HorizontalAlignment="Left" Width="50" />
<Label Content="toolset" Height="28" Name="labelToolset" HorizontalAlignment="Left" />
<TextBox Height="24" Name="toolsetBox" HorizontalAlignment="Left" Width="50" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="x86" Height="26" Name="label1" Width="43" HorizontalContentAlignment="Center" HorizontalAlignment="Left" VerticalAlignment="Top" />
<TextBox Height="Auto" Name="versionBox1" Width="30" />
<TextBlock Height="Auto" Margin="30,0,0,0" x:Name="procMessage" Width="300" />
</StackPanel>
<StackPanel Height="78" Name="stackPanel2" Width="Auto" HorizontalAlignment="Right" Orientation="Horizontal">
<Label Content="libpq" Height="Auto" HorizontalContentAlignment="Center" Name="label2" VerticalContentAlignment="Center" Width="51" BorderBrush="Black" BorderThickness="1,1,0,0" />
<StackPanel Height="Auto" Name="stackPanel3" Width="380">
<StackPanel Height="26" Name="stackPanel4" Width="Auto" Orientation="Horizontal">
<Label Content="include" Height="Auto" Name="label3" Width="56" BorderThickness="1,1,1,0" BorderBrush="Black" />
<TextBox Height="24" Name="textBox1" Width="304" />
<Button Content="..." Height="23" Name="button1" Width="20" />
</StackPanel>
<StackPanel Height="26" Name="stackPanel5" Width="Auto" Orientation="Horizontal">
<Label Content="lib " Height="Auto" Name="label4" Width="56" BorderBrush="Black" BorderThickness="1,1,1,0" />
<TextBox Height="24" Name="textBox2" Width="304" />
<Button Content="..." Height="23" Name="button2" Width="20" />
</StackPanel>
<StackPanel Height="26" Name="stackPanel6" Width="Auto" Orientation="Horizontal">
<Label Content="bin " Height="Auto" Name="label5" Width="56" BorderBrush="Black" BorderThickness="1,1,1,0" />
<TextBox Height="25" Name="textBox3" Width="304" />
<Button Content="..." Height="23" Name="button3" Width="20" />
</StackPanel>
</StackPanel>
</StackPanel>
<!-- x86.build_macros -->
<StackPanel Height="26" Name="stackPanel86vcvars" Orientation="Horizontal" Width="Auto">
<Label BorderBrush="Black" Content="build__macros" Height="Auto" HorizontalContentAlignment="Center" Name="label86vcvars" VerticalContentAlignment="Center" Width="107" BorderThickness="1,0,1,1" />
<StackPanel Height="Auto" Name="stackPanel86vcvars_1" Orientation="Horizontal" Width="Auto">
<TextBox Height="24" Name="textBox86vcvars" Width="304" />
<Button Content="..." Height="23" Name="button86vcvars" Width="20" />
</StackPanel>
</StackPanel>
<!-- x64 -->
<StackPanel Orientation="Horizontal">
<Label Content="x64" Height="26" HorizontalAlignment="Left" HorizontalContentAlignment="Center" Name="label13" VerticalAlignment="Top" Width="43" />
<TextBox Height="Auto" Name="versionBox2" Width="30" />
</StackPanel>
<StackPanel Height="78" Name="stackPanel16" Orientation="Horizontal" Width="Auto">
<Label BorderBrush="Black" Content="libpq" Height="Auto" HorizontalContentAlignment="Center" Name="label14" VerticalContentAlignment="Center" Width="51" BorderThickness="1,1,0,0" />
<StackPanel Height="Auto" Name="stackPanel17" Width="380">
<StackPanel Height="26" Name="stackPanel18" Orientation="Horizontal" Width="Auto">
<Label Content="include" Height="Auto" Name="label15" Width="56" BorderThickness="1,1,1,0" BorderBrush="Black" />
<TextBox Height="24" Name="textBox9" Width="304" />
<Button Content="..." Height="23" Name="button9" Width="20" />
</StackPanel>
<StackPanel Height="26" Name="stackPanel19" Orientation="Horizontal" Width="Auto">
<Label BorderBrush="Black" Content="lib " Height="Auto" Name="label16" Width="56" BorderThickness="1,1,1,0" />
<TextBox Height="24" Name="textBox10" Width="304" />
<Button Content="..." Height="23" Name="button10" Width="20" />
</StackPanel>
<StackPanel Height="26" Name="stackPanel20" Orientation="Horizontal" Width="Auto">
<Label BorderBrush="Black" Content="bin " Height="Auto" Name="label17" Width="56" BorderThickness="1,1,1,0" />
<TextBox Height="25" Name="textBox11" Width="304" />
<Button Content="..." Height="23" Name="button11" Width="20" />
</StackPanel>
</StackPanel>
</StackPanel>
<!-- x64.build_macros -->
<StackPanel Height="26" Name="stackPanel64vcvars" Orientation="Horizontal" Width="Auto">
<Label BorderBrush="Black" Content="build__macros" Height="Auto" HorizontalContentAlignment="Center" Name="label64vcvars" VerticalContentAlignment="Center" Width="107" BorderThickness="1,0,1,1" />
<StackPanel Height="Auto" Name="stackPanel64vcvars_1" Orientation="Horizontal" Width="Auto">
<TextBox Height="24" Name="textBox64vcvars" Width="304" />
<Button Content="..." Height="23" Name="button64vcvars" Width="20" />
</StackPanel>
</StackPanel>
</StackPanel>
</Grid>
</Window>
'@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$window=[Windows.Markup.XamlReader]::Load( $reader )
$buttonEnd = $window.FindName("buttonEnd")
$buttonEnd_clicked = $buttonEnd.add_Click
$buttonEnd_clicked.Invoke({
Remove-Module Psqlodbc-config
$window.close()
})
$button_click =
{
($sender, $e) = $this, $_
# sender�i$this�j
[void] [Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
$d = New-Object Windows.Forms.FolderBrowserDialog
if ($d.ShowDialog() -eq "OK") {
$lname = $sender.Name.substring(6)
$text = $window.FindName("textBox" + $lname)
$text.Text = $d.SelectedPath
}
}
for ($i = 1; $i -lt 17; $i++)
{
$button = $window.FindName("button" + $i)
if ($button)
{
$button.add_Click($button_click)
}
}
$button_click2 =
{
($sender, $e) = $this, $_
# sender�i$this�j
[void] [Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
$d = New-Object Windows.Forms.OpenFileDialog
$d.InitialDirectory = $scriptPath
if ($d.ShowDialog() -eq "OK") {
$lname = $sender.Name.substring(6)
$text = $window.FindName("textBox" + $lname)
$text.Text = $d.FileName
}
}
foreach ($btnname in ("button86vcvars", "button64vcvars"))
{
$button = $window.FindName($btnname)
$button.add_Click($button_click2)
}
$scriptPath = (Split-Path $MyInvocation.MyCommand.Path)
Import-Module "$scriptPath\Psqlodbc-config.psm1"
$configInfo = LoadConfiguration $configPath $scriptPath
$window.findName("versionBox").Text = $configInfo.Configuration.version
$window.findName("vcversionBox").Text = $configInfo.Configuration.vcversion
$window.findName("toolsetBox").Text = $configInfo.Configuration.toolset
$x86info = $configInfo.Configuration.x86
$window.findName("versionBox1").Text = $x86info.libpq.version
$window.findName("textBox1").Text = $x86info.libpq.include
$window.findName("textBox2").Text = $x86info.libpq.lib
$window.findName("textBox3").Text = $x86info.libpq.bin
$window.findName("textBox86vcvars").Text = $x86info.build_macros
$x64info = $configInfo.Configuration.x64
$window.findName("versionBox2").Text = $x64info.libpq.version
$window.findName("textBox9").Text = $x64info.libpq.include
$window.findName("textBox10").Text = $x64info.libpq.lib
$window.findName("textBox11").Text = $x64info.libpq.bin
$window.findName("textBox64vcvars").Text = $x64info.build_macros
$buttonSave = $window.FindName("buttonSave")
$buttonSave_clicked = $buttonSave.add_Click
$buttonSave_clicked.Invoke({
$input_version = $window.findName("versionBox").Text
if ($input_version -ne "") {
$vers = $input_version.split(".")
if (($vers.Length -ne 3) -or
($vers[0].Length -ne 2) -or
($vers[1].Length -ne 2) -or
($vers[2].Length -ne 4) -or
(-not[int]::TryParse($vers[0], [ref]$null)) -or
(-not[int]::TryParse($vers[1], [ref]$null)) -or
(-not[int]::TryParse($vers[2], [ref]$null))) {
$window.findName("procMessage").Text = "the format of version should be xx.xx.xxxx"
return
}
}
$configInfo.Configuration.version = $input_version
$configInfo.Configuration.vcversion = $window.findName("vcversionBox").Text
$configInfo.Configuration.toolset = $window.findName("toolsetBox").Text
$x86info.libpq.version = $window.findName("versionBox1").Text
$x86info.libpq.include = $window.findName("textBox1").Text
$x86info.libpq.lib = $window.findName("textBox2").Text
$x86info.libpq.bin = $window.findName("textBox3").Text
$x86info.build_macros = $window.findName("textBox86vcvars").Text
$x64info.libpq.version = $window.findName("versionBox2").Text
$x64info.libpq.include = $window.findName("textBox9").Text
$x64info.libpq.lib = $window.findName("textBox10").Text
$x64info.libpq.bin = $window.findName("textBox11").Text
$x64info.build_macros = $window.findName("textBox64vcvars").Text
SaveConfiguration $configInfo
$window.findName("procMessage").Text = "the configuration has been saved"
})
$window.ShowDialog() | out-null