@@ -6,7 +6,11 @@ NINJA ?= ninja
66DESTDIR ?=
77SIGN ?=
88FLAKY_TESTS ?= run
9+ STAGINGSERVER ?= node-www
910
11+ OSTYPE := $(shell uname -s | tr '[A-Z]' '[a-z]')
12+
13+ # Flags for packaging.
1014NODE ?= ./node
1115
1216# Default to verbose builds.
@@ -206,9 +210,45 @@ run-ci:
206210
207211RAWVER =$(shell $(PYTHON ) tools/getnodeversion.py)
208212VERSION =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)
209249NODE_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+
212252ifeq ($(findstring x86_64,$(shell uname -m) ) ,x86_64)
213253DESTCPU ?= x64
214254else
@@ -223,59 +263,62 @@ else
223263ARCH =x86
224264endif
225265endif
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
236266
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
240273endif
241274
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
244281PKGDIR =out/dist-osx
245282
246283release-only :
247284 @if [ " $( shell git status --porcelain | egrep -v ' ^\?\? ' ) " = " " ]; then \
248285 exit 0 ; \
249286 else \
250- echo " " >&2 ; \
287+ echo " " >&2 ; \
251288 echo " The git repository is not clean." >&2 ; \
252289 echo " Please commit changes before building release tarball." >&2 ; \
253290 echo " " >&2 ; \
254291 git status --porcelain | egrep -v ' ^\?\?' >&2 ; \
255292 echo " " >&2 ; \
256293 exit 1 ; \
257294 fi
258- @if [ " $( NIGHTLY ) " != " " -o " $( RELEASE) " = " 1" ]; then \
295+ @if [ " $( DISTTYPE ) " != " release " -o " $( RELEASE) " = " 1" ]; then \
259296 exit 0; \
260297 else \
261- echo " " >&2 ; \
298+ echo " " >&2 ; \
262299 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 ; \
265302 exit 1 ; \
266303 fi
267304
268- pkg : $(PKG )
269-
270305$(PKG ) : release-only
271306 rm -rf $(PKGDIR )
272307 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 )
274313 $(MAKE ) install V=$(V ) DESTDIR=$(PKGDIR ) /32
275314 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 )
277320 $(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
279322 lipo $(PKGDIR ) /32/usr/local/bin/node \
280323 $(PKGDIR ) /usr/local/bin/node \
281324 -output $(PKGDIR ) /usr/local/bin/node-universal \
@@ -286,7 +329,15 @@ $(PKG): release-only
286329 --id " org.nodejs.Node" \
287330 --doc tools/osx-pkg.pmdoc \
288331 --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"
290341
291342$(TARBALL ) : release-only node doc
292343 git archive --format=tar --prefix=$(TARNAME ) / HEAD | tar xf -
@@ -302,6 +353,39 @@ $(TARBALL): release-only node doc
302353
303354tar : $(TARBALL )
304355
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+
305389$(BINARYTAR ) : release-only
306390 rm -rf $(BINARYNAME )
307391 rm -rf out/deps out/Release
@@ -316,6 +400,35 @@ $(BINARYTAR): release-only
316400
317401binary : $(BINARYTAR )
318402
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+
319432$(PKGSRC ) : release-only
320433 rm -rf dist out
321434 $(PYTHON ) configure --prefix=/ --without-snapshot \
@@ -329,11 +442,6 @@ $(PKGSRC): release-only
329442
330443pkgsrc : $(PKGSRC )
331444
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-
337445wrkclean :
338446 $(MAKE ) -C tools/wrk/ clean
339447 rm tools/wrk/wrk
0 commit comments