@@ -7,7 +7,14 @@ DESTDIR ?=
7
7
SIGN ?=
8
8
PREFIX ?= /usr/local
9
9
FLAKY_TESTS ?= run
10
+ STAGINGSERVER ?= node-www
10
11
12
+ OSTYPE := $(shell uname -s | tr '[A-Z]' '[a-z]')
13
+
14
+ # Flags for packaging.
15
+ BUILD_DOWNLOAD_FLAGS ?= --download=all
16
+ BUILD_INTL_FLAGS ?= --with-intl=small-icu
17
+ BUILD_RELEASE_FLAGS ?= $(BUILD_DOWNLOAD_FLAGS ) $(BUILD_INTL_FLAGS )
11
18
NODE ?= ./node
12
19
13
20
# Default to verbose builds.
@@ -251,9 +258,45 @@ run-ci:
251
258
252
259
RAWVER =$(shell $(PYTHON ) tools/getnodeversion.py)
253
260
VERSION =v$(RAWVER )
261
+
262
+ # For nightly builds, you must set DISTTYPE to "nightly", "next-nightly" or
263
+ # "custom". For the nightly and next-nightly case, you need to set DATESTRING
264
+ # and COMMIT in order to properly name the build.
265
+ # For the rc case you need to set CUSTOMTAG to an appropriate CUSTOMTAG number
266
+
267
+ ifndef DISTTYPE
268
+ DISTTYPE =release
269
+ endif
270
+ ifeq ($(DISTTYPE ) ,release)
271
+ FULLVERSION =$(VERSION )
272
+ else # ifeq ($(DISTTYPE),release)
273
+ ifeq ($(DISTTYPE ) ,custom)
274
+ ifndef CUSTOMTAG
275
+ $(error CUSTOMTAG is not set for DISTTYPE=custom)
276
+ endif # ifndef CUSTOMTAG
277
+ TAG =$(CUSTOMTAG )
278
+ else # ifeq ($(DISTTYPE),custom)
279
+ ifndef DATESTRING
280
+ $(error DATESTRING is not set for nightly)
281
+ endif # ifndef DATESTRING
282
+ ifndef COMMIT
283
+ $(error COMMIT is not set for nightly)
284
+ endif # ifndef COMMIT
285
+ ifneq ($(DISTTYPE ) ,nightly)
286
+ ifneq ($(DISTTYPE ) ,next-nightly)
287
+ $(error DISTTYPE is not release, custom, nightly or next-nightly)
288
+ endif # ifneq ($(DISTTYPE),next-nightly)
289
+ endif # ifneq ($(DISTTYPE),nightly)
290
+ TAG =$(DISTTYPE )$(DATESTRING )$(COMMIT )
291
+ endif # ifeq ($(DISTTYPE),custom)
292
+ FULLVERSION =$(VERSION ) -$(TAG )
293
+ endif # ifeq ($(DISTTYPE),release)
294
+
295
+ DISTTYPEDIR ?= $(DISTTYPE )
296
+ RELEASE =$(shell sed -ne 's/\#define NODE_VERSION_IS_RELEASE \([01]\) /\1/p' src/node_version.h)
254
297
NODE_DOC_VERSION =$(VERSION )
255
- RELEASE = $(shell $( PYTHON ) tools/getnodeisrelease.py )
256
- PLATFORM = $( shell uname | tr '[:upper:]' '[:lower:]')
298
+ NPMVERSION =v $(shell cat deps/npm/package.json | grep '"version"' | sed 's/^[^:] * : "\([^"] * \) ",.*/\1/' )
299
+
257
300
ifeq ($(findstring x86_64,$(shell uname -m) ) ,x86_64)
258
301
DESTCPU ?= x64
259
302
else
@@ -268,61 +311,62 @@ else
268
311
ARCH =x86
269
312
endif
270
313
endif
271
- TARNAME =node-$(VERSION )
272
- ifdef NIGHTLY
273
- TAG = nightly-$(NIGHTLY )
274
- TARNAME =node-$(VERSION ) -$(TAG )
275
- endif
276
- TARBALL =$(TARNAME ) .tar.gz
277
- BINARYNAME =$(TARNAME ) -$(PLATFORM ) -$(ARCH )
278
- BINARYTAR =$(BINARYNAME ) .tar.gz
279
- PKG =out/$(TARNAME ) .pkg
280
- PACKAGEMAKER ?= /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
281
314
282
- PKGSRC =nodejs-$(DESTCPU ) -$(RAWVER ) .tgz
283
- ifdef NIGHTLY
284
- PKGSRC =nodejs-$(DESTCPU ) -$(RAWVER ) -$(TAG ) .tgz
315
+ # enforce "x86" over "ia32" as the generally accepted way of referring to 32-bit intel
316
+ ifeq ($(ARCH ) ,ia32)
317
+ override ARCH =x86
318
+ endif
319
+ ifeq ($(DESTCPU ) ,ia32)
320
+ override DESTCPU =x86
285
321
endif
286
322
287
- dist : doc $(TARBALL ) $(PKG )
288
-
323
+ TARNAME =node-$(FULLVERSION )
324
+ TARBALL =$(TARNAME ) .tar
325
+ BINARYNAME =$(TARNAME ) -$(OSTYPE ) -$(ARCH )
326
+ BINARYTAR =$(BINARYNAME ) .tar
327
+ PKG =$(TARNAME ) .pkg
328
+ PACKAGEMAKER ?= /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
289
329
PKGDIR =out/dist-osx
290
330
291
331
release-only :
292
332
@if [ " $( shell git status --porcelain | egrep -v ' ^\?\? ' ) " = " " ]; then \
293
333
exit 0 ; \
294
334
else \
295
- echo " " >&2 ; \
335
+ echo " " >&2 ; \
296
336
echo " The git repository is not clean." >&2 ; \
297
337
echo " Please commit changes before building release tarball." >&2 ; \
298
338
echo " " >&2 ; \
299
339
git status --porcelain | egrep -v ' ^\?\?' >&2 ; \
300
340
echo " " >&2 ; \
301
341
exit 1 ; \
302
342
fi
303
- @if [ " $( NIGHTLY ) " != " " -o " $( RELEASE) " = " 1" ]; then \
343
+ @if [ " $( DISTTYPE ) " != " release " -o " $( RELEASE) " = " 1" ]; then \
304
344
exit 0; \
305
345
else \
306
- echo " " >&2 ; \
346
+ echo " " >&2 ; \
307
347
echo " #NODE_VERSION_IS_RELEASE is set to $( RELEASE) ." >&2 ; \
308
- echo " Did you remember to update src/node_version.cc ?" >&2 ; \
309
- echo " " >&2 ; \
348
+ echo " Did you remember to update src/node_version.h ?" >&2 ; \
349
+ echo " " >&2 ; \
310
350
exit 1 ; \
311
351
fi
312
352
313
- pkg : $(PKG )
314
-
315
353
$(PKG ) : release-only
316
354
rm -rf $(PKGDIR )
317
355
rm -rf out/deps out/Release
318
- $(PYTHON ) ./configure --download=all --with-intl=small-icu \
319
- --without-snapshot --dest-cpu=ia32 --tag=$(TAG )
356
+ $(PYTHON ) ./configure \
357
+ --dest-cpu=ia32 \
358
+ --tag=$(TAG ) \
359
+ --without-snapshot \
360
+ $(CONFIG_FLAGS ) $(BUILD_RELEASE_FLAGS )
320
361
$(MAKE ) install V=$(V ) DESTDIR=$(PKGDIR ) /32
321
362
rm -rf out/deps out/Release
322
- $(PYTHON ) ./configure --download=all --with-intl=small-icu \
323
- --without-snapshot --dest-cpu=x64 --tag=$(TAG )
363
+ $(PYTHON ) ./configure \
364
+ --dest-cpu=x64 \
365
+ --tag=$(TAG ) \
366
+ --without-snapshot \
367
+ $(CONFIG_FLAGS ) $(BUILD_RELEASE_FLAGS )
324
368
$(MAKE ) install V=$(V ) DESTDIR=$(PKGDIR )
325
- SIGN=" $( APP_SIGN ) " PKGDIR=" $( PKGDIR) " bash tools/osx-codesign.sh
369
+ SIGN=" $( CODESIGN_CERT ) " PKGDIR=" $( PKGDIR) " bash tools/osx-codesign.sh
326
370
lipo $(PKGDIR ) /32/usr/local/bin/node \
327
371
$(PKGDIR ) /usr/local/bin/node \
328
372
-output $(PKGDIR ) /usr/local/bin/node-universal \
@@ -333,7 +377,15 @@ $(PKG): release-only
333
377
--id " org.nodejs.Node" \
334
378
--doc tools/osx-pkg.pmdoc \
335
379
--out $(PKG )
336
- SIGN=" $( INT_SIGN) " PKG=" $( PKG) " bash tools/osx-productsign.sh
380
+ SIGN=" $( PRODUCTSIGN_CERT) " PKG=" $( PKG) " bash tools/osx-productsign.sh
381
+
382
+ pkg : $(PKG )
383
+
384
+ pkg-upload : pkg
385
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
386
+ chmod 664 node-$(FULLVERSION ) .pkg
387
+ scp -p node-$(FULLVERSION ) .pkg $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /node-$(FULLVERSION ) .pkg
388
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /node-$( FULLVERSION) .pkg.done"
337
389
338
390
$(TARBALL ) : release-only node doc
339
391
git archive --format=tar --prefix=$(TARNAME ) / HEAD | tar xf -
@@ -349,6 +401,39 @@ $(TARBALL): release-only node doc
349
401
350
402
tar : $(TARBALL )
351
403
404
+ tar-upload : tar
405
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
406
+ chmod 664 node-$(FULLVERSION ) .tar.gz
407
+ scp -p node-$(FULLVERSION ) .tar.gz $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /node-$(FULLVERSION ) .tar.gz
408
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /node-$( FULLVERSION) .tar.gz.done"
409
+
410
+ doc-upload : tar
411
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
412
+ chmod -R ug=rw-x+X,o=r+X out/doc/
413
+ scp -pr out/doc/ $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /docs/
414
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /docs.done"
415
+
416
+ $(TARBALL ) -headers : config.gypi release-only
417
+ $(PYTHON ) ./configure \
418
+ --prefix=/ \
419
+ --dest-cpu=$(DESTCPU ) \
420
+ --tag=$(TAG ) \
421
+ $(CONFIG_FLAGS ) $(BUILD_RELEASE_FLAGS )
422
+ HEADERS_ONLY=1 $(PYTHON ) tools/install.py install ' $(TARNAME)' ' /'
423
+ find $(TARNAME ) / -type l | xargs rm # annoying on windows
424
+ tar -cf $(TARNAME ) -headers.tar $(TARNAME )
425
+ rm -rf $(TARNAME )
426
+ gzip -c -f -9 $(TARNAME ) -headers.tar > $(TARNAME ) -headers.tar.gz
427
+ rm $(TARNAME ) -headers.tar
428
+
429
+ tar-headers : $(TARBALL ) -headers
430
+
431
+ tar-headers-upload : tar-headers
432
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
433
+ chmod 664 $(TARNAME ) -headers.tar.gz
434
+ scp -p $(TARNAME ) -headers.tar.gz $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /$(TARNAME ) -headers.tar.gz
435
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /$( TARNAME) -headers.tar.gz.done"
436
+
352
437
$(BINARYTAR ) : release-only
353
438
rm -rf $(BINARYNAME )
354
439
rm -rf out/deps out/Release
@@ -364,6 +449,35 @@ $(BINARYTAR): release-only
364
449
365
450
binary : $(BINARYTAR )
366
451
452
+ binary-upload-arch : binary
453
+ ssh $(STAGINGSERVER ) " mkdir -p nodejs/$( DISTTYPEDIR) /$( FULLVERSION) "
454
+ chmod 664 node-$(FULLVERSION ) -$(OSTYPE ) -$(ARCH ) .tar.gz
455
+ scp -p node-$(FULLVERSION ) -$(OSTYPE ) -$(ARCH ) .tar.gz $(STAGINGSERVER ) :nodejs/$(DISTTYPEDIR ) /$(FULLVERSION ) /node-$(FULLVERSION ) -$(OSTYPE ) -$(ARCH ) .tar.gz
456
+ ssh $(STAGINGSERVER ) " touch nodejs/$( DISTTYPEDIR) /$( FULLVERSION) /node-$( FULLVERSION) -$( OSTYPE) -$( ARCH) .tar.gz.done"
457
+
458
+ ifeq ($(OSTYPE ) ,darwin)
459
+ binary-upload :
460
+ $(MAKE ) binary-upload-arch \
461
+ DESTCPU=ia32 \
462
+ ARCH=x86 \
463
+ DISTTYPE=$(DISTTYPE ) \
464
+ DATESTRING=$(DATESTRING ) \
465
+ COMMIT=$(COMMIT ) \
466
+ CUSTOMTAG=$(CUSTOMTAG ) \
467
+ CONFIG_FLAGS=$(CONFIG_FLAGS )
468
+ $(MAKE ) binary-upload-arch \
469
+ DESTCPU=x64 \
470
+ ARCH=x64 \
471
+ DISTTYPE=$(DISTTYPE ) \
472
+ DATESTRING=$(DATESTRING ) \
473
+ COMMIT=$(COMMIT ) \
474
+ CUSTOMTAG=$(CUSTOMTAG ) \
475
+ CONFIG_FLAGS=$(CONFIG_FLAGS )
476
+ else
477
+ binary-upload : binary-upload-arch
478
+ endif
479
+
480
+
367
481
$(PKGSRC ) : release-only
368
482
rm -rf dist out
369
483
$(PYTHON ) configure --prefix=/ --without-snapshot --download=all \
@@ -378,11 +492,6 @@ $(PKGSRC): release-only
378
492
379
493
pkgsrc : $(PKGSRC )
380
494
381
- dist-upload : $(TARBALL ) $(PKG )
382
- ssh node@nodejs.org mkdir -p web/nodejs.org/dist/$(VERSION )
383
- scp $(TARBALL ) node@nodejs.org:~ /web/nodejs.org/dist/$(VERSION ) /$(TARBALL )
384
- scp $(PKG ) node@nodejs.org:~ /web/nodejs.org/dist/$(VERSION ) /$(TARNAME ) .pkg
385
-
386
495
wrkclean :
387
496
$(MAKE ) -C tools/wrk/ clean
388
497
rm tools/wrk/wrk
0 commit comments