diff --git a/Makefile b/Makefile index b92c784417e..578ae0b7322 100644 --- a/Makefile +++ b/Makefile @@ -156,7 +156,7 @@ test-timers-clean: apidoc_sources = $(wildcard doc/api/*.markdown) apidocs = $(addprefix out/,$(apidoc_sources:.markdown=.html)) \ - $(addprefix out/,$(apidoc_sources:.markdown=.json)) + $(addprefix out/,$(apidoc_sources:.markdown=.json)) apidoc_dirs = out/doc out/doc/api/ out/doc/api/assets @@ -269,7 +269,7 @@ release-only: @if [ "$(shell git status --porcelain | egrep -v '^\?\? ')" = "" ]; then \ exit 0 ; \ else \ - echo "" >&2 ; \ + echo "" >&2 ; \ echo "The git repository is not clean." >&2 ; \ echo "Please commit changes before building release tarball." >&2 ; \ echo "" >&2 ; \ @@ -280,17 +280,21 @@ release-only: @if [ "$(DISTTYPE)" != "release" -o "$(RELEASE)" = "1" ]; then \ exit 0; \ else \ - echo "" >&2 ; \ + echo "" >&2 ; \ echo "#NODE_VERSION_IS_RELEASE is set to $(RELEASE)." >&2 ; \ - echo "Did you remember to update src/node_version.h?" >&2 ; \ - echo "" >&2 ; \ + echo "Did you remember to update src/node_version.h?" >&2 ; \ + echo "" >&2 ; \ exit 1 ; \ fi $(PKG): release-only rm -rf $(PKGDIR) rm -rf out/deps out/Release - $(PYTHON) ./configure --dest-cpu=x64 --tag=$(TAG) + $(PYTHON) ./configure \ + --dest-cpu=x64 \ + --tag=$(TAG) \ + --release-urlbase=$(RELEASE_URLBASE) \ + $(CONFIG_FLAGS) $(MAKE) install V=$(V) DESTDIR=$(PKGDIR) SIGN="$(CODESIGN_CERT)" PKGDIR="$(PKGDIR)" bash tools/osx-codesign.sh cat tools/osx-pkg.pmdoc/index.xml.tmpl \ @@ -346,7 +350,12 @@ doc-upload: tar ssh $(STAGINGSERVER) "touch staging/$(DISTTYPEDIR)/$(FULLVERSION)/doc.done" $(TARBALL)-headers: config.gypi release-only - $(PYTHON) ./configure --prefix=/ --dest-cpu=$(DESTCPU) --tag=$(TAG) $(CONFIG_FLAGS) + $(PYTHON) ./configure \ + --prefix=/ \ + --dest-cpu=$(DESTCPU) \ + --tag=$(TAG) \ + --release-urlbase=$(RELEASE_URLBASE) \ + $(CONFIG_FLAGS) HEADERS_ONLY=1 $(PYTHON) tools/install.py install '$(TARNAME)' '/' find $(TARNAME)/ -type l | xargs rm # annoying on windows tar -cf $(TARNAME)-headers.tar $(TARNAME) @@ -371,7 +380,12 @@ endif $(BINARYTAR): release-only rm -rf $(BINARYNAME) rm -rf out/deps out/Release - $(PYTHON) ./configure --prefix=/ --dest-cpu=$(DESTCPU) --tag=$(TAG) $(CONFIG_FLAGS) + $(PYTHON) ./configure \ + --prefix=/ \ + --dest-cpu=$(DESTCPU) \ + --tag=$(TAG) \ + --release-urlbase=$(RELEASE_URLBASE) \ + $(CONFIG_FLAGS) $(MAKE) install DESTDIR=$(BINARYNAME) V=$(V) PORTABLE=1 cp README.md $(BINARYNAME) cp LICENSE $(BINARYNAME) @@ -438,7 +452,7 @@ bench-all: bench bench-misc bench-array bench-buffer bench-url bench-events bench: bench-net bench-http bench-fs bench-tls bench-http-simple: - benchmark/http_simple_bench.sh + benchmark/http_simple_bench.sh bench-idle: $(NODE) benchmark/idle_server.js & diff --git a/configure b/configure index d198d79fd2d..63d4c25810f 100755 --- a/configure +++ b/configure @@ -191,6 +191,13 @@ parser.add_option('--tag', dest='tag', help='custom build tag') +parser.add_option('--release-urlbase', + action='store', + dest='release_urlbase', + help='Provide a custom URL prefix for the `process.release` properties ' + '`sourceUrl` and `headersUrl`. When compiling a release build, this ' + 'will default to https://iojs.org/download/release/') + parser.add_option('--v8-options', action='store', dest='v8_options', @@ -675,6 +682,8 @@ def configure_node(o): else: o['variables']['node_tag'] = '' + o['variables']['node_release_urlbase'] = options.release_urlbase or '' + if options.v8_options: o['variables']['node_v8_options'] = options.v8_options.replace('"', '\\"') diff --git a/doc/api/process.markdown b/doc/api/process.markdown index 71c7d3cfcc7..8e016d75b97 100644 --- a/doc/api/process.markdown +++ b/doc/api/process.markdown @@ -672,6 +672,36 @@ An example of the possible output looks like: target_arch: 'x64', v8_use_snapshot: 'true' } } +## process.release + +An Object containing metadata related to the current release, including URLs +for the source tarball and headers-only tarball. + +`process.release` contains the following properties: + +* `name`: a string with a value that will always be `"io.js"` for io.js. +* `sourceUrl`: a complete URL pointing to a _.tar.gz_ file containing the + source of the current release. +* `headersUrl`: a complete URL pointing to a _.tar.gz_ file containing only + the header files for the current release. This file is significantly smaller + than the full source file and can be used for compiling add-ons against + io.js. +* `libUrl`: a complete URL pointing to an _iojs.lib_ file matching the + architecture and version of the current release. This file is used for + compiling add-ons against io.js. _This property is only present on Windows + builds of io.js and will be missing on all other platforms._ + +e.g. + + { name: 'io.js', + sourceUrl: 'https://iojs.org/download/release/v2.3.5/iojs-v2.3.5.tar.gz', + headersUrl: 'https://iojs.org/download/release/v2.3.5/iojs-v2.3.5-headers.tar.gz', + libUrl: 'https://iojs.org/download/release/v2.3.5/win-x64/iojs.lib' } + +In custom builds from non-release versions of the source tree, only the +`name` property may be present. The additional properties should not be +relied upon to exist. + ## process.kill(pid[, signal]) Send a signal to a process. `pid` is the process id and `signal` is the diff --git a/node.gyp b/node.gyp index 21d2802a206..7b2d0a54f7c 100644 --- a/node.gyp +++ b/node.gyp @@ -194,6 +194,11 @@ 'src/node_main.cc', ], }], + [ 'node_release_urlbase!=""', { + 'defines': [ + 'NODE_RELEASE_URLBASE="<(node_release_urlbase)"', + ] + }], [ 'v8_enable_i18n_support==1', { 'defines': [ 'NODE_HAVE_I18N_SUPPORT=1' ], 'dependencies': [ diff --git a/src/node.cc b/src/node.cc index 7283c6bb860..8d1cfd38cf1 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2760,6 +2760,39 @@ void SetupProcessObject(Environment* env, "platform", OneByteString(env->isolate(), NODE_PLATFORM)); + // process.release + Local release = Object::New(env->isolate()); + READONLY_PROPERTY(process, "release", release); + READONLY_PROPERTY(release, "name", OneByteString(env->isolate(), "io.js")); + +// if this is a release build and no explicit base has been set +// substitute the standard release download URL +#ifndef NODE_RELEASE_URLBASE +# if NODE_VERSION_IS_RELEASE +# define NODE_RELEASE_URLBASE "https://iojs.org/download/release/" +# endif +#endif + +#if defined(NODE_RELEASE_URLBASE) +# define _RELEASE_URLPFX NODE_RELEASE_URLBASE "v" NODE_VERSION_STRING "/" +# define _RELEASE_URLFPFX _RELEASE_URLPFX "iojs-v" NODE_VERSION_STRING + + READONLY_PROPERTY(release, + "sourceUrl", + OneByteString(env->isolate(), + _RELEASE_URLFPFX ".tar.gz")); + READONLY_PROPERTY(release, + "headersUrl", + OneByteString(env->isolate(), + _RELEASE_URLFPFX "-headers.tar.gz")); +# ifdef _WIN32 + READONLY_PROPERTY(release, + "libUrl", + OneByteString(env->isolate(), + _RELEASE_URLPFX "win-" NODE_ARCH "/iojs.lib")); +# endif +#endif + // process.argv Local arguments = Array::New(env->isolate(), argc); for (int i = 0; i < argc; ++i) { diff --git a/vcbuild.bat b/vcbuild.bat index e452849dfd9..44dfb634d78 100644 --- a/vcbuild.bat +++ b/vcbuild.bat @@ -35,6 +35,7 @@ set noperfctr_arg= set noperfctr_msi_arg= set i18n_arg= set download_arg= +set release_urls_arg= :next-arg if "%1"=="" goto args-done @@ -79,6 +80,7 @@ if "%config%"=="Debug" set debug_arg=--debug 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 +if defined RELEASE_URLBASE set release_urlbase_arg=--release-urlbase=%RELEASE_URLBASE% if "%i18n_arg%"=="full-icu" set i18n_arg=--with-intl=full-icu if "%i18n_arg%"=="small-icu" set i18n_arg=--with-intl=small-icu