Author: Adam Majer Date: Fri May 11 16:10:16 CEST 2018 Summary: Generate versioned binaries Generate versioned binaries and install paths so we can allow concurrent installations and management via update_alternatives. This is also important for generation of binary modules for multiple versions of NodeJS Index: node-v18.7.0/Makefile =================================================================== --- node-v18.7.0.orig/Makefile +++ node-v18.7.0/Makefile @@ -55,7 +55,7 @@ BUILDTYPE_LOWER := $(shell echo $(BUILDT EXEEXT := $(shell $(PYTHON) -c \ "import sys; print('.exe' if sys.platform == 'win32' else '')") -NODE_EXE = node$(EXEEXT) +NODE_EXE = node18$(EXEEXT) NODE ?= ./$(NODE_EXE) NODE_G_EXE = node_g$(EXEEXT) NPM ?= ./deps/npm/bin/npm-cli.js Index: node-v18.7.0/tools/install.py =================================================================== --- node-v18.7.0.orig/tools/install.py +++ node-v18.7.0/tools/install.py @@ -86,7 +86,7 @@ def uninstall(paths, dst): try_remove(path, dst) def package_files(action, name, bins): - target_path = libdir() + '/node_modules/' + name + '/' + target_path = libdir() + '/node_modules/' + name + '18/' # don't install npm if the target path is a symlink, it probably means # that a dev version of npm is installed there @@ -106,19 +106,19 @@ def package_files(action, name, bins): if action == uninstall: action([link_path], 'bin/' + bin_name) elif action == install: - try_symlink('../' + libdir() + '/node_modules/' + name + '/' + bin_target, link_path) + try_symlink('../' + libdir() + '/node_modules/' + name + '18/' + bin_target, link_path) else: assert 0 # unhandled action type def npm_files(action): package_files(action, 'npm', { - 'npm': 'bin/npm-cli.js', - 'npx': 'bin/npx-cli.js', + 'npm18': 'bin/npm-cli.js', + 'npx18': 'bin/npx-cli.js', }) def corepack_files(action): package_files(action, 'corepack', { - 'corepack': 'dist/corepack.js', + 'corepack18': 'dist/corepack.js', # Not the default just yet: # 'yarn': 'dist/yarn.js', # 'yarnpkg': 'dist/yarn.js', @@ -147,7 +147,7 @@ def subdir_files(path, dest, action): def files(action): is_windows = sys.platform == 'win32' - output_file = 'node' + output_file = 'node18' output_prefix = 'out/Release/' if is_windows: @@ -186,7 +186,7 @@ def files(action): action(['out/Release/node.d'], libdir() + '/dtrace/node.d') # behave similarly for systemtap - action(['src/node.stp'], 'share/systemtap/tapset/') + action(['src/node.stp'], 'share/systemtap/tapset/node18.stp') action(['deps/v8/tools/gdbinit'], 'share/doc/node/') action(['deps/v8/tools/lldb_commands.py'], 'share/doc/node/') @@ -194,7 +194,7 @@ def files(action): if 'freebsd' in sys.platform or 'openbsd' in sys.platform: action(['doc/node.1'], 'man/man1/') else: - action(['doc/node.1'], 'share/man/man1/') + action(['doc/node.1'], 'share/man/man1/node18.1') if 'true' == variables.get('node_install_npm'): npm_files(action) @@ -281,28 +281,28 @@ def headers(action): 'src/node_buffer.h', 'src/node_object_wrap.h', 'src/node_version.h', - ], 'include/node/') + ], 'include/node18/') # Add the expfile that is created on AIX if sys.platform.startswith('aix'): - action(['out/Release/node.exp'], 'include/node/') + action(['out/Release/node.exp'], 'include/node18/') - subdir_files('deps/v8/include', 'include/node/', wanted_v8_headers) + subdir_files('deps/v8/include', 'include/node18/', wanted_v8_headers) if 'false' == variables.get('node_shared_libuv'): - subdir_files('deps/uv/include', 'include/node/', action) + subdir_files('deps/uv/include', 'include/node18/', action) if 'true' == variables.get('node_use_openssl') and \ 'false' == variables.get('node_shared_openssl'): - subdir_files('deps/openssl/openssl/include/openssl', 'include/node/openssl/', action) - subdir_files('deps/openssl/config/archs', 'include/node/openssl/archs', action) - subdir_files('deps/openssl/config', 'include/node/openssl', action) + subdir_files('deps/openssl/openssl/include/openssl', 'include/node18/openssl/', action) + subdir_files('deps/openssl/config/archs', 'include/node18/openssl/archs', action) + subdir_files('deps/openssl/config', 'include/node18/openssl', action) if 'false' == variables.get('node_shared_zlib'): action([ 'deps/zlib/zconf.h', 'deps/zlib/zlib.h', - ], 'include/node/') + ], 'include/node18/') if sys.platform == 'zos': zoslibinc = os.environ.get('ZOSLIB_INCLUDES') Index: node-v18.7.0/doc/node.1 =================================================================== --- node-v18.7.0.orig/doc/node.1 +++ node-v18.7.0/doc/node.1 @@ -30,24 +30,24 @@ .Dt NODE 1 . .Sh NAME -.Nm node +.Nm node18 .Nd server-side JavaScript runtime . .\"====================================================================== .Sh SYNOPSIS -.Nm node +.Nm node18 .Op Ar options .Op Ar v8-options .Op Fl e Ar string | Ar script.js | Fl .Op Fl - .Op Ar arguments ... . -.Nm node +.Nm node18 .Cm inspect .Op Fl e Ar string | Ar script.js | Fl | Ar : .Ar ... . -.Nm node +.Nm node18 .Op Fl -v8-options . .\"====================================================================== Index: node-v18.7.0/src/node.stp =================================================================== --- node-v18.7.0.orig/src/node.stp +++ node-v18.7.0/src/node.stp @@ -19,7 +19,7 @@ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -probe node_net_server_connection = process("node").mark("net__server__connection") +probe node_net_server_connection = process("node18").mark("net__server__connection") { remote = user_string($arg2); port = $arg3; @@ -32,7 +32,7 @@ probe node_net_server_connection = proce fd); } -probe node_net_stream_end = process("node").mark("net__stream__end") +probe node_net_stream_end = process("node18").mark("net__stream__end") { remote = user_string($arg2); port = $arg3; @@ -45,7 +45,7 @@ probe node_net_stream_end = process("nod fd); } -probe node_http_server_request = process("node").mark("http__server__request") +probe node_http_server_request = process("node18").mark("http__server__request") { remote = user_string($arg3); port = $arg4; @@ -62,7 +62,7 @@ probe node_http_server_request = process fd); } -probe node_http_server_response = process("node").mark("http__server__response") +probe node_http_server_response = process("node18").mark("http__server__response") { remote = user_string($arg2); port = $arg3; @@ -75,7 +75,7 @@ probe node_http_server_response = proces fd); } -probe node_http_client_request = process("node").mark("http__client__request") +probe node_http_client_request = process("node18").mark("http__client__request") { remote = user_string($arg3); port = $arg4; @@ -92,7 +92,7 @@ probe node_http_client_request = process fd); } -probe node_http_client_response = process("node").mark("http__client__response") +probe node_http_client_response = process("node18").mark("http__client__response") { remote = user_string($arg2); port = $arg3; @@ -105,7 +105,7 @@ probe node_http_client_response = proces fd); } -probe node_gc_start = process("node").mark("gc__start") +probe node_gc_start = process("node18").mark("gc__start") { scavenge = 1 << 0; compact = 1 << 1; @@ -125,7 +125,7 @@ probe node_gc_start = process("node").ma flags); } -probe node_gc_stop = process("node").mark("gc__done") +probe node_gc_stop = process("node18").mark("gc__done") { scavenge = 1 << 0; compact = 1 << 1; Index: node-v18.7.0/deps/npm/man/man1/npm.1 =================================================================== --- node-v18.7.0.orig/deps/npm/man/man1/npm.1 +++ node-v18.7.0/deps/npm/man/man1/npm.1 @@ -1,6 +1,6 @@ .TH "NPM" "1" "July 2022" "" "" .SH "NAME" -\fBnpm\fR \- javascript package manager +\fBnpm18\fR \- javascript package manager .SS Synopsis .SS Version .P @@ -15,7 +15,7 @@ It is extremely configurable to support commonly, you use it to publish, discover, install, and develop node programs\. .P -Run \fBnpm help\fP to get a list of available commands\. +Run \fBnpm18 help\fP to get a list of available commands\. .SS Important .P npm comes preconfigured to use npm's public registry at @@ -31,14 +31,14 @@ their terms of use\. You probably got npm because you want to install stuff\. .P The very first thing you will most likely want to run in any node -program is \fBnpm install\fP to install its dependencies\. +program is \fBnpm18 install\fP to install its dependencies\. .P -You can also run \fBnpm install blerg\fP to install the latest version of +You can also run \fBnpm18 install blerg\fP to install the latest version of "blerg"\. Check out npm help \fBinstall\fP for more info\. It can do a lot of stuff\. .P -Use the \fBnpm search\fP command to show everything that's available in the -public registry\. Use \fBnpm ls\fP to show everything you've installed\. +Use the \fBnpm18 search\fP command to show everything that's available in the +public registry\. Use \fBnpm18 ls\fP to show everything you've installed\. .SS Dependencies .P If a package lists a dependency using a git URL, npm will install that @@ -87,7 +87,7 @@ npm help \fBpackage\.json\fP\|\. .IP \(bu 2 link: Links your current working code into Node's path, so that you don't -have to reinstall every time you make a change\. Use npm help \fBnpm +have to reinstall every time you make a change\. Use npm help \fBnpm18 link\fP to do this\. .IP \(bu 2 install: @@ -170,18 +170,18 @@ https://github\.com/npm/rfcs .SS See Also .RS 0 .IP \(bu 2 -npm help help +npm18 help help .IP \(bu 2 -npm help package\.json +npm18 help package\.json .IP \(bu 2 -npm help npmrc +npm18 help npmrc .IP \(bu 2 -npm help config +npm18 help config .IP \(bu 2 -npm help install +npm18 help install .IP \(bu 2 -npm help prefix +npm18 help prefix .IP \(bu 2 -npm help publish +npm18 help publish .RE Index: node-v18.7.0/src/node_main.cc =================================================================== --- node-v18.7.0.orig/src/node_main.cc +++ node-v18.7.0/src/node_main.cc @@ -122,6 +122,7 @@ int main(int argc, char* argv[]) { #endif // Disable stdio buffering, it interacts poorly with printf() // calls elsewhere in the program (e.g., any logging from V8.) + setenv("NODE_VERSION", "18", 0); setvbuf(stdout, nullptr, _IONBF, 0); setvbuf(stderr, nullptr, _IONBF, 0); return node::Start(argc, argv); Index: node-v18.7.0/tools/test.py =================================================================== --- node-v18.7.0.orig/tools/test.py +++ node-v18.7.0/tools/test.py @@ -948,7 +948,7 @@ class Context(object): if self.vm is not None: return self.vm if arch == 'none': - name = 'out/Debug/node' if mode == 'debug' else 'out/Release/node' + name = 'out/Debug/node' if mode == 'debug' else 'out/Release/node18' else: name = 'out/%s.%s/node' % (arch, mode) Index: node-v18.7.0/node.gyp =================================================================== --- node-v18.7.0.orig/node.gyp +++ node-v18.7.0/node.gyp @@ -24,8 +24,8 @@ 'node_use_openssl%': 'true', 'node_shared_openssl%': 'false', 'node_v8_options%': '', - 'node_core_target_name%': 'node', - 'node_lib_target_name%': 'libnode', + 'node_core_target_name%': 'node18', + 'node_lib_target_name%': 'libnode18', 'node_intermediate_lib_type%': 'static_library', 'node_builtin_modules_path%': '', # We list the deps/ files out instead of globbing them in js2c.py since we Index: node-v18.7.0/deps/npm/man/man1/npx.1 =================================================================== --- node-v18.7.0.orig/deps/npm/man/man1/npx.1 +++ node-v18.7.0/deps/npm/man/man1/npx.1 @@ -5,10 +5,10 @@ .P .RS 2 .nf -npx \-\- [@] [args\.\.\.] -npx \-\-package=[@] \-\- [args\.\.\.] -npx \-c ' [args\.\.\.]' -npx \-\-package=foo \-c ' [args\.\.\.]' +npx18 \-\- [@] [args\.\.\.] +npx18 \-\-package=[@] \-\- [args\.\.\.] +npx18 \-c ' [args\.\.\.]' +npx18 \-\-package=foo \-c ' [args\.\.\.]' .fi .RE .SS Description @@ -57,9 +57,9 @@ no bin entries, or none of them match th To run a binary \fIother than\fR the named binary, specify one or more \fB\-\-package\fP options, which will prevent npm from inferring the package from the first command argument\. -.SS \fBnpx\fP vs \fBnpm exec\fP +.SS \fBnpx18\fP vs \fBnpm exec\fP .P -When run via the \fBnpx\fP binary, all flags and options \fImust\fR be set prior to +When run via the \fBnpx18\fP binary, all flags and options \fImust\fR be set prior to any positional arguments\. When run via \fBnpm exec\fP, a double\-hyphen \fB\-\-\fP flag can be used to suppress npm's parsing of switches and options that should be sent to the executed command\. @@ -68,7 +68,7 @@ For example: .P .RS 2 .nf -$ npx foo@latest bar \-\-package=@npmcli/foo +$ npx18 foo@latest bar \-\-package=@npmcli/foo .fi .RE .P @@ -89,7 +89,7 @@ different: .P .RS 2 .nf -$ npm exec foo@latest bar \-\-package=@npmcli/foo +$ npm18 exec foo@latest bar \-\-package=@npmcli/foo .fi .RE .P @@ -105,11 +105,11 @@ $ foo@latest bar .P The double\-hyphen character is recommended to explicitly tell npm to stop parsing command line options and switches\. The following command would -thus be equivalent to the \fBnpx\fP command above: +thus be equivalent to the \fBnpx18\fP command above: .P .RS 2 .nf -$ npm exec \-\- foo@latest bar \-\-package=@npmcli/foo +$ npm18 exec \-\- foo@latest bar \-\-package=@npmcli/foo .fi .RE .SS Examples @@ -119,8 +119,8 @@ arguments: .P .RS 2 .nf -$ npm exec \-\- tap \-\-bail test/foo\.js -$ npx tap \-\-bail test/foo\.js +$ npm18 exec \-\- tap \-\-bail test/foo\.js +$ npx18 tap \-\-bail test/foo\.js .fi .RE .P @@ -129,9 +129,9 @@ by specifying a \fB\-\-package\fP option .P .RS 2 .nf -$ npm exec \-\-package=foo \-\- bar \-\-bar\-argument +$ npm18 exec \-\-package=foo \-\- bar \-\-bar\-argument # ~ or ~ -$ npx \-\-package=foo bar \-\-bar\-argument +$ npx18 \-\-package=foo bar \-\-bar\-argument .fi .RE .P @@ -139,14 +139,14 @@ Run an arbitrary shell script, in the co .P .RS 2 .nf -$ npm x \-c 'eslint && say "hooray, lint passed"' -$ npx \-c 'eslint && say "hooray, lint passed"' +$ npm18 x \-c 'eslint && say "hooray, lint passed"' +$ npx18 \-c 'eslint && say "hooray, lint passed"' .fi .RE .SS Compatibility with Older npx Versions .P -The \fBnpx\fP binary was rewritten in npm v7\.0\.0, and the standalone \fBnpx\fP -package deprecated at that time\. \fBnpx\fP uses the \fBnpm exec\fP +The \fBnpx18\fP binary was rewritten in npm v7\.0\.0, and the standalone \fBnpx18\fP +package deprecated at that time\. \fBnpx18\fP uses the \fBnpm18 exec\fP command instead of a separate argument parser and install process, with some affordances to maintain backwards compatibility with the arguments it accepted in previous versions\. @@ -154,10 +154,10 @@ accepted in previous versions\. This resulted in some shifts in its functionality: .RS 0 .IP \(bu 2 -Any \fBnpm\fP config value may be provided\. +Any \fBnpm18\fP config value may be provided\. .IP \(bu 2 To prevent security and user\-experience problems from mistyping package -names, \fBnpx\fP prompts before installing anything\. Suppress this +names, \fBnpx18\fP prompts before installing anything\. Suppress this prompt with the \fB\-y\fP or \fB\-\-yes\fP option\. .IP \(bu 2 The \fB\-\-no\-install\fP option is deprecated, and will be converted to \fB\-\-no\fP\|\. @@ -165,13 +165,13 @@ The \fB\-\-no\-install\fP option is depr Shell fallback functionality is removed, as it is not advisable\. .IP \(bu 2 The \fB\-p\fP argument is a shorthand for \fB\-\-parseable\fP in npm, but shorthand -for \fB\-\-package\fP in npx\. This is maintained, but only for the \fBnpx\fP +for \fB\-\-package\fP in npx\. This is maintained, but only for the \fBnpx18\fP executable\. .IP \(bu 2 The \fB\-\-ignore\-existing\fP option is removed\. Locally installed bins are always present in the executed process \fBPATH\fP\|\. .IP \(bu 2 -The \fB\-\-npm\fP option is removed\. \fBnpx\fP will always use the \fBnpm\fP it ships +The \fB\-\-npm18\fP option is removed\. \fBnpx18\fP will always use the \fBnpm18\fP it ships with\. .IP \(bu 2 The \fB\-\-node\-arg\fP and \fB\-n\fP options are removed\. @@ -179,26 +179,26 @@ The \fB\-\-node\-arg\fP and \fB\-n\fP op The \fB\-\-always\-spawn\fP option is redundant, and thus removed\. .IP \(bu 2 The \fB\-\-shell\fP option is replaced with \fB\-\-script\-shell\fP, but maintained -in the \fBnpx\fP executable for backwards compatibility\. +in the \fBnpx18\fP executable for backwards compatibility\. .RE .SS See Also .RS 0 .IP \(bu 2 -npm help run\-script +npm18 help run\-script .IP \(bu 2 -npm help scripts +npm18 help scripts .IP \(bu 2 -npm help test +npm18 help test .IP \(bu 2 -npm help start +npm18 help start .IP \(bu 2 -npm help restart +npm18 help restart .IP \(bu 2 -npm help stop +npm18 help stop .IP \(bu 2 -npm help config +npm18 help config .IP \(bu 2 -npm help exec +npm18 help exec .RE