From 1504fb1e14e32dc967d64bb62084a0068655a375 Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Fri, 2 Aug 2024 16:13:24 +0200 Subject: [PATCH] fix: don't let luarocks install binary rocks for the wrong architecture --- bootstrap.lua | 29 ++++++++++++++++++++++++----- installer.lua | 27 +++++++++++++++++++++++---- lua/rocks/config/internal.lua | 15 +++++++++++++++ 3 files changed, 62 insertions(+), 9 deletions(-) diff --git a/bootstrap.lua b/bootstrap.lua index 355c154..de84952 100644 --- a/bootstrap.lua +++ b/bootstrap.lua @@ -108,16 +108,35 @@ end assert(set_up_luarocks(temp_luarocks_path), "failed to install luarocks! Please try again :)") -vim.notify("Installing rocks.nvim...") - -local sc = vim.system({ +local rocks_binaries_supported_arch_map = { + Darwin = { + arm64 = "macosx-aarch64", + aarch64 = "macosx-aarch64", + x86_64 = "macosx-x86_64", + }, + Linux = { + x86_64 = "linux-x86_64", + }, + Windows_NT = { + x86_64 = "win32-x86_64", + }, +} +local uname = vim.uv.os_uname() +local supported_arch = rocks_binaries_supported_arch_map[uname.sysname][uname.machine] + +local install_cmd = { luarocks_binary, "--lua-version=5.1", "--tree=" .. install_path, - "--server='https://nvim-neorocks.github.io/rocks-binaries/'", "install", "rocks.nvim", -}):wait() +} +if supported_arch then + table.insert(install_cmd, 4, "--server='https://nvim-neorocks.github.io/rocks-binaries/'") +end +vim.notify("Installing rocks.nvim...") + +local sc = vim.system(install_cmd):wait() if sc.code ~= 0 then notify_output("Installing rocks.nvim failed:", sc, vim.log.levels.ERROR) diff --git a/installer.lua b/installer.lua index 0063c8c..e611a12 100644 --- a/installer.lua +++ b/installer.lua @@ -369,15 +369,34 @@ local function install() return end - vim.notify("Installing rocks.nvim...") - local sc = vim.system({ + local rocks_binaries_supported_arch_map = { + Darwin = { + arm64 = "macosx-aarch64", + aarch64 = "macosx-aarch64", + x86_64 = "macosx-x86_64", + }, + Linux = { + x86_64 = "linux-x86_64", + }, + Windows_NT = { + x86_64 = "win32-x86_64", + }, + } + local uname = vim.uv.os_uname() + local supported_arch = rocks_binaries_supported_arch_map[uname.sysname][uname.machine] + + local install_cmd = { luarocks_binary, "--lua-version=5.1", "--tree=" .. install_path, - "--server='https://nvim-neorocks.github.io/rocks-binaries/'", "install", "rocks.nvim", - }):wait() + } + if supported_arch then + table.insert(install_cmd, 4, "--server='https://nvim-neorocks.github.io/rocks-binaries/'") + end + vim.notify("Installing rocks.nvim...") + local sc = vim.system(install_cmd):wait() if sc.code ~= 0 then notify_output("Installing rocks.nvim failed:", sc, vim.log.levels.ERROR) diff --git a/lua/rocks/config/internal.lua b/lua/rocks/config/internal.lua index 0d6ce00..a36c7eb 100644 --- a/lua/rocks/config/internal.lua +++ b/lua/rocks/config/internal.lua @@ -155,6 +155,20 @@ end ---@return string local function mk_luarocks_config() + local sysname_map = { + Linux = "linux", + Darwin = "macosx", + Windows_NT = "win32", + } + local machine_map = { + arm64 = "aarch64", + aarch64 = "aarch64", + x86_64 = "x86_64", + } + local uname = vim.uv.os_uname() + local sysname = sysname_map[uname.sysname] + local machine = machine_map[uname.machine] or uname.machine + local arch = sysname and machine and ("%s-%s"):format(sysname, machine) local default_luarocks_config = { lua_version = "5.1", rocks_trees = { @@ -163,6 +177,7 @@ local function mk_luarocks_config() root = config.rocks_path, }, }, + arch = arch, } local luarocks_config = vim.tbl_deep_extend("force", default_luarocks_config, opts.luarocks_config or {})