Concentrate the settings of Windows build system to an xml file and
authorHiroshi Inoue <inoue@tpf.co.p>
Tue, 22 Oct 2013 13:40:57 +0000 (22:40 +0900)
committerHiroshi Inoue <inoue@tpf.co.p>
Wed, 23 Oct 2013 14:04:53 +0000 (23:04 +0900)
build binaries or installers with reference to it.

(configuration.xml)
xml file to specify the setting of the build environment.
It is automatically generated in winbuild folder as a copy
of winbuild/configuration_template.xml when you invoke
editConfiguration script firstly.

winbuild/configuration.ps1 modules to handle the configuration file
winbuild/editConfiguration.ps1 edit configuration file (GUI)
winbuild/editConfiguration.bat same as above with a minimized console window

buildx86.ps1 build 32bit binary
buildx64.ps1 build 64bit binary

installer/buildx86-installer.ps1 build 32bit installer
installer/buildx64-installer.ps1 build 64bit installer

.gitignore
buildx64.ps1 [new file with mode: 0644]
buildx86.ps1 [new file with mode: 0755]
installer/buildX64-installer.ps1 [new file with mode: 0755]
installer/buildX86-installer.ps1 [new file with mode: 0755]
win32.mak
win64.mak
winbuild/configuration.ps1 [new file with mode: 0755]
winbuild/configuration_template.xml [new file with mode: 0644]
winbuild/editConfiguration.bat [new file with mode: 0755]
winbuild/editConfiguration.ps1 [new file with mode: 0755]

index 05422ec57c7529654b01dd744161c854d313fae8..774c36a9dededc46c499168c8f830594ee936a49 100644 (file)
@@ -25,6 +25,9 @@ win32ver.rc
 lib*dll.def
 lib*.pc
 
+#
+winbuild/configuration.xml
+
 # Files generated during compilation
 /Makefile
 /Makefile.in
