forked from nodegit/nodegit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathacquireOpenSSL.js
More file actions
90 lines (78 loc) · 2.49 KB
/
acquireOpenSSL.js
File metadata and controls
90 lines (78 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
const fse = require("fs-extra");
const path = require("path");
const R = require("ramda");
const request = require("request-promise-native");
const stream = require("stream");
const tar = require("tar-fs");
const zlib = require("zlib");
const vendorPath = path.resolve(__dirname, "..", "vendor");
const distrosFilePath = path.join(vendorPath, "static_config", "openssl_distributions.json");
const extractPath = path.join(vendorPath, "openssl");
const getOSName = () => {
if (process.platform === "win32") {
if (process.arch === "x64") {
return "win64";
} else {
return "win32";
}
} else if (process.platform === "darwin") {
return "macOS";
} else {
// We only discover distros for Mac and Windows. We don't care about any other OS.
return "unknown";
}
};
const getCompilerVersion = () => {
// TODO: Get actual compiler version. For now, just assume latest compiler for distros in openssl_distributions.js
const osName = getOSName();
if (osName === "win32" || osName === "win64") {
return "vs14";
} else if (osName === "macOS") {
return "clang-9";
} else {
// We only discover distros for Mac and Windows. We don't care about any other OS.
return "unknown";
}
};
// TODO: Determine if we are GYPing in Debug
const getIsDebug = () => false;
const getMatchingDistributionName = () =>
`${getOSName()}-${getCompilerVersion()}-static${getIsDebug() ? "-debug" : "-release"}`;
const getDistributionsConfig = () =>
fse.readFile(distrosFilePath, "utf8")
.then(JSON.parse);
const getDistrbutionURLFromConfig = (config) => {
const distName = getMatchingDistributionName();
const distURL = R.propOr(null, distName, config);
if (!distURL) {
return Promise.reject(new Error("No matching distribution for this operating system"));
}
return Promise.resolve(distURL);
};
const fetchFileFromURL = (distUrl) => request({
method: "GET",
uri: distUrl,
encoding: null,
gzip: true
});
const extractFile = (body) => new Promise((resolve, reject) => {
const streamableBody = new stream.Readable();
streamableBody.push(body);
streamableBody.push(null);
streamableBody
.pipe(zlib.createGunzip())
.on("error", reject)
.pipe(tar.extract(extractPath))
.on("error", reject)
.on("close", resolve);
});
const acquireOpenSSL = () =>
getDistributionsConfig()
.then(getDistrbutionURLFromConfig)
.then(fetchFileFromURL)
.then(extractFile)
.catch((e) => {
console.error(e);
process.exit(1);
});
acquireOpenSSL();