forked from HaxeFoundation/npm-haxe
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinstall.js
executable file
·105 lines (87 loc) · 2.34 KB
/
install.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
100
101
102
103
104
105
#!/usr/bin/env node
var os = require('os');
var Download = require('download');
var mv = require('mv');
var rmrf = require('rimraf');
var fs = require('fs');
var path = require('path');
var downloadStatus = require('download-status');
var packageConfig = require('./lib/package-config');
var haxeUrl = require('./lib/haxe-url');
var vars = require('./lib/vars');
var tmpDir = 'tmp';
var haxeDir = path.dirname( vars.haxe.path );
var majorVersion = packageConfig('version');
var nightly = packageConfig('nightly');
var haxelibVersion = packageConfig('haxelib_version');
var haxelibSrc = 'current/extra/haxelib_src';
var platform = os.platform();
var arch = os.arch();
var isWin = platform.indexOf('win') == 0;
clean( function(err){
if( err != null ) {
throw err;
}
downloadHaxe(function(err){
if( err != null ) {
throw err;
}
downloadHaxelib(function(err){
if( err != null ) {
throw err;
}
});
});
} );
function clean(cb) {
rmrf(tmpDir, function(err){
if( err != null ){
cb( err );
} else {
rmrf(haxeDir,function(err){
if( err != null ) {
cb( err );
} else {
cb( null );
}
} );
}
});
}
function downloadHaxe( cb ) {
console.log("Getting Haxe " + majorVersion + (nightly ? " (nightly=" + nightly + ")" : "") );
var url = haxeUrl(platform, arch, majorVersion, nightly);
downloadAndMoveTo( url, haxeDir, cb );
}
function downloadHaxelib( cb ) {
console.log("Getting Haxelib " + haxelibVersion );
var url = "https://github.com/HaxeFoundation/haxelib/archive/"+haxelibVersion+".tar.gz";
downloadAndMoveTo( url, haxelibSrc, cb );
}
function downloadAndMoveTo( url, targetDir, cb ) {
Download({ extract: true })
.get( url )
.dest( tmpDir )
.use(downloadStatus())
.run( function(err,files){
if( err ) {
console.error("Unable to download or extract " + url);
cb(err);
}
var extractedDirs = fs.readdirSync(tmpDir)
.filter(function(sub){
return (sub.indexOf('haxe') === 0) && fs.statSync(path.join(tmpDir, sub)).isDirectory();
});
if( extractedDirs.length != 1 ) {
console.error("Unable to determine extracted directory between", extractedDirs);
}
var extractedDir = extractedDirs[0];
mv( path.join(tmpDir, extractedDir) , targetDir , {mkdirp: true} , function(err){
if( err ) {
console.error( err );
cb(err);
}
cb();
});
});
}