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

Get the location of msbuild.exe #128

Open
mafintosh opened this issue Oct 8, 2021 · 5 comments
Open

Get the location of msbuild.exe #128

mafintosh opened this issue Oct 8, 2021 · 5 comments

Comments

@mafintosh
Copy link
Member

Hi!

Just a quick question, but node-gyp is really good at finding the right location of the msbuild.exe to use when compiling. For some very specific compilation stuff we do with libsodium we also need to find it, and have so far been duplication the logic in sodium-native for that.

This made me wonder, is there a CLI command or something equivalent to print the location of msbuild.exe so we can just re-use the great logic already in this tool?

@cclauss
Copy link
Contributor

cclauss commented Oct 8, 2021

@rvagg rvagg transferred this issue from nodejs/node-gyp Oct 11, 2021
@rvagg
Copy link
Member

rvagg commented Oct 11, 2021

I've moved this issue to gyp-next. @mafintosh, most of the logic you want is inside gyp-next which is a separate repo now and designed to be consumed as a python library. I'm neither a Python, nor a Windows person, and that particular combination of skills is in fairly low supply in the nodejs org, but maybe one of the folks here could point you in the right direction to start sniffing down what you want.

@nodejs/gyp

@vweevers
Copy link

I believe the (better) logic is in node-gyp nowadays, since nodejs/node-gyp#1762. So there are a few options:

  1. Use gyp-next's python code: MSVSVersion.py. Not great because you'd then also have to find the path to python, and this method queries the Windows registry which is less bullet-proof.
  2. Use node-gyp's C# script: Find-VisualStudio.cs. This method uses COM objects, same as used by Microsoft's official vswhere
  3. Or from JS, to run that script with powershell and parse its output: require('node-gyp/lib/find-visualstudio.js')(...).
  4. Bundle vswhere.exe
  5. Run node-gyp configure and then extract variables.msbuild_path from build/config.gypi
  6. Add a command to node-gyp to print those variables.

The last 2 options are the best IMO, because there's no Python, C# or exe to bundle, and it will respect the user's configuration (npm_config_msvs_version and what not).

@vweevers
Copy link

Sample build/config.gypi:

# Do not edit. File was generated by node-gyp's "configure" step
{
  "target_defaults": {
    ...
  },
  "variables": {
    ...
    "msbuild_path": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\MSBuild\\Current\\Bin\\MSBuild.exe",
  }
}

@cclauss
Copy link
Contributor

cclauss commented Oct 11, 2021

As the "Python guy" working on the gyp project for the past several years, it would be great if this community could wean itself off of the need for Python. It is easier for this community to code and maintain solutions in JavaScript so please continue migrating in that direction.

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

No branches or pull requests

4 participants