diff --git a/buildx64.ps1 b/buildx64.ps1
new file mode 100644 (file)
index 0000000..0856773
--- /dev/null
@@ -0,0 +1,47 @@
+#  build 64bit dll
+. ".\winbuild\configuration.ps1"
+$configInfo = GetConfiguration
+$x64info = $configInfo.Configuration.x64
+Write-Host "setenv :" $x64info.setenv
+if ($x64info.setenv -ne "") {
+   $envcmd = [String] $x64info.setenv
+   if ($envcmd.StartsWith(". ")) {
+       . $envcmd.substring(2)
+   } else {
+       Invoke-Expression $envcmd
+   }
+}
+
+$USE_LIBPQ=$x64info.use_libpq
+$LIBPQVER=$x64info.libpq.version
+$USE_SSPI=$x64info.use_sspi
+$USE_GSS=$x64info.use_gss
+$PG_INC=$x64info.libpq.include
+$PG_LIB=$x64info.libpq.lib
+$SSL_INC=$x64info.ssl.include
+$SSL_LIB=$x64info.ssl.lib
+$GSS_INC=$x64info.gss.include
+$GSS_LIB=$x64info.gss.lib
+if ($USE_LIBPQ -eq "yes")
+{
+   if ($env:PROCESSOR_ARCHITECTURE -eq "x86") {
+       $pgmfs = ""
+   } else {
+       $pgmfs = "$env:ProgramFiles"
+   }
+   if ($PG_INC -eq "default") {
+       $PG_INC = "$pgmfs\PostgreSQL\$LIBPQVER\include"
+   } 
+   if ($PG_LIB -eq "default") {
+       $PG_LIB = "$pgmfs\PostgreSQL\$LIBPQVER\lib"
+   } 
+}
+
+Write-Host "USE LIBPQ  : $USE_LIBPQ ($PG_INC $PG_LIB)"
+Write-Host "USE GSS    : $USE_GSS ($GSS_INC $GSS_LIB)"
+Write-Host "USE_SSPI   : $USE_SSPI"
+Write-Host "SSL DIR    : ($SSL_INC $SSL_LIB)"
+
+$MACROS = "USE_LIBPQ=$USE_LIBPQ USE_SSPI=$USE_SSPI USE_GSS=$USE_GSS PG_LIB=`"$PG_LIB`" PG_INC=`"$PG_INC`" SSL_LIB=`"$SSL_LIB`" SSL_INC=`"$SSL_INC`"GSS_LIB=`"$GSS_LIB`" GSS_INC=`"$GSS_INC`" $args"
+invoke-expression "nmake.exe /f win64.mak $MACROS"
+invoke-expression "nmake.exe /f win64.mak ANSI_VERSION=yes $MACROS"
diff --git a/buildx86.ps1 b/buildx86.ps1
new file mode 100755 (executable)
index 0000000..717ccb4
--- /dev/null
@@ -0,0 +1,39 @@
+#  build 32bit dll
+. ".\winbuild\configuration.ps1"
+$configInfo = GetConfiguration
+$x86info = $configInfo.Configuration.x86
+if ($x86info.setenv -ne "") {
+   $envcmd = [String] $x86info.setenv
+   if ($envcmd.StartsWith(". ")) {
+       . $envcmd.substring(2)
+   } else {
+       Invoke-Expression $envcmd
+   }
+}
+$USE_LIBPQ=$x86info.use_libpq
+$USE_SSPI=$x86info.use_sspi
+$LIBPQVER=$x86info.libpq.version
+$PG_INC=$x86info.libpq.include
+$PG_LIB=$x86info.libpq.lib
+$SSL_INC=$x86info.ssl.include
+$SSL_LIB=$x86info.ssl.lib
+if ($USE_LIBPQ -eq "yes")
+{
+   if ($env:PROCESSOR_ARCHITECTURE -eq "x86") {
+       $pgmfs = "$env:ProgramFiles"
+   } else {
+       $pgmfs = "$env:ProgramFiles(X86)"
+   }
+   if ($PG_INC -eq "default") {
+       $PG_INC = "$pgmfs\PostgreSQL\$LIBPQVER\include"
+   } 
+   if ($PG_LIB -eq "default") {
+       $PG_LIB = "$pgmfs\PostgreSQL\$LIBPQVER\lib"
+   } 
+}
+Write-Host "USE LIBPQ  : $USE_LIBPQ ($PG_INC $PG_LIB)"
+# Write-Host "USE GSS    : $USE_GSS"
+Write-Host "USE SSPI   : $USE_SSPI"
+Write-Host "SSL       : ($SSL_INC $SSL_LIB)"
+invoke-expression "nmake.exe /f win32.mak USE_LIBPQ=$USE_LIBPQ USE_SSPI=$USE_SSPI PG_LIB=`"$PG_LIB`" PG_INC=`"$PG_INC`" SSL_LIB=`"$SSL_LIB`" SSL_INC=`"$SSL_INC`" $args"
+invoke-expression "nmake.exe /f win32.mak ANSI_VERSION=yes USE_LIBPQ=$USE_LIBPQ USE_SSPI=$USE_SSPI PG_LIB=`"$PG_LIB`" PG_INC=`"$PG_INC`" SSL_LIB=`"$SSL_LIB`" SSL_INC=`"$SSLINC`" $args"
diff --git a/installer/buildX64-installer.ps1 b/installer/buildX64-installer.ps1
new file mode 100755 (executable)
index 0000000..5c5bdf5
--- /dev/null
@@ -0,0 +1,78 @@
+#  build 64bit installer
+. "..\winbuild\configuration.ps1"
+$configInfo = GetConfiguration
+$VERSION = $configInfo.Configuration.version
+$x64info = $configInfo.Configuration.x64
+$USE_LIBPQ=$x64info.use_libpq
+$USE_GSS=$x64info.use_gss
+$USE_SSPI=$x64info.use_sspi
+$LIBPQVER=$x64info.libpq.version
+if ($USE_LIBPQ -eq "yes")
+{
+   $LIBPQBINDIR=$x64info.libpq.bin
+   if ($LIBPQBINDIR -eq "default") {
+       if ($env:PROCESSOR_ARCHITECTURE -eq "x64") {
+           $pgmfs = "$env:ProgramFiles"
+           $LIBPQBINDIR = "$pgmfs\PostgreSQL\$LIBPQVER\bin"
+       }
+   } 
+}
+if ($USE_GSS -eq "yes")
+{
+   $GSSBINDIR=$x64info.gss.bin
+}
+
+Write-Host "VERSION    : $VERSION"
+Write-Host "USE LIBPQ  : $USE_LIBPQ ($LIBPQBINDIR)"
+Write-Host "USE GSS    : $USE_GSS ($GSSBINDIR)"
+Write-Host "USE SSPI   : $USE_SSPI"
+
+$CPUTYPE="x64"
+
+# The subdirectory to install into
+$SUBLOC=$VERSION.substring(0, 2) + $VERSION.substring(3, 2)
+
+if (!(Test-Path -Path $CPUTYPE)) {
+    New-Item -ItemType directory -Path $CPUTYPE
+}
+
+<#
+   ProductCode History
+
+#>
+$PRODUCTID = @{}
+$PRODUCTID["09.02.0100"]="3E42F836-9204-4c42-B3C3-8680A0434875"
+$PRODUCTID["09.03.0100"]="1F896F2F-5756-4d22-B5A3-040796C9B485"
+
+$PRODUCTCODE=$PRODUCTID[$VERSION]
+if ("$PRODUCTCODE" -eq "") {
+   Write-Host "`nSpecify the ProductCode for the VERSION $VERSION"
+   return
+}
+Write-Host "PRODUCTCODE: $PRODUCTCODE"
+
+try {
+   Write-Host ".`nBuilding psqlODBC/$SUBLOC merge module..."
+
+   invoke-expression "candle -nologo -dPlatform=$CPUTYPE `"-dVERSION=$VERSION`" -dSUBLOC=$SUBLOC `"-dLIBPQBINDIR=$LIBPQBINDIR`" `"-dGSSBINDIR=$GSSBINDIR`" -o $CPUTYPE\psqlodbcm.wixobj psqlodbcm_cpu.wxs"
+
+   Write-Host ".`nLinking psqlODBC merge module..."
+   invoke-expression "light -nologo -o $CPUTYPE\psqlodbc_$CPUTYPE.msm $CPUTYPE\psqlodbcm.wixobj"
+
+   Write-Host ".`nBuilding psqlODBC installer database..."
+
+   invoke-expression "candle -nologo -dPlatform=$CPUTYPE `"-dVERSION=$VERSION`" -dSUBLOC=$SUBLOC `"-dPRODUCTCODE=$PRODUCTCODE`" -o $CPUTYPE\psqlodbc.wixobj psqlodbc_cpu.wxs"
+
+   Write-Host ".`nLinking psqlODBC installer database..."
+   invoke-expression "light -nologo -ext WixUIExtension -cultures:en-us -o $CPUTYPE\psqlodbc_$CPUTYPE.msi $CPUTYPE\psqlodbc.wixobj"
+
+   Write-Host ".`nModifying psqlODBC installer database..."
+   invoke-expression "cscript modify_msi.vbs $CPUTYPE\psqlodbc_$CPUTYPE.msi"
+   
+   Write-Host ".`nDone!"
+}
+catch {
+
+   Write-Host ".`Aborting build!"
+   throw $error[0]
+}
diff --git a/installer/buildX86-installer.ps1 b/installer/buildX86-installer.ps1
new file mode 100755 (executable)
index 0000000..dc54866
--- /dev/null
@@ -0,0 +1,64 @@
+#  build 32bit installer
+. "..\winbuild\configuration.ps1"
+$configInfo = GetConfiguration
+$VERSION = $configInfo.Configuration.version
+$x86info = $configInfo.Configuration.x86
+$USE_LIBPQ=$x86info.use_libpq
+$USE_GSS=$x86info.use_gss
+$USE_SSPI=$x86info.use_sspi
+$LIBPQVER=$x86info.libpq.version
+if ($USE_LIBPQ -eq "yes")
+{
+   $LIBPQBINDIR=$x86info.libpq.bin
+   if ($env:PROCESSOR_ARCHITECTURE -eq "x86") {
+       $pgmfs = "$env:ProgramFiles"
+   } else {
+       $pgmfs = "$env:ProgramFiles(X86)"
+   }
+   if ($LIBPQBINDIR -eq "default") {
+       $LIBPQBINDIR = "$pgmfs\PostgreSQL\$LIBPQVER\bin"
+   }
+}
+
+Write-Host "VERSION    : $VERSION"
+Write-Host "USE LIBPQ  : $USE_LIBPQ ($LIBPQBINDIR)"
+Write-Host "USE GSS    : $USE_GSS ($GSSBINDIR)"
+Write-Host "USE SSPI   : $USE_SSPI"
+
+<#
+   The ProductCode History
+       ProductCode must be changed in case of major upgrade
+#>
+$PRODUCTID = @{}
+$PRODUCTID["09.02.0100"]="838E187D-8B7A-473d-B93C-C8E970B15D2B"
+$PRODUCTID["09.03.0100"]="D3527FA5-9C2B-4550-A59B-9534A78950F4"
+
+# The subdirectory to install into
+$SUBLOC=$VERSION.substring(0, 2) + $VERSION.substring(3, 2)
+
+$PRODUCTCODE=$PRODUCTID[$VERSION]
+if ("$PRODUCTCODE" -eq "") {
+   Write-Host ".`nSpecify the ProductCode for the VERSION $VERSION"
+   return
+}
+Write-Host "PRODUCTCODE: $PRODUCTCODE"
+
+try {
+   Write-Host ".`nBuilding psqlODBC/$SUBLOC merge module..."
+
+   invoke-expression "candle -nologo `"-dVERSION=$VERSION`" -dSUBLOC=$SUBLOC `"-dLINKFILES=$LIBPQBINDIR`" psqlodbcm.wxs"
+
+   invoke-expression "light -nologo -out psqlodbc.msm psqlodbcm.wixobj"
+
+   Write-Host ".`nBuilding psqlODBC installer database..."
+
+   invoke-expression "candle -nologo `"-dVERSION=$VERSION`" -dSUBLOC=$SUBLOC `"-dPRODUCTCODE=$PRODUCTCODE`" psqlodbc.wxs"
+
+   invoke-expression "light -nologo -ext WixUIExtension -cultures:en-us psqlodbc.wixobj"
+
+   Write-Host ".`nDone!"
+}
+catch {
+   Write-Host ".`nAborting build!"
+   throw $error[0] 
+}
index 66f0be27da18f82bbde4f95f5d8239e9c8a982d7..e39bfdf864bfc34132971820544cfb61909c85be 100644 (file)
--- a/win32.mak
+++ b/win32.mak
@@ -127,6 +127,13 @@ RSC_DEFINES = $(RSC_DEFINES) /D "UNICODE_SUPPORT"
 ADD_DEFINES = $(ADD_DEFINES) /D _WIN64
 !ENDIF
 
