diff --git a/Makefile b/Makefile
index 51a950668d314e..103bdec58c0e71 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,9 @@ PYTHON ?= python
DESTDIR ?=
SIGN ?=
PREFIX ?= /usr/local
+STAGINGSERVER ?= iojs-www
+
+OSTYPE := $(shell uname -s | tr '[A-Z]' '[a-z]')
# Determine EXEEXT
EXEEXT := $(shell $(PYTHON) -c \
@@ -56,7 +59,7 @@ uninstall:
$(PYTHON) tools/install.py $@ '$(DESTDIR)' '$(PREFIX)'
clean:
- -rm -rf out/Makefile $(NODE_EXE) $(NODE_G_EXE) out/$(BUILDTYPE)/$(NODE_EXE) blog.html email.md
+ -rm -rf out/Makefile $(NODE_EXE) $(NODE_G_EXE) out/$(BUILDTYPE)/$(NODE_EXE)
@if [ -d out ]; then find out/ -name '*.o' -o -name '*.a' | xargs rm -rf; fi
-rm -rf node_modules
@@ -64,7 +67,7 @@ distclean:
-rm -rf out
-rm -f config.gypi icu_config.gypi
-rm -f config.mk
- -rm -rf $(NODE_EXE) $(NODE_G_EXE) blog.html email.md
+ -rm -rf $(NODE_EXE) $(NODE_G_EXE)
-rm -rf node_modules
-rm -rf deps/icu
-rm -rf deps/icu4c*.tgz deps/icu4c*.zip deps/icu-tmp
@@ -184,14 +187,49 @@ docclean:
RAWVER=$(shell $(PYTHON) tools/getnodeversion.py)
VERSION=v$(RAWVER)
+
+# For nightly builds, you must set DISTTYPE to "nightly", "next-nightly" or
+# "custom". For the nightly and next-nightly case, you need to set DATESTRING
+# and COMMIT in order to properly name the build.
+# For the rc case you need to set CUSTOMTAG to an appropriate CUSTOMTAG number
+
+ifndef DISTTYPE
+DISTTYPE=release
+endif
+ifeq ($(DISTTYPE),release)
FULLVERSION=$(VERSION)
+else # ifeq ($(DISTTYPE),release)
+ifeq ($(DISTTYPE),custom)
+ifndef CUSTOMTAG
+$(error CUSTOMTAG is not set for DISTTYPE=custom)
+endif # ifndef CUSTOMTAG
+TAG=$(CUSTOMTAG)
+else # ifeq ($(DISTTYPE),custom)
+ifndef DATESTRING
+$(error DATESTRING is not set for nightly)
+endif # ifndef DATESTRING
+ifndef COMMIT
+$(error COMMIT is not set for nightly)
+endif # ifndef COMMIT
+ifneq ($(DISTTYPE),nightly)
+ifneq ($(DISTTYPE),next-nightly)
+$(error DISTTYPE is not release, custom, nightly or next-nightly)
+endif # ifneq ($(DISTTYPE),next-nightly)
+endif # ifneq ($(DISTTYPE),nightly)
+TAG=$(DISTTYPE)$(DATESTRING)$(COMMIT)
+endif # ifeq ($(DISTTYPE),custom)
+FULLVERSION=$(VERSION)-$(TAG)
+endif # ifeq ($(DISTTYPE),release)
+
+DISTTYPEDIR ?= $(DISTTYPE)
RELEASE=$(shell sed -ne 's/\#define NODE_VERSION_IS_RELEASE \([01]\)/\1/p' src/node_version.h)
PLATFORM=$(shell uname | tr '[:upper:]' '[:lower:]')
NPMVERSION=v$(shell cat deps/npm/package.json | grep '"version"' | sed 's/^[^:]*: "\([^"]*\)",.*/\1/')
+
ifeq ($(findstring x86_64,$(shell uname -m)),x86_64)
DESTCPU ?= x64
else
-DESTCPU ?= ia32
+DESTCPU ?= x86
endif
ifeq ($(DESTCPU),x64)
ARCH=x64
@@ -202,26 +240,24 @@ else
ARCH=x86
endif
endif
-ifdef NIGHTLY
-TAG = nightly-$(NIGHTLY)
-FULLVERSION=$(VERSION)-$(TAG)
+
+# enforce "x86" over "ia32" as the generally accepted way of referring to 32-bit intel
+ifeq ($(ARCH),ia32)
+override ARCH=x86
endif
+ifeq ($(DESTCPU),ia32)
+override DESTCPU=x86
+endif
+
TARNAME=iojs-$(FULLVERSION)
TARBALL=$(TARNAME).tar
BINARYNAME=$(TARNAME)-$(PLATFORM)-$(ARCH)
BINARYTAR=$(BINARYNAME).tar
+# OSX doesn't have xz installed by default, http://macpkg.sourceforge.net/
XZ=$(shell which xz > /dev/null 2>&1; echo $$?)
XZ_COMPRESSION ?= 9
-PKG=out/$(TARNAME).pkg
+PKG=$(TARNAME).pkg
PACKAGEMAKER ?= /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
-
-PKGSRC=iojs-$(DESTCPU)-$(RAWVER).tgz
-ifdef NIGHTLY
-PKGSRC=iojs-$(DESTCPU)-$(RAWVER)-$(TAG).tgz
-endif
-
-dist: doc $(TARBALL) $(PKG)
-
PKGDIR=out/dist-osx
release-only:
@@ -236,7 +272,7 @@ release-only:
echo "" >&2 ; \
exit 1 ; \
fi
- @if [ "$(NIGHTLY)" != "" -o "$(RELEASE)" = "1" ]; then \
+ @if [ "$(DISTTYPE)" != "release" -o "$(RELEASE)" = "1" ]; then \
exit 0; \
else \
echo "" >&2 ; \
@@ -246,29 +282,28 @@ release-only:
exit 1 ; \
fi
-pkg: $(PKG)
-
$(PKG): release-only
rm -rf $(PKGDIR)
rm -rf out/deps out/Release
- $(PYTHON) ./configure --dest-cpu=ia32 --tag=$(TAG)
- $(MAKE) install V=$(V) DESTDIR=$(PKGDIR)/32
- rm -rf out/deps out/Release
$(PYTHON) ./configure --dest-cpu=x64 --tag=$(TAG)
$(MAKE) install V=$(V) DESTDIR=$(PKGDIR)
- SIGN="$(APP_SIGN)" PKGDIR="$(PKGDIR)" bash tools/osx-codesign.sh
- lipo $(PKGDIR)/32/usr/local/bin/iojs \
- $(PKGDIR)/usr/local/bin/iojs \
- -output $(PKGDIR)/usr/local/bin/iojs-universal \
- -create
- mv $(PKGDIR)/usr/local/bin/iojs-universal $(PKGDIR)/usr/local/bin/iojs
- rm -rf $(PKGDIR)/32
- cat tools/osx-pkg.pmdoc/index.xml.tmpl | sed -e 's|__iojsversion__|'$(FULLVERSION)'|g' | sed -e 's|__npmversion__|'$(NPMVERSION)'|g' > tools/osx-pkg.pmdoc/index.xml
+ SIGN="$(CODESIGN_CERT)" PKGDIR="$(PKGDIR)" bash tools/osx-codesign.sh
+ cat tools/osx-pkg.pmdoc/index.xml.tmpl \
+ | sed -E "s/\\{iojsversion\\}/$(FULLVERSION)/g" \
+ | sed -E "s/\\{npmversion\\}/$(NPMVERSION)/g" \
+ > tools/osx-pkg.pmdoc/index.xml
$(PACKAGEMAKER) \
- --id "org.nodejs.Node" \
+ --id "org.iojs.pkg" \
--doc tools/osx-pkg.pmdoc \
--out $(PKG)
- SIGN="$(INT_SIGN)" PKG="$(PKG)" bash tools/osx-productsign.sh
+ SIGN="$(PRODUCTSIGN_CERT)" PKG="$(PKG)" bash tools/osx-productsign.sh
+
+pkg: $(PKG)
+
+pkg-upload: pkg
+ ssh $(STAGINGSERVER) "mkdir -p staging/$(DISTTYPEDIR)/$(FULLVERSION)"
+ scp -p iojs-$(FULLVERSION).pkg $(STAGINGSERVER):staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION).pkg
+ ssh $(STAGINGSERVER) "touch staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION).pkg.done"
$(TARBALL): release-only $(NODE_EXE) doc
git checkout-index -a -f --prefix=$(TARNAME)/
@@ -291,6 +326,20 @@ endif
tar: $(TARBALL)
+tar-upload: tar
+ ssh $(STAGINGSERVER) "mkdir -p staging/$(DISTTYPEDIR)/$(FULLVERSION)"
+ scp -p iojs-$(FULLVERSION).tar.gz $(STAGINGSERVER):staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION).tar.gz
+ ssh $(STAGINGSERVER) "touch staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION).tar.gz.done"
+ifeq ($(XZ), 0)
+ scp -p iojs-$(FULLVERSION).tar.xz $(STAGINGSERVER):staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION).tar.xz
+ ssh $(STAGINGSERVER) "touch staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION).tar.xz.done"
+endif
+
+doc-upload: tar
+ ssh $(STAGINGSERVER) "mkdir -p staging/$(DISTTYPEDIR)/$(FULLVERSION)"
+ scp -r out/doc/ $(STAGINGSERVER):staging/$(DISTTYPEDIR)/$(FULLVERSION)/
+ ssh $(STAGINGSERVER) "touch staging/$(DISTTYPEDIR)/$(FULLVERSION)/doc.done"
+
$(BINARYTAR): release-only
rm -rf $(BINARYNAME)
rm -rf out/deps out/Release
@@ -309,18 +358,14 @@ endif
binary: $(BINARYTAR)
-$(PKGSRC): release-only
- rm -rf dist out
- $(PYTHON) configure --prefix=/ \
- --dest-cpu=$(DESTCPU) --tag=$(TAG) $(CONFIG_FLAGS)
- $(MAKE) install DESTDIR=dist
- (cd dist; find * -type f | sort) > packlist
- pkg_info -X pkg_install | \
- egrep '^(MACHINE_ARCH|OPSYS|OS_VERSION|PKGTOOLS_VERSION)' > build-info
- pkg_create -B build-info -c tools/pkgsrc/comment -d tools/pkgsrc/description \
- -f packlist -I /opt/local -p dist -U $(PKGSRC)
-
-pkgsrc: $(PKGSRC)
+binary-upload: binary
+ ssh $(STAGINGSERVER) "mkdir -p staging/$(DISTTYPEDIR)/$(FULLVERSION)"
+ scp -p iojs-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.gz
+ ssh $(STAGINGSERVER) "touch staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.gz.done"
+ifeq ($(XZ), 0)
+ scp -p iojs-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.xz $(STAGINGSERVER):staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.xz
+ ssh $(STAGINGSERVER) "touch staging/$(DISTTYPEDIR)/$(FULLVERSION)/iojs-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.xz.done"
+endif
haswrk=$(shell which wrk > /dev/null 2>&1; echo $$?)
wrk:
diff --git a/configure b/configure
index f101ef829cf0ed..d198d79fd2dd89 100755
--- a/configure
+++ b/configure
@@ -26,7 +26,7 @@ import nodedownload
parser = optparse.OptionParser()
valid_os = ('win', 'mac', 'solaris', 'freebsd', 'openbsd', 'linux', 'android')
-valid_arch = ('arm', 'arm64', 'ia32', 'mips', 'mipsel', 'x32', 'x64')
+valid_arch = ('arm', 'arm64', 'ia32', 'mips', 'mipsel', 'x32', 'x64', 'x86')
valid_arm_float_abi = ('soft', 'softfp', 'hard')
valid_mips_arch = ('loongson', 'r1', 'r2', 'r6', 'rx')
valid_mips_fpu = ('fp32', 'fp64', 'fpxx')
@@ -607,6 +607,10 @@ def configure_node(o):
host_arch = host_arch_win() if os.name == 'nt' else host_arch_cc()
target_arch = options.dest_cpu or host_arch
+ # ia32 is preferred by the build tools (GYP) over x86 even if we prefer the latter
+ # the Makefile resets this to x86 afterward
+ if target_arch == 'x86':
+ target_arch = 'ia32'
o['variables']['host_arch'] = host_arch
o['variables']['target_arch'] = target_arch
diff --git a/node.gyp b/node.gyp
index 2b530f15f17ec2..dfa08ce6468f30 100644
--- a/node.gyp
+++ b/node.gyp
@@ -184,12 +184,15 @@
'defines': [
'NODE_ARCH="<(target_arch)"',
'NODE_PLATFORM="<(OS)"',
- 'NODE_TAG="<(node_tag)"',
'NODE_V8_OPTIONS="<(node_v8_options)"',
'NODE_WANT_INTERNALS=1',
],
+
'conditions': [
+ [ 'node_tag!=""', {
+ 'defines': [ 'NODE_TAG="<(node_tag)"' ],
+ }],
# No node_main.cc for anything except executable
[ 'node_target_type!="executable"', {
'sources!': [
diff --git a/src/node_version.h b/src/node_version.h
index 5601174a216fe1..196d49be176dd6 100644
--- a/src/node_version.h
+++ b/src/node_version.h
@@ -12,23 +12,18 @@
#define NODE_STRINGIFY_HELPER(n) #n
#endif
-#if NODE_VERSION_IS_RELEASE
-# ifndef NODE_TAG
+#ifndef NODE_TAG
+# if NODE_VERSION_IS_RELEASE
# define NODE_TAG ""
-# endif
-# define NODE_VERSION_STRING NODE_STRINGIFY(NODE_MAJOR_VERSION) "." \
- NODE_STRINGIFY(NODE_MINOR_VERSION) "." \
- NODE_STRINGIFY(NODE_PATCH_VERSION) \
- NODE_TAG
-#else
-# ifndef NODE_TAG
+# else
# define NODE_TAG "-pre"
# endif
+#endif
+
# define NODE_VERSION_STRING NODE_STRINGIFY(NODE_MAJOR_VERSION) "." \
NODE_STRINGIFY(NODE_MINOR_VERSION) "." \
NODE_STRINGIFY(NODE_PATCH_VERSION) \
NODE_TAG
-#endif
#define NODE_VERSION "v" NODE_VERSION_STRING
diff --git a/tools/msvs/msi/nodemsi.wixproj b/tools/msvs/msi/nodemsi.wixproj
index 4ca4d55682ea89..03192bb1bc8959 100644
--- a/tools/msvs/msi/nodemsi.wixproj
+++ b/tools/msvs/msi/nodemsi.wixproj
@@ -6,7 +6,7 @@
3.5
{1d808ff0-b5a9-4be9-859d-b334b6f48be2}
2.0
- iojs-v$(NodeVersion)-$(Platform)
+ iojs-v$(FullVersion)-$(Platform)
Package
True
$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets
@@ -14,25 +14,25 @@
0.0.0.0
- ..\..\..\$(Configuration)\
+ ..\..\..\
obj\$(Configuration)\
- Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder
+ Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder
- ..\..\..\$(Configuration)\
+ ..\..\..\
obj\$(Configuration)\
- Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder
+ Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder
- ..\..\..\$(Configuration)\
+ ..\..\..\
obj\$(Configuration)\
- Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder
+ Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder
en-US
- ..\..\..\$(Configuration)\
+ ..\..\..\
obj\$(Configuration)\
- Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder
+ Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder
True
diff --git a/tools/msvs/msi/product.wxs b/tools/msvs/msi/product.wxs
index 6ba74cb450e65e..c90f77ce548743 100755
--- a/tools/msvs/msi/product.wxs
+++ b/tools/msvs/msi/product.wxs
@@ -85,7 +85,7 @@
+ Description="Add start menu entries that link the the online documentation for io.js v$(var.FullVersion) and the io.js website.">
@@ -225,7 +225,7 @@
Type="url"/>
diff --git a/tools/osx-codesign.sh b/tools/osx-codesign.sh
index 65a8d48b8ab2a5..5c2d1aff34d8fd 100644
--- a/tools/osx-codesign.sh
+++ b/tools/osx-codesign.sh
@@ -3,10 +3,9 @@
set -x
set -e
-if ! [ -n "$SIGN" ] && [ $STEP -eq 1 ]; then
+if [ "X$SIGN" == "X" ]; then
echo "No SIGN environment var. Skipping codesign." >&2
exit 0
fi
codesign -s "$SIGN" "$PKGDIR"/usr/local/bin/node
-codesign -s "$SIGN" "$PKGDIR"/32/usr/local/bin/node
diff --git a/tools/osx-pkg.pmdoc/01local.xml b/tools/osx-pkg.pmdoc/01local.xml
index 1d99404e492982..4b093106591fe6 100644
--- a/tools/osx-pkg.pmdoc/01local.xml
+++ b/tools/osx-pkg.pmdoc/01local.xml
@@ -1 +1,25 @@
-org.iojs.pkg1.0../out/dist-osx/usr/local//usr/localinstallTo.isRelativeTypeinstallTolocationTyperelocatableinstallFrom.pathinstallTo.isAbsoluteTypeidentifierparentinstallTo.pathinstallFrom.isRelativeType
+
+
+ org.iojs.iojs.pkg
+ 1.0
+
+
+
+ ../out/dist-osx/usr/local/
+ /usr/local
+
+
+
+
+ installTo.isRelativeType
+ installTo
+ locationType
+ relocatable
+ installFrom.path
+ installTo.isAbsoluteType
+ identifier
+ parent
+ installTo.path
+ installFrom.isRelativeType
+
+
diff --git a/tools/osx-pkg.pmdoc/02npm.xml b/tools/osx-pkg.pmdoc/02npm.xml
index 06360b5df9550f..b9c82e9d955769 100644
--- a/tools/osx-pkg.pmdoc/02npm.xml
+++ b/tools/osx-pkg.pmdoc/02npm.xml
@@ -1 +1,24 @@
-org.iojs.npm.pkg1.0../deps/npm/usr/local/lib/node_modules/npminstallTo.pathinstallFrom.isRelativeTypeinstallToscripts.postinstall.isRelativeTypeparentinstallTo.isAbsoluteTypeosx-pkg-postinstall.sh
+
+
+ org.iojs.npm.pkg
+ 1.0
+
+
+
+ ../deps/npm
+ /usr/local/lib/node_modules/npm
+
+
+
+
+ installTo.path
+ installFrom.isRelativeType
+ installTo
+ scripts.postinstall.isRelativeType
+ parent
+ installTo.isAbsoluteType
+
+
+ osx-pkg-postinstall.sh
+
+
diff --git a/tools/osx-pkg.pmdoc/index.xml.tmpl b/tools/osx-pkg.pmdoc/index.xml.tmpl
index 7376a9d376d5a4..1be73d27bc8069 100644
--- a/tools/osx-pkg.pmdoc/index.xml.tmpl
+++ b/tools/osx-pkg.pmdoc/index.xml.tmpl
@@ -1,9 +1,35 @@
-io.js/Users/iojs/Desktop/iojs.pkgorg.iojs../doc/osx_installer_logo.png../LICENSE
+
+ io.js
+ /Users/iojs/Desktop/iojs.pkg
+ org.iojs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ../doc/osx_installer_logo.png
+ ../LICENSE
+
+ - 01local.xml
- 02npm.xml
properties.titleproperties.userDomainproperties.anywhereDomainproperties.systemDomain
+Make sure that /usr/local/bin is in your $PATH.}]]>
+
+
+
+ - 01local.xml
+ - 02npm.xml
+ properties.title
+ properties.userDomain
+ properties.anywhereDomain
+ properties.systemDomain
+
diff --git a/tools/osx-productsign.sh b/tools/osx-productsign.sh
index 4834c9bbb8769c..491e3fde62f0b4 100644
--- a/tools/osx-productsign.sh
+++ b/tools/osx-productsign.sh
@@ -3,7 +3,7 @@
set -x
set -e
-if ! [ -n "$SIGN" ]; then
+if [ "X$SIGN" == "X" ]; then
echo "No SIGN environment var. Skipping codesign." >&2
exit 0
fi
diff --git a/vcbuild.bat b/vcbuild.bat
index 9c6af480edc6ec..7fab85c85a583f 100644
--- a/vcbuild.bat
+++ b/vcbuild.bat
@@ -13,9 +13,8 @@ if /i "%1"=="/?" goto help
@rem Process arguments.
set config=Release
-set msiplatform=x86
set target=Build
-set target_arch=ia32
+set target_arch=x86
set debug_arg=
set snapshot_arg=
set noprojgen=
@@ -24,6 +23,7 @@ set nosign=
set nosnapshot=
set test_args=
set msi=
+set upload=
set licensertf=
set jslint=
set buildnodeweak=
@@ -41,8 +41,8 @@ if "%1"=="" goto args-done
if /i "%1"=="debug" set config=Debug&goto arg-ok
if /i "%1"=="release" set config=Release&goto arg-ok
if /i "%1"=="clean" set target=Clean&goto arg-ok
-if /i "%1"=="ia32" set target_arch=ia32&goto arg-ok
-if /i "%1"=="x86" set target_arch=ia32&goto arg-ok
+if /i "%1"=="ia32" set target_arch=x86&goto arg-ok
+if /i "%1"=="x86" set target_arch=x86&goto arg-ok
if /i "%1"=="x64" set target_arch=x64&goto arg-ok
if /i "%1"=="noprojgen" set noprojgen=1&goto arg-ok
if /i "%1"=="nobuild" set nobuild=1&goto arg-ok
@@ -61,6 +61,7 @@ if /i "%1"=="test-pummel" set test_args=%test_args% pummel&goto arg-ok
if /i "%1"=="test-all" set test_args=%test_args% sequential parallel message gc internet pummel&set buildnodeweak=1&set jslint=1&goto arg-ok
if /i "%1"=="jslint" set jslint=1&goto arg-ok
if /i "%1"=="msi" set msi=1&set licensertf=1&goto arg-ok
+if /i "%1"=="upload" set upload=1&goto arg-ok
if /i "%1"=="small-icu" set i18n_arg=%1&goto arg-ok
if /i "%1"=="full-icu" set i18n_arg=%1&goto arg-ok
if /i "%1"=="intl-none" set i18n_arg=%1&goto arg-ok
@@ -75,7 +76,6 @@ goto next-arg
:args-done
if "%config%"=="Debug" set debug_arg=--debug
-if "%target_arch%"=="x64" set msiplatform=x64
if defined nosnapshot set snapshot_arg=--without-snapshot
if defined noetw set noetw_arg=--without-etw& set noetw_msi_arg=/p:NoETW=1
if defined noperfctr set noperfctr_arg=--without-perfctr& set noperfctr_msi_arg=/p:NoPerfCtr=1
@@ -84,9 +84,21 @@ if "%i18n_arg%"=="full-icu" set i18n_arg=--with-intl=full-icu
if "%i18n_arg%"=="small-icu" set i18n_arg=--with-intl=small-icu
if "%i18n_arg%"=="intl-none" set i18n_arg=--with-intl=none
-if defined NIGHTLY set TAG=nightly-%NIGHTLY%
+call :getnodeversion || exit /b 1
@rem Set environment for msbuild
+:project-gen
+@rem Skip project generation if requested.
+if defined noprojgen goto msbuild
+
+@rem Generate the VS project.
+SETLOCAL
+ if defined VS100COMNTOOLS call "%VS100COMNTOOLS%\VCVarsQueryRegistry.bat"
+ python configure %download_arg% %i18n_arg% %debug_arg% %snapshot_arg% %noetw_arg% %noperfctr_arg% --dest-cpu=%target_arch% --tag=%TAG%
+ if errorlevel 1 goto create-msvs-files-failed
+ if not exist node.sln goto create-msvs-files-failed
+ echo Project files generated.
+ENDLOCAL
@rem Look for Visual Studio 2015
if not defined VS140COMNTOOLS goto vc-set-2013
@@ -152,20 +164,31 @@ if errorlevel 1 echo Failed to generate license.rtf&goto exit
:msi
@rem Skip msi generation if not requested
if not defined msi goto run
-call :getnodeversion
-
-if not defined NIGHTLY goto msibuild
-set NODE_VERSION=%NODE_VERSION%.%NIGHTLY%
:msibuild
-echo Building iojs-%NODE_VERSION%
-msbuild "%~dp0tools\msvs\msi\nodemsi.sln" /m /t:Clean,Build /p:Configuration=%config% /p:Platform=%msiplatform% /p:NodeVersion=%NODE_VERSION% %noetw_msi_arg% %noperfctr_msi_arg% /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo
+echo Building iojs-v%FULLVERSION%-%target_arch%.msi
+msbuild "%~dp0tools\msvs\msi\nodemsi.sln" /m /t:Clean,Build /p:Configuration=%config% /p:Platform=%target_arch% /p:NodeVersion=%NODE_VERSION% /p:FullVersion=%FULLVERSION% /p:DistTypeDir=%DISTTYPEDIR% %noetw_msi_arg% %noperfctr_msi_arg% /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo
if errorlevel 1 goto exit
-if defined nosign goto run
-signtool sign /a /d "io.js" /t http://timestamp.globalsign.com/scripts/timestamp.dll Release\iojs-v%NODE_VERSION%-%msiplatform%.msi
+if defined nosign goto upload
+signtool sign /a /d "io.js" /t http://timestamp.globalsign.com/scripts/timestamp.dll iojs-v%FULLVERSION%-%target_arch%.msi
if errorlevel 1 echo Failed to sign msi&goto exit
+:upload
+@rem Skip upload if not requested
+if not defined upload goto run
+
+if not defined SSHCONFIG (
+ echo SSHCONFIG is not set for upload
+ exit /b 1
+)
+if not defined STAGINGSERVER set STAGINGSERVER=iojs-www
+ssh -F %SSHCONFIG% %STAGINGSERVER% "mkdir -p staging/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%"
+scp -F %SSHCONFIG% Release\iojs.exe %STAGINGSERVER%:staging/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%/iojs.exe
+scp -F %SSHCONFIG% Release\iojs.lib %STAGINGSERVER%:staging/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%/iojs.lib
+scp -F %SSHCONFIG% iojs-v%FULLVERSION%-%target_arch%.msi %STAGINGSERVER%:staging/%DISTTYPEDIR%/v%FULLVERSION%/
+ssh -F %SSHCONFIG% %STAGINGSERVER% "touch staging/%DISTTYPEDIR%/v%FULLVERSION%/iojs-v%FULLVERSION%-%target_arch%.msi.done staging/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%.done"
+
:run
@rem Run tests if requested.
@@ -218,6 +241,46 @@ rem ***************
:getnodeversion
set NODE_VERSION=
+set TAG=
+set FULLVERSION=
+
for /F "usebackq tokens=*" %%i in (`python "%~dp0tools\getnodeversion.py"`) do set NODE_VERSION=%%i
-if not defined NODE_VERSION echo Cannot determine current version of io.js & exit /b 1
+if not defined NODE_VERSION (
+ echo Cannot determine current version of io.js
+ exit /b 1
+)
+
+if not defined DISTTYPE set DISTTYPE=release
+if "%DISTTYPE%"=="release" (
+ set FULLVERSION=%NODE_VERSION%
+ goto exit
+)
+if "%DISTTYPE%"=="custom" (
+ if not defined CUSTOMTAG (
+ echo "CUSTOMTAG is not set for DISTTYPE=custom"
+ exit /b 1
+ )
+ set TAG=%CUSTOMTAG%
+)
+if not "%DISTTYPE%"=="custom" (
+ if not defined DATESTRING (
+ echo "DATESTRING is not set for nightly"
+ exit /b 1
+ )
+ if not defined COMMIT (
+ echo "COMMIT is not set for nightly"
+ exit /b 1
+ )
+ if not "%DISTTYPE%"=="nightly" (
+ if not "%DISTTYPE%"=="next-nightly" (
+ echo "DISTTYPE is not release, custom, nightly or next-nightly"
+ exit /b 1
+ )
+ )
+ set TAG=%DISTTYPE%%DATESTRING%%COMMIT%
+)
+set FULLVERSION=%NODE_VERSION%-%TAG%
+
+:exit
+if not defined DISTTYPEDIR set DISTTYPEDIR=%DISTTYPE%
goto :EOF