UNPKG

3.44 kBJavaScriptView Raw
1"use strict";
2var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3 if (k2 === undefined) k2 = k;
4 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5}) : (function(o, m, k, k2) {
6 if (k2 === undefined) k2 = k;
7 o[k2] = m[k];
8}));
9var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10 Object.defineProperty(o, "default", { enumerable: true, value: v });
11}) : function(o, v) {
12 o["default"] = v;
13});
14var __importStar = (this && this.__importStar) || function (mod) {
15 if (mod && mod.__esModule) return mod;
16 var result = {};
17 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18 __setModuleDefault(result, mod);
19 return result;
20};
21var __importDefault = (this && this.__importDefault) || function (mod) {
22 return (mod && mod.__esModule) ? mod : { "default": mod };
23};
24Object.defineProperty(exports, "__esModule", { value: true });
25exports.downloadLinuxSysroot = void 0;
26const crypto = __importStar(require("crypto"));
27const debug_1 = __importDefault(require("debug"));
28const fs = __importStar(require("fs-extra"));
29const path = __importStar(require("path"));
30const tar = __importStar(require("tar"));
31const constants_1 = require("./constants");
32const fetcher_1 = require("./fetcher");
33const d = (0, debug_1.default)('electron-rebuild');
34const sysrootArchAliases = {
35 x64: 'amd64',
36 ia32: 'i386',
37};
38const SYSROOT_BASE_URL = 'https://s3.amazonaws.com/electronjs-sysroots/toolchain';
39async function downloadLinuxSysroot(electronVersion, targetArch) {
40 d('fetching sysroot for Electron:', electronVersion);
41 const sysrootDir = path.resolve(constants_1.ELECTRON_GYP_DIR, `${electronVersion}-sysroot`);
42 if (await fs.pathExists(path.resolve(sysrootDir, 'lib')))
43 return sysrootDir;
44 if (!await fs.pathExists(sysrootDir))
45 await fs.mkdirp(sysrootDir);
46 const linuxArch = sysrootArchAliases[targetArch] || targetArch;
47 const electronSysroots = JSON.parse(await (0, fetcher_1.fetch)(`https://raw.githubusercontent.com/electron/electron/v${electronVersion}/script/sysroots.json`, 'text'));
48 const { Sha1Sum: sha, Tarball: fileName } = electronSysroots[`sid_${linuxArch}`];
49 const sysrootURL = `${SYSROOT_BASE_URL}/${sha}/${fileName}`;
50 let sysrootBuffer = await (0, fetcher_1.fetch)(sysrootURL, 'buffer');
51 const actualSha = crypto.createHash('SHA1').update(sysrootBuffer).digest('hex');
52 d('expected sha:', sha);
53 d('actual sha:', actualSha);
54 if (sha !== actualSha)
55 throw new Error(`Attempted to download the linux sysroot for ${electronVersion} but the SHA checksum did not match`);
56 d('decompressing sysroot');
57 sysrootBuffer = await new Promise(resolve => require('lzma-native').decompress(sysrootBuffer, undefined, (result) => resolve(result))); // eslint-disable-line
58 const tmpTarFile = path.resolve(constants_1.ELECTRON_GYP_DIR, `${electronVersion}-${fileName}`);
59 if (await fs.pathExists(tmpTarFile))
60 await fs.remove(tmpTarFile);
61 await fs.writeFile(tmpTarFile, sysrootBuffer);
62 d('extracting sysroot');
63 await tar.x({
64 file: tmpTarFile,
65 cwd: sysrootDir,
66 });
67 return sysrootDir;
68}
69exports.downloadLinuxSysroot = downloadLinuxSysroot;
70//# sourceMappingURL=sysroot-fetcher.js.map
\No newline at end of file