aboutsummaryrefslogtreecommitdiff
path: root/scripts/buildsystems
diff options
context:
space:
mode:
authorThomas Gwynne-Timothy <thomas.gt@live.com>2020-10-27 18:55:27 -0600
committerGitHub <noreply@github.com>2020-10-27 17:55:27 -0700
commit10771a845e5cd7ee07a8fe367188f19bb722864b (patch)
tree6cf3fb3e71dcdb540bcd3edeb62ba23048eefa1e /scripts/buildsystems
parentbf7dbde05e198e4932d7ad4646b6589f9cd5239b (diff)
downloadvcpkg-10771a845e5cd7ee07a8fe367188f19bb722864b.tar.gz
vcpkg-10771a845e5cd7ee07a8fe367188f19bb722864b.zip
Serialize deployBinary on target directory (#11363)
Diffstat (limited to 'scripts/buildsystems')
-rw-r--r--scripts/buildsystems/msbuild/applocal.ps155
1 files changed, 42 insertions, 13 deletions
diff --git a/scripts/buildsystems/msbuild/applocal.ps1 b/scripts/buildsystems/msbuild/applocal.ps1
index 06f0733a7..f0cb6ee1f 100644
--- a/scripts/buildsystems/msbuild/applocal.ps1
+++ b/scripts/buildsystems/msbuild/applocal.ps1
@@ -12,24 +12,53 @@ if ($copiedFilesLog)
Set-Content -Path $copiedFilesLog -Value "" -Encoding UTF8
}
+function computeHash([System.Security.Cryptography.HashAlgorithm]$alg, [string]$str) {
+ $bytes = [System.Text.Encoding]::UTF8.GetBytes($str)
+ $hash = $alg.ComputeHash($bytes)
+ return [Convert]::ToBase64String($hash)
+}
+
+function getMutex([string]$targetDir) {
+ $sha512Hash = [System.Security.Cryptography.SHA512]::Create()
+ if ($sha512Hash) {
+ $hash = computeHash $sha512Hash $targetDir
+ $mtxName = "VcpkgAppLocalDeployBinary-" + $hash
+ return New-Object System.Threading.Mutex($false, $mtxName)
+ }
+
+ return New-Object System.Threading.Mutex($false, "VcpkgAppLocalDeployBinary")
+}
+
# Note: this function signature is depended upon by the qtdeploy.ps1 script introduced in 5.7.1-7
function deployBinary([string]$targetBinaryDir, [string]$SourceDir, [string]$targetBinaryName) {
- if (Test-Path "$targetBinaryDir\$targetBinaryName") {
- $sourceModTime = (Get-Item $SourceDir\$targetBinaryName).LastWriteTime
- $destModTime = (Get-Item $targetBinaryDir\$targetBinaryName).LastWriteTime
- if ($destModTime -lt $sourceModTime) {
- Write-Verbose " ${targetBinaryName}: Updating $SourceDir\$targetBinaryName"
+ try {
+ $mtx = getMutex($targetBinaryDir)
+ if ($mtx) {
+ $mtx.WaitOne() | Out-Null
+ }
+
+ if (Test-Path "$targetBinaryDir\$targetBinaryName") {
+ $sourceModTime = (Get-Item $SourceDir\$targetBinaryName).LastWriteTime
+ $destModTime = (Get-Item $targetBinaryDir\$targetBinaryName).LastWriteTime
+ if ($destModTime -lt $sourceModTime) {
+ Write-Verbose " ${targetBinaryName}: Updating $SourceDir\$targetBinaryName"
+ Copy-Item "$SourceDir\$targetBinaryName" $targetBinaryDir
+ } else {
+ Write-Verbose " ${targetBinaryName}: already present"
+ }
+ }
+ else {
+ Write-Verbose " ${targetBinaryName}: Copying $SourceDir\$targetBinaryName"
Copy-Item "$SourceDir\$targetBinaryName" $targetBinaryDir
- } else {
- Write-Verbose " ${targetBinaryName}: already present"
+ }
+ if ($copiedFilesLog) { Add-Content $copiedFilesLog "$targetBinaryDir\$targetBinaryName" -Encoding UTF8 }
+ if ($tlogFile) { Add-Content $tlogFile "$targetBinaryDir\$targetBinaryName" -Encoding Unicode }
+ } finally {
+ if ($mtx) {
+ $mtx.ReleaseMutex() | Out-Null
+ $mtx.Dispose() | Out-Null
}
}
- else {
- Write-Verbose " ${targetBinaryName}: Copying $SourceDir\$targetBinaryName"
- Copy-Item "$SourceDir\$targetBinaryName" $targetBinaryDir
- }
- if ($copiedFilesLog) { Add-Content $copiedFilesLog "$targetBinaryDir\$targetBinaryName" -Encoding UTF8 }
- if ($tlogFile) { Add-Content $tlogFile "$targetBinaryDir\$targetBinaryName" -Encoding Unicode }
}