mirror of
https://github.com/vczh-libraries/Release.git
synced 2026-03-24 00:13:48 +08:00
111 lines
4.2 KiB
PowerShell
111 lines
4.2 KiB
PowerShell
function GetCDBPath {
|
|
if ($env:CDBPATH -eq $null) {
|
|
$MESSAGE_1 = "You have to add an environment variable named CDBPATH and set its value to the path of cdb.exe, e.g.:"
|
|
$MESSAGE_2 = "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe"
|
|
$MESSAGE_3 = "To get cdb.exe, you need to install WDK via VS Installer (Individual Components page) followed by Windows WDK."
|
|
throw "$MESSAGE_1\r\n$MESSAGE_2\r\n$MESSAGE_3"
|
|
}
|
|
return $env:CDBPATH
|
|
}
|
|
|
|
function GetSolutionDir {
|
|
$currentDir = Get-Location
|
|
$solutionFolder = $null
|
|
|
|
while ($currentDir -ne $null) {
|
|
$solutionFiles = Get-ChildItem -Path $currentDir.Path -Filter "*.sln" -ErrorAction SilentlyContinue
|
|
if ($solutionFiles.Count -gt 0) {
|
|
$solutionFolder = $currentDir.Path
|
|
Write-Host "Found solution folder: $solutionFolder"
|
|
break
|
|
}
|
|
$currentDir = $currentDir.Parent
|
|
}
|
|
|
|
if ($solutionFolder -eq $null) {
|
|
throw "Could not find a solution folder (*.sln file) in current directory or any parent directories."
|
|
}
|
|
return $solutionFolder
|
|
}
|
|
|
|
function GetExecutableMap($solutionFolder, $executableName) {
|
|
return @{
|
|
"Debug|Win32" = "$solutionFolder\Debug\$executableName"
|
|
"Release|Win32" = "$solutionFolder\Release\$executableName"
|
|
"Debug|x64" = "$solutionFolder\x64\Debug\$executableName"
|
|
"Release|x64" = "$solutionFolder\x64\Release\$executableName"
|
|
}
|
|
}
|
|
|
|
function GetSpecifiedExecutable($solutionFolder, $executableName, $configuration, $platform) {
|
|
# Define configuration to path mappings
|
|
$configToPathMap = GetExecutableMap $solutionFolder $executableName
|
|
|
|
# Find existing files and get their modification times with configuration info
|
|
$path = $configToPathMap["$configuration|$platform"];
|
|
|
|
if (Test-Path $path) {
|
|
$fileInfo = Get-Item $path
|
|
return [PSCustomObject]@{
|
|
Path = $path
|
|
Configuration = $config
|
|
LastWriteTime = $fileInfo.LastWriteTime
|
|
}
|
|
} else {
|
|
throw "No $executableName for $configuration|$platform does not exist, please make sure the build was successful."
|
|
}
|
|
}
|
|
|
|
function GetLatestModifiedExecutable($solutionFolder, $executableName) {
|
|
# Define configuration to path mappings
|
|
$configToPathMap = GetExecutableMap $solutionFolder $executableName
|
|
|
|
# Find existing files and get their modification times with configuration info
|
|
$existingFiles = @()
|
|
foreach ($config in $configToPathMap.Keys) {
|
|
$path = $configToPathMap[$config]
|
|
if (Test-Path $path) {
|
|
$fileInfo = Get-Item $path
|
|
$existingFiles += [PSCustomObject]@{
|
|
Path = $path
|
|
Configuration = $config
|
|
LastWriteTime = $fileInfo.LastWriteTime
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($existingFiles.Count -eq 0) {
|
|
throw "No $executableName files found in any of the expected locations, please make sure the build was successful."
|
|
}
|
|
|
|
return $existingFiles | Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
|
}
|
|
|
|
function GetDebugArgs($solutionFolder, $latestFile, $executable) {
|
|
$userProjectFile = "$solutionFolder\$executable\$executable.vcxproj.user"
|
|
if (Test-Path $userProjectFile) {
|
|
try {
|
|
[xml]$userProjectXml = Get-Content $userProjectFile
|
|
$configPlatform = $latestFile.Configuration
|
|
|
|
if ($configPlatform) {
|
|
# Find the PropertyGroup with the matching Condition
|
|
$propertyGroup = $userProjectXml.Project.PropertyGroup | Where-Object {
|
|
$_.Condition -eq "'`$(Configuration)|`$(Platform)'=='$configPlatform'"
|
|
}
|
|
|
|
if ($propertyGroup -and $propertyGroup.LocalDebuggerCommandArguments) {
|
|
$debugArgs = $propertyGroup.LocalDebuggerCommandArguments
|
|
Write-Host "Found debug arguments: $debugArgs"
|
|
return $debugArgs
|
|
}
|
|
}
|
|
}
|
|
catch {
|
|
Write-Host "Warning: Could not read debug arguments from $userProjectFile"
|
|
}
|
|
} else {
|
|
Write-Host "Failed to find $userProjectFile"
|
|
}
|
|
return ""
|
|
} |