aboutsummaryrefslogtreecommitdiff
path: root/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
blob: 570ebdf44772d120e217de7cf2d312d675dab525 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[CmdletBinding()]
param(
    [Parameter(Mandatory=$False)]
    [string]$withVSPath = ""
)

$withVSPath = $withVSPath -replace "\\$" # Remove potential trailing backslash

$scriptsDir = split-path -parent $script:MyInvocation.MyCommand.Definition
$VisualStudioInstallationInstances = & $scriptsDir\findVisualStudioInstallationInstances.ps1
if ($VisualStudioInstallationInstances -eq $null)
{
    throw "Could not find Visual Studio. VS2015 or VS2017 (with C++) needs to be installed."
}

Write-Verbose "VS Candidates:`n`r$([system.String]::Join([Environment]::NewLine, $VisualStudioInstallationInstances))"
foreach ($instanceCandidateWithEOL in $VisualStudioInstallationInstances)
{
    $instanceCandidate = $instanceCandidateWithEOL -replace "<sol>::" -replace "::<eol>"
    Write-Verbose "Inspecting: $instanceCandidate"
    $split = $instanceCandidate -split "::"
    # $preferenceWeight = $split[0]
    # $releaseType = $split[1]
    $version = $split[2]
    $path = $split[3]

    if ($withVSPath -ne "" -and $withVSPath -ne $path)
    {
        Write-Verbose "Skipping: $instanceCandidate"
        continue
    }

    $majorVersion = $version.Substring(0,2);
    if ($majorVersion -eq "15")
    {
        $VCFolder= "$path\VC\Tools\MSVC\"
        if (Test-Path $VCFolder)
        {
            Write-Verbose "Picking: $instanceCandidate"
            return "$path\MSBuild\15.0\Bin\MSBuild.exe", "v141"
        }
    }

    if ($majorVersion -eq "14")
    {
        $clExe= "$path\VC\bin\cl.exe"
        if (Test-Path $clExe)
        {
            Write-Verbose "Picking: $instanceCandidate"
            $programFilesPath = & $scriptsDir\getProgramFiles32bit.ps1
            return "$programFilesPath\MSBuild\14.0\Bin\MSBuild.exe", "v140"
        }
    }
}

throw "Could not find MSBuild version with C++ support. VS2015 or VS2017 (with C++) needs to be installed."