Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

win: Support Visual Studio 2019 #1715

Closed
wants to merge 70 commits into from
Closed

Conversation

syohex
Copy link

@syohex syohex commented Apr 9, 2019

Checklist
Description of change
  • Support Visual Studio 2019.
    Original code does not work with Visual Studio 2019 because path of VS2019's MSBuild.exe is different from VS2017's MSBuild.exe.
  • And improve error check. If msbuild.exe is not found, then throws error.

isaacs and others added 30 commits June 6, 2017 06:56
Tar version 3 performs better and is more well tested than its
predecessor.  npm will be using this in the near future, so there is no
benefit in shipping a node-gyp that uses the slower and less reliable
fstream-based tar.

This drops support for node 0.x, and thus should be considered a
breaking semver-major change.

PR-URL: nodejs#1212
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
* dropping support for node < 4
* signal the CI not to test node < 4
If you're providing a path to a header tarball to install, you probably
want it to always be re-installed.

PR-URL: nodejs#1220
Fixes: nodejs#1216
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Refael Ackermann <refack@gmail.com>
* test: build simple addon in path with non-ascii characters
* test: add test-charmap.py

PR-URL: nodejs#1203
Reviewed-By: Refael Ackermann <refack@gmail.com>
Enable linking to the platform specific installation instructions

PR-URL: nodejs#1225
Reviewed-By: Refael Ackermann <refack@gmail.com>
Lifted verbatim from
https://github.com/nodejs/node/blob/master/CONTRIBUTING.md
then `s/Node.js/node-gyp/`.

PR-URL: nodejs#1229
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Give users reporting bugs a clearer idea of the info that will be
helpful when reporting issues.

PR-URL: nodejs#1228
Refs: https://github.com/nodejs/node/tree/master/.github
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
PR-URL: nodejs#1292
Refs: nodejs#1195 (comment)
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Initial work to add z/OS support to node-gyp.


PR-URL: nodejs#1276
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
GYP automatically turns variables ending in _dir, _file or _path into
absolute paths but didn't check for empty strings.

It interacted badly with variables inherited through the environment
from npm, the `scripts-prepend-node-path=false` setting in particular
because it is turned into `npm_config_script_prepend_node_path=`.

Fixes: nodejs#1217
PR-URL: nodejs#1267
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
The description erroneously stated that it should point the node binary.
It needs to point to the node source code.

PR-URL: nodejs#1372
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Retry the download+install dance only once after encountering an EACCES.

That only happens when both the devdir (usually: `$HOME/.node-gyp`) and
the current working directory aren't writable.  Users won't often hit
that except through `sudo npm install` because npm drops privileges
before executing node-gyp.

Fixes: nodejs#1383
PR-URL: nodejs#1384
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
As node-gyp rebuild doesn't seem to need xcodebuild, we don't need to be
printing the error every time GYP is run.

PR-URL: nodejs#1370
Fixes: nodejs#569
Refs: nodejs#1057
Refs: https://chromium-review.googlesource.com/c/492046/
PR-URL: nodejs#1323
Fixes: nodejs#1295
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
This fixes the regular expression matching in `xcode_emulation`
to also handle version numbers with multiple-digit major versions
which would otherwise break under use of XCode 10

Fixes: nodejs#1454
PR-URL: nodejs#1455
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Node.js on z/OS uses shared dll (libnode.so). When linking native
addons, node-gyp needs to find the corresponding libnode.x during
the link step.

PR-URL: nodejs#1451
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Refael Ackermann <refack@gmail.com>
PR-URL: nodejs#1451
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Refael Ackermann <refack@gmail.com>
PR-URL: nodejs#1167
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Currently, on non-Windows platforms, it is possible to have
a multi-target native module and specify building just some
of the targets using `node-gyp build my_target`.

On Windows, however, specifying the targets to build requires the `/t:`
or `/target:` flag. Without this change you will get an `MSB1008` error
because MSBuild thinks you are trying to specify multiple solutions.

PR-URL: nodejs#1164
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Header files for deps are in a different location in the Node.js
source tree compared to the release tarballs.

PR-URL: nodejs#1055
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
PR-URL: nodejs#1158
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Refael Ackermann <refack@gmail.com>
PR-URL: nodejs#1436
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Shrinks node-gyp's size by about 100 kB.

PR-URL: nodejs#1458
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Fixes grammar, removes extra lines and spaces, etc. Also removes a few
references to `node-waf`, which was removed ~6 years ago now. Happy to
add back if people still need that information.

PR-URL: nodejs#1498
Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
- Removes "module dependencies" comments and things that, IMHO, don't add
too much value. Happy to add back if helps some people when reading
through `node-gyp`.
- DRY up `lib/process-release.js`.
- Removes a bunch of extra blank lines, as well as random spaces.

PR-URL: nodejs#1508
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
- Uses `.eslintrc.yaml` for configuration
- `npm run lint` is part of `npm test`

PR-URL: nodejs#1497
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: João Reis <reis@janeasystems.com>
This makes the parsing more robust and fixes the additional issue
related to USB Device Connectivity component.

Fixes: nodejs#1466
PR-URL: nodejs#1516
Reviewed-By: João Reis <reis@janeasystems.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
This is cleaner than filtering additional strings from
platform.python_version().