+!IF "$(PG_INC)" != ""
+INC_OPT=$(INC_OPT) /I "$(PG_INC)"
+!ENDIF
+!IF "$(SSL_INC)" != ""
+INC_OPT=$(INC_OPT) /I "$(SSL_INC)"
+!ENDIF
+
 !IF "$(OS)" == "Windows_NT"
 NULL=
 !ELSE 
@@ -212,7 +219,7 @@ CPP_PROJ=/nologo /$(LINKMT) /O2 /D "NDEBUG"
 !ELSEIF  "$(CFG)" == "Debug"
 CPP_PROJ=/nologo /$(LINKMT)d /Gm /ZI /Od /RTC1 /D "_DEBUG"
 !ENDIF
-CPP_PROJ=$(CPP_PROJ) /W3 $(VC_FLAGS) /I "$(PG_INC)" /I "$(SSL_INC)" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_CRT_SECURE_NO_DEPRECATE" /D "PSQLODBC_EXPORTS" /D "WIN_MULTITHREAD_SUPPORT" $(ADD_DEFINES) /Fp"$(INTDIR)\psqlodbc.pch" /Fo"$(INTDIR)"\ /Fd"$(INTDIR)"\ /FD
+CPP_PROJ=$(CPP_PROJ) /W3 $(VC_FLAGS) $(INC_OPT) /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_CRT_SECURE_NO_DEPRECATE" /D "PSQLODBC_EXPORTS" /D "WIN_MULTITHREAD_SUPPORT" $(ADD_DEFINES) /Fp"$(INTDIR)\psqlodbc.pch" /Fo"$(INTDIR)"\ /Fd"$(INTDIR)"\ /FD
 !MESSAGE CPP_PROJ=$(CPP_PROJ)
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
@@ -275,7 +282,13 @@ LINK32_FLAGS=$(LINK32_FLAGS) /incremental:no
 !ELSE
 LINK32_FLAGS=$(LINK32_FLAGS) /incremental:yes /debug
 !ENDIF
