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)