summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--make.lua2
-rw-r--r--make/install.lua43
-rw-r--r--make/msvc_crt.lua56
3 files changed, 12 insertions, 89 deletions
diff --git a/make.lua b/make.lua
index 7193b654..97210700 100644
--- a/make.lua
+++ b/make.lua
@@ -56,7 +56,7 @@ if lm.plat ~= 'macos' and lm.plat ~= 'linux' then
end
lm:build 'install' {
- '$luamake', 'lua', 'make/install.lua',
+ '$luamake', 'lua', 'make/install.lua', lm.plat,
deps = {
'lua',
'lni',
diff --git a/make/install.lua b/make/install.lua
index 3da8983d..d579cd5d 100644
--- a/make/install.lua
+++ b/make/install.lua
@@ -1,41 +1,23 @@
+local platform = ...
local fs = require 'bee.filesystem'
local sp = require 'bee.subprocess'
-local is_macos = package.cpath:sub(-3) == '.so'
-
-local platform = require "bee.platform"
-
local CWD = fs.current_path()
-
local output = CWD / 'server' / 'bin'
-local bindir = CWD / 'build' / 'msvc' / 'bin'
-
-local lib_ext = ".dll"
-local exc_ext = ".exe"
-
-if is_macos then
- bindir = CWD / 'build' / 'macos' / 'bin'
- lib_ext = ".so"
- exc_ext = ""
-end
-
-if platform.OS == "Linux" then
- bindir = CWD / 'build' / 'linux' / 'bin'
- lib_ext = ".so"
- exc_ext = ""
-end
+local bindir = CWD / 'build' / platform / 'bin'
+local exe = platform == 'msvc' and ".exe" or ""
+local dll = platform == 'msvc' and ".dll" or ".so"
fs.create_directories(output)
-fs.copy_file(bindir / 'lni'..lib_ext, output / 'lni'..lib_ext, true)
-fs.copy_file(bindir / 'lpeglabel'..lib_ext, output / 'lpeglabel'..lib_ext, true)
-fs.copy_file(bindir / 'bee'..lib_ext, output / 'bee'..lib_ext, true)
-fs.copy_file(bindir / 'lua'..exc_ext, output / 'lua-language-server'..exc_ext, true)
+fs.copy_file(bindir / 'lni'..dll, output / 'lni'..dll, true)
+fs.copy_file(bindir / 'lpeglabel'..dll, output / 'lpeglabel'..dll, true)
+fs.copy_file(bindir / 'bee'..dll, output / 'bee'..dll, true)
+fs.copy_file(bindir / 'lua'..exe, output / 'lua-language-server'..exe, true)
-if not is_macos and platform.OS ~= "Linux" then
- fs.copy_file(bindir / 'lua54'..lib_ext, output / 'lua54'..lib_ext, true)
-end
+if platform == 'msvc' then
+ fs.copy_file(bindir / 'lua54'..dll, output / 'lua54'..dll, true)
+ require 'msvc'.copy_crtdll('x64', output)
-if not is_macos and platform.OS ~= "Linux" then
local process = assert(sp.spawn {
bindir / 'rcedit.exe',
output / 'lua-language-server.exe',
@@ -43,7 +25,4 @@ if not is_macos and platform.OS ~= "Linux" then
CWD / 'images' / 'icon.ico'
})
assert(process:wait())
-
- local msvc_crt = dofile 'make/msvc_crt.lua'
- msvc_crt('x86', output)
end
diff --git a/make/msvc_crt.lua b/make/msvc_crt.lua
deleted file mode 100644
index 31ecb0d2..00000000
--- a/make/msvc_crt.lua
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'bee'
-local sp = require 'bee.subprocess'
-local fs = require 'bee.filesystem'
-local registry = require 'bee.registry'
-
-local vswhere = fs.path(os.getenv('ProgramFiles(x86)')) / 'Microsoft Visual Studio' / 'Installer' / 'vswhere.exe'
-
-local function strtrim(str)
- return str:gsub("^%s*(.-)%s*$", "%1")
-end
-
-local InstallDir = (function ()
- local process = assert(sp.spawn {
- vswhere,
- '-latest',
- '-products', '*',
- '-requires', 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64',
- '-property', 'installationPath',
- stdout = true,
- })
- local result = strtrim(process.stdout:read 'a')
- process.stdout:close()
- process:wait()
- assert(result ~= "", "can't find msvc.")
- return fs.path(result)
-end)()
-
-local RedistVersion = (function ()
- local verfile = InstallDir / 'VC' / 'Auxiliary' / 'Build' / 'Microsoft.VCRedistVersion.default.txt'
- local f = assert(io.open(verfile:string(), 'r'))
- local r = f:read 'a'
- f:close()
- return strtrim(r)
-end)()
-
-local function crtpath(platform)
- return InstallDir / 'VC' / 'Redist' / 'MSVC' / RedistVersion / platform / 'Microsoft.VC142.CRT'
-end
-
-local function sdkpath()
- local reg = registry.open [[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots]]
- return fs.path(reg.KitsRoot10)
-end
-
-local function ucrtpath(platform)
- return sdkpath() / 'Redist' / 'ucrt' / 'DLLs' / platform
-end
-
-return function (platform, target)
- fs.create_directories(target)
- fs.copy_file(crtpath(platform) / 'msvcp140.dll', target / 'msvcp140.dll', true)
- fs.copy_file(crtpath(platform) / 'vcruntime140.dll', target / 'vcruntime140.dll', true)
- for dll in ucrtpath(platform):list_directory() do
- fs.copy_file(dll, target / dll:filename(), true)
- end
-end