diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 4de69ffd..782ed4d9 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -69,7 +69,7 @@ jobs:
- name: Fail if tests failed
if: steps.make-check.outcome == 'failure'
run: exit 1
- windows:
+ windows_msys:
runs-on: windows-latest
defaults:
run:
@@ -104,3 +104,72 @@ jobs:
- name: Fail if tests failed
if: steps.make-check.outcome == 'failure'
run: exit 1
+ windows_msvc:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: ilammy/msvc-dev-cmd@v1
+
+ - name: Install dependencies
+ run: |
+ vcpkg install gettext libiconv libcsv libxlsxwriter zlib --triplet x64-windows
+ vcpkg integrate install
+
+ - name: Fix library filename and paths for MSVC
+ shell: pwsh
+ run: |
+ $libDir = "C:\vcpkg\installed\x64-windows\lib"
+
+ if (Test-Path "$libDir\iconv.lib") {
+ Copy-Item "$libDir\iconv.lib" "$libDir\libiconv.lib" -Force
+ }
+
+ # Depending on the zlib port version, the import library is named
+ # z.lib, zlib1.lib or zlibd.lib/zlib1d.lib; the projects link
+ # against zlib.lib/zlibd.lib
+ if (Test-Path "$libDir\z.lib") {
+ Copy-Item "$libDir\z.lib" "$libDir\zlib.lib" -Force
+ }
+ if (Test-Path "$libDir\zd.lib") {
+ Copy-Item "$libDir\zd.lib" "$libDir\zlibd.lib" -Force
+ }
+ if (Test-Path "$libDir\zlib1.lib") {
+ Copy-Item "$libDir\zlib1.lib" "$libDir\zlib.lib" -Force
+ }
+ if (Test-Path "$libDir\zlib1d.lib") {
+ Copy-Item "$libDir\zlib1d.lib" "$libDir\zlibd.lib" -Force
+ }
+
+ if (-not (Test-Path "$libDir\zlib.lib")) {
+ Write-Host "##vso[task.logissue type=error]zlib.lib not found in $libDir after fix step"
+ Get-ChildItem $libDir -Filter *.lib | Select-Object -ExpandProperty Name
+ exit 1
+ }
+
+ - name: Build
+ run: |
+ MSBuild ./VS17/ReadStat.sln /p:Configuration=Release /p:Platform=x64 /nologo
+
+ - name: Test
+ id: make-check
+ shell: pwsh
+ env:
+ PATH: C:\vcpkg\installed\x64-windows\bin;${{ env.PATH }}
+ run: |
+ ./VS17/x64/Release/ReadStat_App.exe
+ ./VS17/x64/Release/ReadStat_Test_double_decimals.exe
+ ./VS17/x64/Release/ReadStat_Test_dta_days.exe
+ ./VS17/x64/Release/ReadStat_Test_sav_date.exe
+ ./VS17/x64/Release/ReadStat_Test_readstat.exe
+ continue-on-error: true
+ - name: Upload test log
+ if: steps.make-check.outcome == 'failure'
+ uses: actions/upload-artifact@v4
+ with:
+ name: test-suite-log-windows
+ path: test-suite.log
+ retention-days: 5
+ - name: Fail if tests failed
+ if: steps.make-check.outcome == 'failure'
+ run: exit 1
diff --git a/VS17/PropertySheet.props b/VS17/PropertySheet.props
index 1cc1bc39..89b98fde 100644
--- a/VS17/PropertySheet.props
+++ b/VS17/PropertySheet.props
@@ -5,7 +5,7 @@
- READSTAT_VERSION="1.1.9";_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ READSTAT_VERSION="1.1.9";HAVE_ZLIB=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
diff --git a/VS17/ReadStat.vcxproj b/VS17/ReadStat.vcxproj
index 9463c4e5..e129d8fe 100644
--- a/VS17/ReadStat.vcxproj
+++ b/VS17/ReadStat.vcxproj
@@ -23,32 +23,32 @@
{7D9D3258-8850-466E-8A74-4F8025E6FA49}
Win32Proj
ReadStat
- 10.0.17763.0
+ $(LatestTargetPlatformVersion)
StaticLibrary
true
- v141
+ $(DefaultPlatformToolset)
Unicode
StaticLibrary
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
StaticLibrary
true
- v141
+ $(DefaultPlatformToolset)
Unicode
StaticLibrary
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
@@ -105,7 +105,7 @@
false
- $(ProjectDir)..\..\iconv\include;%(AdditionalIncludeDirectories)
+ $(VcpkgRoot)\installed\$(VcpkgTriplet)\include;%(AdditionalIncludeDirectories)
$(IntDir)FakePath\%(RelativeDir)
$(IntDir)FakePath\%(RelativeDir)\
@@ -124,7 +124,7 @@
true
- $(ProjectDir)..\..\iconv\include;%(AdditionalIncludeDirectories)
+ $(VcpkgRoot)\installed\$(VcpkgTriplet)\include;%(AdditionalIncludeDirectories)
$(IntDir)FakePath\%(RelativeDir)
$(IntDir)FakePath\%(RelativeDir)\
@@ -150,7 +150,7 @@
false
- $(ProjectDir)..\..\iconv\include;%(AdditionalIncludeDirectories)
+ $(VcpkgRoot)\installed\$(VcpkgTriplet)\include;%(AdditionalIncludeDirectories)
$(IntDir)FakePath\%(RelativeDir)
$(IntDir)FakePath\%(RelativeDir)\
@@ -173,7 +173,7 @@
true
- $(ProjectDir)..\..\iconv\include;%(AdditionalIncludeDirectories)
+ $(VcpkgRoot)\installed\$(VcpkgTriplet)\include;%(AdditionalIncludeDirectories)
$(IntDir)FakePath\%(RelativeDir)
$(IntDir)FakePath\%(RelativeDir)\
@@ -220,6 +220,9 @@
+
+
+
diff --git a/VS17/ReadStat.vcxproj.filters b/VS17/ReadStat.vcxproj.filters
index 88432b87..d9178318 100644
--- a/VS17/ReadStat.vcxproj.filters
+++ b/VS17/ReadStat.vcxproj.filters
@@ -99,6 +99,15 @@
Source Files\spss
+
+ Source Files\spss
+
+
+ Source Files\spss
+
+
+ Source Files\spss
+
Source Files\spss
diff --git a/VS17/ReadStat_App/ReadStat_App.vcxproj b/VS17/ReadStat_App/ReadStat_App.vcxproj
index 8028214a..c8ea81cc 100644
--- a/VS17/ReadStat_App/ReadStat_App.vcxproj
+++ b/VS17/ReadStat_App/ReadStat_App.vcxproj
@@ -65,33 +65,33 @@
{80188B4B-81A0-4113-A848-CB6483D185EA}
Win32Proj
ReadStatApp
- 10.0.17763.0
+ $(LatestTargetPlatformVersion)
ReadStat_App
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
@@ -149,8 +149,8 @@
Console
true
- ReadStat.lib;libiconvD.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(ProjectDir)..\..\..\iconv\lib;..\x86\$(ConfigurationName);
+ ReadStat.lib;libiconvD.lib;zlibd.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ $(VcpkgRoot)\installed\$(VcpkgTriplet)\lib;$(ProjectDir)..\..\..\iconv\lib;..\x86\$(ConfigurationName);%(AdditionalLibraryDirectories)
@@ -169,8 +169,8 @@
Console
true
- ReadStat.lib;libiconvD.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(ProjectDir)..\..\..\iconv\lib64;..\x64\$(ConfigurationName)
+ ReadStat.lib;libiconvD.lib;zlibd.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ $(VcpkgRoot)\installed\$(VcpkgTriplet)\lib;$(ProjectDir)..\..\..\iconv\lib64;..\x64\$(ConfigurationName);%(AdditionalLibraryDirectories)
@@ -193,8 +193,8 @@
true
true
false
- ReadStat.lib;libiconv.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(ProjectDir)..\..\..\iconv\lib;..\x86\$(ConfigurationName);
+ ReadStat.lib;libiconv.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ $(VcpkgRoot)\installed\$(VcpkgTriplet)\lib;$(ProjectDir)..\..\..\iconv\lib;..\x86\$(ConfigurationName);%(AdditionalLibraryDirectories)
@@ -217,11 +217,11 @@
true
true
false
- ReadStat.lib;libiconv.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(ProjectDir)..\..\..\iconv\lib64;..\x64\$(ConfigurationName)
+ ReadStat.lib;libiconv.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ $(VcpkgRoot)\installed\$(VcpkgTriplet)\lib;$(ProjectDir)..\..\..\iconv\lib64;..\x64\$(ConfigurationName);%(AdditionalLibraryDirectories)
-
\ No newline at end of file
+
diff --git a/VS17/ReadStat_Test_double_decimals/ReadStat_Test_double_decimals.vcxproj b/VS17/ReadStat_Test_double_decimals/ReadStat_Test_double_decimals.vcxproj
index 34280ca5..290dc171 100644
--- a/VS17/ReadStat_Test_double_decimals/ReadStat_Test_double_decimals.vcxproj
+++ b/VS17/ReadStat_Test_double_decimals/ReadStat_Test_double_decimals.vcxproj
@@ -23,33 +23,33 @@
{96AB8E29-11AC-40F0-871A-856DD9C78EAB}
Win32Proj
ReadStatTests
- 10.0.17763.0
+ $(LatestTargetPlatformVersion)
ReadStat_Test_double_decimals
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
diff --git a/VS17/ReadStat_Test_dta_days/ReadStat_Test_dta_days.vcxproj b/VS17/ReadStat_Test_dta_days/ReadStat_Test_dta_days.vcxproj
index 62b310e7..fe612443 100644
--- a/VS17/ReadStat_Test_dta_days/ReadStat_Test_dta_days.vcxproj
+++ b/VS17/ReadStat_Test_dta_days/ReadStat_Test_dta_days.vcxproj
@@ -23,33 +23,33 @@
{D6F08523-A8F5-4F2A-A57B-EC013A136DA6}
Win32Proj
ReadStatTests
- 10.0.17763.0
+ $(LatestTargetPlatformVersion)
ReadStat_Test_dta_days
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
diff --git a/VS17/ReadStat_Test_readstat/ReadStat_Test_readstat.vcxproj b/VS17/ReadStat_Test_readstat/ReadStat_Test_readstat.vcxproj
index fa583f76..dc40f4bf 100644
--- a/VS17/ReadStat_Test_readstat/ReadStat_Test_readstat.vcxproj
+++ b/VS17/ReadStat_Test_readstat/ReadStat_Test_readstat.vcxproj
@@ -23,33 +23,33 @@
{E9408E27-6E13-46C9-B07D-9569BD078EF6}
Win32Proj
ReadStatTests
- 10.0.17763.0
+ $(LatestTargetPlatformVersion)
ReadStat_Test_readstat
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
@@ -112,8 +112,8 @@
true
true
false
- $(ProjectDir)..\..\..\iconv\lib;..\x86\$(ConfigurationName);%(AdditionalLibraryDirectories)
- ReadStat.lib;libiconv.lib;%(AdditionalDependencies)
+ C:\vcpkg\installed\x64-windows\lib;$(ProjectDir)..\..\..\iconv\lib64;..\x64\$(ConfigurationName)
+ ReadStat.lib;iconv.lib;zlib.lib;%(AdditionalDependencies)
@@ -179,8 +179,8 @@
true
true
false
- ReadStat.lib;libiconv.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
- $(ProjectDir)..\..\..\iconv\lib64;..\x64\$(ConfigurationName)
+ ReadStat.lib;iconv.lib;zlib.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ C:\vcpkg\installed\x64-windows\lib;$(ProjectDir)..\..\..\iconv\lib64;..\x64\$(ConfigurationName)
@@ -210,4 +210,4 @@
-
\ No newline at end of file
+
diff --git a/VS17/ReadStat_Test_sav_date/ReadStat_Test_sav_date.vcxproj b/VS17/ReadStat_Test_sav_date/ReadStat_Test_sav_date.vcxproj
index 4ee7077a..a1ea3bc5 100644
--- a/VS17/ReadStat_Test_sav_date/ReadStat_Test_sav_date.vcxproj
+++ b/VS17/ReadStat_Test_sav_date/ReadStat_Test_sav_date.vcxproj
@@ -23,33 +23,33 @@
{D5265192-6034-4689-94FF-8B2060FBC309}
Win32Proj
ReadStatTests
- 10.0.17763.0
+ $(LatestTargetPlatformVersion)
ReadStat_Test_sav_date
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
Application
true
- v141
+ $(DefaultPlatformToolset)
Unicode
Application
false
- v141
+ $(DefaultPlatformToolset)
true
Unicode
diff --git a/appveyor.yml b/appveyor.yml
index 48aa148b..244b2543 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -16,6 +16,38 @@ install:
- git clone https://github.com/pffang/libiconv-for-Windows.git C:\projects\iconv
- cd C:\projects\iconv
- git checkout 0e36d95873
+ # Mirror the GitHub Actions windows_msvc job: install libiconv and zlib
+ # via vcpkg so "vcpkg integrate install" can inject the include/lib paths
+ # (iconv.h, zlib.h) into MSBuild, just like the GH runner does.
+ - ps: |
+ $vcpkg = Get-Command vcpkg -ErrorAction SilentlyContinue
+ if (-not $vcpkg) { $vcpkgExe = "C:\tools\vcpkg\vcpkg.exe" } else { $vcpkgExe = $vcpkg.Source }
+ & $vcpkgExe install libiconv zlib --triplet x64-windows
+ & $vcpkgExe integrate install
+ $vcpkgRoot = Split-Path $vcpkgExe
+ $libDir = Join-Path $vcpkgRoot "installed\x64-windows\lib"
+ # vcpkg's libiconv installs as iconv.lib; the projects link against
+ # libiconv.lib/libiconvD.lib
+ if ((Test-Path "$libDir\iconv.lib") -and -not (Test-Path "$libDir\libiconv.lib")) {
+ Copy-Item "$libDir\iconv.lib" "$libDir\libiconv.lib" -Force
+ }
+ if ((Test-Path "$libDir\iconvd.lib") -and -not (Test-Path "$libDir\libiconvD.lib")) {
+ Copy-Item "$libDir\iconvd.lib" "$libDir\libiconvD.lib" -Force
+ }
+ # The zlib import library is named z.lib (or zlib1.lib) depending on
+ # the port version; the projects link against zlib.lib/zlibd.lib
+ if ((Test-Path "$libDir\z.lib") -and -not (Test-Path "$libDir\zlib.lib")) {
+ Copy-Item "$libDir\z.lib" "$libDir\zlib.lib" -Force
+ }
+ if ((Test-Path "$libDir\zlib1.lib") -and -not (Test-Path "$libDir\zlib.lib")) {
+ Copy-Item "$libDir\zlib1.lib" "$libDir\zlib.lib" -Force
+ }
+ if ((Test-Path "$libDir\zd.lib") -and -not (Test-Path "$libDir\zlibd.lib")) {
+ Copy-Item "$libDir\zd.lib" "$libDir\zlibd.lib" -Force
+ }
+ if ((Test-Path "$libDir\zlib1d.lib") -and -not (Test-Path "$libDir\zlibd.lib")) {
+ Copy-Item "$libDir\zlib1d.lib" "$libDir\zlibd.lib" -Force
+ }
for:
-
@@ -41,6 +73,13 @@ test_script:
$tests = @("readstat","double_decimals","sav_date","dta_days")
Copy-Item "C:\projects\iconv\lib64\libiconvD.dll" -Destination "C:\projects\readstat\VS17\x64\Debug\"
+ # vcpkg's iconv.dll / zlib*.dll are also needed at run time
+ $dllDirs = @("C:\vcpkg\installed\x64-windows\bin", "C:\tools\vcpkg\installed\x64-windows\bin")
+ foreach ($dir in $dllDirs) {
+ Get-ChildItem "$dir\iconv*.dll","$dir\charset*.dll","$dir\zlib*.dll","$dir\z.dll" -ErrorAction SilentlyContinue | ForEach-Object {
+ Copy-Item $_.FullName -Destination "C:\projects\readstat\VS17\x64\Debug\" -Force
+ }
+ }
for($i=0 ; $i -lt $tests.Length ; $i++)
{