summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavecramer2024-03-04 23:08:49 +0000
committerDave Cramer2024-04-19 19:08:47 +0000
commit4e1c1257acc66ddec124358dfe4c58346c22eed6 (patch)
treee12453bbe07d64e27e21c155ebac7548b5e01deb
parent27f637152b283707c0273849f19187dfa97b32f5 (diff)
Build and release using github actions
-rw-r--r--.github/workflows/configuration.xml38
-rw-r--r--.github/workflows/main.yml246
-rw-r--r--environ.c2
-rw-r--r--installer/buildInstallers.ps14
-rw-r--r--psqlodbc.sln11
-rw-r--r--readme.txt2
-rw-r--r--winbuild/MSProgram-Get.psm112
-rw-r--r--winbuild/regress.ps123
8 files changed, 322 insertions, 16 deletions
diff --git a/.github/workflows/configuration.xml b/.github/workflows/configuration.xml
new file mode 100644
index 0000000..760dc95
--- /dev/null
+++ b/.github/workflows/configuration.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration version="" formatVersion="0.4" vcversion="" toolset="">
+ <title>
+ </title>
+ <x86 disabled="no">
+ <libpq version="y">
+ <include>d:\postgresql86\include</include>
+ <lib>d:\postgresql86\lib</lib>
+ <bin>d:\postgresql86\bin</bin>
+ </libpq>
+ <setvcvars>
+ </setvcvars>
+ <build_macros>
+ </build_macros>
+ <runtime_folder>
+ </runtime_folder>
+ </x86>
+ <x64>
+ <libpq version="y">
+ <include>d:\postgresql\include</include>
+ <lib>d:\postgresql\lib</lib>
+ <bin>d:\postgresql\bin</bin>
+ </libpq>
+ <setvcvars>
+ </setvcvars>
+ <build_macros>
+ </build_macros>
+ <runtime_folder>
+ </runtime_folder>
+ </x64>
+ <BuildResult>
+ <Date>03/04/2024 10:49:13</Date>
+ <VisualStudioVersion>17.0</VisualStudioVersion>
+ <PlatformToolset>v143</PlatformToolset>
+ <ToolsVersion>Current</ToolsVersion>
+ <Platform>arm64</Platform>
+ </BuildResult>
+</Configuration> \ No newline at end of file
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..4203264
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,246 @@
+name: MSBuild
+run-name: psql ODBC CI - ${{ github.event.head_commit.message }}
+
+on:
+ push:
+ branches: [ "main" ]
+ tags:
+ - 'REL-*'
+ pull_request:
+ branches: [ "main" ]
+
+env:
+ # Path to the solution file relative to the root of the project.
+ SOLUTION_FILE_PATH: .
+
+ # Configuration type to build.
+ # You can convert this to a build matrix if you need coverage of multiple configuration types.
+ # https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
+ BUILD_CONFIGURATION: Release
+
+permissions:
+ contents: read
+
+jobs:
+ build_and_test:
+ runs-on: windows-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ repository: "postgres/postgres.git"
+ ref: 'master'
+ - name: 'get meson'
+ run: |
+ python -m pip install meson
+ python -m pip install ninja
+ - name: Cache Postgres directory
+ uses: actions/cache@v4
+ id: cachePostgres
+ with:
+ path: d:\postgresql
+ key: postgresql
+ - name: Cache Postgres86 directory
+ uses: actions/cache@v4
+ id: cachePostgres86
+ with:
+ path: d:\postgresql86
+ key: postgresql86
+ - name: Cache GNU diffutils for Test on PostgreSQL for Windows
+ uses: actions/cache@v4
+ id: cacheDiffutilsZip
+ with:
+ path: C:\OTHERBIN\diffutils
+ key: diffutils-2.8.7-1-bin.zip
+ env:
+ SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
+ - name: Cache PostgreSQL installer
+ uses: actions/cache@v4
+ id: cachePostgresInstaller
+ with:
+ path: C:\OTHERBIN\postgresql_install.exe
+ key: postgresql_installer
+ - name: Cache pkgconfiglite for Compile using msvc and meson
+ uses: actions/cache@v4
+ id: cachePkgConfigLiteZip
+ with:
+ path: C:\OTHERBIN\pkgconfiglite
+ key: pkg-config-lite-0.28-1_bin-win32.zip
+ env:
+ SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
+
+ - name: Cache winflexbison for Compile using msvc
+ uses: actions/cache@v4
+ id: cacheWinFlexBisonZip
+ with:
+ path: C:\OTHERBIN\winflexbison
+ key: win_flex_bison-2.5.24.zip
+ env:
+ SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
+ - name: Download GNU diffutils for Test on PostgreSQL for Windows
+ if: ${{steps.cacheDiffutilsZip.outputs.cache-hit != 'true'}}
+ uses: suisei-cn/actions-download-file@v1.6.0
+ id: downloadDiffutilsZip
+ with:
+ retry-times: 5
+ url: https://zenlayer.dl.sourceforge.net/project/gnuwin32/diffutils/2.8.7-1/diffutils-2.8.7-1-bin.zip
+
+ - name: Download pkgconfiglite for Compile using msvc and meson
+ if: ${{steps.cachePkgConfigLiteZip.outputs.cache-hit != 'true'}}
+ uses: suisei-cn/actions-download-file@v1.6.0
+ id: downloadPkgConfigLiteZip
+ with:
+ retry-times: 5
+ url: http://downloads.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip
+
+ - name: Download winflexbison for Compile using msvc
+ if: ${{steps.cacheWinFlexBisonZip.outputs.cache-hit != 'true'}}
+ uses: suisei-cn/actions-download-file@v1.6.0
+ id: downloadWinFlexBisonZip
+ with:
+ retry-times: 5
+ url: https://sourceforge.net/projects/winflexbison/files/win_flex_bison-2.5.24.zip
+
+ - name: Download postgresql install from EDB
+ uses: suisei-cn/actions-download-file@v1.6.0
+ if: ${{steps.cachePostgresInstaller.outputs.cache-hit != 'true'}}
+ id: downloadPostgresInstaller
+ with:
+ retry-times: 5
+ url: https://sbp.enterprisedb.com/getfile.jsp?fileid=1258893
+ target: c:\OTHERBIN
+ filename: postgresql_install.exe
+
+ - name: Extract Diffuntils and add Diffuntils bin directory to the PATH for Test on PostgreSQL for Windows
+ shell: cmd
+ run: |
+ rem MKDIR creates any intermediate directories in the path, if needed.
+ mkdir "C:\OTHERBIN\diffutils"
+ rem 7z is provided by Github Actions
+ 7z x diffutils-2.8.7-1-bin.zip -o"C:\OTHERBIN\diffutils"
+ copy diffutils-2.8.7-1-bin.zip "C:\OTHERBIN\diffutils"
+ dir "C:\OTHERBIN\diffutils"
+ rem - man7.org/linux/man-pages/man1/printf.1.html
+ printf "C:\\OTHERBIN\\diffutils\\bin" >> %GITHUB_PATH%
+
+ - name: Extract pkgconfiglite and add pkgconfiglite bin directory to the PATH for Compile using msvc and meson
+ shell: cmd
+ run: |
+ rem MKDIR creates any intermediate directories in the path, if needed.
+ mkdir "C:\OTHERBIN\pkgconfiglite"
+ rem 7z is provided by Github Actions
+ 7z x pkg-config-lite-0.28-1_bin-win32.zip -o"C:\OTHERBIN\pkgconfiglite"
+ copy pkg-config-lite-0.28-1_bin-win32.zip "C:\OTHERBIN\pkgconfiglite"
+ dir "C:\OTHERBIN\pkgconfiglite"
+ rem - man7.org/linux/man-pages/man1/printf.1.html
+ printf "C:\\OTHERBIN\\pkgconfiglite\\pkg-config-lite-0.28-1\\bin" >> %GITHUB_PATH%
+
+ # Choco Install winflexbison
+ # BUT the "crazy-max/ghaction-chocolatey@v2" "install pkgconfiglite" file download often times-out
+ - name: Extract winflexbison and add the winflexbison directory to the PATH for Compile using msvc
+ shell: cmd
+ run: |
+ rem MKDIR creates any intermediate directories in the path, if needed.
+ mkdir "C:\OTHERBIN\winflexbison"
+ rem 7z is provided by Github Actions
+ 7z x win_flex_bison-2.5.24.zip -o"C:\OTHERBIN\winflexbison"
+ copy win_flex_bison-2.5.24.zip "C:\OTHERBIN\winflexbison"
+ dir "C:\OTHERBIN\winflexbison"
+ rem - man7.org/linux/man-pages/man1/printf.1.html
+ printf "C:\OTHERBIN\\winflexbison" >> %GITHUB_PATH%
+ - name: 'setup msvc x86'
+ if: ${{steps.cachePostgres86.outputs.cache-hit != 'true'}}
+ uses: TheMrMilchmann/setup-msvc-dev@v3
+ with:
+ arch: x86
+ - name: 'build postgresx86'
+ if: ${{steps.cachePostgres86.outputs.cache-hit != 'true'}}
+ run: |
+ meson setup buildx86 --prefix=d:\postgresql86
+ cd buildx86
+ ninja -v
+ ninja -v install
+ - name: 'setup msvc x64'
+ if: ${{steps.cachePostgres.outputs.cache-hit != 'true'}}
+ uses: TheMrMilchmann/setup-msvc-dev@v3
+ with:
+ arch: x64
+ - name : 'build postgres x64'
+ if: ${{steps.cachePostgres.outputs.cache-hit != 'true'}}
+ run: |
+ meson setup build --prefix=d:\postgresql
+ cd build
+ ninja
+ ninja install
+ - name: install postgresql binary
+ shell: cmd
+ run: |
+ echo on
+ C:\OTHERBIN\postgresql_install.exe --mode unattended --unattendedmodeui none --superpassword password --enable-components server
+ - name: start postgresql
+ shell: cmd
+ run: |
+ echo on
+ sc config "postgresql-x64-14" start= auto
+ - name: get psqlodbc
+ uses: actions/checkout@v4
+ - name: 'setup msvc for psqlodbc'
+ uses: TheMrMilchmann/setup-msvc-dev@v3
+ with:
+ arch: x86
+ - name: build psqlodbc
+ shell: powershell
+ run: |
+ copy .github\workflows\configuration.xml winbuild
+ winbuild\BuildAll.ps1
+ installer\buildInstallers.ps1
+ - name: test psqlodbc
+ shell: powershell
+ run: |
+ winbuild\regress.ps1 -DsnInfo "SERVER=localhost|DATABASE=contrib_regression|PORT=5432|UID=postgres|PWD=password"
+ - name: Upload x64 merge module
+ uses: actions/upload-artifact@v4
+ with:
+ name: psqlODBC x64 Merge Module
+ path: ./installer/x64/*.msm
+ retention-days: 5
+ if-no-files-found: error
+ - name: Upload x64 installer package
+ uses: actions/upload-artifact@v4
+ with:
+ name: psqlODBC x64 Installer
+ path: ./installer/x64/*.msi
+ retention-days: 5
+ if-no-files-found: error
+ - name: Upload x86 merge module
+ uses: actions/upload-artifact@v4
+ with:
+ name: psqlODBC x86 Merge Module
+ path: ./installer/x86/*.msm
+ retention-days: 5
+ if-no-files-found: error
+ - name: Upload x86 installer package
+ uses: actions/upload-artifact@v4
+ with:
+ name: psqlODBC x86 Installer
+ path: ./installer/x86/*.msi
+ retention-days: 5
+ if-no-files-found: error
+ - name: Upload x64 setup
+ id: x64_setup
+ uses: actions/upload-artifact@v4
+ with:
+ name: psqlODBC x64 Setup
+ path: ./installer/psqlodbc-setup/bin/Release/psqlodbc-setup.exe
+ retention-days: 5
+ if-no-files-found: error
+
+ - name: Create Release
+ if: startsWith(github.ref, 'refs/tags/REL-')
+ uses: ncipollo/release-action@v1.14.0
+ id: create_release
+ with:
+ draft: false
+ prerelease: false
+ token: ${{secrets.RELEASE_TOKEN}}
+ artifacts: "./installer/x86/*.msi,./installer/x86/*.msm,./installer/psqlodbc-setup/bin/Release/psqlodbc-setup.exe"
diff --git a/environ.c b/environ.c
index 8ce794d..d2bfc26 100644
--- a/environ.c
+++ b/environ.c
@@ -194,7 +194,7 @@ ER_ReturnError(PG_ErrorInfo *pgerror,
BOOL partial_ok = ((flag & PODBC_ALLOW_PARTIAL_EXTRACT) != 0);
const char *msg;
UWORD msglen, wrtlen, pcblen;
- UInt4 stapos,
+ UInt4 stapos;
if (!pgerror)
return SQL_NO_DATA_FOUND;
diff --git a/installer/buildInstallers.ps1 b/installer/buildInstallers.ps1
index 5a30796..6373db6 100644
--- a/installer/buildInstallers.ps1
+++ b/installer/buildInstallers.ps1
@@ -278,7 +278,7 @@ function buildInstaller([string]$CPUTYPE)
}
Write-Host ".`nLinking psqlODBC merge module..."
- light -nologo -o $INSTBASE\psqlodbc_$CPUTYPE.msm $INSTBASE\psqlodbcm.wixobj
+ light -sval -nologo -o $INSTBASE\psqlodbc_$CPUTYPE.msm $INSTBASE\psqlodbcm.wixobj
if ($LASTEXITCODE -ne 0) {
throw "Failed to link merge module"
}
@@ -291,7 +291,7 @@ function buildInstaller([string]$CPUTYPE)
}
Write-Host ".`nLinking psqlODBC installer database..."
- light -nologo -ext WixUIExtension -cultures:en-us -o $INSTBASE\psqlodbc_$CPUTYPE.msi $INSTBASE\psqlodbc.wixobj
+ light -sval -nologo -ext WixUIExtension -cultures:en-us -o $INSTBASE\psqlodbc_$CPUTYPE.msi $INSTBASE\psqlodbc.wixobj
if ($LASTEXITCODE -ne 0) {
throw "Failed to link installer database"
}
diff --git a/psqlodbc.sln b/psqlodbc.sln
index b515cd3..eb5222f 100644
--- a/psqlodbc.sln
+++ b/psqlodbc.sln
@@ -1,7 +1,9 @@

-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "psqlODBC", "psqlodbc.vcproj", "{C45ECB41-8473-4F11-8186-E5574CFBADCF}"
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.8.34408.163
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "psqlODBC", "psqlodbc.vcxproj", "{C45ECB41-8473-4F11-8186-E5574CFBADCF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -17,4 +19,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {D4D16229-1A47-43D4-B881-F1D072436145}
+ EndGlobalSection
EndGlobal
diff --git a/readme.txt b/readme.txt
index 7f64657..8e5afb8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -5,7 +5,7 @@
Copyright (C) 1998 Insight Distribution Systems
- Copyright (C) 1998 - 2023 The PostgreSQL Global Development Group
+ Copyright (C) 1998 - 2024 The PostgreSQL Global Development Group
Multibyte support was added by Sankyo Unyu Service, (C) 2001.
diff --git a/winbuild/MSProgram-Get.psm1 b/winbuild/MSProgram-Get.psm1
index 4e9711d..81926bc 100644
--- a/winbuild/MSProgram-Get.psm1
+++ b/winbuild/MSProgram-Get.psm1
@@ -44,6 +44,8 @@ function Find-MSBuild
$VisualStudioVersion = "15.0"
} elseif ((Find-VSDir 16) -ne "") { # VC16 is installed
$VisualStudioVersion = "16.0"
+ } elseif ((Find-VSDir 17) -ne "") { #VC 17 is installed
+ $VisualStudioVersion = "17.0"
} elseif ("${env:VS140COMNTOOLS}" -ne "") { # VC14 is installed
$VisualStudioVersion = "14.0"
} elseif ("${env:VS120COMNTOOLS}" -ne "") { # VC12 is installed
@@ -67,7 +69,8 @@ function Find-MSBuild
"14.0" { $toolsout = 14 }
"15.0" { $toolsout = 15 }
"16.0" { $toolsout = 16 }
- default { throw "Selected Visual Stuidio is Version ${VisualStudioVersion}. Please use VC10 or later"}
+ "17.0" { $toolsout = 17 }
+ default { throw "Selected Visual Studio is Version ${VisualStudioVersion}. Please use VC10 or later"}
}
#
# Determine ToolsVersion
@@ -112,6 +115,7 @@ function Find-MSBuild
}
} catch {}
if ("$msbuildexe" -eq "") {
+ Write-Debug "tools version $toolsnum"
if ($toolsnum -gt 14) { # VC15 ~ VC16
$msbuildexe = msbfind_15_xx $toolsnum
} else { # VC10 ~ VC14
@@ -149,6 +153,7 @@ function Find-MSBuild
"14.0" {$Toolsetv="v140_xp"}
"15.0" {$Toolsetv="v141_xp"}
"16.0" {$Toolsetv="v142"}
+ "17.0" {$Toolsetv="v143"}
}
}
# avoid a bug of Windows7.1SDK PlatformToolset
@@ -400,7 +405,7 @@ function find_vs_installation
return $vsdir
}
-$vsarray = @{VC15 = "2017"; VC16 = "2019"}
+$vsarray = @{VC15 = "2017"; VC16 = "2019"; VC17 = "2022"}
# find VS dir for VC15 ~ VC16
function find_default_msbuild_path
{
@@ -413,12 +418,13 @@ function find_default_msbuild_path
if ($vsdir -eq "")
{
$toolsnum = [int]$toolsver
- if ($env:PROCESSOR_ARCHITECTURE -eq "x86") {
+ if ($env:PROCESSOR_ARCHITECTURE -eq "x86" -or $env:PROCESSOR_ARCHITECTURE -eq "ARM64") {
$pgmfs = "$env:ProgramFiles"
} else {
$pgmfs = "${env:ProgramFiles(x86)}"
}
$vsverdir = $vsarray["VC$toolsnum"]
+ Write-Debug "$pgmfs\Microsoft Visual Studio\$vsverdir\*\MSBuild\*\Bin\MSBuild.exe"
$lslist = @(Get-ChildItem "$pgmfs\Microsoft Visual Studio\$vsverdir\*\MSBuild\*\Bin\MSBuild.exe" -ErrorAction SilentlyContinue)
} else {
$lslist = @(Get-ChildItem "$vsdir\MSBuild\*\Bin\MSBuild.exe" -ErrorAction SilentlyContinue)
diff --git a/winbuild/regress.ps1 b/winbuild/regress.ps1
index 1dd65cd..bff0b7e 100644
--- a/winbuild/regress.ps1
+++ b/winbuild/regress.ps1
@@ -1,6 +1,6 @@
<#
.SYNOPSIS
- Run regressin test on Windows.
+ Run regression test on Windows.
.DESCRIPTION
Build test programs and run them.
.PARAMETER Target
@@ -13,6 +13,8 @@
Specify this switch in case of testing Ansi drivers.
.PARAMETER DeclareFetch
Specify Use Declare/Fetch mode. "On"(default), "off" or "both" is available.
+.PARAMETER DsnInfo
+ Specify the dsn info "SERVER=${server}|DATABASE=${database}|PORT=${port}|UID=${uid}|PWD=${passwd}"
.PARAMETER VCVersion
Used Visual Studio version is determined automatically unless this
option is specified.
@@ -23,7 +25,7 @@
option is specified. Currently "v100", "Windows7.1SDK", "v110",
"v110_xp", "v120", "v120_xp", "v140" or "v140_xp" is available.
.PARAMETER MSToolsVersion
- This option is deprecated. MSBuild ToolsVersion is detemrined
+ This option is deprecated. MSBuild ToolsVersion is determined
automatically unless this option is specified. Currently "4.0",
"12.0" or "14.0" is available.
.PARAMETER Configuration
@@ -44,7 +46,7 @@
> .\regress Clean
Clean all generated files.
.EXAMPLE
- > .\regress -TestList connect, deprected
+ > .\regress -TestList connect, deprecated
Build and run connect-test and deprecated-test.
.EXAMPLE
> .\regress -Ansi
@@ -81,6 +83,7 @@ Param(
[string]$BuildConfigPath,
[ValidateSet("off", "on", "both")]
[string]$DeclareFetch="on",
+[string]$DsnInfo,
[string]$SpecificDsn,
[switch]$ReinstallDriver
)
@@ -250,7 +253,7 @@ function RunTest($scriptPath, $Platform, $testexes)
}
}
-function SpecialDsn($testdsn, $testdriver)
+function SpecialDsn($testdsn, $testdriver, $dsninfo)
{
function input-dsninfo($server="localhost", $uid="postgres", $passwd="postgres", $port="5432", $database="contrib_regression")
{
@@ -280,7 +283,11 @@ function SpecialDsn($testdsn, $testdriver)
switch ($LastExitCode) {
-1 {
Write-Host "`tAdding System DSN=$testdsn Driver=$testdriver"
- $prop = input-dsninfo
+ if ($dsninfo.Length -eq 0) {
+ $prop = input-dsninfo
+ } else {
+ $prop = $dsninfo
+ }
$prop += "|Debug=0|Commlog=0|ConnSettings=set+lc_messages='C'"
$proc = Start-Process $regProgram -Verb runas -Wait -PassThru -ArgumentList "register_dsn $testdriver $testdsn $prop `"$dlldir`" Driver=${dllname}|Setup=${setup}"
if ($proc.ExitCode -ne 0) {
@@ -383,6 +390,10 @@ if ($DriverConfiguration -ieq "Debug") {
$testdriver += "_debug"
$testdsn += "_debug"
}
+if ("$DsnInfo" -ne "") {
+ Write-Host "`tDsn Info=$DsnInfo"
+ $dsninfo=$DsnInfo
+}
if ("$SpecificDsn" -ne "") {
Write-Host "`tSpecific DSN=$SpecificDsn"
$testdsn=$SpecificDsn
@@ -414,7 +425,7 @@ foreach ($pl in $pary) {
$env:PSQLODBC_TEST_DSN = $testdsn
try {
- SpecialDsn $testdsn $testdriver
+ SpecialDsn $testdsn $testdriver $dsninfo
RunTest $scriptPath $pl $TESTEXES
} catch [Exception] {
throw $error[0]