-LINK32_FLAGS=$(LINK32_FLAGS) $(VC07_DELAY_LOAD) /libpath:"$(PG_LIB)" /libpath:"$(SSL_LIB)"
+LINK32_FLAGS=$(LINK32_FLAGS) $(VC07_DELAY_LOAD)
+!IF "$(PG_LIB)" != ""
+LINK32_FLAGS=$(LINK32_FLAGS) /libpath:"$(PG_LIB)"
+!ENDIF
+!IF "$(SSL_LIB)" != ""
+LINK32_FLAGS=$(LINK32_FLAGS) /libpath:"$(SSL_LIB)"
+!ENDIF
 
 LINK32_OBJS= \
    "$(INTDIR)\bind.obj" \
index c3390b7edf7be75ba17011957a155e2c626021c5..0479fe2dff7e0149380493f0073cc5fcae48f918 100755 (executable)
--- a/win64.mak
+++ b/win64.mak
@@ -142,6 +142,9 @@ INC_OPT = $(INC_OPT) /I "$(PG_INC)"
 !IF "$(SSL_INC)" != ""
 INC_OPT = $(INC_OPT) /I "$(SSL_INC)"
 !ENDIF
+!IF "$(GSS_INC)" != ""
+INC_OPT = $(INC_OPT) /I "$(GSS_INC)"
+!ENDIF
 !IF "$(ADDL_INC)" != ""
 INC_OPT = $(INC_OPT) /I "$(ADD_INC)"
 !ENDIF
@@ -290,6 +293,9 @@ LINK32_FLAGS=$(LINK32_FLAGS) "$(VC07_DELAY_LOAD)"
 !IF "$(PG_LIB)" != ""
 LINK32_FLAGS=$(LINK32_FLAGS) /libpath:"$(PG_LIB)"
 !ENDIF
+!IF "$(GSS_LIB)" != ""
+LINK32_FLAGS=$(LINK32_FLAGS) /libpath:"$(GSS_LIB)"
+!ENDIF
 !IF "$(SSL_LIB)" != ""
 LINK32_FLAGS=$(LINK32_FLAGS) /libpath:"$(SSL_LIB)"
 !ENDIF
