mirror of
https://github.com/electron/node-gyp.git
synced 2025-08-15 12:58:19 +02:00
win: support running in VS Command Prompt
PR-URL: https://github.com/nodejs/node-gyp/pull/1762 Reviewed-By: Refael Ackermann <refack@gmail.com>
This commit is contained in:
parent
360ddbdf3a
commit
0efb8fb34b
3 changed files with 90 additions and 8 deletions
|
@ -54,6 +54,15 @@ VisualStudioFinder.prototype = {
|
|||
this.addLog('msvs_version not set from command line or npm config')
|
||||
}
|
||||
|
||||
if (process.env.VCINSTALLDIR) {
|
||||
this.envVcInstallDir =
|
||||
path.resolve(process.env.VCINSTALLDIR, '..')
|
||||
this.addLog('running in VS Command Prompt, installation path is:\n' +
|
||||
`"${this.envVcInstallDir}"\n- will only use this version`)
|
||||
} else {
|
||||
this.addLog('VCINSTALLDIR not set, not running in VS Command Prompt')
|
||||
}
|
||||
|
||||
this.findVisualStudio2017OrNewer((info) => {
|
||||
if (info) {
|
||||
return this.succeed(info)
|
||||
|
@ -80,9 +89,13 @@ VisualStudioFinder.prototype = {
|
|||
},
|
||||
|
||||
fail: function fail () {
|
||||
// If msvs_version was specified but finding VS failed, print what would
|
||||
// have been accepted
|
||||
if (this.configMsvsVersion) {
|
||||
if (this.configMsvsVersion && this.envVcInstallDir) {
|
||||
this.errorLog.push(
|
||||
'msvs_version does not match this VS Command Prompt or the',
|
||||
'installation cannot be used.')
|
||||
} else if (this.configMsvsVersion) {
|
||||
// If msvs_version was specified but finding VS failed, print what would
|
||||
// have been accepted
|
||||
this.errorLog.push('')
|
||||
if (this.validVersions) {
|
||||
this.errorLog.push('valid versions for msvs_version:')
|
||||
|
@ -163,6 +176,7 @@ VisualStudioFinder.prototype = {
|
|||
|
||||
vsInfo = vsInfo.map((info) => {
|
||||
this.log.silly(`processing installation: "${info.path}"`)
|
||||
info.path = path.resolve(info.path)
|
||||
var ret = this.getVersionInfo(info)
|
||||
ret.path = info.path
|
||||
ret.msBuild = this.getMSBuild(info, ret.versionYear)
|
||||
|
@ -380,17 +394,21 @@ VisualStudioFinder.prototype = {
|
|||
// - add it to validVersions to be displayed at the end if a specific
|
||||
// version was requested and not found;
|
||||
// - check if this is the version that was requested.
|
||||
// - check if this matches the Visual Studio Command Prompt
|
||||
checkConfigVersion: function checkConfigVersion (versionYear, vsPath) {
|
||||
this.validVersions.push(versionYear)
|
||||
this.validVersions.push(vsPath)
|
||||
|
||||
if (this.configVersionYear &&
|
||||
this.configVersionYear !== versionYear) {
|
||||
this.addLog('- not looking for this version')
|
||||
if (this.configVersionYear && this.configVersionYear !== versionYear) {
|
||||
this.addLog('- msvs_version does not match this version')
|
||||
return false
|
||||
}
|
||||
if (this.configPath && this.configPath !== vsPath) {
|
||||
this.addLog('- not looking for this installation')
|
||||
this.addLog('- msvs_version does not point to this installation')
|
||||
return false
|
||||
}
|
||||
if (this.envVcInstallDir && this.envVcInstallDir !== vsPath) {
|
||||
this.addLog('- does not match this Visual Studio Command Prompt')
|
||||
return false
|
||||
}
|
||||
|
||||
|
|
2
test/fixtures/VS_2017_Unusable.txt
vendored
2
test/fixtures/VS_2017_Unusable.txt
vendored
|
@ -1 +1 @@
|
|||
[{"path":"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools","version":"15.9.28307.665","packages":["Microsoft.VisualStudio.Product.BuildTools","Microsoft.VisualStudio.Component.Windows10SDK.17134","Win10SDK_10.0.17134","Microsoft.VisualStudio.Component.VC.Tools.x86.x64","Microsoft.VisualCpp.CodeAnalysis.Extensions","Microsoft.VisualCpp.CodeAnalysis.Extensions.X86","Microsoft.VisualCpp.CodeAnalysis.ConcurrencyCheck.X86","Microsoft.VisualCpp.CodeAnalysis.ConcurrencyCheck.X86.Resources","Microsoft.VisualCpp.CodeAnalysis.Extensions.X64","Microsoft.VisualCpp.CodeAnalysis.ConcurrencyCheck.X64","Microsoft.VisualCpp.CodeAnalysis.ConcurrencyCheck.X64.Resources","Microsoft.VisualStudio.Component.Static.Analysis.Tools","Microsoft.VisualStudio.StaticAnalysis","Microsoft.VisualStudio.StaticAnalysis.Resources","Microsoft.VisualCpp.Tools.HostX64.TargetX86","Microsoft.VisualCpp.VCTip.HostX64.TargetX86","Microsoft.VisualCpp.Tools.HostX64.TargetX86.Resources","Microsoft.VisualCpp.Tools.HostX64.TargetX64","Microsoft.VisualCpp.VCTip.HostX64.TargetX64","Microsoft.VisualCpp.Tools.HostX64.TargetX64.Resources","Microsoft.VisualCpp.Premium.Tools.HostX86.TargetX64","Microsoft.VisualCpp.Premium.Tools.Hostx86.Targetx64.Resources","Microsoft.VisualCpp.Premium.Tools.HostX86.TargetX86","Microsoft.VisualCpp.Premium.Tools.HostX86.TargetX86.Resources","Microsoft.VisualCpp.Premium.Tools.HostX64.TargetX86","Microsoft.VisualCpp.Premium.Tools.HostX64.TargetX86.Resources","Microsoft.VisualCpp.Premium.Tools.HostX64.TargetX64","Microsoft.VisualCpp.Premium.Tools.HostX64.TargetX64.Resources","Microsoft.VisualCpp.PGO.X86","Microsoft.VisualCpp.PGO.X64","Microsoft.VisualCpp.PGO.Headers","Microsoft.VisualCpp.CRT.x86.Store","Microsoft.VisualCpp.CRT.x86.OneCore.Desktop","Microsoft.VisualCpp.CRT.x64.Store","Microsoft.VisualCpp.CRT.x64.OneCore.Desktop","Microsoft.VisualCpp.CRT.Redist.x86.OneCore.Desktop","Microsoft.VisualCpp.CRT.Redist.x64.OneCore.Desktop","Microsoft.VisualCpp.CRT.ClickOnce.Msi","Microsoft.VisualStudio.PackageGroup.VC.Tools.x86","Microsoft.VisualCpp.Tools.HostX86.TargetX64","Microsoft.VisualCpp.VCTip.hostX86.targetX64","Microsoft.VisualCpp.Tools.Hostx86.Targetx64.Resources","Microsoft.VisualCpp.Tools.HostX86.TargetX86","Microsoft.VisualCpp.VCTip.hostX86.targetX86","Microsoft.VisualCpp.Tools.HostX86.TargetX86.Resources","Microsoft.VisualCpp.Tools.Core.Resources","Microsoft.VisualCpp.Tools.Core.x86","Microsoft.VisualCpp.Tools.Common.Utils","Microsoft.VisualCpp.Tools.Common.Utils.Resources","Microsoft.VisualCpp.DIA.SDK","Microsoft.VisualCpp.CRT.x86.Desktop","Microsoft.VisualCpp.CRT.x64.Desktop","Microsoft.VisualCpp.CRT.Source","Microsoft.VisualCpp.CRT.Redist.X86","Microsoft.VisualCpp.CRT.Redist.X64","Microsoft.VisualCpp.CRT.Redist.Resources","Microsoft.VisualCpp.RuntimeDebug.14","Microsoft.VisualCpp.RuntimeDebug.14","Microsoft.VisualCpp.Redist.14","Microsoft.VisualCpp.Redist.14","Microsoft.VisualCpp.CRT.Headers","Microsoft.VisualStudio.Workload.MSBuildTools","Microsoft.VisualStudio.Component.CoreBuildTools","Microsoft.VisualStudio.Setup.Configuration","Microsoft.VisualStudio.PackageGroup.VsDevCmd","Microsoft.VisualStudio.VsDevCmd.Ext.NetFxSdk","Microsoft.VisualStudio.VsDevCmd.Core.WinSdk","Microsoft.VisualStudio.VsDevCmd.Core.DotNet","Microsoft.VisualStudio.VC.DevCmd","Microsoft.VisualStudio.VC.DevCmd.Resources","Microsoft.VisualStudio.BuildTools.Resources","Microsoft.VisualStudio.Net.Eula.Resources","Microsoft.Build.Dependencies","Microsoft.Build.FileTracker.Msi","Microsoft.Component.MSBuild","Microsoft.PythonTools.BuildCore.Vsix","Microsoft.NuGet.Build.Tasks","Microsoft.VisualStudio.Component.Roslyn.Compiler","Microsoft.CodeAnalysis.Compilers.Resources","Microsoft.CodeAnalysis.Compilers","Microsoft.Net.PackageGroup.4.6.1.Redist","Microsoft.Net.4.6.1.FullRedist.NonThreshold","Microsoft.Windows.UniversalCRT.Msu.81","Microsoft.VisualStudio.NativeImageSupport","Microsoft.Build"]}]
|
||||
[{"path":"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildToolsUnusable","version":"15.9.28307.665","packages":["Microsoft.VisualStudio.Product.BuildTools","Microsoft.VisualStudio.Component.Windows10SDK.17134","Win10SDK_10.0.17134","Microsoft.VisualStudio.Component.VC.Tools.x86.x64","Microsoft.VisualCpp.CodeAnalysis.Extensions","Microsoft.VisualCpp.CodeAnalysis.Extensions.X86","Microsoft.VisualCpp.CodeAnalysis.ConcurrencyCheck.X86","Microsoft.VisualCpp.CodeAnalysis.ConcurrencyCheck.X86.Resources","Microsoft.VisualCpp.CodeAnalysis.Extensions.X64","Microsoft.VisualCpp.CodeAnalysis.ConcurrencyCheck.X64","Microsoft.VisualCpp.CodeAnalysis.ConcurrencyCheck.X64.Resources","Microsoft.VisualStudio.Component.Static.Analysis.Tools","Microsoft.VisualStudio.StaticAnalysis","Microsoft.VisualStudio.StaticAnalysis.Resources","Microsoft.VisualCpp.Tools.HostX64.TargetX86","Microsoft.VisualCpp.VCTip.HostX64.TargetX86","Microsoft.VisualCpp.Tools.HostX64.TargetX86.Resources","Microsoft.VisualCpp.Tools.HostX64.TargetX64","Microsoft.VisualCpp.VCTip.HostX64.TargetX64","Microsoft.VisualCpp.Tools.HostX64.TargetX64.Resources","Microsoft.VisualCpp.Premium.Tools.HostX86.TargetX64","Microsoft.VisualCpp.Premium.Tools.Hostx86.Targetx64.Resources","Microsoft.VisualCpp.Premium.Tools.HostX86.TargetX86","Microsoft.VisualCpp.Premium.Tools.HostX86.TargetX86.Resources","Microsoft.VisualCpp.Premium.Tools.HostX64.TargetX86","Microsoft.VisualCpp.Premium.Tools.HostX64.TargetX86.Resources","Microsoft.VisualCpp.Premium.Tools.HostX64.TargetX64","Microsoft.VisualCpp.Premium.Tools.HostX64.TargetX64.Resources","Microsoft.VisualCpp.PGO.X86","Microsoft.VisualCpp.PGO.X64","Microsoft.VisualCpp.PGO.Headers","Microsoft.VisualCpp.CRT.x86.Store","Microsoft.VisualCpp.CRT.x86.OneCore.Desktop","Microsoft.VisualCpp.CRT.x64.Store","Microsoft.VisualCpp.CRT.x64.OneCore.Desktop","Microsoft.VisualCpp.CRT.Redist.x86.OneCore.Desktop","Microsoft.VisualCpp.CRT.Redist.x64.OneCore.Desktop","Microsoft.VisualCpp.CRT.ClickOnce.Msi","Microsoft.VisualStudio.PackageGroup.VC.Tools.x86","Microsoft.VisualCpp.Tools.HostX86.TargetX64","Microsoft.VisualCpp.VCTip.hostX86.targetX64","Microsoft.VisualCpp.Tools.Hostx86.Targetx64.Resources","Microsoft.VisualCpp.Tools.HostX86.TargetX86","Microsoft.VisualCpp.VCTip.hostX86.targetX86","Microsoft.VisualCpp.Tools.HostX86.TargetX86.Resources","Microsoft.VisualCpp.Tools.Core.Resources","Microsoft.VisualCpp.Tools.Core.x86","Microsoft.VisualCpp.Tools.Common.Utils","Microsoft.VisualCpp.Tools.Common.Utils.Resources","Microsoft.VisualCpp.DIA.SDK","Microsoft.VisualCpp.CRT.x86.Desktop","Microsoft.VisualCpp.CRT.x64.Desktop","Microsoft.VisualCpp.CRT.Source","Microsoft.VisualCpp.CRT.Redist.X86","Microsoft.VisualCpp.CRT.Redist.X64","Microsoft.VisualCpp.CRT.Redist.Resources","Microsoft.VisualCpp.RuntimeDebug.14","Microsoft.VisualCpp.RuntimeDebug.14","Microsoft.VisualCpp.Redist.14","Microsoft.VisualCpp.Redist.14","Microsoft.VisualCpp.CRT.Headers","Microsoft.VisualStudio.Workload.MSBuildTools","Microsoft.VisualStudio.Component.CoreBuildTools","Microsoft.VisualStudio.Setup.Configuration","Microsoft.VisualStudio.PackageGroup.VsDevCmd","Microsoft.VisualStudio.VsDevCmd.Ext.NetFxSdk","Microsoft.VisualStudio.VsDevCmd.Core.WinSdk","Microsoft.VisualStudio.VsDevCmd.Core.DotNet","Microsoft.VisualStudio.VC.DevCmd","Microsoft.VisualStudio.VC.DevCmd.Resources","Microsoft.VisualStudio.BuildTools.Resources","Microsoft.VisualStudio.Net.Eula.Resources","Microsoft.Build.Dependencies","Microsoft.Build.FileTracker.Msi","Microsoft.Component.MSBuild","Microsoft.PythonTools.BuildCore.Vsix","Microsoft.NuGet.Build.Tasks","Microsoft.VisualStudio.Component.Roslyn.Compiler","Microsoft.CodeAnalysis.Compilers.Resources","Microsoft.CodeAnalysis.Compilers","Microsoft.Net.PackageGroup.4.6.1.Redist","Microsoft.Net.4.6.1.FullRedist.NonThreshold","Microsoft.Windows.UniversalCRT.Msu.81","Microsoft.VisualStudio.NativeImageSupport","Microsoft.Build"]}]
|
||||
|
|
|
@ -8,6 +8,8 @@ const VisualStudioFinder = findVisualStudio.test.VisualStudioFinder
|
|||
|
||||
const semverV1 = { major: 1, minor: 0, patch: 0 }
|
||||
|
||||
delete process.env.VCINSTALLDIR
|
||||
|
||||
function poison (object, property) {
|
||||
function fail () {
|
||||
console.error(Error(`Property ${property} should not have been accessed.`))
|
||||
|
@ -549,3 +551,65 @@ test('latest version should be found by default', function (t) {
|
|||
allVsVersions(t, finder)
|
||||
finder.findVisualStudio()
|
||||
})
|
||||
|
||||
test('run on a usable VS Command Prompt', function (t) {
|
||||
t.plan(2)
|
||||
|
||||
process.env.VCINSTALLDIR = 'C:\\VS2015\\VC'
|
||||
// VSINSTALLDIR is not defined on Visual C++ Build Tools 2015
|
||||
delete process.env.VSINSTALLDIR
|
||||
|
||||
const finder = new TestVisualStudioFinder(semverV1, null, (err, info) => {
|
||||
t.strictEqual(err, null)
|
||||
t.deepEqual(info.path, 'C:\\VS2015')
|
||||
})
|
||||
|
||||
allVsVersions(t, finder)
|
||||
finder.findVisualStudio()
|
||||
})
|
||||
|
||||
test('run on a unusable VS Command Prompt', function (t) {
|
||||
t.plan(2)
|
||||
|
||||
process.env.VCINSTALLDIR =
|
||||
'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildToolsUnusable\\VC'
|
||||
|
||||
const finder = new TestVisualStudioFinder(semverV1, null, (err, info) => {
|
||||
t.ok(/find .* Visual Studio/i.test(err), 'expect error')
|
||||
t.false(info, 'no data')
|
||||
})
|
||||
|
||||
allVsVersions(t, finder)
|
||||
finder.findVisualStudio()
|
||||
})
|
||||
|
||||
test('run on a VS Command Prompt with matching msvs_version', function (t) {
|
||||
t.plan(2)
|
||||
|
||||
process.env.VCINSTALLDIR = 'C:\\VS2015\\VC'
|
||||
|
||||
const finder = new TestVisualStudioFinder(semverV1, 'C:\\VS2015',
|
||||
(err, info) => {
|
||||
t.strictEqual(err, null)
|
||||
t.deepEqual(info.path, 'C:\\VS2015')
|
||||
})
|
||||
|
||||
allVsVersions(t, finder)
|
||||
finder.findVisualStudio()
|
||||
})
|
||||
|
||||
test('run on a VS Command Prompt with mismatched msvs_version', function (t) {
|
||||
t.plan(2)
|
||||
|
||||
process.env.VCINSTALLDIR =
|
||||
'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC'
|
||||
|
||||
const finder = new TestVisualStudioFinder(semverV1, 'C:\\VS2015',
|
||||
(err, info) => {
|
||||
t.ok(/find .* Visual Studio/i.test(err), 'expect error')
|
||||
t.false(info, 'no data')
|
||||
})
|
||||
|
||||
allVsVersions(t, finder)
|
||||
finder.findVisualStudio()
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue