@@ -6,7 +6,11 @@ NINJA ?= ninja
6
6
DESTDIR ?=
7
7
SIGN ?=
8
8
FLAKY_TESTS ?= run
9
+ STAGINGSERVER ?= node-www
9
10
11
+ OSTYPE := $(shell uname -s | tr '[A-Z]' '[a-z]')
12
+
13
+ # Flags for packaging.
10
14
NODE ?= ./node
11
15
12
16
# Default to verbose builds.
@@ -206,9 +210,45 @@ run-ci:
206
210
207
211
RAWVER =$(shell $(PYTHON ) tools/getnodeversion.py)
208
212
VERSION =v$(RAWVER )
213
+
214
+ # For nightly builds, you must set DISTTYPE to "nightly", "next-nightly" or
215
+ # "custom". For the nightly and next-nightly case, you need to set DATESTRING
216
+ # and COMMIT in order to properly name the build.
217
+ # For the rc case you need to set CUSTOMTAG to an appropriate CUSTOMTAG number
218
+
219
+ ifndef DISTTYPE
220
+ DISTTYPE =release
221
+ endif
222
+ ifeq ($(DISTTYPE ) ,release)
223
+ FULLVERSION =$(VERSION )
224
+ else # ifeq ($(DISTTYPE),release)
225
+ ifeq ($(DISTTYPE ) ,custom)
226
+ ifndef CUSTOMTAG
227
+ $(error CUSTOMTAG is not set for DISTTYPE=custom)
228
+ endif # ifndef CUSTOMTAG
229
+ TAG =$(CUSTOMTAG )
230
+ else # ifeq ($(DISTTYPE),custom)
231
+ ifndef DATESTRING
232
+ $(error DATESTRING is not set for nightly)
233
+ endif # ifndef DATESTRING
234
+ ifndef COMMIT
235
+ $(error COMMIT is not set for nightly)
236
+ endif # ifndef COMMIT
237
+ ifneq ($(DISTTYPE ) ,nightly)
238
+ ifneq ($(DISTTYPE ) ,next-nightly)
239
+ $(error DISTTYPE is not release, custom, nightly or next-nightly)
240
+ endif # ifneq ($(DISTTYPE),next-nightly)
241
+ endif # ifneq ($(DISTTYPE),nightly)
242
+ TAG =$(DISTTYPE )$(DATESTRING )$(COMMIT )
243
+ endif # ifeq ($(DISTTYPE),custom)
244
+ FULLVERSION =$(VERSION ) -$(TAG )
245
+ endif # ifeq ($(DISTTYPE),release)
246
+
247
+ DISTTYPEDIR ?= $(DISTTYPE )
248
+ RELEASE =$(shell sed -ne 's/\#define NODE_VERSION_IS_RELEASE \([01]\) /\1/p' src/node_version.h)
209
249
NODE_DOC_VERSION =$(VERSION )
210
- RELEASE = $(shell $( PYTHON ) tools/getnodeisrelease.py )
211
- PLATFORM = $( shell uname | tr '[:upper:]' '[:lower:]')
250
+ NPMVERSION =v $(shell cat deps/npm/package.json | grep '"version"' | sed 's/^[^:] * : "\([^"] * \) ",.*/\1/' )
251
+
212
252
ifeq ($(findstring x86_64,$(shell uname -m) ) ,x86_64)
213
253
DESTCPU ?= x64
214
254
else
@@ -223,59 +263,62 @@ else
223
263
ARCH =x86
224
264
endif
225
265
endif
226
- TARNAME =node-$(VERSION )
227
- ifdef NIGHTLY
228
- TAG = nightly-$(NIGHTLY )
229
- TARNAME =node-$(VERSION ) -$(TAG )
230
- endif
231
- TARBALL =$(TARNAME ) .tar.gz
232
- BINARYNAME =$(TARNAME ) -$(PLATFORM ) -$(ARCH )
233
- BINARYTAR =$(BINARYNAME ) .tar.gz
234
- PKG =out/$(TARNAME ) .pkg
235
- PACKAGEMAKER ?= /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
236
266
237
- PKGSRC =nodejs-$(DESTCPU ) -$(RAWVER ) .tgz
238
- ifdef NIGHTLY
239
- PKGSRC =nodejs-$(DESTCPU ) -$(RAWVER ) -$(TAG ) .tgz
267
+ # enforce "x86" over "ia32" as the generally accepted way of referring to 32-bit intel
268
+ ifeq ($(ARCH ) ,ia32)
269
+ override ARCH =x86
270
+ endif
271
+ ifeq ($(DESTCPU ) ,ia32)
272
+ override DESTCPU =x86
240
273
endif
241
274
242
- dist : doc $(TARBALL ) $(PKG )
243
-
275
+ TARNAME =node-$(FULLVERSION )
276
+ TARBALL =$(TARNAME ) .tar
277
+ BINARYNAME =$(TARNAME ) -$(OSTYPE ) -$(ARCH )
278
+ BINARYTAR =$(BINARYNAME ) .tar
279
+ PKG =$(TARNAME ) .pkg
280
+ PACKAGEMAKER ?= /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
244
281
PKGDIR =out/dist-osx
245
282
246
283
release-only :
247
284
@if [ " $( shell git status --porcelain | egrep -v ' ^\?\? ' ) " = " " ]; then \
248
285
exit 0 ; \
249
286
else \
250
- echo " " >&2 ; \
287
+ echo " " >&2 ; \
251
288
echo " The git repository is not clean." >&2 ; \
252
289
echo " Please commit changes before building release tarball." >&2 ; \
253
290
echo " " >&2 ; \
254
291
git status --porcelain | egrep -v ' ^\?\?' >&2 ; \
255
292
echo " " >&2 ; \
256
293
exit 1 ; \
257
294
fi
258
- @if [ " $( NIGHTLY ) " != " " -o " $( RELEASE) " = " 1" ]; then \
295
+ @if [ " $( DISTTYPE ) " != " release " -o " $( RELEASE) " = " 1" ]; then \
259
296
exit 0; \
260
297
else \
261
- echo " " >&2 ; \
298
+ echo " " >&2 ; \
262
299
echo " #NODE_VERSION_IS_RELEASE is set to $( RELEASE) ." >&2 ; \
263
- echo " Did you remember to update src/node_version.cc ?" >&2 ; \
264
- echo " " >&2 ; \
300
+ echo " Did you remember to update src/node_version.h ?" >&2 ; \
301
+ echo " " >&2 ; \
265
302
exit 1 ; \
266
303
fi
267
304
268
- pkg : $(PKG )
269
-
270
305
$(PKG ) : release-only
271
306
rm -rf $(PKGDIR )
272
307
rm -rf out/deps out/Release
273
- $(PYTHON ) ./configure --without-snapshot --dest-cpu=ia32 --tag=$(TAG )
308
+ $(PYTHON ) ./configure \
309
+ --dest-cpu=ia32 \
310
+ --tag=$(TAG ) \
311
+ --without-snapshot \
312
+ $(CONFIG_FLAGS )
274
313
$(MAKE ) install V=$(V ) DESTDIR=$(PKGDIR ) /32
275
314
rm -rf out/deps out/Release
276
- $(PYTHON ) ./configure --without-snapshot --dest-cpu=x64 --tag=$(TAG )
315
+ $(PYTHON ) ./configure \
316
+ --dest-cpu=x64 \
317
+ --tag=$(TAG ) \
318
+ --without-snapshot \
319
+ $(CONFIG_FLAGS )
277
320
$(MAKE ) install V=$(V ) DESTDIR=$(PKGDIR )
278
- SIGN=" $( APP_SIGN ) " PKGDIR=" $( PKGDIR) " bash tools/osx-codesign.sh
321
+ SIGN=" $( CODESIGN_CERT ) " PKGDIR=" $( PKGDIR) " bash tools/osx-codesign.sh
279
322
lipo $(PKGDIR ) /32/usr/local/bin/node \
280
323
$(PKGDIR ) /usr/local/bin/node \
281
324
-output $(PKGDIR ) /usr/local/bin/node-universal \
@@ -286,7 +329,15 @@ $(PKG): release-only
286
329
--id " org.nodejs.Node" \
287
330
--doc tools/osx-pkg.pmdoc \
288
331
--out $(PKG )
289
- SIGN=" $( INT_SIGN) " PKG=" $( PKG) " bash tools/osx-productsign.sh
332
+ SIGN=" $( PRODUCTSIGN_CERT) " PKG=" $( PKG) " bash tools/osx-productsign.sh
333
+
334
+ pkg : $(PKG )
335
+
336
+ pkg-upload : pkg
337
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
338
+ chmod 664 node-$(FULLVERSION ) .pkg
339
+ scp -p node-$(FULLVERSION ) .pkg $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /node-$(FULLVERSION ) .pkg
340
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /node-$( FULLVERSION) .pkg.done"
290
341
291
342
$(TARBALL ) : release-only node doc
292
343
git archive --format=tar --prefix=$(TARNAME ) / HEAD | tar xf -
@@ -302,6 +353,39 @@ $(TARBALL): release-only node doc
302
353
303
354
tar : $(TARBALL )
304
355
356
+ tar-upload : tar
357
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
358
+ chmod 664 node-$(FULLVERSION ) .tar.gz
359
+ scp -p node-$(FULLVERSION ) .tar.gz $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /node-$(FULLVERSION ) .tar.gz
360
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /node-$( FULLVERSION) .tar.gz.done"
361
+
362
+ doc-upload : tar
363
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
364
+ chmod -R ug=rw-x+X,o=r+X out/doc/
365
+ scp -pr out/doc/ $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /docs/
366
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /docs.done"
367
+
368
+ $(TARBALL ) -headers : config.gypi release-only
369
+ $(PYTHON ) ./configure \
370
+ --prefix=/ \
371
+ --dest-cpu=$(DESTCPU ) \
372
+ --tag=$(TAG ) \
373
+ $(CONFIG_FLAGS )
374
+ HEADERS_ONLY=1 $(PYTHON ) tools/install.py install ' $(TARNAME)' ' /'
375
+ find $(TARNAME ) / -type l | xargs rm # annoying on windows
376
+ tar -cf $(TARNAME ) -headers.tar $(TARNAME )
377
+ rm -rf $(TARNAME )
378
+ gzip -c -f -9 $(TARNAME ) -headers.tar > $(TARNAME ) -headers.tar.gz
379
+ rm $(TARNAME ) -headers.tar
380
+
381
+ tar-headers : $(TARBALL ) -headers
382
+
383
+ tar-headers-upload : tar-headers
384
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
385
+ chmod 664 $(TARNAME ) -headers.tar.gz
386
+ scp -p $(TARNAME ) -headers.tar.gz $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /$(TARNAME ) -headers.tar.gz
387
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /$( TARNAME) -headers.tar.gz.done"
388
+
305
389
$(BINARYTAR ) : release-only
306
390
rm -rf $(BINARYNAME )
307
391
rm -rf out/deps out/Release
@@ -316,6 +400,35 @@ $(BINARYTAR): release-only
316
400
317
401
binary : $(BINARYTAR )
318
402
403
+ binary-upload-arch : binary
404
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
405
+ chmod 664 node-$(FULLVERSION ) -$(OSTYPE ) -$(ARCH ) .tar.gz
406
+ scp -p node-$(FULLVERSION ) -$(OSTYPE ) -$(ARCH ) .tar.gz $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /node-$(FULLVERSION ) -$(OSTYPE ) -$(ARCH ) .tar.gz
407
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /node-$( FULLVERSION) -$( OSTYPE) -$( ARCH) .tar.gz.done"
408
+
409
+ ifeq ($(OSTYPE ) ,darwin)
410
+ binary-upload :
411
+ $(MAKE ) binary-upload-arch \
412
+ DESTCPU=ia32 \
413
+ ARCH=x86 \
414
+ DISTTYPE=$(DISTTYPE ) \
415
+ DATESTRING=$(DATESTRING ) \
416
+ COMMIT=$(COMMIT ) \
417
+ CUSTOMTAG=$(CUSTOMTAG ) \
418
+ CONFIG_FLAGS=$(CONFIG_FLAGS )
419
+ $(MAKE ) binary-upload-arch \
420
+ DESTCPU=x64 \
421
+ ARCH=x64 \
422
+ DISTTYPE=$(DISTTYPE ) \
423
+ DATESTRING=$(DATESTRING ) \
424
+ COMMIT=$(COMMIT ) \
425
+ CUSTOMTAG=$(CUSTOMTAG ) \
426
+ CONFIG_FLAGS=$(CONFIG_FLAGS )
427
+ else
428
+ binary-upload : binary-upload-arch
429
+ endif
430
+
431
+
319
432
$(PKGSRC ) : release-only
320
433
rm -rf dist out
321
434
$(PYTHON ) configure --prefix=/ --without-snapshot \
@@ -329,11 +442,6 @@ $(PKGSRC): release-only
329
442
330
443
pkgsrc : $(PKGSRC )
331
444
332
- dist-upload : $(TARBALL ) $(PKG )
333
- ssh
[email protected] mkdir -p web/nodejs.org/dist/
$(VERSION )
334
- scp
$(TARBALL ) [email protected] :
~ /web/nodejs.org/dist/
$(VERSION ) /
$(TARBALL )
335
- scp
$(PKG ) [email protected] :
~ /web/nodejs.org/dist/
$(VERSION ) /
$(TARNAME ) .pkg
336
-
337
445
wrkclean :
338
446
$(MAKE ) -C tools/wrk/ clean
339
447
rm tools/wrk/wrk
0 commit comments