Skip to content

Commit b99bb57

Browse files
authored
tools: update gyp-next to v0.12.1
PR-URL: #42625 Refs: nodejs/gyp-next@v0.10.1...v0.12.1 Reviewed-By: Jiawen Geng <[email protected]> Reviewed-By: Ujjwal Sharma <[email protected]> Reviewed-By: Darshan Sen <[email protected]> Reviewed-By: Mohammed Keyvanzadeh <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Mestery <[email protected]>
1 parent ec5a359 commit b99bb57

File tree

10 files changed

+143
-24
lines changed

10 files changed

+143
-24
lines changed

tools/gyp/.github/workflows/Python_tests.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
steps:
1616
- uses: actions/checkout@v2
1717
- name: Set up Python ${{ matrix.python-version }}
18-
uses: actions/setup-python@v2
18+
uses: actions/setup-python@v3
1919
with:
2020
python-version: ${{ matrix.python-version }}
2121
- name: Install dependencies

tools/gyp/.github/workflows/node-gyp.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ jobs:
2121
with:
2222
repository: nodejs/node-gyp
2323
path: node-gyp
24-
- uses: actions/setup-node@v2
24+
- uses: actions/setup-node@v3
2525
with:
2626
node-version: 14.x
27-
- uses: actions/setup-python@v2
27+
- uses: actions/setup-python@v3
2828
with:
2929
python-version: ${{ matrix.python }}
3030
- name: Install dependencies

tools/gyp/CHANGELOG.md

+21
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
# Changelog
22

3+
### [0.12.1](https://www.github.com/nodejs/gyp-next/compare/v0.12.0...v0.12.1) (2022-04-06)
4+
5+
6+
### Bug Fixes
7+
8+
* **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))
9+
10+
## [0.12.0](https://www.github.com/nodejs/gyp-next/compare/v0.11.0...v0.12.0) (2022-04-04)
11+
12+
13+
### Features
14+
15+
* 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))
16+
17+
## [0.11.0](https://www.github.com/nodejs/gyp-next/compare/v0.10.1...v0.11.0) (2022-03-04)
18+
19+
20+
### Features
21+
22+
* 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))
23+
324
### [0.10.1](https://www.github.com/nodejs/gyp-next/compare/v0.10.0...v0.10.1) (2021-11-24)
425

526

tools/gyp/pylib/gyp/common.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,8 @@ def GetFlavor(params):
454454
return "aix"
455455
if sys.platform.startswith(("os390", "zos")):
456456
return "zos"
457+
if sys.platform == "os400":
458+
return "os400"
457459

458460
return "linux"
459461

@@ -463,9 +465,13 @@ def CopyTool(flavor, out_path, generator_flags={}):
463465
to |out_path|."""
464466
# aix and solaris just need flock emulation. mac and win use more complicated
465467
# support scripts.
466-
prefix = {"aix": "flock", "solaris": "flock", "mac": "mac", "win": "win"}.get(
467-
flavor, None
468-
)
468+
prefix = {
469+
"aix": "flock",
470+
"os400": "flock",
471+
"solaris": "flock",
472+
"mac": "mac",
473+
"win": "win",
474+
}.get(flavor, None)
469475
if not prefix:
470476
return
471477

tools/gyp/pylib/gyp/flock_tool.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def ExecFlock(self, lockfile, *cmd_list):
4141
# with EBADF, that's why we use this F_SETLK
4242
# hack instead.
4343
fd = os.open(lockfile, os.O_WRONLY | os.O_NOCTTY | os.O_CREAT, 0o666)
44-
if sys.platform.startswith("aix"):
44+
if sys.platform.startswith("aix") or sys.platform == "os400":
4545
# Python on AIX is compiled with LARGEFILE support, which changes the
4646
# struct size.
4747
op = struct.pack("hhIllqq", fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)

tools/gyp/pylib/gyp/generator/make.py

+99-11
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ def CalculateVariables(default_variables, params):
9999
default_variables.setdefault("OS", operating_system)
100100
if flavor == "aix":
101101
default_variables.setdefault("SHARED_LIB_SUFFIX", ".a")
102+
elif flavor == "zos":
103+
default_variables.setdefault("SHARED_LIB_SUFFIX", ".x")
102104
else:
103105
default_variables.setdefault("SHARED_LIB_SUFFIX", ".so")
104106
default_variables.setdefault("SHARED_LIB_DIR", "$(builddir)/lib.$(TOOLSET)")
@@ -286,6 +288,24 @@ def CalculateGeneratorInputInfo(params):
286288
""" # noqa: E501
287289

