Skip to content

Commit

Permalink
build: expose napi_build_version variable
Browse files Browse the repository at this point in the history
Expose `napi_build_version` to allow `node-gyp` to make it
available for building native addons.

Fixes: nodejs/node-gyp#1745
Refs: nodejs/abi-stable-node#371
PR-URL: #27835
Backport-PR-URL: #35266
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Gabriel Schulhof <[email protected]>
Reviewed-By: Luigi Pinca <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
Reviewed-By: Michael Dawson <[email protected]>
  • Loading branch information
NickNaso authored and richardlau committed Oct 7, 2020
1 parent 2eb6273 commit b83f9a5
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 1 deletion.
6 changes: 6 additions & 0 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
# imports in tools/
sys.path.insert(0, 'tools')
import getmoduleversion
import getnapibuildversion
from gyp_node import run_gyp

# imports in deps/v8/tools/node
Expand Down Expand Up @@ -1131,6 +1132,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))
Expand Down Expand Up @@ -1603,6 +1608,7 @@ def make_bin_override():
flavor = GetFlavor(flavor_params)

configure_node(output)
configure_napi(output)
configure_library('zlib', output)
configure_library('http_parser', output)
configure_library('libuv', output)
Expand Down
1 change: 1 addition & 0 deletions doc/api/process.md
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,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',
Expand Down
7 changes: 6 additions & 1 deletion src/node_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@
// Use INT_MAX, this should only be consumed by the pre-processor anyway.
#define NAPI_VERSION 2147483647
#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 6
#endif
#endif
Expand Down
3 changes: 3 additions & 0 deletions test/parallel/test-process-versions.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,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);
26 changes: 26 additions & 0 deletions tools/getnapibuildversion.py
Original file line number Diff line number Diff line change
@@ -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())

0 comments on commit b83f9a5

Please sign in to comment.