diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1d2d04c..cd89406 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -17,9 +17,9 @@ jobs:
FBSDK_VERSION: 2025-03-07
SOL_FILE: foo_opensubsonic.sln
- MSBUILD_CMD_X86: /maxcpucount /property:RestorePackagesConfig=true,Configuration=Release,Platform=Win32 /target:restore,build
- MSBUILD_CMD_X64: /maxcpucount /property:RestorePackagesConfig=true,Configuration=Release,Platform=x64 /target:restore,build
- MSBUILD_CMD_ARM64EC: /maxcpucount /property:RestorePackagesConfig=true,Configuration=Release,Platform=ARM64EC /target:restore,build
+ MSBUILD_CMD_X86: /maxcpucount /property:RestorePackagesConfig=true,Configuration=Release,Platform=Win32,UseOfAtl=Static /target:restore,build
+ MSBUILD_CMD_X64: /maxcpucount /property:RestorePackagesConfig=true,Configuration=Release,Platform=x64,UseOfAtl=Static /target:restore,build
+ MSBUILD_CMD_ARM64EC: /maxcpucount /property:RestorePackagesConfig=true,Configuration=Release,Platform=ARM64EC,UseOfAtl=Static /target:restore,build
steps:
- name: Checkout repository
@@ -43,21 +43,70 @@ jobs:
- name: Patch SDK
shell: pwsh
run: |
- $ns = @{msb="http://schemas.microsoft.com/developer/msbuild/2003"}
-
- $map = @{
- "lib\foobar2000_sdk\libPPUI\libPPUI.vcxproj" = "../..;..;..\..\wtl\Include"
- "lib\foobar2000_sdk\foobar2000\helpers\foobar2000_sdk_helpers.vcxproj" = "..\..\..\wtl\Include"
+ $projectPatches = @{
+ "lib\foobar2000_sdk\libPPUI\libPPUI.vcxproj" = '..;../..;..;..\..\wtl\Include;$(VC_AtlmfcIncludePath);%(AdditionalIncludeDirectories)'
+ "lib\foobar2000_sdk\foobar2000\helpers\foobar2000_sdk_helpers.vcxproj" = '..;..\..;..\..\..\wtl\Include;$(VC_AtlmfcIncludePath);%(AdditionalIncludeDirectories)'
}
- foreach ($f in $map.Keys) {
- [xml]$x = Get-Content $f
- $x.SelectNodes("//msb:AdditionalIncludeDirectories", $ns) | % {
- $_.InnerText = $map[$f]
+ foreach ($project in $projectPatches.GetEnumerator()) {
+ $filePath = Resolve-Path $project.Key
+
+ [xml]$x = Get-Content $filePath
+ $ns = New-Object System.Xml.XmlNamespaceManager($x.NameTable)
+ $ns.AddNamespace("msb", "http://schemas.microsoft.com/developer/msbuild/2003")
+ $msbuildNs = $ns.LookupNamespace("msb")
+
+ $x.SelectNodes("//msb:ClCompile/msb:AdditionalIncludeDirectories", $ns) | ForEach-Object {
+ $_.InnerText = $project.Value
}
- $x.Save($f)
+
+ $x.SelectNodes("//msb:PropertyGroup[@Label='Configuration']", $ns) | ForEach-Object {
+ $useOfAtl = $_.SelectSingleNode("msb:UseOfAtl", $ns)
+ if ($null -eq $useOfAtl) {
+ $useOfAtl = $x.CreateElement("UseOfAtl", $msbuildNs)
+ [void]$_.AppendChild($useOfAtl)
+ }
+
+ $useOfAtl.InnerText = "Static"
+ }
+
+ $x.Save($filePath)
}
+ - name: Install ATL components
+ shell: pwsh
+ run: |
+ $vswhere = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual Studio\Installer\vswhere.exe"
+ $vsInstaller = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual Studio\Installer\vs_installer.exe"
+ $installPath = & $vswhere -latest -products * -requires Microsoft.Component.MSBuild -property installationPath
+
+ if (-not $installPath) {
+ throw "Visual Studio installation path not found"
+ }
+
+ & $vsInstaller modify `
+ --installPath "$installPath" `
+ --add Microsoft.VisualStudio.Component.VC.ATL `
+ --add Microsoft.VisualStudio.Component.VC.ATLMFC `
+ --add Microsoft.VisualStudio.Component.VC.ATL.ARM64 `
+ --add Microsoft.VisualStudio.Component.VC.MFC.ARM64 `
+ --add Microsoft.VisualStudio.Component.VC.14.29.16.11.ATL `
+ --add Microsoft.VisualStudio.Component.VC.14.29.16.11.MFC `
+ --add Microsoft.VisualStudio.Component.VC.14.29.16.11.ATL.ARM64 `
+ --add Microsoft.VisualStudio.Component.VC.14.29.16.11.MFC.ARM64 `
+ --quiet --norestart --wait
+
+ if ($LASTEXITCODE -ne 0) {
+ throw "Visual Studio component installation failed with exit code $LASTEXITCODE"
+ }
+
+ $atlHeaders = Get-ChildItem -Path (Join-Path $installPath "VC\Tools\MSVC") -Filter atlbase.h -Recurse -ErrorAction SilentlyContinue
+ if (-not $atlHeaders) {
+ throw "ATL headers are still missing after component installation"
+ }
+
+ $atlHeaders | Select-Object -ExpandProperty FullName
+
- name: Setup devcmd
uses: ilammy/msvc-dev-cmd@v1
diff --git a/src/foo_opensubsonic.vcxproj b/src/foo_opensubsonic.vcxproj
index 3745a52..098fca5 100644
--- a/src/foo_opensubsonic.vcxproj
+++ b/src/foo_opensubsonic.vcxproj
@@ -145,7 +145,7 @@
Use
Level3
stdcpp20
- ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\WTL\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
+ ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\wtl\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
Disabled
DEBUG;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
@@ -160,7 +160,7 @@
Use
Level3
stdcpp20
- ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\WTL\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
+ ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\wtl\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
Disabled
DEBUG;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
@@ -175,7 +175,7 @@
Use
Level3
stdcpp20
- ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\WTL\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
+ ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\wtl\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
Disabled
DEBUG;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
@@ -190,7 +190,7 @@
Use
Level3
stdcpp20
- ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\WTL\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
+ ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\wtl\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
Disabled
DEBUG;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
@@ -205,7 +205,7 @@
Level3
Use
stdcpp20
- ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\WTL\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
+ ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\wtl\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
NDEBUG;%(PreprocessorDefinitions)
@@ -221,7 +221,7 @@
Level3
Use
stdcpp20
- ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\WTL\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
+ ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\wtl\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
NDEBUG;%(PreprocessorDefinitions)
@@ -237,7 +237,7 @@
Level3
Use
stdcpp20
- ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\WTL\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
+ ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\wtl\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
NDEBUG;%(PreprocessorDefinitions)
@@ -253,7 +253,7 @@
Level3
Use
stdcpp20
- ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\WTL\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
+ ..\lib\foobar2000_sdk\foobar2000;..\lib\foobar2000_sdk\;...\lib\foobar2000_sdk\libPPUI;..\lib\wtl\Include;..\lib\nlohmann;..\lib;%(AdditionalIncludeDirectories)
NDEBUG;%(PreprocessorDefinitions)