| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 5bc7d7f commit 93c9402
10 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -15,7 +15,7 @@ jobs: | |||
| 15 | 15 | steps: | |
| 16 | 16 | - uses: actions/checkout@v2 | |
| 17 | 17 | - name: Set up Python ${{ matrix.python-version }} | |
| 18 | - uses: actions/setup-python@v2 | ||
| 18 | + uses: actions/setup-python@v3 | ||
| 19 | 19 | with: | |
| 20 | 20 | python-version: ${{ matrix.python-version }} | |
| 21 | 21 | - name: Install dependencies | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -21,10 +21,10 @@ jobs: | |||
| 21 | 21 | with: | |
| 22 | 22 | repository: nodejs/node-gyp | |
| 23 | 23 | path: node-gyp | |
| 24 | - - uses: actions/setup-node@v2 | ||
| 24 | + - uses: actions/setup-node@v3 | ||
| 25 | 25 | with: | |
| 26 | 26 | node-version: 14.x | |
| 27 | - - uses: actions/setup-python@v2 | ||
| 27 | + - uses: actions/setup-python@v3 | ||
| 28 | 28 | with: | |
| 29 | 29 | python-version: ${{ matrix.python }} | |
| 30 | 30 | - name: Install dependencies | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,5 +1,26 @@ | |||
| 1 | 1 | # Changelog | |
| 2 | 2 | ||
| 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 | + | ||
| 3 | 24 | ### [0.10.1](https://www.github.com/nodejs/gyp-next/compare/v0.10.0...v0.10.1) (2021-11-24) | |
| 4 | 25 | ||
| 5 | 26 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -454,6 +454,8 @@ def GetFlavor(params): | |||
| 454 | 454 | return "aix" | |
| 455 | 455 | if sys.platform.startswith(("os390", "zos")): | |
| 456 | 456 | return "zos" | |
| 457 | + if sys.platform == "os400": | ||
| 458 | + return "os400" | ||
| 457 | 459 | ||
| 458 | 460 | return "linux" | |
| 459 | 461 | ||
@@ -463,9 +465,13 @@ def CopyTool(flavor, out_path, generator_flags={}): | |||
| 463 | 465 | to |out_path|.""" | |
| 464 | 466 | # aix and solaris just need flock emulation. mac and win use more complicated | |
| 465 | 467 | # 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) | ||
| 469 | 475 | if not prefix: | |
| 470 | 476 | return | |
| 471 | 477 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -41,7 +41,7 @@ def ExecFlock(self, lockfile, *cmd_list): | |||
| 41 | 41 | # with EBADF, that's why we use this F_SETLK | |
| 42 | 42 | # hack instead. | |
| 43 | 43 | 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": | ||
| 45 | 45 | # Python on AIX is compiled with LARGEFILE support, which changes the | |
| 46 | 46 | # struct size. | |
| 47 | 47 | op = struct.pack("hhIllqq", fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -99,6 +99,8 @@ def CalculateVariables(default_variables, params): | |||
| 99 | 99 | default_variables.setdefault("OS", operating_system) | |
| 100 | 100 | if flavor == "aix": | |
| 101 | 101 | default_variables.setdefault("SHARED_LIB_SUFFIX", ".a") | |
| 102 | + elif flavor == "zos": | ||
| 103 | + default_variables.setdefault("SHARED_LIB_SUFFIX", ".x") | ||
| 102 | 104 | else: | |
| 103 | 105 | default_variables.setdefault("SHARED_LIB_SUFFIX", ".so") | |
| 104 | 106 | default_variables.setdefault("SHARED_LIB_DIR", "$(builddir)/lib.$(TOOLSET)") | |
@@ -237,6 +239,24 @@ def CalculateGeneratorInputInfo(params): | |||
| 237 | 239 | """ # noqa: E501 | |
| 238 | 240 | ||
| 239 | 241 | ||
| 242 | + LINK_COMMANDS_OS400 = """\ | ||
| 243 | + quiet_cmd_alink = AR($(TOOLSET)) $@ | ||
| 244 | + cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) -X64 crs $@ $(filter %.o,$^) | ||
| 245 | + | ||
| 246 | + quiet_cmd_alink_thin = AR($(TOOLSET)) $@ | ||
| 247 | + cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) -X64 crs $@ $(filter %.o,$^) | ||
| 248 | + | ||
| 249 | + quiet_cmd_link = LINK($(TOOLSET)) $@ | ||
| 250 | + cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) | ||
| 251 | + | ||
| 252 | + quiet_cmd_solink = SOLINK($(TOOLSET)) $@ | ||
| 253 | + cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) | ||
| 254 | + | ||
| 255 | + quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ | ||
| 256 | + cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) | ||
| 257 | + """ # noqa: E501 | ||
| 258 | + | ||
| 259 | + | ||
| 240 | 260 | LINK_COMMANDS_OS390 = """\ | |
| 241 | 261 | quiet_cmd_alink = AR($(TOOLSET)) $@ | |
| 242 | 262 | cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) | |
@@ -248,10 +268,10 @@ def CalculateGeneratorInputInfo(params): | |||
| 248 | 268 | cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) | |
| 249 | 269 | ||
| 250 | 270 | quiet_cmd_solink = SOLINK($(TOOLSET)) $@ | |
| 251 | - cmd_solink = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) -Wl,DLL | ||
| 271 | + 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 | ||
| 252 | 272 | ||
| 253 | 273 | quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ | |
| 254 | - cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) -Wl,DLL | ||
| 274 | + cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) | ||
| 255 | 275 | """ # noqa: E501 | |
| 256 | 276 | ||
| 257 | 277 | ||
@@ -400,6 +420,9 @@ def CalculateGeneratorInputInfo(params): | |||
| 400 | 420 | # send stderr to /dev/null to ignore messages when linking directories. | |
| 401 | 421 | cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp %(copy_archive_args)s "$<" "$@") | |
| 402 | 422 | ||
| 423 | + quiet_cmd_symlink = SYMLINK $@ | ||
| 424 | + cmd_symlink = ln -sf "$<" "$@" | ||
| 425 | + | ||
| 403 | 426 | %(link_commands)s | |
| 404 | 427 | """ # noqa: E501 | |
| 405 | 428 | r""" | |
@@ -981,12 +1004,20 @@ def WriteActions( | |||
| 981 | 1004 | # libraries, but until everything is made cross-compile safe, also use | |
| 982 | 1005 | # target libraries. | |
| 983 | 1006 | # TODO(piman): when everything is cross-compile safe, remove lib.target | |
| 984 | - self.WriteLn( | ||
| 985 | - "cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:" | ||
| 986 | - "$(builddir)/lib.target:$$LD_LIBRARY_PATH; " | ||
| 987 | - "export LD_LIBRARY_PATH; " | ||
| 988 | - "%s%s" % (name, cd_action, command) | ||
| 989 | - ) | ||
| 1007 | + if self.flavor == "zos" or self.flavor == "aix": | ||
| 1008 | + self.WriteLn( | ||
| 1009 | + "cmd_%s = LIBPATH=$(builddir)/lib.host:" | ||
| 1010 | + "$(builddir)/lib.target:$$LIBPATH; " | ||
| 1011 | + "export LIBPATH; " | ||
| 1012 | + "%s%s" % (name, cd_action, command) | ||
| 1013 | + ) | ||
| 1014 | + else: | ||
| 1015 | + self.WriteLn( | ||
| 1016 | + "cmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:" | ||
| 1017 | + "$(builddir)/lib.target:$$LD_LIBRARY_PATH; " | ||
| 1018 | + "export LD_LIBRARY_PATH; " | ||
| 1019 | + "%s%s" % (name, cd_action, command) | ||
| 1020 | + ) | ||
| 990 | 1021 | self.WriteLn() | |
| 991 | 1022 | outputs = [self.Absolutify(o) for o in outputs] | |
| 992 | 1023 | # The makefile rules are all relative to the top dir, but the gyp actions | |
@@ -1480,6 +1511,8 @@ def ComputeOutputBasename(self, spec): | |||
| 1480 | 1511 | target_prefix = "lib" | |
| 1481 | 1512 | if self.flavor == "aix": | |
| 1482 | 1513 | target_ext = ".a" | |
| 1514 | + elif self.flavor == "zos": | ||
| 1515 | + target_ext = ".x" | ||
| 1483 | 1516 | else: | |
| 1484 | 1517 | target_ext = ".so" | |
| 1485 | 1518 | elif self.type == "none": | |
@@ -1560,6 +1593,14 @@ def ComputeDeps(self, spec): | |||
| 1560 | 1593 | # link_deps.extend(spec.get('libraries', [])) | |
| 1561 | 1594 | return (gyp.common.uniquer(deps), gyp.common.uniquer(link_deps)) | |
| 1562 | 1595 | ||
| 1596 | + def GetSharedObjectFromSidedeck(self, sidedeck): | ||
| 1597 | + """Return the shared object files based on sidedeck""" | ||
| 1598 | + return re.sub(r"\.x$", ".so", sidedeck) | ||
| 1599 | + | ||
| 1600 | + def GetUnversionedSidedeckFromSidedeck(self, sidedeck): | ||
| 1601 | + """Return the shared object files based on sidedeck""" | ||
| 1602 | + return re.sub(r"\.\d+\.x$", ".x", sidedeck) | ||
| 1603 | + | ||
| 1563 | 1604 | def WriteDependencyOnExtraOutputs(self, target, extra_outputs): | |
| 1564 | 1605 | self.WriteMakeRule( | |
| 1565 | 1606 | [self.output_binary], | |
@@ -1798,6 +1839,11 @@ def WriteTarget( | |||
| 1798 | 1839 | part_of_all, | |
| 1799 | 1840 | postbuilds=postbuilds, | |
| 1800 | 1841 | ) | |
| 1842 | + # z/OS has a .so target as well as a sidedeck .x target | ||
| 1843 | + if self.flavor == "zos": | ||
| 1844 | + self.WriteLn('%s: %s' % ( | ||
| 1845 | + QuoteSpaces(self.GetSharedObjectFromSidedeck(self.output_binary)), | ||
| 1846 | + QuoteSpaces(self.output_binary))) | ||
| 1801 | 1847 | elif self.type == "loadable_module": | |
| 1802 | 1848 | for link_dep in link_deps: | |
| 1803 | 1849 | assert " " not in link_dep, ( | |
@@ -1855,7 +1901,9 @@ def WriteTarget( | |||
| 1855 | 1901 | else: | |
| 1856 | 1902 | file_desc = "executable" | |
| 1857 | 1903 | install_path = self._InstallableTargetInstallPath() | |
| 1858 | - installable_deps = [self.output] | ||
| 1904 | + installable_deps = [] | ||
| 1905 | + if self.flavor != "zos": | ||
| 1906 | + installable_deps.append(self.output) | ||
| 1859 | 1907 | if ( | |
| 1860 | 1908 | self.flavor == "mac" | |
| 1861 | 1909 | and "product_dir" not in spec | |
@@ -1880,15 +1928,42 @@ def WriteTarget( | |||
| 1880 | 1928 | comment="Copy this to the %s output path." % file_desc, | |
| 1881 | 1929 | part_of_all=part_of_all, | |
| 1882 | 1930 | ) | |
| 1883 | - installable_deps.append(install_path) | ||
| 1931 | + if self.flavor != "zos": | ||
| 1932 | + installable_deps.append(install_path) | ||
| 1933 | + if self.flavor == 'zos' and self.type == 'shared_library': | ||
| 1934 | + # lib.target/libnode.so has a dependency on $(obj).target/libnode.so | ||
| 1935 | + self.WriteDoCmd([self.GetSharedObjectFromSidedeck(install_path)], | ||
| 1936 | + [self.GetSharedObjectFromSidedeck(self.output)], 'copy', | ||
| 1937 | + comment='Copy this to the %s output path.' % | ||
| 1938 | + file_desc, part_of_all=part_of_all) | ||
| 1939 | + # Create a symlink of libnode.x to libnode.version.x | ||
| 1940 | + self.WriteDoCmd([self.GetUnversionedSidedeckFromSidedeck(install_path)], | ||
| 1941 | + [install_path], 'symlink', | ||
| 1942 | + comment='Symlnk this to the %s output path.' % | ||
| 1943 | + file_desc, part_of_all=part_of_all) | ||
| 1944 | + # Place libnode.version.so and libnode.x symlink in lib.target dir | ||
| 1945 | + installable_deps.append(self.GetSharedObjectFromSidedeck(install_path)) | ||
| 1946 | + installable_deps.append( | ||
| 1947 | + self.GetUnversionedSidedeckFromSidedeck(install_path)) | ||
| 1884 | 1948 | if self.output != self.alias and self.alias != self.target: | |
| 1885 | 1949 | self.WriteMakeRule( | |
| 1886 | 1950 | [self.alias], | |
| 1887 | 1951 | installable_deps, | |
| 1888 | 1952 | comment="Short alias for building this %s." % file_desc, | |
| 1889 | 1953 | phony=True, | |
| 1890 | 1954 | ) | |
| 1891 | - if part_of_all: | ||
| 1955 | + if self.flavor == 'zos' and self.type == 'shared_library': | ||
| 1956 | + # Make sure that .x symlink target is run | ||
| 1957 | + self.WriteMakeRule( | ||
| 1958 | + ['all'], | ||
| 1959 | + [ | ||
| 1960 | + self.GetUnversionedSidedeckFromSidedeck(install_path), | ||
| 1961 | + self.GetSharedObjectFromSidedeck(install_path) | ||
| 1962 | + ], | ||
| 1963 | + comment='Add %s to "all" target.' % file_desc, | ||
| 1964 | + phony=True, | ||
| 1965 | + ) | ||
| 1966 | + elif part_of_all: | ||
| 1892 | 1967 | self.WriteMakeRule( | |
| 1893 | 1968 | ["all"], | |
| 1894 | 1969 | [install_path], | |
@@ -2184,6 +2259,9 @@ def _InstallableTargetInstallPath(self): | |||
| 2184 | 2259 | # # Install all shared libs into a common directory (per toolset) for | |
| 2185 | 2260 | # # convenient access with LD_LIBRARY_PATH. | |
| 2186 | 2261 | # return "$(builddir)/lib.%s/%s" % (self.toolset, self.alias) | |
| 2262 | + if self.flavor == "zos" and self.type == "shared_library": | ||
| 2263 | + return "$(builddir)/lib.%s/%s" % (self.toolset, self.alias) | ||
| 2264 | + | ||
| 2187 | 2265 | return "$(builddir)/" + self.alias | |
| 2188 | 2266 | ||
| 2189 | 2267 | ||
@@ -2351,6 +2429,16 @@ def CalculateMakefilePath(build_file, base_name): | |||
| 2351 | 2429 | "flock_index": 2, | |
| 2352 | 2430 | } | |
| 2353 | 2431 | ) | |
| 2432 | + elif flavor == "os400": | ||
| 2433 | + copy_archive_arguments = "-pPRf" | ||
| 2434 | + header_params.update( | ||
| 2435 | + { | ||
| 2436 | + "copy_archive_args": copy_archive_arguments, | ||
| 2437 | + "link_commands": LINK_COMMANDS_OS400, | ||
| 2438 | + "flock": "./gyp-flock-tool flock", | ||
| 2439 | + "flock_index": 2, | ||
| 2440 | + } | ||
| 2441 | + ) | ||
| 2354 | 2442 | ||
| 2355 | 2443 | build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0]) | |
| 2356 | 2444 | make_global_settings_array = data[build_file].get("make_global_settings", []) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -423,12 +423,15 @@ def _BuildCommandLineForRuleRaw( | |||
| 423 | 423 | command.insert(0, "call") | |
| 424 | 424 | # Fix the paths | |
| 425 | 425 | # 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. | ||
| 429 | 429 | # Return the path with forward slashes because the command using it might | |
| 430 | 430 | # 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 | + ] | ||
| 432 | 435 | arguments = [i.replace("$(InputDir)", "%INPUTDIR%") for i in arguments] | |
| 433 | 436 | arguments = [MSVSSettings.FixVCMacroSlashes(i) for i in arguments] | |
| 434 | 437 | if quote_cmd: | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -15,7 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | 16 | setup( | |
| 17 | 17 | name="gyp-next", | |
| 18 | - version="0.10.1", | ||
| 18 | + version="0.12.1", | ||
| 19 | 19 | description="A fork of the GYP build system for use in the Node.js projects", | |
| 20 | 20 | long_description=long_description, | |
| 21 | 21 | long_description_content_type="text/markdown", | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -116,6 +116,7 @@ def main(argv=None): | |||
| 116 | 116 | else: | |
| 117 | 117 | format_list = { | |
| 118 | 118 | "aix5": ["make"], | |
| 119 | + "os400": ["make"], | ||
| 119 | 120 | "freebsd7": ["make"], | |
| 120 | 121 | "freebsd8": ["make"], | |
| 121 | 122 | "openbsd5": ["make"], | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -90,7 +90,7 @@ def count_braces(line): | |||
| 90 | 90 | """ | |
| 91 | 91 | open_braces = ["[", "(", "{"] | |
| 92 | 92 | close_braces = ["]", ")", "}"] | |
| 93 | - closing_prefix_re = re.compile(r"(.*?[^\s\]\}\)]+.*?)([\]\}\)],?)\s*$") | ||
| 93 | + closing_prefix_re = re.compile(r"[^\s\]\}\)]\s*[\]\}\)]+,?\s*$") | ||
| 94 | 94 | cnt = 0 | |
| 95 | 95 | stripline = COMMENT_RE.sub(r"", line) | |
| 96 | 96 | stripline = QUOTE_RE.sub(r"''", stripline) | |
| Back | FazBrowse Home | New Git URL |
0 commit comments