setup-cpp
Version:
Install all the tools required for building and testing C++/C projects.
82 lines (78 loc) • 2.98 kB
text/typescript
import { info } from "ci-log"
import { addExeExt } from "patha"
import semverCoerce from "semver/functions/coerce"
import semverLte from "semver/functions/lte"
import { hasApk, installApkPack } from "setup-alpine"
import { arm64, x86, x86_64 } from "../utils/env/arch.js"
import { type InstallationInfo, type PackageInfo, setupBin } from "../utils/setup/setupBin.js"
/** Get the platform data for cmake */
function getCmakePackageInfo(version: string, platform: NodeJS.Platform, arch: string): PackageInfo {
const semVersion = semverCoerce(version) ?? version
switch (platform) {
case "win32": {
const isOld = semverLte(semVersion, "v3.19.6")
let osArchStr: string
if (x86_64.includes(arch)) {
osArchStr = isOld ? "win64-x64" : "windows-x86_64"
} else if (x86.includes(arch)) {
osArchStr = isOld ? "win32-x86" : "windows-i386"
} else if (arm64.includes(arch)) {
osArchStr = "windows-arm64"
} else {
info(`Trying unsupported arch '${arch}' for cmake on Windows`)
osArchStr = `windows-${arch}`
}
const folderName = `cmake-${version}-${osArchStr}`
return {
binRelativeDir: "bin/",
binFileName: addExeExt("cmake"),
extractedFolderName: folderName,
url: `https://github.com/Kitware/CMake/releases/download/v${version}/${folderName}.zip`,
}
}
case "darwin": {
const isOld = semverLte(semVersion, "v3.19.1")
const osArchStr = isOld ? "Darwin-x86_64" : "macos-universal"
const folderName = `cmake-${version}-${osArchStr}`
return {
binRelativeDir: "CMake.app/Contents/bin/",
binFileName: addExeExt("cmake"),
extractedFolderName: folderName,
url: `https://github.com/Kitware/CMake/releases/download/v${version}/${folderName}.tar.gz`,
}
}
case "linux": {
const isOld = semverLte(semVersion, "v3.19.8")
let osArchStr: string
if (arm64.includes(arch)) {
osArchStr = isOld ? "Linux-aarch64" : "linux-aarch64"
} else if (x86_64.includes(arch)) {
osArchStr = isOld ? "Linux-x86_64" : "linux-x86_64"
} else {
info(`Trying unsupported arch '${arch}' for cmake on Linux`)
osArchStr = `linux-${arch}`
}
const folderName = `cmake-${version}-${osArchStr}`
return {
binRelativeDir: "bin/",
binFileName: addExeExt("cmake"),
extractedFolderName: folderName,
url: `https://github.com/Kitware/CMake/releases/download/v${version}/${folderName}.tar.gz`,
}
}
default:
throw new Error(`Unsupported platform '${platform}'`)
}
}
/** Setup cmake */
export async function setupCmake(version: string, setupDir: string, arch: string): Promise<InstallationInfo> {
if (await hasApk()) {
return installApkPack([
{
name: "cmake",
// version,
},
])
}
return setupBin("cmake", version, getCmakePackageInfo, setupDir, arch)
}