Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2022-04-08 17:00:56 +0300
committerGitHub <noreply@github.com>2022-04-08 17:00:56 +0300
commitb99bb57416f5eabc9d8375b93e03de21d8ed29ee (patch)
tree8cea6a72a6d6700ba72137033c4dd278f73c0143 /tools
parentec5a359ffd38b6f56a456a0b6a482b5167fbfce1 (diff)
tools: update gyp-next to v0.12.1
PR-URL: https://github.com/nodejs/node/pull/42625 Refs: https://github.com/nodejs/gyp-next/compare/v0.10.1...v0.12.1 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Ujjwal Sharma <ryzokuken@disroot.org> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Mestery <mestery@protonmail.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/gyp/.github/workflows/Python_tests.yml2
-rw-r--r--tools/gyp/.github/workflows/node-gyp.yml4
-rw-r--r--tools/gyp/CHANGELOG.md21
-rw-r--r--tools/gyp/pylib/gyp/common.py12
-rwxr-xr-xtools/gyp/pylib/gyp/flock_tool.py2
-rw-r--r--tools/gyp/pylib/gyp/generator/make.py110
-rw-r--r--tools/gyp/pylib/gyp/generator/msvs.py11
-rw-r--r--tools/gyp/setup.py2
-rwxr-xr-xtools/gyp/test_gyp.py1
-rwxr-xr-xtools/gyp/tools/pretty_gyp.py2
10 files changed, 143 insertions, 24 deletions
diff --git a/tools/gyp/.github/workflows/Python_tests.yml b/tools/gyp/.github/workflows/Python_tests.yml
index 40ff521a6fd..76e536826b9 100644
--- a/tools/gyp/.github/workflows/Python_tests.yml
+++ b/tools/gyp/.github/workflows/Python_tests.yml
@@ -15,7 +15,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
+ uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
diff --git a/tools/gyp/.github/workflows/node-gyp.yml b/tools/gyp/.github/workflows/node-gyp.yml
index 0c26a3d7de3..c8d2455f13e 100644
--- a/tools/gyp/.github/workflows/node-gyp.yml
+++ b/tools/gyp/.github/workflows/node-gyp.yml
@@ -21,10 +21,10 @@ jobs:
with:
repository: nodejs/node-gyp
path: node-gyp
- - uses: actions/setup-node@v2
+ - uses: actions/setup-node@v3
with:
node-version: 14.x
- - uses: actions/setup-python@v2
+ - uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python }}
- name: Install dependencies
diff --git a/tools/gyp/CHANGELOG.md b/tools/gyp/CHANGELOG.md
index 57d691c1812..09ceed8d41c 100644
--- a/tools/gyp/CHANGELOG.md
+++ b/tools/gyp/CHANGELOG.md
@@ -1,5 +1,26 @@
# Changelog
+### [0.12.1](https://www.github.com/nodejs/gyp-next/compare/v0.12.0...v0.12.1) (2022-04-06)
+
+
+### Bug Fixes
+
+* **msvs:** avoid fixing path for arguments with "=" ([#143](https://www.github.com/nodejs/gyp-next/issues/143)) ([7e8f16e](https://www.github.com/nodejs/gyp-next/commit/7e8f16eb165e042e64bec98fa6c2a0232a42c26b))
+
+## [0.12.0](https://www.github.com/nodejs/gyp-next/compare/v0.11.0...v0.12.0) (2022-04-04)
+
+
+### Features
+
+* support building shared libraries on z/OS ([#137](https://www.github.com/nodejs/gyp-next/issues/137)) ([293bcfa](https://www.github.com/nodejs/gyp-next/commit/293bcfa4c25c6adb743377adafc45a80fee492c6))
+
+## [0.11.0](https://www.github.com/nodejs/gyp-next/compare/v0.10.1...v0.11.0) (2022-03-04)
+
+
+### Features
+
+* Add proper support for IBM i ([#140](https://www.github.com/nodejs/gyp-next/issues/140)) ([fdda4a3](https://www.github.com/nodejs/gyp-next/commit/fdda4a3038b8a7042ad960ce7a223687c24a21b1))
+
### [0.10.1](https://www.github.com/nodejs/gyp-next/compare/v0.10.0...v0.10.1) (2021-11-24)
diff --git a/tools/gyp/pylib/gyp/common.py b/tools/gyp/pylib/gyp/common.py
index 9213fcc5e82..0847cdabc71 100644
--- a/tools/gyp/pylib/gyp/common.py
+++ b/tools/gyp/pylib/gyp/common.py
@@ -454,6 +454,8 @@ def GetFlavor(params):
return "aix"
if sys.platform.startswith(("os390", "zos")):
return "zos"
+ if sys.platform == "os400":
+ return "os400"
return "linux"
@@ -463,9 +465,13 @@ def CopyTool(flavor, out_path, generator_flags={}):
to |out_path|."""
# aix and solaris just need flock emulation. mac and win use more complicated
# support scripts.
- prefix = {"aix": "flock", "solaris": "flock", "mac": "mac", "win": "win"}.get(
- flavor, None
- )
+ prefix = {
+ "aix": "flock",
+ "os400": "flock",
+ "solaris": "flock",
+ "mac": "mac",
+ "win": "win",
+ }.get(flavor, None)
if not prefix:
return
diff --git a/tools/gyp/pylib/gyp/flock_tool.py b/tools/gyp/pylib/gyp/flock_tool.py
index 1cb98152638..0754aff26fe 100755
--- a/tools/gyp/pylib/gyp/flock_tool.py
+++ b/tools/gyp/pylib/gyp/flock_tool.py
@@ -41,7 +41,7 @@ class FlockTool:
# with EBADF, that's why we use this F_SETLK
# hack instead.
fd = os.open(lockfile, os.O_WRONLY | os.O_NOCTTY | os.O_CREAT, 0o666)
- if sys.platform.startswith("aix"):
+ if sys.platform.startswith("aix") or sys.platform == "os400":
# Python on AIX is compiled with LARGEFILE support, which changes the
# struct size.
op = struct.pack("hhIllqq", fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
diff --git a/tools/gyp/pylib/gyp/generator/make.py b/tools/gyp/pylib/gyp/generator/make.py
index b15b1b83320..97ca5607567 100644
--- a/tools/gyp/pylib/gyp/generator/make.py
+++ b/tools/gyp/pylib/gyp/generator/make.py
@@ -99,6 +99,8 @@ def CalculateVariables(default_variables, params):
default_variables.setdefault("OS", operating_system)
if flavor == "aix":
default_variables.setdefault("SHARED_LIB_SUFFIX", ".a")
+ elif flavor == "zos":
+ default_variables.setdefault("SHARED_LIB_SUFFIX", ".x")
else:
default_variables.setdefault("SHARED_LIB_SUFFIX", ".so")
default_variables.setdefault("SHARED_LIB_DIR", "$(builddir)/lib.$(TOOLSET)")
@@ -286,6 +288,24 @@ cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSE
""" # noqa: E501
+LINK_COMMANDS_OS400 = """\
+quiet_cmd_alink = AR($(TOOLSET)) $@
+cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) -X64 crs $@ $(filter %.o,$^)
+
+quiet_cmd_alink_thin = AR($(TOOLSET)) $@
+cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) -X64 crs $@ $(filter %.o,$^)
+
+quiet_cmd_link = LINK($(TOOLSET)) $@
+cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
+
+quiet_cmd_solink = SOLINK($(TOOLSET)) $@
+cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
+
+quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
+cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
+""" # noqa: E501
+
+
LINK_COMMANDS_OS390 = """\
quiet_cmd_alink = AR($(TOOLSET)) $@
cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
@@ -297,10 +317,10 @@ quiet_cmd_link = LINK($(TOOLSET)) $@
cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
quiet_cmd_solink = SOLINK($(TOOLSET)) $@
-cmd_solink = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) -Wl,DLL
+cmd_solink = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,DLL -o $(patsubst %.x,%.so,$@) $(LD_INPUTS) $(LIBS) && if [ -f $(notdir $@) ]; then /bin/cp $(notdir $@) $@; else true; fi
quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
-cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) -Wl,DLL
+cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
""" # noqa: E501
@@ -449,6 +469,9 @@ quiet_cmd_copy = COPY $@
# send stderr to /dev/null to ignore messages when linking directories.
cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp %(copy_archive_args)s "$<" "$@")
+quiet_cmd_symlink = SYMLINK $@
+cmd_symlink = ln -sf "$<" "$@"
+
%(link_commands)s
""" # noqa: E501
r"""
@@ -1030,12 +1053,20 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
# libraries, but until everything is made cross-compile safe, also use
# target libraries.
# TODO(piman): when everything is cross-compile safe, remove lib.target
- self.WriteLn(
- "cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:"
- "$(builddir)/lib.target:$$LD_LIBRARY_PATH; "
- "export LD_LIBRARY_PATH; "
- "%s%s" % (name, cd_action, command)
- )
+ if self.flavor == "zos" or self.flavor == "aix":
+ self.WriteLn(
+ "cmd_%s = LIBPATH=$(builddir)/lib.host:"
+ "$(builddir)/lib.target:$$LIBPATH; "
+ "export LIBPATH; "
+ "%s%s" % (name, cd_action, command)
+ )
+ else:
+ self.WriteLn(
+ "cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:"
+ "$(builddir)/lib.target:$$LD_LIBRARY_PATH; "
+ "export LD_LIBRARY_PATH; "
+ "%s%s" % (name, cd_action, command)
+ )
self.WriteLn()
outputs = [self.Absolutify(o) for o in outputs]
# The makefile rules are all relative to the top dir, but the gyp actions
@@ -1529,6 +1560,8 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
target_prefix = "lib"
if self.flavor == "aix":
target_ext = ".a"
+ elif self.flavor == "zos":
+ target_ext = ".x"
else:
target_ext = ".so"
elif self.type == "none":
@@ -1609,6 +1642,14 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
# link_deps.extend(spec.get('libraries', []))
return (gyp.common.uniquer(deps), gyp.common.uniquer(link_deps))
+ def GetSharedObjectFromSidedeck(self, sidedeck):
+ """Return the shared object files based on sidedeck"""
+ return re.sub(r"\.x$", ".so", sidedeck)
+
+ def GetUnversionedSidedeckFromSidedeck(self, sidedeck):
+ """Return the shared object files based on sidedeck"""
+ return re.sub(r"\.\d+\.x$", ".x", sidedeck)
+
def WriteDependencyOnExtraOutputs(self, target, extra_outputs):
self.WriteMakeRule(
[self.output_binary],
@@ -1861,6 +1902,11 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
part_of_all,
postbuilds=postbuilds,
)
+ # z/OS has a .so target as well as a sidedeck .x target
+ if self.flavor == "zos":
+ self.WriteLn('%s: %s' % (
+ QuoteSpaces(self.GetSharedObjectFromSidedeck(self.output_binary)),
+ QuoteSpaces(self.output_binary)))
elif self.type == "loadable_module":
for link_dep in link_deps:
assert " " not in link_dep, (
@@ -1918,7 +1964,9 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
else:
file_desc = "executable"
install_path = self._InstallableTargetInstallPath()
- installable_deps = [self.output]
+ installable_deps = []
+ if self.flavor != "zos":
+ installable_deps.append(self.output)
if (
self.flavor == "mac"
and "product_dir" not in spec
@@ -1943,7 +1991,23 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
comment="Copy this to the %s output path." % file_desc,
part_of_all=part_of_all,
)
- installable_deps.append(install_path)
+ if self.flavor != "zos":
+ installable_deps.append(install_path)
+ if self.flavor == 'zos' and self.type == 'shared_library':
+ # lib.target/libnode.so has a dependency on $(obj).target/libnode.so
+ self.WriteDoCmd([self.GetSharedObjectFromSidedeck(install_path)],
+ [self.GetSharedObjectFromSidedeck(self.output)], 'copy',
+ comment='Copy this to the %s output path.' %
+ file_desc, part_of_all=part_of_all)
+ # Create a symlink of libnode.x to libnode.version.x
+ self.WriteDoCmd([self.GetUnversionedSidedeckFromSidedeck(install_path)],
+ [install_path], 'symlink',
+ comment='Symlnk this to the %s output path.' %
+ file_desc, part_of_all=part_of_all)
+ # Place libnode.version.so and libnode.x symlink in lib.target dir
+ installable_deps.append(self.GetSharedObjectFromSidedeck(install_path))
+ installable_deps.append(
+ self.GetUnversionedSidedeckFromSidedeck(install_path))
if self.output != self.alias and self.alias != self.target:
self.WriteMakeRule(
[self.alias],
@@ -1951,7 +2015,18 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
comment="Short alias for building this %s." % file_desc,
phony=True,
)
- if part_of_all:
+ if self.flavor == 'zos' and self.type == 'shared_library':
+ # Make sure that .x symlink target is run
+ self.WriteMakeRule(
+ ['all'],
+ [
+ self.GetUnversionedSidedeckFromSidedeck(install_path),
+ self.GetSharedObjectFromSidedeck(install_path)
+ ],
+ comment='Add %s to "all" target.' % file_desc,
+ phony=True,
+ )
+ elif part_of_all:
self.WriteMakeRule(
["all"],
[install_path],
@@ -2247,6 +2322,9 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
# # Install all shared libs into a common directory (per toolset) for
# # convenient access with LD_LIBRARY_PATH.
# return "$(builddir)/lib.%s/%s" % (self.toolset, self.alias)
+ if self.flavor == "zos" and self.type == "shared_library":
+ return "$(builddir)/lib.%s/%s" % (self.toolset, self.alias)
+
return "$(builddir)/" + self.alias
@@ -2414,6 +2492,16 @@ def GenerateOutput(target_list, target_dicts, data, params):
"flock_index": 2,
}
)
+ elif flavor == "os400":
+ copy_archive_arguments = "-pPRf"
+ header_params.update(
+ {
+ "copy_archive_args": copy_archive_arguments,
+ "link_commands": LINK_COMMANDS_OS400,
+ "flock": "./gyp-flock-tool flock",
+ "flock_index": 2,
+ }
+ )
build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
make_global_settings_array = data[build_file].get("make_global_settings", [])
diff --git a/tools/gyp/pylib/gyp/generator/msvs.py b/tools/gyp/pylib/gyp/generator/msvs.py
index 8308fa84333..fd950057847 100644
--- a/tools/gyp/pylib/gyp/generator/msvs.py
+++ b/tools/gyp/pylib/gyp/generator/msvs.py
@@ -423,12 +423,15 @@ def _BuildCommandLineForRuleRaw(
command.insert(0, "call")
# Fix the paths
# TODO(quote): This is a really ugly heuristic, and will miss path fixing
- # for arguments like "--arg=path" or "/opt:path".
- # If the argument starts with a slash or dash, it's probably a command line
- # switch
+ # for arguments like "--arg=path", arg=path, or "/opt:path".
+ # If the argument starts with a slash or dash, or contains an equal sign,
+ # it's probably a command line switch.
# Return the path with forward slashes because the command using it might
# not support backslashes.
- arguments = [i if (i[:1] in "/-") else _FixPath(i, "/") for i in cmd[1:]]
+ arguments = [
+ i if (i[:1] in "/-" or "=" in i) else _FixPath(i, "/")
+ for i in cmd[1:]
+ ]
arguments = [i.replace("$(InputDir)", "%INPUTDIR%") for i in arguments]
arguments = [MSVSSettings.FixVCMacroSlashes(i) for i in arguments]
if quote_cmd:
diff --git a/tools/gyp/setup.py b/tools/gyp/setup.py
index 576880a7f7a..fa2eefe39f5 100644
--- a/tools/gyp/setup.py
+++ b/tools/gyp/setup.py
@@ -15,7 +15,7 @@ with open(path.join(here, "README.md")) as in_file:
setup(
name="gyp-next",
- version="0.10.1",
+ version="0.12.1",
description="A fork of the GYP build system for use in the Node.js projects",
long_description=long_description,
long_description_content_type="text/markdown",
diff --git a/tools/gyp/test_gyp.py b/tools/gyp/test_gyp.py
index 9ba264170f4..b7bb956b8ed 100755
--- a/tools/gyp/test_gyp.py
+++ b/tools/gyp/test_gyp.py
@@ -116,6 +116,7 @@ def main(argv=None):
else:
format_list = {
"aix5": ["make"],
+ "os400": ["make"],
"freebsd7": ["make"],
"freebsd8": ["make"],
"openbsd5": ["make"],
diff --git a/tools/gyp/tools/pretty_gyp.py b/tools/gyp/tools/pretty_gyp.py
index 4ffa4445518..6eef3a1bbf0 100755
--- a/tools/gyp/tools/pretty_gyp.py
+++ b/tools/gyp/tools/pretty_gyp.py
@@ -90,7 +90,7 @@ def count_braces(line):
"""
open_braces = ["[", "(", "{"]
close_braces = ["]", ")", "}"]
- closing_prefix_re = re.compile(r"(.*?[^\s\]\}\)]+.*?)([\]\}\)],?)\s*$")
+ closing_prefix_re = re.compile(r"[^\s\]\}\)]\s*[\]\}\)]+,?\s*$")
cnt = 0
stripline = COMMENT_RE.sub(r"", line)
stripline = QUOTE_RE.sub(r"''", stripline)