diff options
| author | William Boman <william@redwill.se> | 2022-07-08 17:36:10 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-08 17:36:10 +0200 |
| commit | 8cad2361dd63c67d95acf9f79321927b03843959 (patch) | |
| tree | 951599a91b56cc5be5220fe645e0c5323d21ae83 /lua/mason-registry/ccls/linux.lua | |
| parent | fix(ui): read from correct path in the receipt to gather linked bins (#26) (diff) | |
| download | mason-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.lua | 73 |
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 |