PR-URL: nodejs#1504
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Jon Moss <me@jonathanmoss.me>
Reviewed-By: Rod Vagg <rod@vagg.org>
Fixes: nodejs#1472
PR-URL: nodejs#1490
Reviewed-By: Jon Moss <me@jonathanmoss.me>
Siilwyn and others added 16 commits October 20, 2018 16:44
Breaking change: needs Node.js version 6 or higher

nodejs#1570
Reviewed-By: Refael Ackermann <refack@gmail.com>
PR-URL: nodejs#1570
Fixes: nodejs#175
Fixes: nodejs#1124
Reviewed-By: Refael Ackermann <refack@gmail.com>
PR-URL: nodejs#1534
Reviewed-By: Refael Ackermann <refack@gmail.com>
PR-URL: nodejs#1340
Reviewed-By: Refael Ackermann <refack@gmail.com>
PR-URL: nodejs#1566
Reviewed-By: Refael Ackermann <refack@gmail.com>
PR-URL: nodejs#1269
Refs: nodejs#1582
Reviewed-By: Rod Vagg <rod@vagg.org>
Reviewed-By: João Reis <reis@janeasystems.com>
Try everything until Python is found.

PR-URL: nodejs#1582
Reviewed-By: Rod Vagg <rod@vagg.org>
PR-URL: nodejs#1245
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Suggest using --verbose npm switch when providing logs. Hopefully,
better direct users to use backticks correctly.

PR-URL: nodejs#1618
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: João Reis <reis@janeasystems.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
It isn't possible to access
`tools/gyp/pylib/gyp/generator/compile_commands_json.py` using the
`--format` option.

This commit moves the file in a place where it can be accessed.

Fixes: nodejs#1526
PR-URL: nodejs#1661
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Signed-off-by: Paul Maréchal <paul.marechal@ericsson.com>
PR-URL: nodejs#1655
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: João Reis <reis@janeasystems.com>
Since ARM64 build dependencies are not included in the "Desktop
development with C++" workload of Visual Studio 2017, this change adds
a note explaining what additional components are required to build
native modules for the new Windows platform.

PR-URL: nodejs#1655
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: João Reis <reis@janeasystems.com>
PR-URL: nodejs#1650
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
If node-gyp configure has set up MSBuild location use it instead the
one that happens to be first on the PATH.

PR-URL: nodejs#1654
Fixes: nodejs#1653
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: João Reis <reis@janeasystems.com>
V8 7.4 removes some API functions. Replace those with their NAN
counterparts.

PR-URL: nodejs#1705
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Path of VS2019's MSBuild.exe is different from VS2017's MSBuild.exe.
This change supports its path. And improve error check for finding
msbuild.exe, if it is not found, then throws error.

Fixes: nodejs#1663
Copy link

@ghost ghost left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just one comment, although I think it's worth considering.

try {
// Visual Studio 2017
msbuildPath = path.join(vsSetup.path, 'MSBuild', '15.0', 'Bin', 'MSBuild.exe')
if (!fs.existsSync(msbuildPath)) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about inversing the logic here and prioritize rather VS2019 (Current) directory than 15.0. IMHO current approach would prevent users from compiling vs2019 projects when they have installed both 2017 and 2019 version of VS because msbuild 15.0 would be discovered in the first place. If it would be inverted, MSBuild 2019 would correctly detect older build tools as well. What do you think guys?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree and fix by 29b0c2e . Thanks for good suggestion.

@refack
Copy link
Contributor

refack commented Apr 11, 2019

Problem is MSVS2019 comes with 14.2 toolset, so in that case it needs to set:

defaults['msbuild_toolset'] = 'v142'

But anyway, as soon as GYP3 passes all tests on 2017 & 2019, I'll PR to replace the old GYP, so we won't need these tricks (GYP3 has full support for MSVS 2017 & 2019)

@cleever
Copy link

cleever commented Apr 15, 2019

Any estimate of when it will be available?

@KENNYSOFT
Copy link

Please accept this ASAP...

@fuyutsuki
Copy link

I want to use this solution ASAP…

Copy link
Member

@bnoordhuis bnoordhuis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not 100% convinced this is the right approach but I'm willing to be persuaded that it's better than the alternatives.

Right now this doesn't really make node-gyp support VS 2019, it just makes it look for msbuild.exe in an alternative location.

There is existing support for detecting VS 2017, see commit ae141e1, and for detecting older VS versions by scanning the registry, see doWhich() and findMsbuild() in lib/build.js. I would prefer VS 2019 support reuses/extends that rather than piling on a special case.

Aside: this PR needs a rebase against master. Someone force-pushed to the repo a while ago, invalidating the merge base. :-/

@joaocgreis
Copy link
Member

joaocgreis commented Jun 14, 2019

@syohex support ended up landing from another PR, I believe we can close this one now. Thanks for working on this and opening this PR.

node-gyp v5.0.0 is out with Visual Studio 2019 support. It's not yet integrated into npm so it has to be installed manually. This should do it (only need to be run once):

Windows Command Prompt
npm install --global node-gyp@latest
for /f "delims=" %P in ('npm prefix -g') do npm config set node_gyp "%P\node_modules\node-gyp\bin\node-gyp.js"

Powershell
npm install --global node-gyp@latest
npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gyp.js"}


That is, install node-gyp globally and make the npm config variable node_gyp point to node-gyp.js.

How to undo this after node-gyp is integrated into npm
npm uninstall --global node-gyp
npm config delete node_gyp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.