Skip to content

Commit

Permalink
feat(gyp): update gyp to v0.9.6 (#2481)
Browse files Browse the repository at this point in the history
  • Loading branch information
gengjiawen committed Aug 23, 2021
1 parent 660dd7b commit ed9a9ed
Show file tree
Hide file tree
Showing 16 changed files with 137 additions and 73 deletions.
2 changes: 1 addition & 1 deletion gyp/.github/workflows/Python_tests.yml
Expand Up @@ -23,7 +23,7 @@ jobs:
python -m pip install --upgrade pip
pip install -r requirements_dev.txt
- name: Lint with flake8
run: flake8 . --count --show-source --statistics
run: flake8 . --ignore=E203,W503 --max-complexity=101 --max-line-length=88 --show-source --statistics
- name: Test with pytest
run: pytest
# - name: Run doctests with pytest
Expand Down
4 changes: 3 additions & 1 deletion gyp/.github/workflows/node-gyp.yml
Expand Up @@ -8,6 +8,8 @@ jobs:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
python: [3.6, 3.9]

runs-on: ${{ matrix.os }}
steps:
- name: Clone gyp-next
Expand All @@ -24,7 +26,7 @@ jobs:
node-version: 14.x
- uses: actions/setup-python@v2
with:
python-version: 3.9
python-version: ${{ matrix.python }}
- name: Install dependencies
run: |
cd node-gyp
Expand Down
38 changes: 38 additions & 0 deletions gyp/CHANGELOG.md
@@ -1,5 +1,43 @@
# Changelog

### [0.9.6](https://www.github.com/nodejs/gyp-next/compare/v0.9.5...v0.9.6) (2021-08-23)


### Bug Fixes

* align flake8 test ([#122](https://www.github.com/nodejs/gyp-next/issues/122)) ([f1faa8d](https://www.github.com/nodejs/gyp-next/commit/f1faa8d3081e1a47e917ff910892f00dff16cf8a))
* **msvs:** fix paths again in action command arguments ([#121](https://www.github.com/nodejs/gyp-next/issues/121)) ([7159dfb](https://www.github.com/nodejs/gyp-next/commit/7159dfbc5758c9ec717e215f2c36daf482c846a1))

### [0.9.5](https://www.github.com/nodejs/gyp-next/compare/v0.9.4...v0.9.5) (2021-08-18)


### Bug Fixes

* add python 3.6 to node-gyp integration test ([3462d4c](https://www.github.com/nodejs/gyp-next/commit/3462d4ce3c31cce747513dc7ca9760c81d57c60e))
* revert for windows compatibility ([d078e7d](https://www.github.com/nodejs/gyp-next/commit/d078e7d7ae080ddae243188f6415f940376a7368))
* support msvs_quote_cmd in ninja generator ([#117](https://www.github.com/nodejs/gyp-next/issues/117)) ([46486ac](https://www.github.com/nodejs/gyp-next/commit/46486ac6e9329529d51061e006a5b39631e46729))

### [0.9.4](https://www.github.com/nodejs/gyp-next/compare/v0.9.3...v0.9.4) (2021-08-09)


### Bug Fixes

* .S is an extension for asm file on Windows ([#115](https://www.github.com/nodejs/gyp-next/issues/115)) ([d2fad44](https://www.github.com/nodejs/gyp-next/commit/d2fad44ef3a79ca8900f1307060153ded57053fc))

### [0.9.3](https://www.github.com/nodejs/gyp-next/compare/v0.9.2...v0.9.3) (2021-07-07)


### Bug Fixes

* build failure with ninja and Python 3 on Windows ([#113](https://www.github.com/nodejs/gyp-next/issues/113)) ([c172d10](https://www.github.com/nodejs/gyp-next/commit/c172d105deff5db4244e583942215918fa80dd3c))

### [0.9.2](https://www.github.com/nodejs/gyp-next/compare/v0.9.1...v0.9.2) (2021-05-21)


### Bug Fixes

* add support of utf8 encoding ([#105](https://www.github.com/nodejs/gyp-next/issues/105)) ([4d0f93c](https://www.github.com/nodejs/gyp-next/commit/4d0f93c249286d1f0c0f665f5fe7346119f98cf1))

### [0.9.1](https://www.github.com/nodejs/gyp-next/compare/v0.9.0...v0.9.1) (2021-05-14)


Expand Down
2 changes: 1 addition & 1 deletion gyp/pylib/gyp/MSVSUtil.py
Expand Up @@ -55,7 +55,7 @@ def _SuffixName(name, suffix):
Target name with suffix added (foo_suffix#target)
"""
parts = name.rsplit("#", 1)
parts[0] = "{}_{}".format(parts[0], suffix)
parts[0] = f"{parts[0]}_{suffix}"
return "#".join(parts)


Expand Down
2 changes: 1 addition & 1 deletion gyp/pylib/gyp/common.py
Expand Up @@ -562,7 +562,7 @@ def pop(self, last=True): # pylint: disable=W0221
def __repr__(self):
if not self:
return f"{self.__class__.__name__}()"
return "{}({!r})".format(self.__class__.__name__, list(self))
return f"{self.__class__.__name__}({list(self)!r})"

def __eq__(self, other):
if isinstance(other, OrderedSet):
Expand Down
6 changes: 4 additions & 2 deletions gyp/pylib/gyp/easy_xml.py
Expand Up @@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import sys
import re
import os
import locale
Expand Down Expand Up @@ -84,7 +85,7 @@ def _ConstructContentList(xml_parts, specification, pretty, level=0):
rest = specification[1:]
if rest and isinstance(rest[0], dict):
for at, val in sorted(rest[0].items()):
xml_parts.append(' {}="{}"'.format(at, _XmlEscape(val, attr=True)))
xml_parts.append(f' {at}="{_XmlEscape(val, attr=True)}"')
rest = rest[1:]
if rest:
xml_parts.append(">")
Expand All @@ -106,7 +107,8 @@ def _ConstructContentList(xml_parts, specification, pretty, level=0):
xml_parts.append("/>%s" % new_line)


def WriteXmlIfChanged(content, path, encoding="utf-8", pretty=False, win32=False):
def WriteXmlIfChanged(content, path, encoding="utf-8", pretty=False,
win32=(sys.platform == "win32")):
""" Writes the XML content to disk, touching the file only if it has changed.
Args:
Expand Down
6 changes: 3 additions & 3 deletions gyp/pylib/gyp/generator/android.py
Expand Up @@ -349,7 +349,7 @@ def WriteActions(self, actions, extra_sources, extra_outputs):
for output in outputs[1:]:
# Make each output depend on the main output, with an empty command
# to force make to notice that the mtime has changed.
self.WriteLn("{}: {} ;".format(self.LocalPathify(output), main_output))
self.WriteLn(f"{self.LocalPathify(output)}: {main_output} ;")

extra_outputs += outputs
self.WriteLn()
Expand Down Expand Up @@ -616,7 +616,7 @@ def WriteSources(self, spec, configs, extra_sources):
if IsCPPExtension(ext) and ext != local_cpp_extension:
local_file = root + local_cpp_extension
if local_file != source:
self.WriteLn("{}: {}".format(local_file, self.LocalPathify(source)))
self.WriteLn(f"{local_file}: {self.LocalPathify(source)}")
self.WriteLn("\tmkdir -p $(@D); cp $< $@")
origin_src_dirs.append(os.path.dirname(source))
final_generated_sources.append(local_file)
Expand Down Expand Up @@ -908,7 +908,7 @@ def WriteTarget(
if isinstance(v, list):
self.WriteList(v, k)
else:
self.WriteLn("{} := {}".format(k, make.QuoteIfNecessary(v)))
self.WriteLn(f"{k} := {make.QuoteIfNecessary(v)}")
self.WriteLn("")

# Add to the set of targets which represent the gyp 'all' target. We use the
Expand Down
2 changes: 1 addition & 1 deletion gyp/pylib/gyp/generator/make.py
Expand Up @@ -2133,7 +2133,7 @@ def WriteSortedXcodeEnv(self, target, env):
# export foo := a\ b
# it does not -- the backslash is written to the env as literal character.
# So don't escape spaces in |env[k]|.
self.WriteLn("{}: export {} := {}".format(QuoteSpaces(target), k, v))
self.WriteLn(f"{QuoteSpaces(target)}: export {k} := {v}")

def Objectify(self, path):
"""Convert a path to its output directory form."""
Expand Down
29 changes: 20 additions & 9 deletions gyp/pylib/gyp/generator/msvs.py
Expand Up @@ -152,7 +152,7 @@ def _NormalizedSource(source):
return source


def _FixPath(path):
def _FixPath(path, separator="\\"):
"""Convert paths to a form that will make sense in a vcproj file.
Arguments:
Expand All @@ -168,9 +168,12 @@ def _FixPath(path):
and not _IsWindowsAbsPath(path)
):
path = os.path.join(fixpath_prefix, path)
path = path.replace("/", "\\")
if separator == "\\":
path = path.replace("/", "\\")
path = _NormalizedSource(path)
if path and path[-1] == "\\":
if separator == "/":
path = path.replace("\\", "/")
if path and path[-1] == separator:
path = path[:-1]
return path

Expand All @@ -185,9 +188,9 @@ def _IsWindowsAbsPath(path):
return path.startswith("c:") or path.startswith("C:")


def _FixPaths(paths):
def _FixPaths(paths, separator="\\"):
"""Fix each of the paths of the list."""
return [_FixPath(i) for i in paths]
return [_FixPath(i, separator) for i in paths]


def _ConvertSourcesToFilterHierarchy(
Expand Down Expand Up @@ -314,7 +317,7 @@ def _ConfigBaseName(config_name, platform_name):

def _ConfigFullName(config_name, config_data):
platform_name = _ConfigPlatform(config_data)
return "{}|{}".format(_ConfigBaseName(config_name, platform_name), platform_name)
return f"{_ConfigBaseName(config_name, platform_name)}|{platform_name}"


def _ConfigWindowsTargetPlatformVersion(config_data, version):
Expand All @@ -335,15 +338,15 @@ def _ConfigWindowsTargetPlatformVersion(config_data, version):
# Find a matching entry in sdk_dir\include.
expected_sdk_dir = r"%s\include" % sdk_dir
names = sorted(
[
(
x
for x in (
os.listdir(expected_sdk_dir)
if os.path.isdir(expected_sdk_dir)
else []
)
if x.startswith(version)
],
),
reverse=True,
)
if names:
Expand Down Expand Up @@ -418,7 +421,15 @@ def _BuildCommandLineForRuleRaw(
# file out of the raw command string, and some commands (like python) are
# actually batch files themselves.
command.insert(0, "call")
arguments = [i.replace("$(InputDir)", "%INPUTDIR%") for i in cmd[1:]]
# 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
# 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.replace("$(InputDir)", "%INPUTDIR%") for i in arguments]
arguments = [MSVSSettings.FixVCMacroSlashes(i) for i in arguments]
if quote_cmd:
# Support a mode for using cmd directly.
Expand Down
32 changes: 16 additions & 16 deletions gyp/pylib/gyp/generator/ninja.py
Expand Up @@ -638,7 +638,7 @@ def GenerateDescription(self, verb, message, fallback):
if self.toolset != "target":
verb += "(%s)" % self.toolset
if message:
return "{} {}".format(verb, self.ExpandSpecial(message))
return f"{verb} {self.ExpandSpecial(message)}"
else:
return f"{verb} {self.name}: {fallback}"

Expand All @@ -654,18 +654,18 @@ def WriteActions(
description = self.GenerateDescription(
"ACTION", action.get("message", None), name
)
is_cygwin = (
self.msvs_settings.IsRuleRunUnderCygwin(action)
win_shell_flags = (
self.msvs_settings.GetRuleShellFlags(action)
if self.flavor == "win"
else False
else None
)
args = action["action"]
depfile = action.get("depfile", None)
if depfile:
depfile = self.ExpandSpecial(depfile, self.base_to_build)
pool = "console" if int(action.get("ninja_use_console", 0)) else None
rule_name, _ = self.WriteNewNinjaRule(
name, args, description, is_cygwin, env, pool, depfile=depfile
name, args, description, win_shell_flags, env, pool, depfile=depfile
)

inputs = [self.GypPathToNinja(i, env) for i in action["inputs"]]
Expand Down Expand Up @@ -707,14 +707,14 @@ def WriteRules(
rule.get("message", None),
("%s " + generator_default_variables["RULE_INPUT_PATH"]) % name,
)
is_cygwin = (
self.msvs_settings.IsRuleRunUnderCygwin(rule)
win_shell_flags = (
self.msvs_settings.GetRuleShellFlags(rule)
if self.flavor == "win"
else False
else None
)
pool = "console" if int(rule.get("ninja_use_console", 0)) else None
rule_name, args = self.WriteNewNinjaRule(
name, args, description, is_cygwin, env, pool
name, args, description, win_shell_flags, env, pool
)

# TODO: if the command references the outputs directly, we should
Expand All @@ -733,7 +733,7 @@ def WriteRules(

def cygwin_munge(path):
# pylint: disable=cell-var-from-loop
if is_cygwin:
if win_shell_flags and win_shell_flags.cygwin:
return path.replace("\\", "/")
return path

Expand Down Expand Up @@ -1221,7 +1221,7 @@ def WriteSourcesForArch(
command = "cc_s"
elif (
self.flavor == "win"
and ext == "asm"
and ext in ("asm", "S")
and not self.msvs_settings.HasExplicitAsmRules(spec)
):
command = "asm"
Expand Down Expand Up @@ -1899,7 +1899,7 @@ def WriteVariableList(self, ninja_file, var, values):
ninja_file.variable(var, " ".join(values))

def WriteNewNinjaRule(
self, name, args, description, is_cygwin, env, pool, depfile=None
self, name, args, description, win_shell_flags, env, pool, depfile=None
):
"""Write out a new ninja "rule" statement for a given command.
Expand Down Expand Up @@ -1946,13 +1946,14 @@ def WriteNewNinjaRule(
if self.flavor == "win":
rspfile = rule_name + ".$unique_name.rsp"
# The cygwin case handles this inside the bash sub-shell.
run_in = "" if is_cygwin else " " + self.build_to_base
if is_cygwin:
run_in = "" if win_shell_flags.cygwin else " " + self.build_to_base
if win_shell_flags.cygwin:
rspfile_content = self.msvs_settings.BuildCygwinBashCommandLine(
args, self.build_to_base
)
else:
rspfile_content = gyp.msvs_emulation.EncodeRspFileList(args)
rspfile_content = gyp.msvs_emulation.EncodeRspFileList(
args, win_shell_flags.quote)
command = (
"%s gyp-win-tool action-wrapper $arch " % sys.executable
+ rspfile
Expand Down Expand Up @@ -2389,7 +2390,6 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, config_name
)
if flavor == "win":
master_ninja.variable("ld_host", ld_host)
master_ninja.variable("ldxx_host", ldxx_host)
else:
master_ninja.variable(
"ld_host", CommandWithWrapper("LINK", wrappers, ld_host)
Expand Down
2 changes: 1 addition & 1 deletion gyp/pylib/gyp/input.py
Expand Up @@ -225,7 +225,7 @@ def LoadOneBuildFile(build_file_path, data, aux_data, includes, is_target, check
return data[build_file_path]

if os.path.exists(build_file_path):
build_file_contents = open(build_file_path).read()
build_file_contents = open(build_file_path, encoding='utf-8').read()
else:
raise GypError(f"{build_file_path} not found (cwd: {os.getcwd()})")

Expand Down

0 comments on commit ed9a9ed

Please sign in to comment.