fix: fix installation of libtinfo5 on Ubuntu 24

This commit is contained in:
Amin Yahyaabadi 2024-09-18 17:59:00 -07:00
parent f0dd57ea4d
commit 2a2a8eb39a
No known key found for this signature in database
GPG Key ID: F52AF77F636088F0
6 changed files with 31 additions and 7 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -82,7 +82,7 @@ describe("setup-llvm", () => {
execaSync(main_exe, { cwd: dirname, stdio: "inherit" }) execaSync(main_exe, { cwd: dirname, stdio: "inherit" })
}) })
it("should setup LLVM from llvm.org", async () => { it("should setup LLVM 5 from llvm.org", async () => {
const { binDir } = await setupLLVM("5", directory, process.arch) const { binDir } = await setupLLVM("5", directory, process.arch)
await testBin("clang++", ["--version"], binDir) await testBin("clang++", ["--version"], binDir)
@ -92,7 +92,7 @@ describe("setup-llvm", () => {
// test compilation // test compilation
const file = join(dirname, "main.cpp") const file = join(dirname, "main.cpp")
const main_exe = join(dirname, addExeExt("main")) const main_exe = join(dirname, addExeExt("main"))
execaSync("clang++", [file, "-o", main_exe], { cwd: dirname }) execaSync("clang++", ["-std=c++17", file, "-o", main_exe], { cwd: dirname })
if (process.platform !== "win32") { if (process.platform !== "win32") {
await chmod(main_exe, "755") await chmod(main_exe, "755")
} }

View File

@ -1,15 +1,19 @@
import { tmpdir } from "os"
import path, { delimiter, join } from "path" import path, { delimiter, join } from "path"
import { fileURLToPath } from "url" import { fileURLToPath } from "url"
import { execRootSync } from "admina"
import { GITHUB_ACTIONS } from "ci-info" import { GITHUB_ACTIONS } from "ci-info"
import { info, warning } from "ci-log" import { info, warning } from "ci-log"
import { addEnv } from "envosman" import { addEnv } from "envosman"
import memoize from "memoizee" import memoize from "memoizee"
import { DownloaderHelper } from "node-downloader-helper"
import { pathExists } from "path-exists" import { pathExists } from "path-exists"
import { addExeExt } from "patha" import { addExeExt } from "patha"
import { addUpdateAlternativesToRc, installAptPack } from "setup-apt" import { addUpdateAlternativesToRc, installAptPack } from "setup-apt"
import { rcOptions } from "../cli-options.js" import { rcOptions } from "../cli-options.js"
import { setupGcc } from "../gcc/gcc.js" import { setupGcc } from "../gcc/gcc.js"
import { setupMacOSSDK } from "../macos-sdk/macos-sdk.js" import { setupMacOSSDK } from "../macos-sdk/macos-sdk.js"
import { arm64, x86_64 } from "../utils/env/arch.js"
import { hasDnf } from "../utils/env/hasDnf.js" import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js" import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js" import { isUbuntu } from "../utils/env/isUbuntu.js"
@ -87,7 +91,27 @@ function majorLLVMVersion(version: string) {
async function llvmBinaryDeps_(majorVersion: number) { async function llvmBinaryDeps_(majorVersion: number) {
if (isUbuntu()) { if (isUbuntu()) {
if (majorVersion <= 10) { if (majorVersion <= 10) {
await installAptPack([{ name: "libtinfo5" }]) try {
await installAptPack([{ name: "libtinfo5" }])
} catch (err) {
// Manually install libtinfo5 if the package is not available
info(`Failed to install libtinfo5 ${err}\nManually installing the package`)
const arch = x86_64.includes(process.arch)
? "amd64"
: arm64.includes(process.arch)
? "arm64"
: process.arch
const fileName = `libtinfo5_6.3-2ubuntu0.1_${arch}.deb`
const url = `http://launchpadlibrarian.net/666971015/${fileName}`
const dl = new DownloaderHelper(url, tmpdir(), { fileName })
dl.on("error", (dlErr) => {
throw new Error(`Failed to download ${url}: ${dlErr}`)
})
await dl.start()
// Install the downloaded package via dpkg
execRootSync("dpkg", ["-i", join(tmpdir(), fileName)])
}
} else { } else {
await installAptPack([{ name: "libtinfo-dev" }]) await installAptPack([{ name: "libtinfo-dev" }])
} }