src: introduce process.release object
authorRod Vagg <rod@vagg.org>
Sun, 18 Jan 2015 06:41:37 +0000 (17:41 +1100)
committerRod Vagg <rod@vagg.org>
Tue, 4 Aug 2015 18:56:16 +0000 (11:56 -0700)
PR-URL: https://github.com/nodejs/io.js/pull/2154
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Makefile
configure
doc/api/process.markdown
node.gyp
src/node.cc
vcbuild.bat

index b92c784..578ae0b 100644 (file)
--- 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 &
index d198d79..63d4c25 100755 (executable)
--- 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('"', '\\"')
 
index 71c7d3c..8e016d7 100644 (file)
@@ -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
index 21d2802..7b2d0a5 100644 (file)
--- a/node.gyp
+++ b/node.gyp
             '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': [
index 7283c6b..8d1cfd3 100644 (file)
@@ -2760,6 +2760,39 @@ void SetupProcessObject(Environment* env,
                     "platform",
                     OneByteString(env->isolate(), NODE_PLATFORM));
 
+  // process.release
+  Local<Object> 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<Array> arguments = Array::New(env->isolate(), argc);
   for (int i = 0; i < argc; ++i) {
index e452849..44dfb63 100644 (file)
@@ -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