mirror of https://github.com/aminya/setup-cpp
feat: improve pip installation and detection
This commit is contained in:
parent
49b6a080cc
commit
7039a1a602
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
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -18,6 +18,7 @@ import { getVersion } from "../versions/versions"
|
||||||
import assert from "assert"
|
import assert from "assert"
|
||||||
import { execaSync } from "execa"
|
import { execaSync } from "execa"
|
||||||
import { unique } from "../utils/std"
|
import { unique } from "../utils/std"
|
||||||
|
import { DefaultVersions } from "../versions/default_versions"
|
||||||
|
|
||||||
export async function setupPython(version: string, setupDir: string, arch: string) {
|
export async function setupPython(version: string, setupDir: string, arch: string) {
|
||||||
if (!GITHUB_ACTIONS) {
|
if (!GITHUB_ACTIONS) {
|
||||||
|
@ -105,12 +106,32 @@ export async function setupPythonAndPip(): Promise<string> {
|
||||||
|
|
||||||
assert(typeof foundPython === "string")
|
assert(typeof foundPython === "string")
|
||||||
|
|
||||||
// install pip
|
await setupPip(foundPython)
|
||||||
if (process.platform === "win32") {
|
|
||||||
// downgrade pip on Windows
|
// install wheel (required for Conan, Meson, etc.)
|
||||||
// https://github.com/pypa/pip/issues/10875#issuecomment-1030293005
|
execaSync(foundPython, ["-m", "pip", "install", "-U", "wheel"], { stdio: "inherit" })
|
||||||
execaSync(foundPython, ["-m", "pip", "install", "-U", "pip==21.3.1"], { stdio: "inherit" })
|
|
||||||
} else if (process.platform === "linux") {
|
return foundPython
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setupPip(foundPython: string) {
|
||||||
|
const mayBePip = unique(["pip3", "pip"])
|
||||||
|
|
||||||
|
for (const pip of mayBePip) {
|
||||||
|
if (which.sync(pip, { nothrow: true }) !== null) {
|
||||||
|
// eslint-disable-next-line no-await-in-loop
|
||||||
|
if (await isBinUptoDate(pip, DefaultVersions.pip!)) {
|
||||||
|
return pip
|
||||||
|
} else {
|
||||||
|
// upgrade pip
|
||||||
|
execaSync(foundPython, ["-m", "pip", "install", "-U", "--upgrade", "pip"], { stdio: "inherit" })
|
||||||
|
return setupPip(foundPython) // recurse to check if pip is on PATH and up-to-date
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// install pip if not installed
|
||||||
|
if (process.platform === "linux") {
|
||||||
// ensure that pip is installed on Linux (happens when python is found but pip not installed)
|
// ensure that pip is installed on Linux (happens when python is found but pip not installed)
|
||||||
if (isArch()) {
|
if (isArch()) {
|
||||||
await setupPacmanPack("python-pip")
|
await setupPacmanPack("python-pip")
|
||||||
|
@ -119,12 +140,11 @@ export async function setupPythonAndPip(): Promise<string> {
|
||||||
} else if (isUbuntu()) {
|
} else if (isUbuntu()) {
|
||||||
await setupAptPack([{ name: "python3-pip" }])
|
await setupAptPack([{ name: "python3-pip" }])
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
throw new Error(`Could not find pip on ${process.platform}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
// install wheel (required for Conan, Meson, etc.)
|
return setupPip(foundPython) // recurse to check if pip is on PATH and up-to-date
|
||||||
execaSync(foundPython, ["-m", "pip", "install", "-U", "wheel"], { stdio: "inherit" })
|
|
||||||
|
|
||||||
return foundPython
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function addPythonBaseExecPrefix(python: string) {
|
export async function addPythonBaseExecPrefix(python: string) {
|
||||||
|
|
|
@ -28,6 +28,7 @@ export const DefaultVersions: Record<string, string | undefined> = {
|
||||||
task: "3.25.0", // https://github.com/go-task/task/releases
|
task: "3.25.0", // https://github.com/go-task/task/releases
|
||||||
doxygen: isArch() ? "1.9.6-1" : "1.9.7", // https://www.doxygen.nl/download.html // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=doxygen // https://formulae.brew.sh/formula/doxygen // https://archlinux.org/packages/extra/x86_64/doxygen/
|
doxygen: isArch() ? "1.9.6-1" : "1.9.7", // https://www.doxygen.nl/download.html // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=doxygen // https://formulae.brew.sh/formula/doxygen // https://archlinux.org/packages/extra/x86_64/doxygen/
|
||||||
gcc: isArch() ? "13.1.1-1" : "13", // https://github.com/brechtsanders/winlibs_mingw/releases and // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=gcc
|
gcc: isArch() ? "13.1.1-1" : "13", // https://github.com/brechtsanders/winlibs_mingw/releases and // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=gcc
|
||||||
|
pip: "23.1.2",
|
||||||
}
|
}
|
||||||
|
|
||||||
/// If an ubuntu versions is not in this map:
|
/// If an ubuntu versions is not in this map:
|
||||||
|
|
Loading…
Reference in New Issue