summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-10-15 07:05:35 +0800
committerGitHub <[email protected]>2018-10-15 07:05:35 +0800
commitdc71ced53ead25ab1757d746f49a1b0d2d32263b (patch)
tree63646ae6c0738823788b5deb7beedf42142f033f
parent65f989753d3e3f64dc61bcb37e3725423297bfa7 (diff)
parent92f1645146c22699f4e2b567451f87fb0dbf2fc6 (diff)
Merge pull request #228 from rivy/fix.find_vstudio
fix detection strategy for MSVC/VS2017+
-rw-r--r--xmake/modules/detect/sdks/find_vstudio.lua17
-rw-r--r--xmake/modules/detect/tools/find_vswhere.lua4
2 files changed, 19 insertions, 2 deletions
diff --git a/xmake/modules/detect/sdks/find_vstudio.lua b/xmake/modules/detect/sdks/find_vstudio.lua
index 7cf4dca17..9baf50bc6 100644
--- a/xmake/modules/detect/sdks/find_vstudio.lua
+++ b/xmake/modules/detect/sdks/find_vstudio.lua
@@ -24,6 +24,7 @@
-- imports
import("lib.detect.find_file")
+import("detect.tools.find_vswhere")
-- init vc variables
local vcvars = {"path",
@@ -193,6 +194,19 @@ function main()
local results = {}
for _, version in ipairs({"15.0", "14.0", "12.0", "11.0", "10.0", "9.0", "8.0", "7.1", "7.0", "6.0", "5.0", "4.2"}) do
+ -- find VC install path (and aux build path) using `vswhere` (for version >= 15.0)
+ -- * version > 15.0 eschews registry entries; but `vswhere` (included with version >= 15.2) can be used to find VC install path
+ -- ref: https://github.com/Microsoft/vswhere/blob/master/README.md @@ https://archive.is/mEmdu
+ local vswhere_VCAuxiliaryBuildDir = nil
+ if ((version+0) >= 15) then
+ local vswhere = find_vswhere()
+ if vswhere then
+ local vswhere_vrange = format("%s,%s)", version, (version+1))
+ local out, err = os.iorunv(vswhere, {"-property", "installationpath", "-products", "Microsoft.VisualStudio.Product.BuildTools", "-version", vswhere_vrange})
+ if out then vswhere_VCAuxiliaryBuildDir = out:trim().."\\VC\\Auxiliary\\Build" end
+ end
+ end
+
-- init pathes
local pathes =
{
@@ -201,7 +215,8 @@ function main()
format("$(reg HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\SxS\\VS7;%s)\\VC", version),
format("$(reg HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7;%s)\\VC\\Auxiliary\\Build", version),
format("$(reg HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\SxS\\VS7;%s)\\VC\\Auxiliary\\Build", version),
- format("$(env %s)\\..\\..\\VC", vsenvs[version] or "")
+ format("$(env %s)\\..\\..\\VC", vsenvs[version] or ""),
+ (vswhere_VCAuxiliaryBuildDir or "")
}
-- find vcvarsall.bat, vcvars32.bat for vs7.1
diff --git a/xmake/modules/detect/tools/find_vswhere.lua b/xmake/modules/detect/tools/find_vswhere.lua
index 73fbcfc92..c60a7f549 100644
--- a/xmake/modules/detect/tools/find_vswhere.lua
+++ b/xmake/modules/detect/tools/find_vswhere.lua
@@ -51,7 +51,9 @@ function main(opt)
opt = opt or {}
-- find program
- opt.pathes = opt.pathes or
+ opt.check = "-?"
+ opt.command = "-?"
+ opt.pathes = opt.pathes or
{
path.join(os.getenv("ProgramFiles(x86)"), "Microsoft Visual Studio", "Installer", "vswhere.exe"),
path.join(os.getenv("ProgramFiles"), "Microsoft Visual Studio", "Installer", "vswhere.exe"),