summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure.py6
-rw-r--r--doc/api/process.md1
-rw-r--r--src/js_native_api.h7
-rw-r--r--src/node_version.h3
-rw-r--r--test/parallel/test-process-versions.js3
-rw-r--r--tools/getnapibuildversion.py26
6 files changed, 44 insertions, 2 deletions
diff --git a/configure.py b/configure.py
index 6ecc33174b..4985200b28 100755
--- a/configure.py
+++ b/configure.py
@@ -34,6 +34,7 @@ import nodedownload
# imports in tools/
sys.path.insert(0, 'tools')
import getmoduleversion
+import getnapibuildversion
from gyp_node import run_gyp
# imports in deps/v8/tools/node
@@ -1147,6 +1148,10 @@ def configure_node(o):
else:
o['variables']['node_target_type'] = 'executable'
+def configure_napi(output):
+ version = getnapibuildversion.get_napi_version()
+ output['variables']['napi_build_version'] = version
+
def configure_library(lib, output):
shared_lib = 'shared_' + lib
output['variables']['node_' + shared_lib] = b(getattr(options, shared_lib))
@@ -1626,6 +1631,7 @@ if (options.dest_os):
flavor = GetFlavor(flavor_params)
configure_node(output)
+configure_napi(output)
configure_library('zlib', output)
configure_library('http_parser', output)
configure_library('libuv', output)
diff --git a/doc/api/process.md b/doc/api/process.md
index 8b7f0a67e0..e274d96f78 100644
--- a/doc/api/process.md
+++ b/doc/api/process.md
@@ -662,6 +662,7 @@ An example of the possible output looks like:
variables:
{
host_arch: 'x64',
+ napi_build_version: 4,
node_install_npm: 'true',
node_prefix: '',
node_shared_cares: 'false',
diff --git a/src/js_native_api.h b/src/js_native_api.h
index 0646a2d94c..4f9345a4ab 100644
--- a/src/js_native_api.h
+++ b/src/js_native_api.h
@@ -12,7 +12,12 @@
#ifdef NAPI_EXPERIMENTAL
#define NAPI_VERSION NAPI_VERSION_EXPERIMENTAL
#else
-// The baseline version for N-API
+// The baseline version for N-API.
+// The NAPI_VERSION controls which version will be used by default when
+// compilling a native addon. If the addon developer specifically wants to use
+// functions available in a new version of N-API that is not yet ported in all
+// LTS versions, they can set NAPI_VERSION knowing that they have specifically
+// depended on that version.
#define NAPI_VERSION 4
#endif
#endif
diff --git a/src/node_version.h b/src/node_version.h
index 1e560410e0..768f6fcb1c 100644
--- a/src/node_version.h
+++ b/src/node_version.h
@@ -91,7 +91,8 @@
*/
#define NODE_MODULE_VERSION 74
-// the NAPI_VERSION provided by this version of the runtime
+// The NAPI_VERSION provided by this version of the runtime. This is the version
+// which the Node binary being built supports.
#define NAPI_VERSION 4
#endif // SRC_NODE_VERSION_H_
diff --git a/test/parallel/test-process-versions.js b/test/parallel/test-process-versions.js
index 18dffe0cad..83568a30d8 100644
--- a/test/parallel/test-process-versions.js
+++ b/test/parallel/test-process-versions.js
@@ -45,3 +45,6 @@ for (let i = 0; i < expected_keys.length; i++) {
const descriptor = Object.getOwnPropertyDescriptor(process.versions, key);
assert.strictEqual(descriptor.writable, false);
}
+
+assert.strictEqual(process.config.variables.napi_build_version,
+ process.versions.napi);
diff --git a/tools/getnapibuildversion.py b/tools/getnapibuildversion.py
new file mode 100644
index 0000000000..de1de676d3
--- /dev/null
+++ b/tools/getnapibuildversion.py
@@ -0,0 +1,26 @@
+from __future__ import print_function
+import os
+import re
+
+
+def get_napi_version():
+ napi_version_h = os.path.join(
+ os.path.dirname(__file__),
+ '..',
+ 'src',
+ 'node_version.h')
+
+ f = open(napi_version_h)
+
+ regex = '^#define NAPI_VERSION'
+
+ for line in f:
+ if re.match(regex, line):
+ napi_version = line.split()[2]
+ return napi_version
+
+ raise Exception('Could not find pattern matching %s' % regex)
+
+
+if __name__ == '__main__':
+ print(get_napi_version())