1
1
var semver = require ( 'semver' )
2
- var url = require ( 'url' )
3
- var path = require ( 'path' )
2
+ , url = require ( 'url' )
3
+ , path = require ( 'path' )
4
4
5
- var bitsre = / ( x 8 6 | x 6 4 ) /
6
- var bitsreV3 = / ( x 8 6 | i a 3 2 | x 6 4 ) / // io.js v3.x.x shipped with "ia32" but should
7
- // have been "x86"
5
+ , bitsre = / \/ w i n - ( x 8 6 | x 6 4 ) \/ /
6
+ , bitsreV3 = / \/ w i n - ( x 8 6 | i a 3 2 | x 6 4 ) \/ / // io.js v3.x.x shipped with "ia32" but should
7
+ // have been "x86"
8
8
9
9
// Captures all the logic required to determine download URLs, local directory and
10
- // file names and whether we need to use SHA-1 or 2 . Inputs come from command-line
11
- // switches (--target), `process.version` and `process.release` where it exists.
10
+ // file names. Inputs come from command-line switches (--target, --dist-url),
11
+ // `process.version` and `process.release` where it exists.
12
12
function processRelease ( argv , gyp , defaultVersion , defaultRelease ) {
13
13
var version = argv [ 0 ] || gyp . opts . target || defaultVersion
14
+ , isDefaultVersion = version === defaultVersion
15
+ , versionSemver = semver . parse ( version )
16
+ , overrideDistUrl = gyp . opts [ 'dist-url' ] || gyp . opts . disturl
17
+ , isIojs
18
+ , name
19
+ , distBaseUrl
20
+ , baseUrl
21
+ , libUrl32
22
+ , libUrl64
14
23
15
- // parse the version to normalize and ensure it's valid
16
- var versionSemver = semver . parse ( version )
17
24
if ( ! versionSemver ) {
25
+ // not a valid semver string, nothing we can do
18
26
return { version : version }
19
27
}
20
28
// flatten version into String
21
29
version = versionSemver . version
22
30
23
- var overrideDistUrl = gyp . opts [ 'dist-url' ] || gyp . opts . disturl
24
- var iojs = ! overrideDistUrl && ! defaultRelease && semver . satisfies ( version , '>=1.0.0 <4.0.0' )
25
- var name = ( defaultRelease && defaultRelease . name . replace ( / \. / g, '' ) ) || ( iojs ? 'iojs' : 'node' ) // io.js -> iojs
26
- var defaultDirUrl = ( overrideDistUrl || iojs ? 'https://iojs.org/download/release' : 'https://nodejs.org/dist' ) + '/v' + version + '/'
27
- var baseUrl
28
- var libUrl32
29
- var libUrl64
31
+ // can't use process.release if we're using --target=x.y.z
32
+ if ( ! isDefaultVersion )
33
+ defaultRelease = null
34
+
35
+ if ( defaultRelease ) {
36
+ // v3 onward, has process.release
37
+ name = defaultRelease . name . replace ( / i o \. j s / , 'iojs' ) // remove the '.' for directory naming purposes
38
+ isIojs = name === 'iojs'
39
+ } else {
40
+ // old node or alternative --target=
41
+ isIojs = semver . satisfies ( version , '>=1.0.0 <4.0.0' )
42
+ name = isIojs ? 'iojs' : 'node'
43
+ }
44
+
45
+ // check for the nvm.sh standard mirror env variables
46
+ if ( ! overrideDistUrl ) {
47
+ if ( isIojs && process . env . NVM_IOJS_ORG_MIRROR )
48
+ overrideDistUrl = process . env . NVM_IOJS_ORG_MIRROR
49
+ else if ( process . env . NVM_NODEJS_ORG_MIRROR )
50
+ overrideDistUrl = process . env . NVM_NODEJS_ORG_MIRROR
51
+ }
52
+
53
+
54
+ if ( overrideDistUrl )
55
+ distBaseUrl = overrideDistUrl . replace ( / \/ + $ / , '' )
56
+ else
57
+ distBaseUrl = isIojs ? 'https://iojs.org/download/release' : 'https://nodejs.org/dist'
58
+ distBaseUrl += '/v' + version + '/'
30
59
31
60
// new style, based on process.release so we have a lot of the data we need
32
61
if ( defaultRelease && defaultRelease . headersUrl && ! overrideDistUrl ) {
33
62
baseUrl = url . resolve ( defaultRelease . headersUrl , './' )
34
- libUrl32 = resolveLibUrl ( name , defaultRelease . libUrl || baseUrl || defaultDirUrl , 'x86' , version )
35
- libUrl64 = resolveLibUrl ( name , defaultRelease . libUrl || baseUrl || defaultDirUrl , 'x64' , version )
63
+ libUrl32 = resolveLibUrl ( name , defaultRelease . libUrl || baseUrl || distBaseUrl , 'x86' , version )
64
+ libUrl64 = resolveLibUrl ( name , defaultRelease . libUrl || baseUrl || distBaseUrl , 'x64' , version )
36
65
37
66
return {
38
67
version : version ,
39
68
semver : versionSemver ,
40
69
name : name ,
41
70
baseUrl : baseUrl ,
42
71
tarballUrl : defaultRelease . headersUrl ,
43
- shasumsFile : 'SHASUMS256.txt' ,
44
72
shasumsUrl : url . resolve ( baseUrl , 'SHASUMS256.txt' ) ,
45
- checksumAlgo : 'sha256' ,
46
73
versionDir : ( name !== 'node' ? name + '-' : '' ) + version ,
47
74
libUrl32 : libUrl32 ,
48
75
libUrl64 : libUrl64 ,
@@ -52,25 +79,24 @@ function processRelease (argv, gyp, defaultVersion, defaultRelease) {
52
79
}
53
80
54
81
// older versions without process.release are captured here and we have to make
55
- // a lot of assumptions
56
-
57
- // distributions starting with 0.10.0 contain sha256 checksums
58
- var checksumAlgo = semver . gte ( version , '0.10.0' ) ? 'sha256' : 'sha1'
59
- var shasumsFile = ( checksumAlgo === 'sha256' ) ? 'SHASUMS256.txt' : 'SHASUMS.txt'
82
+ // a lot of assumptions, additionally if you --target=x.y.z then we can't use the
83
+ // current process.release
60
84
61
- baseUrl = defaultDirUrl
85
+ baseUrl = distBaseUrl
62
86
libUrl32 = resolveLibUrl ( name , baseUrl , 'x86' , version )
63
87
libUrl64 = resolveLibUrl ( name , baseUrl , 'x64' , version )
88
+ // making the bold assumption that anything with a version number >3.0.0 will
89
+ // have a *-headers.tar.gz file in its dist location, even some frankenstein
90
+ // custom version
91
+ tarballUrl = url . resolve ( baseUrl , name + '-v' + version + ( semver . satisfies ( version , '>=3' ) ? '-headers' : '' ) + '.tar.gz' )
64
92
65
93
return {
66
94
version : version ,
67
95
semver : versionSemver ,
68
96
name : name ,
69
97
baseUrl : baseUrl ,
70
- tarballUrl : baseUrl + name + '-v' + version + '.tar.gz' ,
71
- shasumsFile : shasumsFile ,
72
- shasumsUrl : baseUrl + shasumsFile ,
73
- checksumAlgo : checksumAlgo ,
98
+ tarballUrl : tarballUrl ,
99
+ shasumsUrl : url . resolve ( baseUrl , 'SHASUMS256.txt' ) ,
74
100
versionDir : ( name !== 'node' ? name + '-' : '' ) + version ,
75
101
libUrl32 : libUrl32 ,
76
102
libUrl64 : libUrl64 ,
@@ -85,19 +111,19 @@ function normalizePath (p) {
85
111
86
112
function resolveLibUrl ( name , defaultUrl , arch , version ) {
87
113
var base = url . resolve ( defaultUrl , './' )
88
- var isV3 = semver . satisfies ( version , '^3' )
89
- var hasLibUrl = bitsre . test ( defaultUrl ) || ( isV3 && bitsreV3 . test ( defaultUrl ) )
114
+ , isV3 = semver . satisfies ( version , '^3' )
115
+ , hasLibUrl = bitsre . test ( defaultUrl ) || ( isV3 && bitsreV3 . test ( defaultUrl ) )
90
116
91
117
if ( ! hasLibUrl ) {
92
118
// let's assume it's a baseUrl then
93
119
if ( semver . gte ( version , '1.0.0' ) )
94
120
return url . resolve ( base , 'win-' + arch + '/' + name + '.lib' )
95
121
// prior to [email protected] 32-bit node.lib lives in /, 64-bit lives in /x64/
96
- return url . resolve ( base , ( arch == 'x64' ? 'x64/' : '' ) + name + '.lib' )
122
+ return url . resolve ( base , ( arch === 'x64' ? 'x64/' : '' ) + name + '.lib' )
97
123
}
98
124
99
125
// else we have a proper url to a .lib, just make sure it's the right arch
100
- return defaultUrl . replace ( isV3 ? bitsreV3 : bitsre , arch )
126
+ return defaultUrl . replace ( isV3 ? bitsreV3 : bitsre , '/win-' + arch + '/' )
101
127
}
102
128
103
129
module . exports = processRelease
0 commit comments