From fedf1d863a73ccd887b58c2894d204f8754f2238 Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Wed, 16 Aug 2023 12:53:07 +0200 Subject: [PATCH] Fix ninja long path support Ninja has issues if path exceeds 260 chars. The issue is reported here https://github.com/ninja-build/ninja/issues/1900 and can be easily fixed by doing correct setting in manifest file. Unfortunately the author still did not make release with the fix. QtWebEngine/QtPdf build generated file paths can exceed 260 chars especially if build is done on android platform, which leads to issues when running ninja as it get wrong 'dirty' and 'missing' nodes info. Add workaround and patch manifest during installation. Task-number: COIN-1077 Change-Id: I89166de73400de63bc3d1116b87c0f0754f36a2e Reviewed-by: Joerg Bornemann --- coin/provisioning/common/windows/helpers.ps1 | 15 +++++++++++++ coin/provisioning/common/windows/ninja.ps1 | 22 ++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/coin/provisioning/common/windows/helpers.ps1 b/coin/provisioning/common/windows/helpers.ps1 index 8dd3721a..8f29d121 100644 --- a/coin/provisioning/common/windows/helpers.ps1 +++ b/coin/provisioning/common/windows/helpers.ps1 @@ -306,3 +306,18 @@ function EnterVSDevShell { } return $true } + +function Invoke-MtCommand { + param( + [String] $vcVarsScript, + [String] $arch, + [String] $manifest, + [String] $executable + ) + $tempFile = [IO.Path]::GetTempFileName() + Add-Content -Path $tempFile -Value $manifest + $cmdLine = """$vcVarsScript"" $arch & mt.exe -manifest ""$tempFile"" -outputresource:""$executable"";1" + Write-Output Executing $cmdLine + & $Env:SystemRoot\system32\cmd.exe /c $cmdLine | Write-Output + Remove-Item $tempFile +} diff --git a/coin/provisioning/common/windows/ninja.ps1 b/coin/provisioning/common/windows/ninja.ps1 index 66511c46..d5557d82 100644 --- a/coin/provisioning/common/windows/ninja.ps1 +++ b/coin/provisioning/common/windows/ninja.ps1 @@ -11,3 +11,25 @@ Remove "$zip" Add-Path "C:\Utils\Ninja" Write-Output "Ninja = 1.10.2" >> ~/versions.txt + + +$manifest = @" + + + + + UTF-8 + true + + + +"@ + + +$vs2019 = [System.IO.File]::Exists("C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat") + +if($vs2019) { +Invoke-MtCommand "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64 $manifest "C:\Utils\Ninja\ninja.exe" +} else { +Invoke-MtCommand "C:\Program Files (x86)\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64 $manifest "C:\Utils\Ninja\ninja.exe" +}