diff --git a/winbuild/configuration.ps1 b/winbuild/configuration.ps1
new file mode 100755 (executable)
index 0000000..eabd36c
--- /dev/null
@@ -0,0 +1,30 @@
+function InitConfiguration
+{
+   $configInfo = [xml](Get-Content "$scriptPath\configuration_template.xml")
+   if ($env:PROCESSOR_ARCHITECTURE -eq "x86")
+   {
+       $x64info = $configInfo.Configuration.x64
+       $x64info.libpq.include = "" 
+       $x64info.libpq.lib = "" 
+       $x64info.libpq.bin = "" 
+   }
+   $configInfo.save("$configPath")
+}
+
+function global:GetConfiguration
+{
+   Return  [xml] (Get-Content "$configPath")
+}
+
+function global:SaveConfiguration
+{
+   $configInfo.save("$configPath")
+}
+
+$scriptPath = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)
+$configPath = "$scriptPath\configuration.xml"
+if (!(Test-Path -path $configPath))
+{
+   InitConfiguration
+}
+Return
diff --git a/winbuild/configuration_template.xml b/winbuild/configuration_template.xml
new file mode 100644 (file)
index 0000000..ca4fe34
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration version="09.03.0100">
+  <x86 disabled="no" use_libpq="yes" use_sspi="no" use_gss="no">
+    <libpq>
+      <include>default</include>
+      <lib>default</lib>
+      <bin>default</bin>
+    </libpq>
+    <ssl>
+      <include></include>
+      <lib></lib>
+    </ssl>
+    <gss>
+      <include></include>
+      <lib></lib>
+      <bin></bin>
+    </gss>
+    <setenv></setenv>
+  </x86>
+  <x64 use_libpq="yes" use_sspi="no" use_gss="yes">
+    <libpq>
+      <include>default</include>
+      <lib>default</lib>
+      <bin>default</bin>
+    </libpq>
+    <ssl>
+      <include></include>
+      <lib></lib>
+    </ssl>
+    <gss>
+      <include></include>
+      <lib></lib>
+      <bin></bin>
+    </gss>
+    <setenv></setenv>
+  </x64>
+</Configuration>
diff --git a/winbuild/editConfiguration.bat b/winbuild/editConfiguration.bat
new file mode 100755 (executable)
index 0000000..0aed434
--- /dev/null
@@ -0,0 +1,4 @@
+::
+:: Start editConfiguration with a mimimized console window
+::
+powershell -Sta -WindowStyle Minimized .\editConfiguration.ps1
diff --git a/winbuild/editConfiguration.ps1 b/winbuild/editConfiguration.ps1
new file mode 100755 (executable)
index 0000000..39b0f69
--- /dev/null
@@ -0,0 +1,251 @@
+# Powershell needs to run in STA mode to display WPF windows\r
+if ([Threading.Thread]::CurrentThread.GetApartmentState() -eq "MTA"){\r
+   PowerShell -Sta -File $MyInvocation.MyCommand.Path\r
+   return\r
+}\r
+\r
+<#\r
+   Edit the configuration xnl file with WPF\r
+#>\r
+\r
+Add-Type -AssemblyName presentationframework\r
\r
+[xml]$XAML = @'\r
+<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\r
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\r
+        Title="MainWindow" Height="640" Width="539" BorderBrush="Black" Margin="30,0,0,0">\r
+    <Grid>\r
+        <StackPanel Height="600" HorizontalAlignment="Left" Margin="42,29,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="431" Opacity="1">\r
+            <StackPanel Orientation="Horizontal" Height="50">\r
+                <Label Content="Windows Build Configuration" Height="28" Name="label25" Margin="30,0,0,0" />\r
+                <Button Content="save" Height="23" Name="buttonSave" Width="75" Margin="30,0,0,0" />\r
+                <Button Content="end" Height="23" Name="buttonEnd" Width="75" Margin="30,0,0,0" />\r
+            </StackPanel>\r
+            <StackPanel Orientation="Horizontal" Height="30" Width="Auto">\r
+                <Label Content="version" Height="28" Name="labelVersion" HorizontalAlignment="Left" />\r
+       <TextBox Height="24" Name="versionBox" HorizontalAlignment="Left" Width="100" />\r
+            </StackPanel>\r
+            <StackPanel Orientation="Horizontal">\r
+                <Label Content="x86" Height="26" Name="label1" Width="43" HorizontalContentAlignment="Center" HorizontalAlignment="Left" VerticalAlignment="Top" />\r
+                <CheckBox Content="libpq" Height="Auto" HorizontalContentAlignment="Center" Name="checkBox1" VerticalContentAlignment="Center" Width="51" BorderBrush="Black" />\r
+       <TextBox Height="Auto" Name="versionBox1" Width="30" />\r
+                <CheckBox Content="gss" Height="Auto" HorizontalContentAlignment="Center" Name="checkBox2" VerticalContentAlignment="Center" Width="51" BorderBrush="Black" />\r
+                <CheckBox Content="sspi" Height="Auto" HorizontalContentAlignment="Center" Name="checkBox3" VerticalContentAlignment="Center" Width="51" BorderBrush="Black" />\r
+            </StackPanel>\r
+            <StackPanel Height="78" Name="stackPanel2" Width="Auto" HorizontalAlignment="Right" Orientation="Horizontal">\r
+                <Label Content="libpq" Height="Auto" HorizontalContentAlignment="Center" Name="label2" VerticalContentAlignment="Center" Width="51" BorderBrush="Black" BorderThickness="1,1,0,0" />\r
+                <StackPanel Height="Auto" Name="stackPanel3" Width="380">\r
+                    <StackPanel Height="26" Name="stackPanel4" Width="Auto" Orientation="Horizontal">\r
+                        <Label Content="include" Height="Auto" Name="label3" Width="56" BorderThickness="1,1,1,0" BorderBrush="Black" />\r
+                        <TextBox Height="24" Name="textBox1" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button1" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel5" Width="Auto" Orientation="Horizontal">\r
+                        <Label Content="lib       " Height="Auto" Name="label4" Width="56" BorderBrush="Black" BorderThickness="1,1,1,0" />\r
+                        <TextBox Height="24" Name="textBox2" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button2" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel6" Width="Auto" Orientation="Horizontal">\r
+                        <Label Content="bin      " Height="Auto" Name="label5" Width="56" BorderBrush="Black" BorderThickness="1,1,1,0" />\r
+                        <TextBox Height="25" Name="textBox3" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button3" Width="20" />\r
+                    </StackPanel>\r
+                </StackPanel>\r
+            </StackPanel>\r
+            <StackPanel Height="78" Name="stackPanel7" Orientation="Horizontal" Width="Auto">\r
+                <Label BorderBrush="Black" Content="gss" Height="Auto" HorizontalContentAlignment="Center" Name="label6" VerticalContentAlignment="Center" Width="51" BorderThickness="1,1,0,0" />\r
+                <StackPanel Height="Auto" Name="stackPanel8" Width="380">\r
+                    <StackPanel Height="26" Name="stackPanel9" Orientation="Horizontal" Width="Auto">\r
+                        <Label Content="include" Height="Auto" Name="label7" Width="56" BorderThickness="1,1,1,0" BorderBrush="Black" />\r
+                        <TextBox Height="24" Name="textBox4" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button4" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel10" Orientation="Horizontal" Width="Auto">\r
+                        <Label BorderBrush="Black" Content="lib       " Height="Auto" Name="label8" Width="56" BorderThickness="1,1,1,0" />\r
+                        <TextBox Height="24" Name="textBox5" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button5" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel11" Orientation="Horizontal" Width="Auto">\r
+                        <Label BorderBrush="Black" Content="bin      " Height="Auto" Name="label9" Width="56" BorderThickness="1,1,1,0" />\r
+                        <TextBox Height="25" Name="textBox6" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button6" Width="20" />\r
+                    </StackPanel>\r
+                </StackPanel>\r
+            </StackPanel>\r
+            <StackPanel Height="52" Name="stackPanel12" Orientation="Horizontal" Width="Auto">\r
+                <Label BorderBrush="Black" Content="ssl" Height="Auto" HorizontalContentAlignment="Center" Name="label10" VerticalContentAlignment="Center" Width="51" BorderThickness="1,1,0,1" />\r
+                <StackPanel Height="Auto" Name="stackPanel13" Width="380">\r
+                    <StackPanel Height="26" Name="stackPanel14" Orientation="Horizontal" Width="Auto">\r
+                        <Label Content="include" Height="Auto" Name="label11" Width="56" BorderThickness="1,1,1,0" BorderBrush="Black" />\r
+                        <TextBox Height="24" Name="textBox7" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button7" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel15" Orientation="Horizontal" Width="Auto">\r
+                        <Label BorderBrush="Black" Content="lib       " Height="Auto" Name="label12" Width="56" BorderThickness="1" />\r
+                        <TextBox Height="24" Name="textBox8" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button8" Width="20" />\r
+                    </StackPanel>\r
+                 </StackPanel>\r
+            </StackPanel>\r
+            <StackPanel Orientation="Horizontal">\r
+                <Label Content="x64" Height="26" HorizontalAlignment="Left" HorizontalContentAlignment="Center" Name="label13" VerticalAlignment="Top" Width="43" />\r
+                <CheckBox BorderBrush="Black" Content="libpq" Height="Auto" HorizontalContentAlignment="Center" Name="checkBox4" VerticalContentAlignment="Center" Width="51" />\r
+       <TextBox Height="Auto" Name="versionBox2" Width="30" />\r
+                <CheckBox BorderBrush="Black" Content="gss" Height="Auto" HorizontalContentAlignment="Center" Name="checkBox5" VerticalContentAlignment="Center" Width="51" />\r
+                <CheckBox BorderBrush="Black" Content="sspi" Height="Auto" HorizontalContentAlignment="Center" Name="checkBox6" VerticalContentAlignment="Center" Width="51" />\r
+            </StackPanel>\r
+            <StackPanel Height="78" Name="stackPanel16" Orientation="Horizontal" Width="Auto">\r
+                <Label BorderBrush="Black" Content="libpq" Height="Auto" HorizontalContentAlignment="Center" Name="label14" VerticalContentAlignment="Center" Width="51" BorderThickness="1,1,0,0" />\r
+                <StackPanel Height="Auto" Name="stackPanel17" Width="380">\r
+                    <StackPanel Height="26" Name="stackPanel18" Orientation="Horizontal" Width="Auto">\r
+                        <Label Content="include" Height="Auto" Name="label15" Width="56" BorderThickness="1,1,1,0" BorderBrush="Black" />\r
+                        <TextBox Height="24" Name="textBox9" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button9" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel19" Orientation="Horizontal" Width="Auto">\r
+                        <Label BorderBrush="Black" Content="lib       " Height="Auto" Name="label16" Width="56" BorderThickness="1,1,1,0" />\r
+                        <TextBox Height="24" Name="textBox10" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button10" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel20" Orientation="Horizontal" Width="Auto">\r
+                        <Label BorderBrush="Black" Content="bin      " Height="Auto" Name="label17" Width="56" BorderThickness="1,1,1,0" />\r
+                        <TextBox Height="25" Name="textBox11" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button11" Width="20" />\r
+                    </StackPanel>\r
+                </StackPanel>\r
+            </StackPanel>\r
+            <StackPanel Height="78" Name="stackPanel21" Orientation="Horizontal" Width="Auto">\r
+                <Label BorderBrush="Black" Content="gss" Height="Auto" HorizontalContentAlignment="Center" Name="label18" VerticalContentAlignment="Center" Width="51" BorderThickness="1,1,0,0" />\r
+                <StackPanel Height="Auto" Name="stackPanel22" Width="380">\r
+                    <StackPanel Height="26" Name="stackPanel23" Orientation="Horizontal" Width="Auto">\r
+                        <Label Content="include" Height="Auto" Name="label19" Width="56" BorderThickness="1,1,1,0" BorderBrush="Black" />\r
+                        <TextBox Height="24" Name="textBox12" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button12" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel24" Orientation="Horizontal" Width="Auto">\r
+                        <Label BorderBrush="Black" Content="lib       " Height="Auto" Name="label20" Width="56" BorderThickness="1,1,1,0" />\r
+                        <TextBox Height="24" Name="textBox13" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button13" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel25" Orientation="Horizontal" Width="Auto">\r
+                        <Label BorderBrush="Black" Content="bin      " Height="Auto" Name="label21" Width="56" BorderThickness="1,1,1,0" />\r
+                        <TextBox Height="25" Name="textBox14" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button14" Width="20" />\r
+                    </StackPanel>\r
+                </StackPanel>\r
+            </StackPanel>\r
+            <StackPanel Height="52" Name="stackPanel26" Orientation="Horizontal" Width="Auto">\r
+                <Label BorderBrush="Black" Content="ssl" Height="Auto" HorizontalContentAlignment="Center" Name="label22" VerticalContentAlignment="Center" Width="51" BorderThickness="1,1,0,1" />\r
+                <StackPanel Height="Auto" Name="stackPanel27" Width="380">\r
+                    <StackPanel Height="26" Name="stackPanel28" Orientation="Horizontal" Width="Auto">\r
+                        <Label Content="include" Height="Auto" Name="label23" Width="56" BorderThickness="1,1,1,0" BorderBrush="Black" />\r
+                        <TextBox Height="24" Name="textBox15" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button15" Width="20" />\r
+                    </StackPanel>\r
+                    <StackPanel Height="26" Name="stackPanel29" Orientation="Horizontal" Width="Auto">\r
+                        <Label BorderBrush="Black" Content="lib       " Height="Auto" Name="label24" Width="56" BorderThickness="1" />\r
+                        <TextBox Height="24" Name="textBox16" Width="304" />\r
+                        <Button Content="..." Height="23" Name="button16" Width="20" />\r
+                    </StackPanel>\r
+                </StackPanel>\r
+            </StackPanel>\r
+        </StackPanel>\r
+    </Grid>\r
+</Window>\r
+'@\r
\r
+$reader=(New-Object System.Xml.XmlNodeReader $xaml)\r
+$window=[Windows.Markup.XamlReader]::Load( $reader )\r
\r
+$buttonEnd = $window.FindName("buttonEnd")\r
+$buttonEnd_clicked = $buttonEnd.add_Click\r
+$buttonEnd_clicked.Invoke({\r
+   $window.close()\r
+})\r
+\r
+$button_click =\r
+{\r
+    ($sender, $e) = $this, $_\r
+    # sender\81i$this\81j\r
+   [void] [Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')\r
+   $d = New-Object Windows.Forms.FolderBrowserDialog\r
+   if ($d.ShowDialog() -eq "OK") {\r
+        $lname = $sender.Name.substring(6)\r
+       $text = $window.FindName("textBox" + $lname)\r
+       $text.Text = $d.SelectedPath\r
+    }\r
+}\r
+\r
+for ($i = 1; $i -lt 17; $i++)\r
+{\r
+   $button = $window.FindName("button" + $i)\r
+    $button.add_Click($button_click)\r
+}\r
+\r
+. ".\configuration.ps1"\r
+$configInfo = GetConfiguration\r
+\r
+$window.findName("versionBox").Text = $configInfo.Configuration.version\r
+\r
+$x86info = $configInfo.Configuration.x86\r
+$window.findName("checkBox1").isChecked = ($x86info.use_libpq -eq "yes")\r
+$window.findName("versionBox1").Text = $x86info.libpq.version\r
+$window.findName("checkBox2").isChecked = ($x86info.use_gss -eq "yes")\r
+$window.findName("checkBox3").isChecked = ($x86info.use_sspi -eq "yes")\r
+$window.findName("textBox1").Text = $x86info.libpq.include\r
+$window.findName("textBox2").Text = $x86info.libpq.lib\r
+$window.findName("textBox3").Text = $x86info.libpq.bin\r
+$window.findName("textBox4").Text = $x86info.gss.include\r
+$window.findName("textBox5").Text = $x86info.gss.lib\r
+$window.findName("textBox6").Text = $x86info.gss.bin\r
+$window.findName("textBox7").Text = $x86info.ssl.include\r
+$window.findName("textBox8").Text = $x86info.ssl.lib\r
+\r
+$x64info = $configInfo.Configuration.x64\r
+\r
+$window.findName("checkBox4").isChecked = ($x64info.use_libpq -eq "yes")\r
+$window.findName("versionBox2").Text = $x64info.libpq.version\r
+$window.findName("checkBox5").isChecked = ($x64info.use_gss -eq "yes")\r
+$window.findName("checkBox6").isChecked = ($x64info.use_sspi -eq "yes")\r
+$window.findName("textBox9").Text = $x64info.libpq.include\r
+$window.findName("textBox10").Text = $x64info.libpq.lib\r
+$window.findName("textBox11").Text = $x64info.libpq.bin\r
+$window.findName("textBox12").Text = $x64info.gss.include\r
+$window.findName("textBox13").Text = $x64info.gss.lib\r
+$window.findName("textBox14").Text = $x64info.gss.bin\r
+$window.findName("textBox15").Text = $x64info.ssl.include\r
+$window.findName("textBox16").Text = $x64info.ssl.lib\r
+\r
+$buttonSave = $window.FindName("buttonSave")\r
+$buttonSave_clicked = $buttonSave.add_Click\r
+$buttonSave_clicked.Invoke({\r
+   $configInfo.Configuration.version = $window.findName("versionBox").Text  \r
+   $x86info.use_libpq = $(if ($window.findName("checkBox1").isChecked) {"yes"} else {"no"})\r
+   $x86info.use_gss = $(if ($window.findName("checkBox2").isChecked) {"yes"} else {"no"})\r
+   $x86info.use_sspi = $(if ($window.findName("checkBox3").isChecked) {"yes"} else {"no"})\r
+   $x86info.libpq.include = $window.findName("textBox1").Text  \r
+   $x86info.libpq.lib = $window.findName("textBox2").Text \r
+   $x86info.libpq.bin = $window.findName("textBox3").Text\r
+   $x86info.gss.include = $window.findName("textBox4").Text\r
+   $x86info.gss.lib = $window.findName("textBox5").Text\r
+   $x86info.gss.bin = $window.findName("textBox6").Text\r
+   $x86info.ssl.include = $window.findName("textBox7").Text\r
+   $x86info.ssl.lib = $window.findName("textBox8").Text\r
+   \r
+\r
+   $x64info.use_libpq = $(if ($window.findName("checkBox4").isChecked) {"yes"} else {"no"})\r
+   $x64info.use_gss = $(if ($window.findName("checkBox5").isChecked) {"yes"} else {"no"})\r
+   $x64info.use_sspi = $(if ($window.findName("checkBox6").isChecked) {"yes"} else {"no"})\r
+   $x64info.libpq.include = $window.findName("textBox9").Text\r
+   $x64info.libpq.lib = $window.findName("textBox10").Text\r
+   $x64info.libpq.bin = $window.findName("textBox11").Text\r
+   $x64info.gss.include = $window.findName("textBox12").Text\r
+   $x64info.gss.lib = $window.findName("textBox13").Text\r
+   $x64info.gss.bin = $window.findName("textBox14").Text\r
+   $x64info.ssl.include = $window.findName("textBox15").Text\r
+   $x64info.ssl.lib = $window.findName("textBox16").Text\r
+\r
+   SaveConfiguration\r
+})\r
+\r
+$window.ShowDialog() | out-null\r