aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Xia <ruixia@microsoft.com>2019-06-19 15:07:00 -0700
committerHisham Muhammad <hisham@gobolinux.org>2019-07-26 12:49:56 -0300
commitdd926404890d7cc71ce8538384305c90e318abbb (patch)
treef6a90360aaad37dd1c8337cc700bd30a7f6ab0ee
parent7b730490ade3690d1b39bbb9f5c51c4cead974ed (diff)
downloadluarocks-dd926404890d7cc71ce8538384305c90e318abbb.tar.gz
luarocks-dd926404890d7cc71ce8538384305c90e318abbb.tar.bz2
luarocks-dd926404890d7cc71ce8538384305c90e318abbb.zip
Support VS tool chain 2017 or higher
-rw-r--r--install.bat60
1 files changed, 56 insertions, 4 deletions
diff --git a/install.bat b/install.bat
index e1053a52..cdbc6377 100644
--- a/install.bat
+++ b/install.bat
@@ -446,7 +446,7 @@ local function get_registry(key, value)
446 return nil 446 return nil
447end 447end
448 448
449local function get_visual_studio_directory() 449local function get_visual_studio_directory_from_registry()
450 assert(type(vars.LUA_RUNTIME)=="string", "requires vars.LUA_RUNTIME to be set before calling this function.") 450 assert(type(vars.LUA_RUNTIME)=="string", "requires vars.LUA_RUNTIME to be set before calling this function.")
451 local major, minor = vars.LUA_RUNTIME:match('VCR%u*(%d+)(%d)$') -- MSVCR<x><y> or VCRUNTIME<x><y> 451 local major, minor = vars.LUA_RUNTIME:match('VCR%u*(%d+)(%d)$') -- MSVCR<x><y> or VCRUNTIME<x><y>
452 if not major then 452 if not major then
@@ -469,6 +469,47 @@ local function get_visual_studio_directory()
469 return nil 469 return nil
470end 470end
471 471
472local function get_visual_studio_directory_from_vswhere()
473 assert(type(vars.LUA_RUNTIME)=="string", "requires vars.LUA_RUNTIME to be set before calling this function.")
474 local major, minor = vars.LUA_RUNTIME:match('VCR%u*(%d+)(%d)$')
475 if not major then
476 print(S[[ Cannot auto-detect Visual Studio version from $LUA_RUNTIME]])
477 return nil
478 end
479 if tonumber(major) < 14 then
480 return nil
481 end
482 local program_dir = os.getenv('PROGRAMFILES(X86)')
483 if not program_dir then
484 return nil
485 end
486 local vswhere = program_dir.."\\Microsoft Visual Studio\\Installer\\vswhere.exe"
487 if not exists(vswhere) then
488 return nil
489 end
490 local f, msg = io.popen('"'..vswhere..'" -products * -property installationPath')
491 if not f then return nil, "failed to run vswhere: "..msg end
492 local vsdir = nil
493 while true do
494 local l, err = f:read()
495 if not l then
496 if err then
497 f:close()
498 return nil, err
499 else
500 break
501 end
502 end
503 vsdir = l
504 end
505 f:close()
506 if not vsdir then
507 return nil
508 end
509 print(" Visual Studio 2017 or higher found in: "..vsdir)
510 return vsdir
511end
512
472local function get_windows_sdk_directory() 513local function get_windows_sdk_directory()
473 assert(type(vars.LUA_RUNTIME) == "string", "requires vars.LUA_RUNTIME to be set before calling this function.") 514 assert(type(vars.LUA_RUNTIME) == "string", "requires vars.LUA_RUNTIME to be set before calling this function.")
474 -- Only v7.1 and v6.1 shipped with compilers 515 -- Only v7.1 and v6.1 shipped with compilers
@@ -505,8 +546,19 @@ local function get_msvc_env_setup_cmd()
505 assert(type(vars.UNAME_M) == "string", "requires vars.UNAME_M to be set before calling this function.") 546 assert(type(vars.UNAME_M) == "string", "requires vars.UNAME_M to be set before calling this function.")
506 local x64 = vars.UNAME_M=="x86_64" 547 local x64 = vars.UNAME_M=="x86_64"
507 548
508 -- 1. try visual studio command line tools 549 -- 1. try visual studio command line tools of VS 2017 or higher
509 local vcdir = get_visual_studio_directory() 550 local vsdir = get_visual_studio_directory_from_vswhere()
551 if vsdir then
552 local vcvarsall = vsdir .. '\\VC\\Auxiliary\\Build\\vcvarsall.bat'
553 if exists(vcvarsall) then
554 local vcvarsall_args = { x86 = "", x86_64 = " x64" }
555 assert(vcvarsall_args[vars.UNAME_M], "vars.UNAME_M: only x86 and x86_64 are supported")
556 return ('call "%s"%s'):format(vcvarsall, vcvarsall_args[vars.UNAME_M])
557 end
558 end
559
560 -- 2. try visual studio command line tools
561 local vcdir = get_visual_studio_directory_from_registry()
510 if vcdir then 562 if vcdir then
511 local vcvars_bats = { 563 local vcvars_bats = {
512 x86 = { 564 x86 = {
@@ -535,7 +587,7 @@ local function get_msvc_env_setup_cmd()
535 end 587 end
536 end 588 end
537 589
538 -- 2. try for Windows SDKs command line tools. 590 -- 3. try for Windows SDKs command line tools.
539 local wsdkdir = get_windows_sdk_directory() 591 local wsdkdir = get_windows_sdk_directory()
540 if wsdkdir then 592 if wsdkdir then
541 local setenv = wsdkdir.."Bin\\SetEnv.cmd" 593 local setenv = wsdkdir.."Bin\\SetEnv.cmd"