288290

291+
LINK_COMMANDS_OS400 = """\
292+
quiet_cmd_alink = AR($(TOOLSET)) $@
293+
cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) -X64 crs $@ $(filter %.o,$^)
294+
295+
quiet_cmd_alink_thin = AR($(TOOLSET)) $@
296+
cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) -X64 crs $@ $(filter %.o,$^)
297+
298+
quiet_cmd_link = LINK($(TOOLSET)) $@
299+
cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
300+
301+
quiet_cmd_solink = SOLINK($(TOOLSET)) $@
302+
cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
303+
304+
quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
305+
cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
306+
""" # noqa: E501
307+
308+
289309
LINK_COMMANDS_OS390 = """\
290310
quiet_cmd_alink = AR($(TOOLSET)) $@
291311
cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
@@ -297,10 +317,10 @@ def CalculateGeneratorInputInfo(params):
297317
cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
298318
299319
quiet_cmd_solink = SOLINK($(TOOLSET)) $@
300-
cmd_solink = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) -Wl,DLL
320+
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
301321
302322
quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
303-
cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) -Wl,DLL
323+
cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
304324
""" # noqa: E501
305325

306326

@@ -449,6 +469,9 @@ def CalculateGeneratorInputInfo(params):
449469
# send stderr to /dev/null to ignore messages when linking directories.
450470
cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp %(copy_archive_args)s "$<" "$@")
451471
472+
quiet_cmd_symlink = SYMLINK $@
473+
cmd_symlink = ln -sf "$<" "$@"
474+
452475
%(link_commands)s
453476
""" # noqa: E501
454477
r"""
@@ -1030,12 +1053,20 @@ def WriteActions(
10301053
# libraries, but until everything is made cross-compile safe, also use
10311054
# target libraries.
10321055
# TODO(piman): when everything is cross-compile safe, remove lib.target
1033-
self.WriteLn(
1034-
"cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:"
1035-
"$(builddir)/lib.target:$$LD_LIBRARY_PATH; "
1036-
"export LD_LIBRARY_PATH; "
1037-
"%s%s" % (name, cd_action, command)
1038-
)
1056+
if self.flavor == "zos" or self.flavor == "aix":
1057+
self.WriteLn(
1058+
"cmd_%s = LIBPATH=$(builddir)/lib.host:"
1059+
"$(builddir)/lib.target:$$LIBPATH; "
1060+
"export LIBPATH; "
1061+
"%s%s" % (name, cd_action, command)
1062+
)
1063+
else:
1064+
self.WriteLn(
1065+
"cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:"
1066+
"$(builddir)/lib.target:$$LD_LIBRARY_PATH; "
1067+
"export LD_LIBRARY_PATH; "
1068+
"%s%s" % (name, cd_action, command)
1069+
)
10391070
self.WriteLn()
10401071
outputs = [self.Absolutify(o) for o in outputs]
10411072
# The makefile rules are all relative to the top dir, but the gyp actions
@@ -1529,6 +1560,8 @@ def ComputeOutputBasename(self, spec):
15291560
target_prefix = "lib"
15301561
if self.flavor == "aix":
15311562
target_ext = ".a"
1563+
elif self.flavor == "zos":
1564+
target_ext = ".x"
15321565
else:
15331566
target_ext = ".so"
15341567
elif self.type == "none":
@@ -1609,6 +1642,14 @@ def ComputeDeps(self, spec):
16091642
# link_deps.extend(spec.get('libraries', []))
16101643
return (gyp.common.uniquer(deps), gyp.common.uniquer(link_deps))
16111644

1645+
def GetSharedObjectFromSidedeck(self, sidedeck):
1646+
"""Return the shared object files based on sidedeck"""
1647+
return re.sub(r"\.x$", ".so", sidedeck)
1648+
1649+
def GetUnversionedSidedeckFromSidedeck(self, sidedeck):
1650+
"""Return the shared object files based on sidedeck"""
1651+
return re.sub(r"\.\d+\.x$", ".x", sidedeck)
1652+
16121653
def WriteDependencyOnExtraOutputs(self, target, extra_outputs):
16131654
self.WriteMakeRule(
16141655
[self.output_binary],
@@ -1861,6 +1902,11 @@ def WriteTarget(
18611902
part_of_all,
18621903
postbuilds=postbuilds,
18631904
)
1905+
# z/OS has a .so target as well as a sidedeck .x target
1906+
if self.flavor == "zos":
1907+
self.WriteLn('%s: %s' % (
1908+
QuoteSpaces(self.GetSharedObjectFromSidedeck(self.output_binary)),
1909+
QuoteSpaces(self.output_binary)))
18641910
elif self.type == "loadable_module":
18651911
for link_dep in link_deps:
18661912
assert " " not in link_dep, (
@@ -1918,7 +1964,9 @@ def WriteTarget(
19181964
else:
19191965
file_desc = "executable"
19201966
install_path = self._InstallableTargetInstallPath()
1921-
installable_deps = [self.output]
1967+
installable_deps = []
1968+
if self.flavor != "zos":
1969+
installable_deps.append(self.output)
19221970
if (
19231971
self.flavor == "mac"
19241972
and "product_dir" not in spec
@@ -1943,15 +1991,42 @@ def WriteTarget(
19431991
comment="Copy this to the %s output path." % file_desc,
19441992
part_of_all=part_of_all,
19451993
)
1946-
installable_deps.append(install_path)
1994+
if self.flavor != "zos":
1995+
installable_deps.append(install_path)
1996+
if self.flavor == 'zos' and self.type == 'shared_library':
1997+
# lib.target/libnode.so has a dependency on $(obj).target/libnode.so
1998+
self.WriteDoCmd([self.GetSharedObjectFromSidedeck(install_path)],
1999+
[self.GetSharedObjectFromSidedeck(self.output)], 'copy',
2000+
comment='Copy this to the %s output path.' %
2001+
file_desc, part_of_all=part_of_all)
2002+
# Create a symlink of libnode.x to libnode.version.x
2003+
self.WriteDoCmd([self.GetUnversionedSidedeckFromSidedeck(install_path)],
2004+
[install_path], 'symlink',
2005+
comment='Symlnk this to the %s output path.' %
2006+
file_desc, part_of_all=part_of_all)
2007+
# Place libnode.version.so and libnode.x symlink in lib.target dir
2008+
installable_deps.append(self.GetSharedObjectFromSidedeck(install_path))
2009+
installable_deps.append(
2010+
self.GetUnversionedSidedeckFromSidedeck(install_path))
19472011
if self.output != self.alias and self.alias != self.target:
19482012
self.WriteMakeRule(
19492013
[self.alias],
19502014
installable_deps,
19512015
comment="Short alias for building this %s." % file_desc,
19522016
phony=True,
19532017
)
1954-
if part_of_all:
2018+
if self.flavor == 'zos' and self.type == 'shared_library':
2019+
# Make sure that .x symlink target is run
2020+
self.WriteMakeRule(
2021+
['all'],
2022+
[
2023+
self.GetUnversionedSidedeckFromSidedeck(install_path),
2024+
self.GetSharedObjectFromSidedeck(install_path)
2025+
],
2026+
comment='Add %s to "all" target.' % file_desc,
2027+
phony=True,
2028+
)
2029+
elif part_of_all:
19552030
self.WriteMakeRule(
19562031
["all"],
19572032
[install_path],
@@ -2247,6 +2322,9 @@ def _InstallableTargetInstallPath(self):
22472322
# # Install all shared libs into a common directory (per toolset) for
22482323
# # convenient access with LD_LIBRARY_PATH.
22492324
# return "$(builddir)/lib.%s/%s" % (self.toolset, self.alias)
2325+
if self.flavor == "zos" and self.type == "shared_library":
2326+
return "$(builddir)/lib.%s/%s" % (self.toolset, self.alias)
2327+
22502328
return "$(builddir)/" + self.alias
22512329

22522330

@@ -2414,6 +2492,16 @@ def CalculateMakefilePath(build_file, base_name):
24142492
"flock_index": 2,
24152493
}
24162494
)
2495+
elif flavor == "os400":
2496+
copy_archive_arguments = "-pPRf"
2497+
header_params.update(
2498+
{
2499+
"copy_archive_args": copy_archive_arguments,
2500+
"link_commands": LINK_COMMANDS_OS400,
2501+
"flock": "./gyp-flock-tool flock",
2502+
"flock_index": 2,
2503+
}
2504+
)
24172505

24182506
build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
24192507
make_global_settings_array = data[build_file].get("make_global_settings", [])

tools/gyp/pylib/gyp/generator/msvs.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -423,12 +423,15 @@ def _BuildCommandLineForRuleRaw(
423423
command.insert(0, "call")
424424
# Fix the paths
425425
# TODO(quote): This is a really ugly heuristic, and will miss path fixing
426-
# for arguments like "--arg=path" or "/opt:path".
427-
# If the argument starts with a slash or dash, it's probably a command line
428-
# switch
426+
# for arguments like "--arg=path", arg=path, or "/opt:path".
427+
# If the argument starts with a slash or dash, or contains an equal sign,
428+
# it's probably a command line switch.
429429
# Return the path with forward slashes because the command using it might
430430
# not support backslashes.
431-
arguments = [i if (i[:1] in "/-") else _FixPath(i, "/") for i in cmd[1:]]
431+
arguments = [
432+
i if (i[:1] in "/-" or "=" in i) else _FixPath(i, "/")
433+
for i in cmd[1:]
434+
]
432435
arguments = [i.replace("$(InputDir)", "%INPUTDIR%") for i in arguments]
433436
arguments = [MSVSSettings.FixVCMacroSlashes(i) for i in arguments]
434437
if quote_cmd:

tools/gyp/setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
setup(
1717
name="gyp-next",
18-
version="0.10.1",
18+
version="0.12.1",
1919
description="A fork of the GYP build system for use in the Node.js projects",
2020
long_description=long_description,
2121
long_description_content_type="text/markdown",

tools/gyp/test_gyp.py

+1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ def main(argv=None):
116116
else:
117117
format_list = {
118118
"aix5": ["make"],
119+
"os400": ["make"],
119120
"freebsd7": ["make"],
120121
"freebsd8": ["make"],
121122
"openbsd5": ["make"],

tools/gyp/tools/pretty_gyp.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def count_braces(line):
9090
"""
9191
open_braces = ["[", "(", "{"]
9292
close_braces = ["]", ")", "}"]
93-
closing_prefix_re = re.compile(r"(.*?[^\s\]\}\)]+.*?)([\]\}\)],?)\s*$")
93+
closing_prefix_re = re.compile(r"[^\s\]\}\)]\s*[\]\}\)]+,?\s*$")
9494
cnt = 0
9595
stripline = COMMENT_RE.sub(r"", line)
9696
stripline = QUOTE_RE.sub(r"''", stripline)

0 commit comments

Comments
 (0)