forked from cryptlex/lexfloatclient-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
predownload.js
99 lines (93 loc) · 2.51 KB
/
predownload.js
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
91
92
93
94
95
96
97
98
99
const request = require('request');
const unzipper = require('unzipper');
const fs = require('fs');
const os = require('os');
const path = require('path');
const isNonGlibcLinux = require('detect-libc').isNonGlibcLinux;
const platform = process.env.npm_config_target_platform || os.platform();
const targetArch = process.env.npm_config_target_arch || null;
const buildFromSource = process.env.npm_config_build_from_source != null;
const version = "v4.5.1";
async function download(url, files, destPath) {
const directory = await unzipper.Open.url(request, url);
for (let i = 0; i < files.length; i++) {
const file = directory.files.find((file) => file.path === files[i]);
const content = await file.buffer();
await fs.writeFileSync(destPath + path.basename(files[i]), content);
}
}
function isMusl() {
if (os.platform() != 'linux') {
return false;
}
if (isNonGlibcLinux) {
return true;
}
return false;
}
async function main() {
try {
let arch = os.arch();
const baseUrl = 'https://dl.cryptlex.com/downloads/';
let url; let files;
switch (platform) {
case 'darwin': // OSX
if (buildFromSource == null) {
return;
}
files = ['libs/clang/universal/libLexFloatClient.a'];
url = '/LexFloatClient-Static-Mac.zip';
break;
case 'win32': // windows
if (buildFromSource == null) {
return;
}
if (targetArch == 'ia32') {
arch = 'x86';
}
files = ['libs/vc14/' + arch + '/LexFloatClient.lib', 'libs/vc14/' + arch + '/LexFloatClient.dll'];
url = '/LexFloatClient-Win.zip';
break;
case 'linux': // linux
if (targetArch == 'ia32') {
arch = 'x32';
}
url = '/LexFloatClient-Static-Linux.zip';
let dir = '';
switch (arch) {
case 'arm':
dir = os.endianness() === 'LE' ? 'armel' : 'armhf';
break;
case 'arm64':
dir = 'arm64';
break;
case 'x64':
if (buildFromSource == null && !isMusl()) {
return;
}
dir = 'amd64';
break;
case 'x32':
dir = 'i386';
break;
default:
throw Error('Unsupported Linux arch: ' + arch);
}
if (isMusl()) {
files = ['libs/musl/' + dir + '/libLexFloatClient.a'];
} else {
files = ['libs/gcc/' + dir + '/libLexFloatClient.a'];
}
break;
default:
throw Error('Unsupported platform: ' + platform);
}
console.log(`Downloading LexFloatClient library for ${platform} ${arch} ...`);
await download(baseUrl + version + url, files, './');
console.log(`LexFloatClient library successfully downloaded!`);
process.exit(0);
} catch (error) {
console.error(error);
}
}
main();