build: update build targets for io.js
authorRod Vagg <rod@vagg.org>
Wed, 10 Jun 2015 07:05:26 +0000 (17:05 +1000)
committerRod Vagg <rod@vagg.org>
Thu, 25 Jun 2015 05:22:27 +0000 (15:22 +1000)
PR-URL: https://github.com/nodejs/io.js/pull/1938
Reviewed-By: Johan Bergström <bugs@bergstroem.nu>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Alexis Campailla <alexis@janeasystems.com>
12 files changed:
Makefile
configure
node.gyp
src/node_version.h
tools/msvs/msi/nodemsi.wixproj
tools/msvs/msi/product.wxs
tools/osx-codesign.sh
tools/osx-pkg.pmdoc/01local.xml
tools/osx-pkg.pmdoc/02npm.xml
tools/osx-pkg.pmdoc/index.xml.tmpl
tools/osx-productsign.sh
vcbuild.bat

index 51a9506..103bdec 100644 (file)
--- 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:
index f101ef8..d198d79 100755 (executable)
--- 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
 
index 2b530f1..dfa08ce 100644 (file)
--- a/node.gyp
+++ b/node.gyp
       '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!': [
index 5601174..196d49b 100644 (file)
 #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
 
index 4ca4d55..03192bb 100644 (file)
@@ -6,7 +6,7 @@
     <ProductVersion>3.5</ProductVersion>
     <ProjectGuid>{1d808ff0-b5a9-4be9-859d-b334b6f48be2}</ProjectGuid>
     <SchemaVersion>2.0</SchemaVersion>
-    <OutputName>iojs-v$(NodeVersion)-$(Platform)</OutputName>
+    <OutputName>iojs-v$(FullVersion)-$(Platform)</OutputName>
     <OutputType>Package</OutputType>
     <EnableProjectHarvesting>True</EnableProjectHarvesting>
     <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
     <NodeVersion Condition=" '$(NodeVersion)' == '' ">0.0.0.0</NodeVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
-    <OutputPath>..\..\..\$(Configuration)\</OutputPath>
+    <OutputPath>..\..\..\</OutputPath>
     <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
-    <DefineConstants>Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder</DefineConstants>
+    <DefineConstants>Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder</DefineConstants>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
-    <OutputPath>..\..\..\$(Configuration)\</OutputPath>
+    <OutputPath>..\..\..\</OutputPath>
     <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
-    <DefineConstants>Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder</DefineConstants>
+    <DefineConstants>Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder</DefineConstants>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
-    <OutputPath>..\..\..\$(Configuration)\</OutputPath>
+    <OutputPath>..\..\..\</OutputPath>
     <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
-    <DefineConstants>Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder</DefineConstants>
+    <DefineConstants>Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder</DefineConstants>
     <Cultures>en-US</Cultures>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>..\..\..\$(Configuration)\</OutputPath>
+    <OutputPath>..\..\..\</OutputPath>
     <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
-    <DefineConstants>Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder</DefineConstants>
+    <DefineConstants>Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder</DefineConstants>
   </PropertyGroup>
   <PropertyGroup>
     <EnableProjectHarvesting>True</EnableProjectHarvesting>
index 6ba74cb..c90f77c 100755 (executable)
@@ -85,7 +85,7 @@
     <Feature Level="1"
              Id="DocumentationShortcuts"
              Title="Online documentation shortcuts"
-             Description="Add start menu entries that link the the online documentation for io.js $(var.ProductVersion) and the io.js website.">
+             Description="Add start menu entries that link the the online documentation for io.js v$(var.FullVersion) and the io.js website.">
       <ComponentRef Id="DocumentationShortcuts"/>
     </Feature>
 
                                Type="url"/>
         <util:InternetShortcut Id="DocsShortcut"
                                Name="io.js documentation"
-                               Target="https://iojs.org/dist/v$(var.ProductVersion)/doc/api/"
+                               Target="https://iojs.org/download/$(var.DistTypeDir)/v$(var.FullVersion)/doc/api/"
                                Type="url"/>
       </Component>
     </DirectoryRef>
index 65a8d48..5c2d1af 100644 (file)
@@ -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
index 1d99404..4b09310 100644 (file)
@@ -1 +1,25 @@
-<pkgref spec="1.12" uuid="053587FE-BDF3-4EF5-815D-281427431048"><config><identifier>org.iojs.pkg</identifier><version>1.0</version><description></description><post-install type="none"/><requireAuthorization/><installFrom relative="true" mod="true">../out/dist-osx/usr/local/</installFrom><installTo mod="true" relocatable="true">/usr/local</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>installTo.isRelativeType</mod><mod>installTo</mod><mod>locationType</mod><mod>relocatable</mod><mod>installFrom.path</mod><mod>installTo.isAbsoluteType</mod><mod>identifier</mod><mod>parent</mod><mod>installTo.path</mod><mod>installFrom.isRelativeType</mod></config></pkgref>
+<pkgref spec="1.12" uuid="053587FE-BDF3-4EF5-815D-281427431048">
+  <config>
+    <identifier>org.iojs.iojs.pkg</identifier>
+    <version>1.0</version>
+    <description></description>
+    <post-install type="none"/>
+    <requireAuthorization/>
+    <installFrom relative="true" mod="true">../out/dist-osx/usr/local/</installFrom>
+    <installTo mod="true" relocatable="true">/usr/local</installTo>
+    <flags>
+      <followSymbolicLinks/>
+    </flags>
+    <packageStore type="internal"></packageStore>
+    <mod>installTo.isRelativeType</mod>
+    <mod>installTo</mod>
+    <mod>locationType</mod>
+    <mod>relocatable</mod>
+    <mod>installFrom.path</mod>
+    <mod>installTo.isAbsoluteType</mod>
+    <mod>identifier</mod>
+    <mod>parent</mod>
+    <mod>installTo.path</mod>
+    <mod>installFrom.isRelativeType</mod>
+  </config>
+</pkgref>
index 06360b5..b9c82e9 100644 (file)
@@ -1 +1,24 @@
-<pkgref spec="1.12" uuid="DF0233A3-6B5D-4FBF-8048-8FC57F42278F"><config><identifier>org.iojs.npm.pkg</identifier><version>1.0</version><description></description><post-install type="none"/><requireAuthorization/><installFrom relative="true">../deps/npm</installFrom><installTo mod="true">/usr/local/lib/node_modules/npm</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>installTo.path</mod><mod>installFrom.isRelativeType</mod><mod>installTo</mod><mod>scripts.postinstall.isRelativeType</mod><mod>parent</mod><mod>installTo.isAbsoluteType</mod></config><scripts><postinstall relative="true" mod="true">osx-pkg-postinstall.sh</postinstall></scripts></pkgref>
+<pkgref spec="1.12" uuid="DF0233A3-6B5D-4FBF-8048-8FC57F42278F">
+  <config>
+    <identifier>org.iojs.npm.pkg</identifier>
+    <version>1.0</version>
+    <description></description>
+    <post-install type="none"/>
+    <requireAuthorization/>
+    <installFrom relative="true">../deps/npm</installFrom>
+    <installTo mod="true">/usr/local/lib/node_modules/npm</installTo>
+    <flags>
+      <followSymbolicLinks/>
+    </flags>
+    <packageStore type="internal"></packageStore>
+    <mod>installTo.path</mod>
+    <mod>installFrom.isRelativeType</mod>
+    <mod>installTo</mod>
+    <mod>scripts.postinstall.isRelativeType</mod>
+    <mod>parent</mod>
+    <mod>installTo.isAbsoluteType</mod>
+  </config>
+  <scripts>
+    <postinstall relative="true" mod="true">osx-pkg-postinstall.sh</postinstall>
+  </scripts>
+</pkgref>
index 7376a9d..1be73d2 100644 (file)
@@ -1,9 +1,35 @@
-<pkmkdoc spec="1.12"><properties><title>io.js</title><build>/Users/iojs/Desktop/iojs.pkg</build><organization>org.iojs</organization><userSees ui="both"/><min-target os="3"/><domain system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><contents><choice title="io.js" id="choice3" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="org.iojs.pkg"/></choice><choice title="npm" id="choice4" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="org.iojs.npm.pkg"/></choice></contents><resources bg-scale="none" bg-align="topleft"><locale lang="en"><resource relative="true" mod="true" type="background">../doc/osx_installer_logo.png</resource><resource relative="true" mod="true" type="license">../LICENSE</resource><resource mime-type="text/rtf" kind="embedded" type="welcome"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+<pkmkdoc spec="1.12">
+  <properties>
+    <title>io.js</title>
+    <build>/Users/iojs/Desktop/iojs.pkg</build>
+    <organization>org.iojs</organization>
+    <userSees ui="both"/>
+    <min-target os="3"/>
+    <domain system="true"/>
+  </properties>
+  <distribution>
+    <versions min-spec="1.000000"/>
+    <scripts></scripts>
+  </distribution>
+  <contents>
+    <choice title="io.js" id="choice1" starts_selected="true" starts_enabled="true" starts_hidden="false">
+      <pkgref id="org.iojs.iojs.pkg"/>
+    </choice>
+    <choice title="npm" id="choice2" starts_selected="true" starts_enabled="true" starts_hidden="false">
+      <pkgref id="org.iojs.npm.pkg"/>
+    </choice>
+  </contents>
+  <resources bg-scale="none" bg-align="topleft">
+    <locale lang="en">
+      <resource relative="true" mod="true" type="background">../doc/osx_installer_logo.png</resource>
+      <resource relative="true" mod="true" type="license">../LICENSE</resource>
+      <resource mime-type="text/rtf" kind="embedded" type="welcome"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
 {\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
 {\colortbl;\red255\green255\blue255;}
 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
 
-\f0\fs26 \cf0 This package will install io.js __iojsversion__ and npm __npmversion__ into /usr/local/. The binary /usr/local/bin/iojs will also be symlinked as /usr/local/bin/node.}]]></resource><resource mime-type="text/rtf" kind="embedded" type="conclusion"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
+\f0\fs26 \cf0 This package will install io.js {iojsversion} and npm {npmversion} into /usr/local/. The binary /usr/local/bin/iojs will also be symlinked as /usr/local/bin/node.}]]></resource>
+      <resource mime-type="text/rtf" kind="embedded" type="conclusion"><![CDATA[{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
 {\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
 {\colortbl;\red255\green255\blue255;}
 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
@@ -18,4 +44,14 @@ npm was installed at\
 \
    /usr/local/bin/npm\
 \
-Make sure that /usr/local/bin is in your $PATH.}]]></resource></locale></resources><flags/><item type="file">01local.xml</item><item type="file">02npm.xml</item><mod>properties.title</mod><mod>properties.userDomain</mod><mod>properties.anywhereDomain</mod><mod>properties.systemDomain</mod></pkmkdoc>
+Make sure that /usr/local/bin is in your $PATH.}]]></resource>
+    </locale>
+  </resources>
+  <flags/>
+  <item type="file">01local.xml</item>
+  <item type="file">02npm.xml</item>
+  <mod>properties.title</mod>
+  <mod>properties.userDomain</mod>
+  <mod>properties.anywhereDomain</mod>
+  <mod>properties.systemDomain</mod>
+</pkmkdoc>
index 4834c9b..491e3fd 100644 (file)
@@ -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
index 9c6af48..7fab85c 100644 (file)
@@ -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