aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-registry/ccls/linux.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-08 17:36:10 +0200
committerGitHub <noreply@github.com>2022-07-08 17:36:10 +0200
commit8cad2361dd63c67d95acf9f79321927b03843959 (patch)
tree951599a91b56cc5be5220fe645e0c5323d21ae83 /lua/mason-registry/ccls/linux.lua
parentfix(ui): read from correct path in the receipt to gather linked bins (#26) (diff)
downloadmason-8cad2361dd63c67d95acf9f79321927b03843959.tar
mason-8cad2361dd63c67d95acf9f79321927b03843959.tar.gz
mason-8cad2361dd63c67d95acf9f79321927b03843959.tar.bz2
mason-8cad2361dd63c67d95acf9f79321927b03843959.tar.lz
mason-8cad2361dd63c67d95acf9f79321927b03843959.tar.xz
mason-8cad2361dd63c67d95acf9f79321927b03843959.tar.zst
mason-8cad2361dd63c67d95acf9f79321927b03843959.zip
refactor: move packages to mason-registry (#27)
Diffstat (limited to 'lua/mason-registry/ccls/linux.lua')
-rw-r--r--lua/mason-registry/ccls/linux.lua73
1 files changed, 73 insertions, 0 deletions
diff --git a/lua/mason-registry/ccls/linux.lua b/lua/mason-registry/ccls/linux.lua
new file mode 100644
index 00000000..b2cb31af
--- /dev/null
+++ b/lua/mason-registry/ccls/linux.lua
@@ -0,0 +1,73 @@
+local path = require "mason.core.path"
+local platform = require "mason.core.platform"
+local installer = require "mason.core.installer"
+local github = require "mason.core.managers.github"
+local _ = require "mason.core.functional"
+local Result = require "mason.core.result"
+local Optional = require "mason.core.optional"
+
+local ccls_installer = require "mason-registry.ccls.common"
+
+local coalesce, when = _.coalesce, _.when
+
+---@param release string
+local function normalize_llvm_release(release)
+ -- Strip the "llvmorg-" prefix from tags (llvm releases tags like llvmorg-13.0.0)
+ local normalized_release = release:gsub("^llvmorg%-", "")
+ return normalized_release
+end
+
+---@async
+local function llvm_installer()
+ local ctx = installer.context()
+ local os_dist = platform.os_distribution()
+
+ local asset_name = coalesce(
+ when(
+ platform.arch == "x64",
+ coalesce(
+ when(
+ os_dist.id == "ubuntu" and os_dist.version.major >= 20,
+ "clang+llvm-%s-x86_64-linux-gnu-ubuntu-20.04"
+ ),
+ when(
+ os_dist.id == "ubuntu" and os_dist.version.major >= 16,
+ "clang+llvm-%s-x86_64-linux-gnu-ubuntu-16.04"
+ )
+ )
+ ),
+ when(platform.arch == "arm64", "clang+llvm-%s-aarch64-linux-gnu"),
+ when(platform.arch == "armv7", "clang+llvm-%s-armv7a-linux-gnueabihf")
+ )
+
+ local source = github.untarxz_release_file {
+ repo = "llvm/llvm-project",
+ version = Optional.of "llvmorg-13.0.0",
+ asset_file = function(release)
+ local normalized_release = normalize_llvm_release(release)
+ return asset_name and ("%s.tar.xz"):format(asset_name):format(normalized_release)
+ end,
+ }
+
+ ctx.fs:rename(asset_name:format(normalize_llvm_release(source.release)), "llvm")
+ -- We move the clang headers out, because they need to be persisted
+ ctx.fs:rename(path.concat { "llvm", "lib", "clang", normalize_llvm_release(source.release) }, "clang-resource")
+
+ return path.concat { ctx.cwd:get(), "llvm" }
+end
+
+---@async
+return function()
+ local ctx = installer.context()
+ Result.run_catching(llvm_installer)
+ :map(function(llvm_dir)
+ ccls_installer { llvm_dir = llvm_dir }
+ ctx.fs:rmrf "llvm"
+ end)
+ :recover(function()
+ pcall(function()
+ ctx.fs:rmrf "llvm"
+ end)
+ ccls_installer {}
+ end)
+end