mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 04:53:34 +00:00
Try to detect musl distros in the Code extension
This commit is contained in:
parent
de67469f59
commit
23a8fc5284
1 changed files with 12 additions and 2 deletions
|
@ -12,7 +12,7 @@ import { PersistentState } from './persistent_state';
|
||||||
import { fetchRelease, download } from './net';
|
import { fetchRelease, download } from './net';
|
||||||
import { activateTaskProvider } from './tasks';
|
import { activateTaskProvider } from './tasks';
|
||||||
import { setContextValue } from './util';
|
import { setContextValue } from './util';
|
||||||
import { exec } from 'child_process';
|
import { exec, spawnSync } from 'child_process';
|
||||||
|
|
||||||
let ctx: Ctx | undefined;
|
let ctx: Ctx | undefined;
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ async function getServer(config: Config, state: PersistentState): Promise<string
|
||||||
"arm64 linux": "aarch64-unknown-linux-gnu",
|
"arm64 linux": "aarch64-unknown-linux-gnu",
|
||||||
"arm64 darwin": "aarch64-apple-darwin",
|
"arm64 darwin": "aarch64-apple-darwin",
|
||||||
};
|
};
|
||||||
const platform = platforms[`${process.arch} ${process.platform}`];
|
let platform = platforms[`${process.arch} ${process.platform}`];
|
||||||
if (platform === undefined) {
|
if (platform === undefined) {
|
||||||
await vscode.window.showErrorMessage(
|
await vscode.window.showErrorMessage(
|
||||||
"Unfortunately we don't ship binaries for your platform yet. " +
|
"Unfortunately we don't ship binaries for your platform yet. " +
|
||||||
|
@ -309,6 +309,9 @@ async function getServer(config: Config, state: PersistentState): Promise<string
|
||||||
);
|
);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
if (platform === "x86_64-unknown-linux-gnu" && isMusl()) {
|
||||||
|
platform = "x86_64-unknown-linux-musl";
|
||||||
|
}
|
||||||
const ext = platform.indexOf("-windows-") !== -1 ? ".exe" : "";
|
const ext = platform.indexOf("-windows-") !== -1 ? ".exe" : "";
|
||||||
const dest = path.join(config.globalStoragePath, `rust-analyzer-${platform}${ext}`);
|
const dest = path.join(config.globalStoragePath, `rust-analyzer-${platform}${ext}`);
|
||||||
const exists = await fs.stat(dest).then(() => true, () => false);
|
const exists = await fs.stat(dest).then(() => true, () => false);
|
||||||
|
@ -365,6 +368,13 @@ async function isNixOs(): Promise<boolean> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isMusl(): boolean {
|
||||||
|
// We can detect Alpine by checking `/etc/os-release` but not Void Linux musl.
|
||||||
|
// Instead, we run `ldd` since it advertises the libc which it belongs to.
|
||||||
|
const res = spawnSync("ldd", ["--version"]);
|
||||||
|
return res.stderr != null && res.stderr.indexOf("musl libc") >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
async function downloadWithRetryDialog<T>(state: PersistentState, downloadFunc: () => Promise<T>): Promise<T> {
|
async function downloadWithRetryDialog<T>(state: PersistentState, downloadFunc: () => Promise<T>): Promise<T> {
|
||||||
while (true) {
|
while (true) {
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in a new issue