$
This commit is contained in:
52
node_modules/node-gyp/.github/ISSUE_TEMPLATE.md
generated
vendored
Normal file
52
node_modules/node-gyp/.github/ISSUE_TEMPLATE.md
generated
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
<!--
|
||||
Thank you for reporting an issue!
|
||||
|
||||
Remember, this issue tracker is for reporting issues ONLY with node-gyp.
|
||||
|
||||
If you have an issue installing a specific module, please file an issue on
|
||||
that module's issue tracker (`npm issues modulename`). Open issue here only if
|
||||
you are sure this is an issue with node-gyp, not with the module you are
|
||||
trying to build.
|
||||
|
||||
Fill out the form below. We probably won't investigate an issue that does not
|
||||
provide the basic information we require.
|
||||
|
||||
-->
|
||||
|
||||
Please look thru your error log for the string `gyp info using node-gyp@` and if the version number is less than the [current release of node-gyp](https://github.com/nodejs/node-gyp/releases) then __please upgrade__ using the instructions at https://github.com/nodejs/node-gyp/blob/master/docs/Updating-npm-bundled-node-gyp.md and try your command again.
|
||||
|
||||
Requests for help with [`node-sass` are very common](https://github.com/nodejs/node-gyp/issues?q=label%3A%22Node+Sass+--%3E+Dart+Sass%22). Please be aware that this package is deprecated, you should seek alternatives and avoid opening new issues about it here.
|
||||
|
||||
* **Node Version**: <!-- `node -v` and `npm -v` -->
|
||||
* **Platform**: <!-- `uname -a` (UNIX), or `systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"` (Windows) -->
|
||||
* **Compiler**: <!-- `cc -v` (UNIX) or `msbuild /version & cl` (Windows) -->
|
||||
* **Module**: <!-- what you tried to build/install -->
|
||||
|
||||
<details><summary>Verbose output (from npm or node-gyp):</summary>
|
||||
|
||||
```
|
||||
Paste your log here, between the backticks. It can be:
|
||||
- npm --verbose output,
|
||||
- or contents of npm-debug.log,
|
||||
- or output of node-gyp rebuild --verbose.
|
||||
Include the command you were trying to run.
|
||||
|
||||
This should look like this:
|
||||
|
||||
>npm --verbose
|
||||
npm info it worked if it ends with ok
|
||||
npm verb cli [
|
||||
npm verb cli 'C:\\...\\node\\13.9.0\\x64\\node.exe',
|
||||
npm verb cli 'C:\\...\\node\\13.9.0\\x64\\node_modules\\npm\\bin\\npm-cli.js',
|
||||
npm verb cli '--verbose'
|
||||
npm verb cli ]
|
||||
npm info using npm@6.13.7
|
||||
npm info using node@v13.9.0
|
||||
|
||||
Usage: npm <command>
|
||||
(...)
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<!-- Any further details -->
|
17
node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md
generated
vendored
Normal file
17
node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
<!--
|
||||
Thank you for your pull request. Please review the below requirements.
|
||||
|
||||
Contributor guide: https://github.com/nodejs/node/blob/master/CONTRIBUTING.md
|
||||
-->
|
||||
|
||||
##### Checklist
|
||||
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->
|
||||
|
||||
- [ ] `npm install && npm test` passes
|
||||
- [ ] tests are included <!-- Bug fixes and new features should include tests -->
|
||||
- [ ] documentation is changed or added
|
||||
- [ ] commit message follows [commit guidelines](https://github.com/googleapis/release-please#how-should-i-write-my-commits)
|
||||
|
||||
##### Description of change
|
||||
<!-- Provide a description of the change -->
|
||||
|
56
node_modules/node-gyp/.github/workflows/release-please.yml
generated
vendored
Normal file
56
node_modules/node-gyp/.github/workflows/release-please.yml
generated
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
name: release-please
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
release-please:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: google-github-actions/release-please-action@v2
|
||||
id: release
|
||||
with:
|
||||
package-name: node-gyp
|
||||
release-type: node
|
||||
changelog-types: >
|
||||
[{"type":"feat","section":"Features","hidden":false},
|
||||
{"type":"fix","section":"Bug Fixes","hidden":false},
|
||||
{"type":"bin","section":"Core","hidden":false},
|
||||
{"type":"gyp","section":"Core","hidden":false},
|
||||
{"type":"lib","section":"Core","hidden":false},
|
||||
{"type":"src","section":"Core","hidden":false},
|
||||
{"type":"test","section":"Tests","hidden":false},
|
||||
{"type":"build","section":"Core","hidden":false},
|
||||
{"type":"clean","section":"Core","hidden":false},
|
||||
{"type":"configure","section":"Core","hidden":false},
|
||||
{"type":"install","section":"Core","hidden":false},
|
||||
{"type":"list","section":"Core","hidden":false},
|
||||
{"type":"rebuild","section":"Core","hidden":false},
|
||||
{"type":"remove","section":"Core","hidden":false},
|
||||
{"type":"deps","section":"Core","hidden":false},
|
||||
{"type":"python","section":"Core","hidden":false},
|
||||
{"type":"lin","section":"Core","hidden":false},
|
||||
{"type":"linux","section":"Core","hidden":false},
|
||||
{"type":"mac","section":"Core","hidden":false},
|
||||
{"type":"macos","section":"Core","hidden":false},
|
||||
{"type":"win","section":"Core","hidden":false},
|
||||
{"type":"windows","section":"Core","hidden":false},
|
||||
{"type":"zos","section":"Core","hidden":false},
|
||||
{"type":"doc","section":"Doc","hidden":false},
|
||||
{"type":"docs","section":"Doc","hidden":false},
|
||||
{"type":"readme","section":"Doc","hidden":false},
|
||||
{"type":"chore","section":"Miscellaneous","hidden":false},
|
||||
{"type":"refactor","section":"Miscellaneous","hidden":false},
|
||||
{"type":"ci","section":"Miscellaneous","hidden":false},
|
||||
{"type":"meta","section":"Miscellaneous","hidden":false}]
|
||||
|
||||
# Standard Conventional Commits: `feat` and `fix`
|
||||
# node-gyp subdirectories: `bin`, `gyp`, `lib`, `src`, `test`
|
||||
# node-gyp subcommands: `build`, `clean`, `configure`, `install`, `list`, `rebuild`, `remove`
|
||||
# Core abstract category: `deps`
|
||||
# Languages/platforms: `python`, `lin`, `linux`, `mac`, `macos`, `win`, `window`, `zos`
|
||||
# Documentation: `doc`, `docs`, `readme`
|
||||
# Standard Conventional Commits: `chore` (under "Miscellaneous")
|
||||
# Miscellaneous abstract categories: `refactor`, `ci`, `meta`
|
45
node_modules/node-gyp/.github/workflows/tests.yml
generated
vendored
Normal file
45
node_modules/node-gyp/.github/workflows/tests.yml
generated
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
# TODO: Line 43, enable pytest --doctest-modules
|
||||
|
||||
name: Tests
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
Tests:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 15
|
||||
matrix:
|
||||
node: [12.x, 14.x, 16.x]
|
||||
python: ["3.6", "3.8", "3.10"]
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node }}
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
- name: Use Python ${{ matrix.python }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python }}
|
||||
env:
|
||||
PYTHON_VERSION: ${{ matrix.python }}
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
npm install --no-progress
|
||||
pip install flake8 pytest
|
||||
- name: Set Windows environment
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
echo 'GYP_MSVS_VERSION=2015' >> $Env:GITHUB_ENV
|
||||
echo 'GYP_MSVS_OVERRIDE_PATH=C:\\Dummy' >> $Env:GITHUB_ENV
|
||||
- name: Lint Python
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: flake8 . --ignore=E203,W503 --max-complexity=101 --max-line-length=88 --show-source --statistics
|
||||
- name: Run Python tests
|
||||
run: python -m pytest
|
||||
# - name: Run doctests with pytest
|
||||
# run: python -m pytest --doctest-modules
|
||||
- name: Run Node tests
|
||||
run: npm test
|
25
node_modules/node-gyp/.github/workflows/visual-studio.yml
generated
vendored
Normal file
25
node_modules/node-gyp/.github/workflows/visual-studio.yml
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
name: Tests on Windows
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
Tests:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 15
|
||||
matrix:
|
||||
os: [windows-2022]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
npm install --no-progress
|
||||
- name: Set Windows environment
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
echo 'GYP_MSVS_VERSION=2015' >> $Env:GITHUB_ENV
|
||||
echo 'GYP_MSVS_OVERRIDE_PATH=C:\\Dummy' >> $Env:GITHUB_ENV
|
||||
- name: Environment Information
|
||||
run: npx envinfo
|
||||
- name: Run Node tests
|
||||
run: npm test
|
687
node_modules/node-gyp/CHANGELOG.md
generated
vendored
Normal file
687
node_modules/node-gyp/CHANGELOG.md
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
34
node_modules/node-gyp/CONTRIBUTING.md
generated
vendored
Normal file
34
node_modules/node-gyp/CONTRIBUTING.md
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
# Contributing to node-gyp
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
Please read the
|
||||
[Code of Conduct](https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md)
|
||||
which explains the minimum behavior expectations for node-gyp contributors.
|
||||
|
||||
<a id="developers-certificate-of-origin"></a>
|
||||
## Developer's Certificate of Origin 1.1
|
||||
|
||||
By making a contribution to this project, I certify that:
|
||||
|
||||
* (a) The contribution was created in whole or in part by me and I
|
||||
have the right to submit it under the open source license
|
||||
indicated in the file; or
|
||||
|
||||
* (b) The contribution is based upon previous work that, to the best
|
||||
of my knowledge, is covered under an appropriate open source
|
||||
license and I have the right under that license to submit that
|
||||
work with modifications, whether created in whole or in part
|
||||
by me, under the same open source license (unless I am
|
||||
permitted to submit under a different license), as indicated
|
||||
in the file; or
|
||||
|
||||
* (c) The contribution was provided directly to me by some other
|
||||
person who certified (a), (b) or (c) and I have not modified
|
||||
it.
|
||||
|
||||
* (d) I understand and agree that this project and the contribution
|
||||
are public and that a record of the contribution (including all
|
||||
personal information I submit with it, including my sign-off) is
|
||||
maintained indefinitely and may be redistributed consistent with
|
||||
this project or the open source license(s) involved.
|
24
node_modules/node-gyp/LICENSE
generated
vendored
Normal file
24
node_modules/node-gyp/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
256
node_modules/node-gyp/README.md
generated
vendored
Normal file
256
node_modules/node-gyp/README.md
generated
vendored
Normal file
@@ -0,0 +1,256 @@
|
||||
# `node-gyp` - Node.js native addon build tool
|
||||
|
||||
[](https://github.com/nodejs/node-gyp/actions?query=workflow%3ATests+branch%3Amaster)
|
||||

|
||||
|
||||
`node-gyp` is a cross-platform command-line tool written in Node.js for
|
||||
compiling native addon modules for Node.js. It contains a vendored copy of the
|
||||
[gyp-next](https://github.com/nodejs/gyp-next) project that was previously used
|
||||
by the Chromium team, extended to support the development of Node.js native addons.
|
||||
|
||||
Note that `node-gyp` is _not_ used to build Node.js itself.
|
||||
|
||||
Multiple target versions of Node.js are supported (i.e. `0.8`, ..., `4`, `5`, `6`,
|
||||
etc.), regardless of what version of Node.js is actually installed on your system
|
||||
(`node-gyp` downloads the necessary development files or headers for the target version).
|
||||
|
||||
## Features
|
||||
|
||||
* The same build commands work on any of the supported platforms
|
||||
* Supports the targeting of different versions of Node.js
|
||||
|
||||
## Installation
|
||||
|
||||
You can install `node-gyp` using `npm`:
|
||||
|
||||
``` bash
|
||||
npm install -g node-gyp
|
||||
```
|
||||
|
||||
Depending on your operating system, you will need to install:
|
||||
|
||||
### On Unix
|
||||
|
||||
* Python v3.6, v3.7, v3.8, or v3.9
|
||||
* `make`
|
||||
* A proper C/C++ compiler toolchain, like [GCC](https://gcc.gnu.org)
|
||||
|
||||
### On macOS
|
||||
|
||||
**ATTENTION**: If your Mac has been _upgraded_ to macOS Catalina (10.15), please read [macOS_Catalina.md](macOS_Catalina.md).
|
||||
|
||||
* Python v3.6, v3.7, v3.8, or v3.9
|
||||
* [Xcode](https://developer.apple.com/xcode/download/)
|
||||
* You also need to install the `XCode Command Line Tools` by running `xcode-select --install`. Alternatively, if you already have the full Xcode installed, you can find them under the menu `Xcode -> Open Developer Tool -> More Developer Tools...`. This step will install `clang`, `clang++`, and `make`.
|
||||
|
||||
### On Windows
|
||||
|
||||
Install the current version of Python from the [Microsoft Store package](https://docs.python.org/3/using/windows.html#the-microsoft-store-package).
|
||||
|
||||
Install tools and configuration manually:
|
||||
* Install Visual C++ Build Environment: [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools)
|
||||
(using "Visual C++ build tools" workload) or [Visual Studio Community](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community)
|
||||
(using the "Desktop development with C++" workload)
|
||||
* Launch cmd, `npm config set msvs_version 2017`
|
||||
|
||||
If the above steps didn't work for you, please visit [Microsoft's Node.js Guidelines for Windows](https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules) for additional tips.
|
||||
|
||||
To target native ARM64 Node.js on Windows 10 on ARM, add the components "Visual C++ compilers and libraries for ARM64" and "Visual C++ ATL for ARM64".
|
||||
|
||||
### Configuring Python Dependency
|
||||
|
||||
`node-gyp` requires that you have installed a compatible version of Python, one of: v3.6, v3.7,
|
||||
v3.8, or v3.9. If you have multiple Python versions installed, you can identify which Python
|
||||
version `node-gyp` should use in one of the following ways:
|
||||
|
||||
1. by setting the `--python` command-line option, e.g.:
|
||||
|
||||
``` bash
|
||||
node-gyp <command> --python /path/to/executable/python
|
||||
```
|
||||
|
||||
2. If `node-gyp` is called by way of `npm`, *and* you have multiple versions of
|
||||
Python installed, then you can set `npm`'s 'python' config key to the appropriate
|
||||
value:
|
||||
|
||||
``` bash
|
||||
npm config set python /path/to/executable/python
|
||||
```
|
||||
|
||||
3. If the `PYTHON` environment variable is set to the path of a Python executable,
|
||||
then that version will be used, if it is a compatible version.
|
||||
|
||||
4. If the `NODE_GYP_FORCE_PYTHON` environment variable is set to the path of a
|
||||
Python executable, it will be used instead of any of the other configured or
|
||||
builtin Python search paths. If it's not a compatible version, no further
|
||||
searching will be done.
|
||||
|
||||
### Build for Third Party Node.js Runtimes
|
||||
|
||||
When building modules for thid party Node.js runtimes like Electron, which have
|
||||
different build configurations from the official Node.js distribution, you
|
||||
should use `--dist-url` or `--nodedir` flags to specify the headers of the
|
||||
runtime to build for.
|
||||
|
||||
Also when `--dist-url` or `--nodedir` flags are passed, node-gyp will use the
|
||||
`config.gypi` shipped in the headers distribution to generate build
|
||||
configurations, which is different from the default mode that would use the
|
||||
`process.config` object of the running Node.js instance.
|
||||
|
||||
Some old versions of Electron shipped malformed `config.gypi` in their headers
|
||||
distributions, and you might need to pass `--force-process-config` to node-gyp
|
||||
to work around configuration errors.
|
||||
|
||||
## How to Use
|
||||
|
||||
To compile your native addon, first go to its root directory:
|
||||
|
||||
``` bash
|
||||
cd my_node_addon
|
||||
```
|
||||
|
||||
The next step is to generate the appropriate project build files for the current
|
||||
platform. Use `configure` for that:
|
||||
|
||||
``` bash
|
||||
node-gyp configure
|
||||
```
|
||||
|
||||
Auto-detection fails for Visual C++ Build Tools 2015, so `--msvs_version=2015`
|
||||
needs to be added (not needed when run by npm as configured above):
|
||||
``` bash
|
||||
node-gyp configure --msvs_version=2015
|
||||
```
|
||||
|
||||
__Note__: The `configure` step looks for a `binding.gyp` file in the current
|
||||
directory to process. See below for instructions on creating a `binding.gyp` file.
|
||||
|
||||
Now you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file
|
||||
(on Windows) in the `build/` directory. Next, invoke the `build` command:
|
||||
|
||||
``` bash
|
||||
node-gyp build
|
||||
```
|
||||
|
||||
Now you have your compiled `.node` bindings file! The compiled bindings end up
|
||||
in `build/Debug/` or `build/Release/`, depending on the build mode. At this point,
|
||||
you can require the `.node` file with Node.js and run your tests!
|
||||
|
||||
__Note:__ To create a _Debug_ build of the bindings file, pass the `--debug` (or
|
||||
`-d`) switch when running either the `configure`, `build` or `rebuild` commands.
|
||||
|
||||
## The `binding.gyp` file
|
||||
|
||||
A `binding.gyp` file describes the configuration to build your module, in a
|
||||
JSON-like format. This file gets placed in the root of your package, alongside
|
||||
`package.json`.
|
||||
|
||||
A barebones `gyp` file appropriate for building a Node.js addon could look like:
|
||||
|
||||
```python
|
||||
{
|
||||
"targets": [
|
||||
{
|
||||
"target_name": "binding",
|
||||
"sources": [ "src/binding.cc" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Further reading
|
||||
|
||||
The **[docs](./docs/)** directory contains additional documentation on specific node-gyp topics that may be useful if you are experiencing problems installing or building addons using node-gyp.
|
||||
|
||||
Some additional resources for Node.js native addons and writing `gyp` configuration files:
|
||||
|
||||
* ["Going Native" a nodeschool.io tutorial](http://nodeschool.io/#goingnative)
|
||||
* ["Hello World" node addon example](https://github.com/nodejs/node/tree/master/test/addons/hello-world)
|
||||
* [gyp user documentation](https://gyp.gsrc.io/docs/UserDocumentation.md)
|
||||
* [gyp input format reference](https://gyp.gsrc.io/docs/InputFormatReference.md)
|
||||
* [*"binding.gyp" files out in the wild* wiki page](./docs/binding.gyp-files-in-the-wild.md)
|
||||
|
||||
## Commands
|
||||
|
||||
`node-gyp` responds to the following commands:
|
||||
|
||||
| **Command** | **Description**
|
||||
|:--------------|:---------------------------------------------------------------
|
||||
| `help` | Shows the help dialog
|
||||
| `build` | Invokes `make`/`msbuild.exe` and builds the native addon
|
||||
| `clean` | Removes the `build` directory if it exists
|
||||
| `configure` | Generates project build files for the current platform
|
||||
| `rebuild` | Runs `clean`, `configure` and `build` all in a row
|
||||
| `install` | Installs Node.js header files for the given version
|
||||
| `list` | Lists the currently installed Node.js header versions
|
||||
| `remove` | Removes the Node.js header files for the given version
|
||||
|
||||
|
||||
## Command Options
|
||||
|
||||
`node-gyp` accepts the following command options:
|
||||
|
||||
| **Command** | **Description**
|
||||
|:----------------------------------|:------------------------------------------
|
||||
| `-j n`, `--jobs n` | Run `make` in parallel. The value `max` will use all available CPU cores
|
||||
| `--target=v6.2.1` | Node.js version to build for (default is `process.version`)
|
||||
| `--silly`, `--loglevel=silly` | Log all progress to console
|
||||
| `--verbose`, `--loglevel=verbose` | Log most progress to console
|
||||
| `--silent`, `--loglevel=silent` | Don't log anything to console
|
||||
| `debug`, `--debug` | Make Debug build (default is `Release`)
|
||||
| `--release`, `--no-debug` | Make Release build
|
||||
| `-C $dir`, `--directory=$dir` | Run command in different directory
|
||||
| `--make=$make` | Override `make` command (e.g. `gmake`)
|
||||
| `--thin=yes` | Enable thin static libraries
|
||||
| `--arch=$arch` | Set target architecture (e.g. ia32)
|
||||
| `--tarball=$path` | Get headers from a local tarball
|
||||
| `--devdir=$path` | SDK download directory (default is OS cache directory)
|
||||
| `--ensure` | Don't reinstall headers if already present
|
||||
| `--dist-url=$url` | Download header tarball from custom URL
|
||||
| `--proxy=$url` | Set HTTP(S) proxy for downloading header tarball
|
||||
| `--noproxy=$urls` | Set urls to ignore proxies when downloading header tarball
|
||||
| `--cafile=$cafile` | Override default CA chain (to download tarball)
|
||||
| `--nodedir=$path` | Set the path to the node source code
|
||||
| `--python=$path` | Set path to the Python binary
|
||||
| `--msvs_version=$version` | Set Visual Studio version (Windows only)
|
||||
| `--solution=$solution` | Set Visual Studio Solution version (Windows only)
|
||||
| `--force-process-config` | Force using runtime's `process.config` object to generate `config.gypi` file
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment variables
|
||||
|
||||
Use the form `npm_config_OPTION_NAME` for any of the command options listed
|
||||
above (dashes in option names should be replaced by underscores).
|
||||
|
||||
For example, to set `devdir` equal to `/tmp/.gyp`, you would:
|
||||
|
||||
Run this on Unix:
|
||||
|
||||
```bash
|
||||
export npm_config_devdir=/tmp/.gyp
|
||||
```
|
||||
|
||||
Or this on Windows:
|
||||
|
||||
```console
|
||||
set npm_config_devdir=c:\temp\.gyp
|
||||
```
|
||||
|
||||
### `npm` configuration
|
||||
|
||||
Use the form `OPTION_NAME` for any of the command options listed above.
|
||||
|
||||
For example, to set `devdir` equal to `/tmp/.gyp`, you would run:
|
||||
|
||||
```bash
|
||||
npm config set [--global] devdir /tmp/.gyp
|
||||
```
|
||||
|
||||
**Note:** Configuration set via `npm` will only be used when `node-gyp`
|
||||
is run via `npm`, not when `node-gyp` is run directly.
|
||||
|
||||
## License
|
||||
|
||||
`node-gyp` is available under the MIT license. See the [LICENSE
|
||||
file](LICENSE) for details.
|
185
node_modules/node-gyp/addon.gypi
generated
vendored
Normal file
185
node_modules/node-gyp/addon.gypi
generated
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
{
|
||||
'variables' : {
|
||||
'node_engine_include_dir%': 'deps/v8/include',
|
||||
'node_host_binary%': 'node',
|
||||
'node_with_ltcg%': 'true',
|
||||
},
|
||||
'target_defaults': {
|
||||
'type': 'loadable_module',
|
||||
'win_delay_load_hook': 'true',
|
||||
'product_prefix': '',
|
||||
|
||||
'conditions': [
|
||||
[ 'node_engine=="chakracore"', {
|
||||
'variables': {
|
||||
'node_engine_include_dir%': 'deps/chakrashim/include'
|
||||
},
|
||||
}]
|
||||
],
|
||||
|
||||
'include_dirs': [
|
||||
'<(node_root_dir)/include/node',
|
||||
'<(node_root_dir)/src',
|
||||
'<(node_root_dir)/deps/openssl/config',
|
||||
'<(node_root_dir)/deps/openssl/openssl/include',
|
||||
'<(node_root_dir)/deps/uv/include',
|
||||
'<(node_root_dir)/deps/zlib',
|
||||
'<(node_root_dir)/<(node_engine_include_dir)'
|
||||
],
|
||||
'defines!': [
|
||||
'BUILDING_UV_SHARED=1', # Inherited from common.gypi.
|
||||
'BUILDING_V8_SHARED=1', # Inherited from common.gypi.
|
||||
],
|
||||
'defines': [
|
||||
'NODE_GYP_MODULE_NAME=>(_target_name)',
|
||||
'USING_UV_SHARED=1',
|
||||
'USING_V8_SHARED=1',
|
||||
# Warn when using deprecated V8 APIs.
|
||||
'V8_DEPRECATION_WARNINGS=1'
|
||||
],
|
||||
|
||||
'target_conditions': [
|
||||
['_type=="loadable_module"', {
|
||||
'product_extension': 'node',
|
||||
'defines': [
|
||||
'BUILDING_NODE_EXTENSION'
|
||||
],
|
||||
'xcode_settings': {
|
||||
'OTHER_LDFLAGS': [
|
||||
'-undefined dynamic_lookup'
|
||||
],
|
||||
},
|
||||
}],
|
||||
|
||||
['_type=="static_library"', {
|
||||
# set to `1` to *disable* the -T thin archive 'ld' flag.
|
||||
# older linkers don't support this flag.
|
||||
'standalone_static_library': '<(standalone_static_library)'
|
||||
}],
|
||||
|
||||
['_type!="executable"', {
|
||||
'conditions': [
|
||||
[ 'OS=="android"', {
|
||||
'cflags!': [ '-fPIE' ],
|
||||
}]
|
||||
]
|
||||
}],
|
||||
|
||||
['_win_delay_load_hook=="true"', {
|
||||
# If the addon specifies `'win_delay_load_hook': 'true'` in its
|
||||
# binding.gyp, link a delay-load hook into the DLL. This hook ensures
|
||||
# that the addon will work regardless of whether the node/iojs binary
|
||||
# is named node.exe, iojs.exe, or something else.
|
||||
'conditions': [
|
||||
[ 'OS=="win"', {
|
||||
'defines': [ 'HOST_BINARY=\"<(node_host_binary)<(EXECUTABLE_SUFFIX)\"', ],
|
||||
'sources': [
|
||||
'<(node_gyp_dir)/src/win_delay_load_hook.cc',
|
||||
],
|
||||
'msvs_settings': {
|
||||
'VCLinkerTool': {
|
||||
'DelayLoadDLLs': [ '<(node_host_binary)<(EXECUTABLE_SUFFIX)' ],
|
||||
# Don't print a linker warning when no imports from either .exe
|
||||
# are used.
|
||||
'AdditionalOptions': [ '/ignore:4199' ],
|
||||
},
|
||||
},
|
||||
}],
|
||||
],
|
||||
}],
|
||||
],
|
||||
|
||||
'conditions': [
|
||||
[ 'OS=="mac"', {
|
||||
'defines': [
|
||||
'_DARWIN_USE_64_BIT_INODE=1'
|
||||
],
|
||||
'xcode_settings': {
|
||||
'DYLIB_INSTALL_NAME_BASE': '@rpath'
|
||||
},
|
||||
}],
|
||||
[ 'OS=="aix"', {
|
||||
'ldflags': [
|
||||
'-Wl,-bimport:<(node_exp_file)'
|
||||
],
|
||||
}],
|
||||
[ 'OS=="zos"', {
|
||||
'cflags': [
|
||||
'-q64',
|
||||
'-Wc,DLL',
|
||||
'-qlonglong',
|
||||
'-qenum=int',
|
||||
'-qxclang=-fexec-charset=ISO8859-1'
|
||||
],
|
||||
'defines': [
|
||||
'_ALL_SOURCE=1',
|
||||
'MAP_FAILED=-1',
|
||||
'_UNIX03_SOURCE=1'
|
||||
],
|
||||
'ldflags': [
|
||||
'-q64',
|
||||
'<(node_exp_file)'
|
||||
],
|
||||
}],
|
||||
[ 'OS=="win"', {
|
||||
'conditions': [
|
||||
['node_engine=="chakracore"', {
|
||||
'library_dirs': [ '<(node_root_dir)/$(ConfigurationName)' ],
|
||||
'libraries': [ '<@(node_engine_libs)' ],
|
||||
}],
|
||||
['node_with_ltcg=="true"', {
|
||||
'msvs_settings': {
|
||||
'VCCLCompilerTool': {
|
||||
'WholeProgramOptimization': 'true' # /GL, whole program optimization, needed for LTCG
|
||||
},
|
||||
'VCLibrarianTool': {
|
||||
'AdditionalOptions': [
|
||||
'/LTCG:INCREMENTAL', # incremental link-time code generation
|
||||
]
|
||||
},
|
||||
'VCLinkerTool': {
|
||||
'OptimizeReferences': 2, # /OPT:REF
|
||||
'EnableCOMDATFolding': 2, # /OPT:ICF
|
||||
'LinkIncremental': 1, # disable incremental linking
|
||||
'AdditionalOptions': [
|
||||
'/LTCG:INCREMENTAL', # incremental link-time code generation
|
||||
]
|
||||
}
|
||||
}
|
||||
}]
|
||||
],
|
||||
'libraries': [
|
||||
'-lkernel32.lib',
|
||||
'-luser32.lib',
|
||||
'-lgdi32.lib',
|
||||
'-lwinspool.lib',
|
||||
'-lcomdlg32.lib',
|
||||
'-ladvapi32.lib',
|
||||
'-lshell32.lib',
|
||||
'-lole32.lib',
|
||||
'-loleaut32.lib',
|
||||
'-luuid.lib',
|
||||
'-lodbc32.lib',
|
||||
'-lDelayImp.lib',
|
||||
'-l"<(node_lib_file)"'
|
||||
],
|
||||
'msvs_disabled_warnings': [
|
||||
# warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent<T>'
|
||||
# needs to have dll-interface to be used by
|
||||
# clients of class 'node::ObjectWrap'
|
||||
4251
|
||||
],
|
||||
}, {
|
||||
# OS!="win"
|
||||
'defines': [
|
||||
'_LARGEFILE_SOURCE',
|
||||
'_FILE_OFFSET_BITS=64'
|
||||
],
|
||||
}],
|
||||
[ 'OS in "freebsd openbsd netbsd solaris android" or \
|
||||
(OS=="linux" and target_arch!="ia32")', {
|
||||
'cflags': [ '-fPIC' ],
|
||||
}],
|
||||
]
|
||||
}
|
||||
}
|
140
node_modules/node-gyp/bin/node-gyp.js
generated
vendored
Normal file
140
node_modules/node-gyp/bin/node-gyp.js
generated
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict'
|
||||
|
||||
process.title = 'node-gyp'
|
||||
|
||||
const envPaths = require('env-paths')
|
||||
const gyp = require('../')
|
||||
const log = require('npmlog')
|
||||
const os = require('os')
|
||||
|
||||
/**
|
||||
* Process and execute the selected commands.
|
||||
*/
|
||||
|
||||
const prog = gyp()
|
||||
var completed = false
|
||||
prog.parseArgv(process.argv)
|
||||
prog.devDir = prog.opts.devdir
|
||||
|
||||
var homeDir = os.homedir()
|
||||
if (prog.devDir) {
|
||||
prog.devDir = prog.devDir.replace(/^~/, homeDir)
|
||||
} else if (homeDir) {
|
||||
prog.devDir = envPaths('node-gyp', { suffix: '' }).cache
|
||||
} else {
|
||||
throw new Error(
|
||||
"node-gyp requires that the user's home directory is specified " +
|
||||
'in either of the environmental variables HOME or USERPROFILE. ' +
|
||||
'Overide with: --devdir /path/to/.node-gyp')
|
||||
}
|
||||
|
||||
if (prog.todo.length === 0) {
|
||||
if (~process.argv.indexOf('-v') || ~process.argv.indexOf('--version')) {
|
||||
console.log('v%s', prog.version)
|
||||
} else {
|
||||
console.log('%s', prog.usage())
|
||||
}
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
log.info('it worked if it ends with', 'ok')
|
||||
log.verbose('cli', process.argv)
|
||||
log.info('using', 'node-gyp@%s', prog.version)
|
||||
log.info('using', 'node@%s | %s | %s', process.versions.node, process.platform, process.arch)
|
||||
|
||||
/**
|
||||
* Change dir if -C/--directory was passed.
|
||||
*/
|
||||
|
||||
var dir = prog.opts.directory
|
||||
if (dir) {
|
||||
var fs = require('fs')
|
||||
try {
|
||||
var stat = fs.statSync(dir)
|
||||
if (stat.isDirectory()) {
|
||||
log.info('chdir', dir)
|
||||
process.chdir(dir)
|
||||
} else {
|
||||
log.warn('chdir', dir + ' is not a directory')
|
||||
}
|
||||
} catch (e) {
|
||||
if (e.code === 'ENOENT') {
|
||||
log.warn('chdir', dir + ' is not a directory')
|
||||
} else {
|
||||
log.warn('chdir', 'error during chdir() "%s"', e.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function run () {
|
||||
var command = prog.todo.shift()
|
||||
if (!command) {
|
||||
// done!
|
||||
completed = true
|
||||
log.info('ok')
|
||||
return
|
||||
}
|
||||
|
||||
prog.commands[command.name](command.args, function (err) {
|
||||
if (err) {
|
||||
log.error(command.name + ' error')
|
||||
log.error('stack', err.stack)
|
||||
errorMessage()
|
||||
log.error('not ok')
|
||||
return process.exit(1)
|
||||
}
|
||||
if (command.name === 'list') {
|
||||
var versions = arguments[1]
|
||||
if (versions.length > 0) {
|
||||
versions.forEach(function (version) {
|
||||
console.log(version)
|
||||
})
|
||||
} else {
|
||||
console.log('No node development files installed. Use `node-gyp install` to install a version.')
|
||||
}
|
||||
} else if (arguments.length >= 2) {
|
||||
console.log.apply(console, [].slice.call(arguments, 1))
|
||||
}
|
||||
|
||||
// now run the next command in the queue
|
||||
process.nextTick(run)
|
||||
})
|
||||
}
|
||||
|
||||
process.on('exit', function (code) {
|
||||
if (!completed && !code) {
|
||||
log.error('Completion callback never invoked!')
|
||||
issueMessage()
|
||||
process.exit(6)
|
||||
}
|
||||
})
|
||||
|
||||
process.on('uncaughtException', function (err) {
|
||||
log.error('UNCAUGHT EXCEPTION')
|
||||
log.error('stack', err.stack)
|
||||
issueMessage()
|
||||
process.exit(7)
|
||||
})
|
||||
|
||||
function errorMessage () {
|
||||
// copied from npm's lib/utils/error-handler.js
|
||||
var os = require('os')
|
||||
log.error('System', os.type() + ' ' + os.release())
|
||||
log.error('command', process.argv
|
||||
.map(JSON.stringify).join(' '))
|
||||
log.error('cwd', process.cwd())
|
||||
log.error('node -v', process.version)
|
||||
log.error('node-gyp -v', 'v' + prog.package.version)
|
||||
}
|
||||
|
||||
function issueMessage () {
|
||||
errorMessage()
|
||||
log.error('', ['Node-gyp failed to build your package.',
|
||||
'Try to update npm and/or node-gyp and if it does not help file an issue with the package author.'
|
||||
].join('\n'))
|
||||
}
|
||||
|
||||
// start running the given commands!
|
||||
run()
|
14
node_modules/node-gyp/docs/Common-issues.md
generated
vendored
Normal file
14
node_modules/node-gyp/docs/Common-issues.md
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
## Python Issues OSX
|
||||
|
||||
Make sure you are using the native Python version in OSX. If you use a MacPorts of HomeBrew version, you may run into problems.
|
||||
|
||||
If you have issues with `execvp`, be sure to check your `$PYTHON` environment variable. If it is not set to the native version, unset it and try again.
|
||||
|
||||
Notes: https://gist.github.com/erichocean/5177582
|
||||
|
||||
## npm ERR! `node-gyp rebuild`(Windows)
|
||||
* just install the build tools from [here](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools)
|
||||
Please note the version as is required in below command e.g **2017**
|
||||
* Launch cmd, run `npm config set msvs_version 2017`
|
||||
* close and open new CMD/terminal and all is well :100:
|
||||
|
94
node_modules/node-gyp/docs/Error-pre-versions-of-node-cannot-be-installed.md
generated
vendored
Normal file
94
node_modules/node-gyp/docs/Error-pre-versions-of-node-cannot-be-installed.md
generated
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
When using `node-gyp` you might see an error like this when attempting to compile/install a node.js native addon:
|
||||
|
||||
```
|
||||
$ npm install bcrypt
|
||||
npm http GET https://registry.npmjs.org/bcrypt/0.7.5
|
||||
npm http 304 https://registry.npmjs.org/bcrypt/0.7.5
|
||||
npm http GET https://registry.npmjs.org/bindings/1.0.0
|
||||
npm http 304 https://registry.npmjs.org/bindings/1.0.0
|
||||
|
||||
> bcrypt@0.7.5 install /home/ubuntu/public/song-swap/node_modules/bcrypt
|
||||
> node-gyp rebuild
|
||||
|
||||
gyp ERR! configure error
|
||||
gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag instead
|
||||
gyp ERR! stack at install (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/install.js:69:16)
|
||||
gyp ERR! stack at Object.self.commands.(anonymous function) [as install] (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/node-gyp.js:56:37)
|
||||
gyp ERR! stack at getNodeDir (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:219:20)
|
||||
gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:105:9
|
||||
gyp ERR! stack at ChildProcess.exithandler (child_process.js:630:7)
|
||||
gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:99:17)
|
||||
gyp ERR! stack at maybeClose (child_process.js:730:16)
|
||||
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:797:5)
|
||||
gyp ERR! System Linux 3.5.0-21-generic
|
||||
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
|
||||
gyp ERR! cwd /home/ubuntu/public/song-swap/node_modules/bcrypt
|
||||
gyp ERR! node -v v0.11.2-pre
|
||||
gyp ERR! node-gyp -v v0.9.5
|
||||
gyp ERR! not ok
|
||||
npm ERR! bcrypt@0.7.5 install: `node-gyp rebuild`
|
||||
npm ERR! `sh "-c" "node-gyp rebuild"` failed with 1
|
||||
npm ERR!
|
||||
npm ERR! Failed at the bcrypt@0.7.5 install script.
|
||||
npm ERR! This is most likely a problem with the bcrypt package,
|
||||
npm ERR! not with npm itself.
|
||||
npm ERR! Tell the author that this fails on your system:
|
||||
npm ERR! node-gyp rebuild
|
||||
npm ERR! You can get their info via:
|
||||
npm ERR! npm owner ls bcrypt
|
||||
npm ERR! There is likely additional logging output above.
|
||||
|
||||
npm ERR! System Linux 3.5.0-21-generic
|
||||
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "bcrypt"
|
||||
npm ERR! cwd /home/ubuntu/public/song-swap
|
||||
npm ERR! node -v v0.11.2-pre
|
||||
npm ERR! npm -v 1.2.18
|
||||
npm ERR! code ELIFECYCLE
|
||||
npm ERR!
|
||||
npm ERR! Additional logging details can be found in:
|
||||
npm ERR! /home/ubuntu/public/song-swap/npm-debug.log
|
||||
npm ERR! not ok code 0
|
||||
```
|
||||
|
||||
The main error here is:
|
||||
|
||||
```
|
||||
Error: "pre" versions of node cannot be installed, use the --nodedir flag instead
|
||||
```
|
||||
|
||||
This error is caused when you attempt to compile a native addon using a version of node.js with `-pre` at the end of the version number:
|
||||
|
||||
``` bash
|
||||
$ node -v
|
||||
v0.10.4-pre
|
||||
```
|
||||
|
||||
## How to avoid (the short answer)
|
||||
|
||||
To avoid this error completely just use a stable release of node.js. i.e. `v0.10.4`, and __not__ `v0.10.4-pre`.
|
||||
|
||||
## How to fix (the long answer)
|
||||
|
||||
This error happens because `node-gyp` does not know what header files were used to compile your "pre" version of node, and therefore it needs you to specify the node source code directory path using the `--nodedir` flag.
|
||||
|
||||
For example, if I compiled my development ("pre") version of node.js using the source code in `/Users/nrajlich/node`, then I could invoke `node-gyp` like:
|
||||
|
||||
``` bash
|
||||
$ node-gyp rebuild --nodedir=/Users/nrajlich/node
|
||||
```
|
||||
|
||||
Or install an native addon through `npm` like:
|
||||
|
||||
``` bash
|
||||
$ npm install bcrypt --nodedir=/Users/nrajlich/node
|
||||
```
|
||||
|
||||
### Always use `--nodedir`
|
||||
|
||||
__Note:__ This is for advanced users who use `-pre` versions of node more often than tagged releases.
|
||||
|
||||
If you're invoking `node-gyp` through `npm`, then you can leverage `npm`'s configuration system and not have to specify the `--nodedir` flag all the time:
|
||||
|
||||
``` bash
|
||||
$ npm config set nodedir /Users/nrajlich/node
|
||||
```
|
7
node_modules/node-gyp/docs/Home.md
generated
vendored
Normal file
7
node_modules/node-gyp/docs/Home.md
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
Welcome to the node-gyp wiki!
|
||||
|
||||
* [["binding.gyp" files out in the wild]]
|
||||
* [[Linking to OpenSSL]]
|
||||
* [[Common Issues]]
|
||||
* [[Updating npm's bundled node-gyp]]
|
||||
* [[Error: "pre" versions of node cannot be installed]]
|
86
node_modules/node-gyp/docs/Linking-to-OpenSSL.md
generated
vendored
Normal file
86
node_modules/node-gyp/docs/Linking-to-OpenSSL.md
generated
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
A handful of native addons require linking to OpenSSL in one way or another. This introduces a small challenge since node will sometimes bundle OpenSSL statically (the default for node >= v0.8.x), or sometimes dynamically link to the system OpenSSL (default for node <= v0.6.x).
|
||||
|
||||
Good native addons should account for both scenarios. It's recommended that you use the `binding.gyp` file provided below as a starting-point for any addon that needs to use OpenSSL:
|
||||
|
||||
``` python
|
||||
{
|
||||
'variables': {
|
||||
# node v0.6.x doesn't give us its build variables,
|
||||
# but on Unix it was only possible to use the system OpenSSL library,
|
||||
# so default the variable to "true", v0.8.x node and up will overwrite it.
|
||||
'node_shared_openssl%': 'true'
|
||||
},
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'binding',
|
||||
'sources': [
|
||||
'src/binding.cc'
|
||||
],
|
||||
'conditions': [
|
||||
['node_shared_openssl=="false"', {
|
||||
# so when "node_shared_openssl" is "false", then OpenSSL has been
|
||||
# bundled into the node executable. So we need to include the same
|
||||
# header files that were used when building node.
|
||||
'include_dirs': [
|
||||
'<(node_root_dir)/deps/openssl/openssl/include'
|
||||
],
|
||||
"conditions" : [
|
||||
["target_arch=='ia32'", {
|
||||
"include_dirs": [ "<(node_root_dir)/deps/openssl/config/piii" ]
|
||||
}],
|
||||
["target_arch=='x64'", {
|
||||
"include_dirs": [ "<(node_root_dir)/deps/openssl/config/k8" ]
|
||||
}],
|
||||
["target_arch=='arm'", {
|
||||
"include_dirs": [ "<(node_root_dir)/deps/openssl/config/arm" ]
|
||||
}]
|
||||
]
|
||||
}]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
This ensures that when OpenSSL is statically linked into `node` then, the bundled OpenSSL headers are included, but when the system OpenSSL is in use, then only those headers will be used.
|
||||
|
||||
## Windows?
|
||||
|
||||
As you can see this baseline `binding.gyp` file only accounts for the Unix scenario. Currently on Windows the situation is a little less ideal. On Windows, OpenSSL is _always_ statically compiled into the `node` executable, so ideally it would be possible to use that copy of OpenSSL when building native addons.
|
||||
|
||||
Unfortunately it doesn't seem like that is possible at the moment, as there would need to be tweaks made to the generated `node.lib` file to include the openssl glue functions, or a new `openssl.lib` file would need to be created during the node build. I'm not sure which is the easiest/most feasible.
|
||||
|
||||
In the meantime, one possible solution is using another copy of OpenSSL, which is what [`node-bcrypt`](https://github.com/ncb000gt/node.bcrypt.js) currently does. Adding something like this to your `binding.gyp` file's `"conditions"` block would enable this:
|
||||
|
||||
``` python
|
||||
[ 'OS=="win"', {
|
||||
'conditions': [
|
||||
# "openssl_root" is the directory on Windows of the OpenSSL files.
|
||||
# Check the "target_arch" variable to set good default values for
|
||||
# both 64-bit and 32-bit builds of the module.
|
||||
['target_arch=="x64"', {
|
||||
'variables': {
|
||||
'openssl_root%': 'C:/OpenSSL-Win64'
|
||||
},
|
||||
}, {
|
||||
'variables': {
|
||||
'openssl_root%': 'C:/OpenSSL-Win32'
|
||||
},
|
||||
}],
|
||||
],
|
||||
'libraries': [
|
||||
'-l<(openssl_root)/lib/libeay32.lib',
|
||||
],
|
||||
'include_dirs': [
|
||||
'<(openssl_root)/include',
|
||||
],
|
||||
}]
|
||||
```
|
||||
|
||||
Now you can direct your users to install OpenSSL on Windows from here (be sure to tell them to install the 64-bit version if they're compiling against a 64-bit version of node): http://slproweb.com/products/Win32OpenSSL.html
|
||||
|
||||
Also note that both `node-gyp` and `npm` allow you to overwrite that default `openssl_root` variable on the command line:
|
||||
|
||||
``` bash
|
||||
$ node-gyp rebuild --openssl-root="C:\Users\Nathan\Desktop\openssl"
|
||||
```
|
45
node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md
generated
vendored
Normal file
45
node_modules/node-gyp/docs/Updating-npm-bundled-node-gyp.md
generated
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
# Updating the npm-bundled version of node-gyp
|
||||
|
||||
[Many issues](https://github.com/nodejs/node-gyp/labels/ERR%21%20node-gyp%20-v%20%3C%3D%20v5.1.0) are opened by users who are
|
||||
not running a [current version of node-gyp](https://github.com/nodejs/node-gyp/releases).
|
||||
|
||||
`npm` bundles its own, internal, copy of `node-gyp`. This internal copy is independent of any globally installed copy of node-gyp that
|
||||
may have been installed via `npm install -g node-gyp`.
|
||||
|
||||
Generally, npm's library files are installed inside your global "node_modules", where npm is installed (run `npm prefix` and add `lib/node_modules`, or just `node_modules` for Windows). There are some exceptions to this. Inside this global `node_modules/` there will be an `npm/` directory and inside this you'll find a `node_modules/node-gyp/` directory. So it may look something like `/usr/local/lib/node_modules/npm/node_modules/node-gyp/`. This is the version of node-gyp that ships with npm.
|
||||
|
||||
When you install a _new_ version of node-gyp outside of npm, it'll go into your global node_modules, but not under the `npm/node_modules`. So that may look like `/usr/local/lib/node_modules/node-gyp/`. It'll have the `node-gyp` executable linked into your `PATH` so running `node-gyp` will use this version.
|
||||
|
||||
The catch is that npm won't use this version unless you tell it to, it'll keep on using the one you have installed. You need to instruct it to by setting the `node_gyp` config variable (which goes into your `~/.npmrc`). You do this by running the `npm config set` command as below. Then npm will use the command in the path you supply whenever it needs to build a native addon.
|
||||
|
||||
**Important**: You also need to remember to unset this when you upgrade npm with a newer version of node-gyp, or you have to manually keep your globally installed node-gyp to date. See "Undo" below.
|
||||
|
||||
## Linux and macOS
|
||||
```
|
||||
npm install --global node-gyp@latest
|
||||
npm config set node_gyp $(npm prefix -g)/lib/node_modules/node-gyp/bin/node-gyp.js
|
||||
```
|
||||
|
||||
`sudo` may be required for the first command if you get a permission error.
|
||||
|
||||
## Windows
|
||||
|
||||
### 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"}
|
||||
```
|
||||
|
||||
## Undo
|
||||
**Beware** if you don't unset the `node_gyp` config option, npm will continue to use the globally installed version of node-gyp rather than the one it ships with, which may end up being newer.
|
||||
|
||||
```
|
||||
npm config delete node_gyp
|
||||
npm uninstall --global node-gyp
|
||||
```
|
48
node_modules/node-gyp/docs/binding.gyp-files-in-the-wild.md
generated
vendored
Normal file
48
node_modules/node-gyp/docs/binding.gyp-files-in-the-wild.md
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
This page contains links to some examples of existing `binding.gyp` files that other node modules are using. Take a look at them for inspiration.
|
||||
|
||||
To add to this page, just add the link to the project's `binding.gyp` file below:
|
||||
|
||||
* [ons](https://github.com/XadillaX/aliyun-ons/blob/master/binding.gyp)
|
||||
* [thmclrx](https://github.com/XadillaX/thmclrx/blob/master/binding.gyp)
|
||||
* [libxmljs](https://github.com/polotek/libxmljs/blob/master/binding.gyp)
|
||||
* [node-buffertools](https://github.com/bnoordhuis/node-buffertools/blob/master/binding.gyp)
|
||||
* [node-canvas](https://github.com/LearnBoost/node-canvas/blob/master/binding.gyp)
|
||||
* [node-ffi](https://github.com/rbranson/node-ffi/blob/master/binding.gyp) + [libffi](https://github.com/rbranson/node-ffi/blob/master/deps/libffi/libffi.gyp)
|
||||
* [node-time](https://github.com/TooTallNate/node-time/blob/master/binding.gyp)
|
||||
* [node-sass](https://github.com/sass/node-sass/blob/master/binding.gyp) + [libsass](https://github.com/sass/node-sass/blob/master/src/libsass.gyp)
|
||||
* [node-serialport](https://github.com/voodootikigod/node-serialport/blob/master/binding.gyp)
|
||||
* [node-weak](https://github.com/TooTallNate/node-weak/blob/master/binding.gyp)
|
||||
* [pty.js](https://github.com/chjj/pty.js/blob/master/binding.gyp)
|
||||
* [ref](https://github.com/TooTallNate/ref/blob/master/binding.gyp)
|
||||
* [appjs](https://github.com/milani/appjs/blob/master/binding.gyp)
|
||||
* [nwm](https://github.com/mixu/nwm/blob/master/binding.gyp)
|
||||
* [bcrypt](https://github.com/ncb000gt/node.bcrypt.js/blob/master/binding.gyp)
|
||||
* [nk-mysql](https://github.com/mmod/nodamysql/blob/master/binding.gyp)
|
||||
* [nk-xrm-installer](https://github.com/mmod/nk-xrm-installer/blob/master/binding.gyp) + [includable.gypi](https://github.com/mmod/nk-xrm-installer/blob/master/includable.gypi) + [unpack.py](https://github.com/mmod/nk-xrm-installer/blob/master/unpack.py) + [disburse.py](https://github.com/mmod/nk-xrm-installer/blob/master/disburse.py)
|
||||
<sub>.py files above provide complete reference for examples of fetching source via http, extracting, and moving files.</sub>
|
||||
* [node-memwatch](https://github.com/lloyd/node-memwatch/blob/master/binding.gyp)
|
||||
* [node-ip2location](https://github.com/bolgovr/node-ip2location/blob/master/binding.gyp)
|
||||
* [node-midi](https://github.com/justinlatimer/node-midi/blob/master/binding.gyp)
|
||||
* [node-sqlite3](https://github.com/developmentseed/node-sqlite3/blob/master/binding.gyp) + [libsqlite3](https://github.com/developmentseed/node-sqlite3/blob/master/deps/sqlite3.gyp)
|
||||
* [node-zipfile](https://github.com/mapbox/node-zipfile/blob/master/binding.gyp)
|
||||
* [node-mapnik](https://github.com/mapnik/node-mapnik/blob/master/binding.gyp)
|
||||
* [node-inotify](https://github.com/c4milo/node-inotify/blob/master/binding.gyp)
|
||||
* [v8-profiler](https://github.com/c4milo/v8-profiler/blob/master/binding.gyp)
|
||||
* [airtunes](https://github.com/radioline/node_airtunes/blob/master/binding.gyp)
|
||||
* [node-fann](https://github.com/c4milo/node-fann/blob/master/binding.gyp)
|
||||
* [node-talib](https://github.com/oransel/node-talib/blob/master/binding.gyp)
|
||||
* [node-leveldown](https://github.com/rvagg/node-leveldown/blob/master/binding.gyp) + [leveldb.gyp](https://github.com/rvagg/node-leveldown/blob/master/deps/leveldb/leveldb.gyp) + [snappy.gyp](https://github.com/rvagg/node-leveldown/blob/master/deps/snappy/snappy.gyp)
|
||||
* [node-expat](https://github.com/astro/node-expat/blob/master/binding.gyp) + [libexpat](https://github.com/astro/node-expat/blob/master/deps/libexpat/libexpat.gyp)
|
||||
* [node-openvg-canvas](https://github.com/luismreis/node-openvg-canvas/blob/master/binding.gyp) + [node-openvg](https://github.com/luismreis/node-openvg/blob/master/binding.gyp)
|
||||
* [node-cryptopp](https://github.com/BatikhSouri/node-cryptopp/blob/master/binding.gyp)
|
||||
* [topcube](https://github.com/creationix/topcube/blob/master/binding.gyp)
|
||||
* [node-osmium](https://github.com/osmcode/node-osmium/blob/master/binding.gyp)
|
||||
* [node-osrm](https://github.com/DennisOSRM/node-osrm)
|
||||
* [node-oracle](https://github.com/joeferner/node-oracle/blob/master/binding.gyp)
|
||||
* [node-process-list](https://github.com/ReklatsMasters/node-process-list/blob/master/binding.gyp)
|
||||
* [node-nanomsg](https://github.com/nickdesaulniers/node-nanomsg/blob/master/binding.gyp)
|
||||
* [Ghostscript4JS](https://github.com/NickNaso/ghostscript4js/blob/master/binding.gyp)
|
||||
* [nodecv](https://github.com/xudafeng/nodecv/blob/master/binding.gyp)
|
||||
* [magick-cli](https://github.com/NickNaso/magick-cli/blob/master/binding.gyp)
|
||||
* [sharp](https://github.com/lovell/sharp/blob/master/binding.gyp)
|
||||
* [krb5](https://github.com/adaltas/node-krb5/blob/master/binding.gyp)
|
4
node_modules/node-gyp/gyp/.flake8
generated
vendored
Normal file
4
node_modules/node-gyp/gyp/.flake8
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
[flake8]
|
||||
max-complexity = 101
|
||||
max-line-length = 88
|
||||
extend-ignore = E203 # whitespace before ':' to agree with psf/black
|
30
node_modules/node-gyp/gyp/.github/workflows/Python_tests.yml
generated
vendored
Normal file
30
node_modules/node-gyp/gyp/.github/workflows/Python_tests.yml
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
# TODO: Enable os: windows-latest
|
||||
# TODO: Enable pytest --doctest-modules
|
||||
|
||||
name: Python_tests
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
Python_tests:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 8
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest] # , windows-latest]
|
||||
python-version: [3.6, 3.7, 3.8, 3.9]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements_dev.txt
|
||||
- name: Lint with flake8
|
||||
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
|
||||
# run: pytest --doctest-modules
|
42
node_modules/node-gyp/gyp/.github/workflows/node-gyp.yml
generated
vendored
Normal file
42
node_modules/node-gyp/gyp/.github/workflows/node-gyp.yml
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
name: node-gyp integration
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
strategy:
|
||||
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
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: gyp-next
|
||||
- name: Clone nodejs/node-gyp
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: nodejs/node-gyp
|
||||
path: node-gyp
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 14.x
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
cd node-gyp
|
||||
npm install --no-progress
|
||||
- name: Replace gyp in node-gyp
|
||||
shell: bash
|
||||
run: |
|
||||
rm -rf node-gyp/gyp
|
||||
cp -r gyp-next node-gyp/gyp
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd node-gyp
|
||||
npm test
|
27
node_modules/node-gyp/gyp/.github/workflows/nodejs-windows.yml
generated
vendored
Normal file
27
node_modules/node-gyp/gyp/.github/workflows/nodejs-windows.yml
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
name: Node.js Windows integration
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Clone gyp-next
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: gyp-next
|
||||
- name: Clone nodejs/node
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: nodejs/node
|
||||
path: node
|
||||
- name: Install deps
|
||||
run: choco install nasm
|
||||
- name: Replace gyp in Node.js
|
||||
run: |
|
||||
rm -Recurse node/tools/gyp
|
||||
cp -Recurse gyp-next node/tools/gyp
|
||||
- name: Build Node.js
|
||||
run: |
|
||||
cd node
|
||||
./vcbuild.bat
|
16
node_modules/node-gyp/gyp/.github/workflows/release-please.yml
generated
vendored
Normal file
16
node_modules/node-gyp/gyp/.github/workflows/release-please.yml
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
name: release-please
|
||||
jobs:
|
||||
release-please:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: GoogleCloudPlatform/release-please-action@v2
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
release-type: python
|
||||
package-name: gyp-next
|
||||
bump-minor-pre-major: Yes
|
16
node_modules/node-gyp/gyp/AUTHORS
generated
vendored
Normal file
16
node_modules/node-gyp/gyp/AUTHORS
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
# Names should be added to this file like so:
|
||||
# Name or Organization <email address>
|
||||
|
||||
Google Inc. <*@google.com>
|
||||
Bloomberg Finance L.P. <*@bloomberg.net>
|
||||
IBM Inc. <*@*.ibm.com>
|
||||
Yandex LLC <*@yandex-team.ru>
|
||||
|
||||
Steven Knight <knight@baldmt.com>
|
||||
Ryan Norton <rnorton10@gmail.com>
|
||||
David J. Sankel <david@sankelsoftware.com>
|
||||
Eric N. Vander Weele <ericvw@gmail.com>
|
||||
Tom Freudenberg <th.freudenberg@gmail.com>
|
||||
Julien Brianceau <jbriance@cisco.com>
|
||||
Refael Ackermann <refack@gmail.com>
|
||||
Ujjwal Sharma <ryzokuken@disroot.org>
|
177
node_modules/node-gyp/gyp/CHANGELOG.md
generated
vendored
Normal file
177
node_modules/node-gyp/gyp/CHANGELOG.md
generated
vendored
Normal file
@@ -0,0 +1,177 @@
|
||||
# Changelog
|
||||
|
||||
## [0.10.0](https://www.github.com/nodejs/gyp-next/compare/v0.9.6...v0.10.0) (2021-08-26)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **msvs:** add support for Visual Studio 2022 ([#124](https://www.github.com/nodejs/gyp-next/issues/124)) ([4bd9215](https://www.github.com/nodejs/gyp-next/commit/4bd9215c44d300f06e916aec1d6327c22b78272d))
|
||||
|
||||
### [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)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* py lint ([3b6a8ee](https://www.github.com/nodejs/gyp-next/commit/3b6a8ee7a66193a8a6867eba9e1d2b70bdf04402))
|
||||
|
||||
## [0.9.0](https://www.github.com/nodejs/gyp-next/compare/v0.8.1...v0.9.0) (2021-05-13)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* use LDFLAGS_host for host toolset ([#98](https://www.github.com/nodejs/gyp-next/issues/98)) ([bea5c7b](https://www.github.com/nodejs/gyp-next/commit/bea5c7bd67d6ad32acbdce79767a5481c70675a2))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* msvs.py: remove overindentation ([#102](https://www.github.com/nodejs/gyp-next/issues/102)) ([3f83e99](https://www.github.com/nodejs/gyp-next/commit/3f83e99056d004d9579ceb786e06b624ddc36529))
|
||||
* update gyp.el to change case to cl-case ([#93](https://www.github.com/nodejs/gyp-next/issues/93)) ([13d5b66](https://www.github.com/nodejs/gyp-next/commit/13d5b66aab35985af9c2fb1174fdc6e1c1407ecc))
|
||||
|
||||
### [0.8.1](https://www.github.com/nodejs/gyp-next/compare/v0.8.0...v0.8.1) (2021-02-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* update shebang lines from python to python3 ([#94](https://www.github.com/nodejs/gyp-next/issues/94)) ([a1b0d41](https://www.github.com/nodejs/gyp-next/commit/a1b0d4171a8049a4ab7a614202063dec332f2df4))
|
||||
|
||||
## [0.8.0](https://www.github.com/nodejs/gyp-next/compare/v0.7.0...v0.8.0) (2021-01-15)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* remove support for Python 2
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* revert posix build job ([#86](https://www.github.com/nodejs/gyp-next/issues/86)) ([39dc34f](https://www.github.com/nodejs/gyp-next/commit/39dc34f0799c074624005fb9bbccf6e028607f9d))
|
||||
|
||||
|
||||
### gyp
|
||||
|
||||
* Remove support for Python 2 ([#88](https://www.github.com/nodejs/gyp-next/issues/88)) ([22e4654](https://www.github.com/nodejs/gyp-next/commit/22e465426fd892403c95534229af819a99c3f8dc))
|
||||
|
||||
## [0.7.0](https://www.github.com/nodejs/gyp-next/compare/v0.6.2...v0.7.0) (2020-12-17)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* **msvs:** On Windows, arguments passed to the "action" commands are no longer transformed to replace slashes with backslashes.
|
||||
|
||||
### Features
|
||||
|
||||
* **xcode:** --cross-compiling overrides arch-specific settings ([973bae0](https://www.github.com/nodejs/gyp-next/commit/973bae0b7b08be7b680ecae9565fbd04b3e0787d))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **msvs:** do not fix paths in action command arguments ([fc22f83](https://www.github.com/nodejs/gyp-next/commit/fc22f8335e2016da4aae4f4233074bd651d2faea))
|
||||
* cmake on python 3 ([fd61f5f](https://www.github.com/nodejs/gyp-next/commit/fd61f5faa5275ec8fc98e3c7868c0dd46f109540))
|
||||
* ValueError: invalid mode: 'rU' while trying to load binding.gyp ([d0504e6](https://www.github.com/nodejs/gyp-next/commit/d0504e6700ce48f44957a4d5891b142a60be946f))
|
||||
* xcode cmake parsing ([eefe8d1](https://www.github.com/nodejs/gyp-next/commit/eefe8d10e99863bc4ac7e2ed32facd608d400d4b))
|
||||
|
||||
### [0.6.2](https://www.github.com/nodejs/gyp-next/compare/v0.6.1...v0.6.2) (2020-10-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* do not rewrite absolute paths to avoid long paths ([#74](https://www.github.com/nodejs/gyp-next/issues/74)) ([c2ccc1a](https://www.github.com/nodejs/gyp-next/commit/c2ccc1a81f7f94433a94f4d01a2e820db4c4331a))
|
||||
* only include MARMASM when toolset is target ([5a2794a](https://www.github.com/nodejs/gyp-next/commit/5a2794aefb58f0c00404ff042b61740bc8b8d5cd))
|
||||
|
||||
### [0.6.1](https://github.com/nodejs/gyp-next/compare/v0.6.0...v0.6.1) (2020-10-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Correctly rename object files for absolute paths in MSVS generator.
|
||||
|
||||
## [0.6.0](https://github.com/nodejs/gyp-next/compare/v0.5.0...v0.6.0) (2020-10-13)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* The Makefile generator will now output shared libraries directly to the product directory on all platforms (previously only macOS).
|
||||
|
||||
## [0.5.0](https://github.com/nodejs/gyp-next/compare/v0.4.0...v0.5.0) (2020-09-30)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Extended compile_commands_json generator to consider more file extensions than just `c` and `cc`. `cpp` and `cxx` are now supported.
|
||||
* Source files with duplicate basenames are now supported.
|
||||
|
||||
### Removed
|
||||
|
||||
* The `--no-duplicate-basename-check` option was removed.
|
||||
* The `msvs_enable_marmasm` configuration option was removed in favor of auto-inclusion of the "marmasm" sections for Windows on ARM.
|
||||
|
||||
## [0.4.0](https://github.com/nodejs/gyp-next/compare/v0.3.0...v0.4.0) (2020-07-14)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Added support for passing arbitrary architectures to Xcode builds, enables `arm64` builds.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed a bug on Solaris where copying archives failed.
|
||||
|
||||
## [0.3.0](https://github.com/nodejs/gyp-next/compare/v0.2.1...v0.3.0) (2020-06-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Added support for MSVC cross-compilation. This allows compilation on x64 for a Windows ARM target.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fixed XCode CLT version detection on macOS Catalina.
|
||||
|
||||
### [0.2.1](https://github.com/nodejs/gyp-next/compare/v0.2.0...v0.2.1) (2020-05-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Relicensed to Node.js contributors.
|
||||
* Fixed Windows bug introduced in v0.2.0.
|
||||
|
||||
## [0.2.0](https://github.com/nodejs/gyp-next/releases/tag/v0.2.0) (2020-04-06)
|
||||
|
||||
This is the first release of this project, based on https://chromium.googlesource.com/external/gyp with changes made over the years in Node.js and node-gyp.
|
4
node_modules/node-gyp/gyp/CODE_OF_CONDUCT.md
generated
vendored
Normal file
4
node_modules/node-gyp/gyp/CODE_OF_CONDUCT.md
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
# Code of Conduct
|
||||
|
||||
* [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/HEAD/CODE_OF_CONDUCT.md)
|
||||
* [Node.js Moderation Policy](https://github.com/nodejs/admin/blob/HEAD/Moderation-Policy.md)
|
32
node_modules/node-gyp/gyp/CONTRIBUTING.md
generated
vendored
Normal file
32
node_modules/node-gyp/gyp/CONTRIBUTING.md
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
# Contributing to gyp-next
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
This project is bound to the [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/HEAD/CODE_OF_CONDUCT.md).
|
||||
|
||||
<a id="developers-certificate-of-origin"></a>
|
||||
## Developer's Certificate of Origin 1.1
|
||||
|
||||
By making a contribution to this project, I certify that:
|
||||
|
||||
* (a) The contribution was created in whole or in part by me and I
|
||||
have the right to submit it under the open source license
|
||||
indicated in the file; or
|
||||
|
||||
* (b) The contribution is based upon previous work that, to the best
|
||||
of my knowledge, is covered under an appropriate open source
|
||||
license and I have the right under that license to submit that
|
||||
work with modifications, whether created in whole or in part
|
||||
by me, under the same open source license (unless I am
|
||||
permitted to submit under a different license), as indicated
|
||||
in the file; or
|
||||
|
||||
* (c) The contribution was provided directly to me by some other
|
||||
person who certified (a), (b) or (c) and I have not modified
|
||||
it.
|
||||
|
||||
* (d) I understand and agree that this project and the contribution
|
||||
are public and that a record of the contribution (including all
|
||||
personal information I submit with it, including my sign-off) is
|
||||
maintained indefinitely and may be redistributed consistent with
|
||||
this project or the open source license(s) involved.
|
28
node_modules/node-gyp/gyp/LICENSE
generated
vendored
Normal file
28
node_modules/node-gyp/gyp/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
Copyright (c) 2020 Node.js contributors. All rights reserved.
|
||||
Copyright (c) 2009 Google Inc. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
7
node_modules/node-gyp/gyp/README.md
generated
vendored
Normal file
7
node_modules/node-gyp/gyp/README.md
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
GYP can Generate Your Projects.
|
||||
===================================
|
||||
|
||||
Documents are available at [gyp.gsrc.io](https://gyp.gsrc.io), or you can check out ```md-pages``` branch to read those documents offline.
|
||||
|
||||
__gyp-next__ is [released](https://github.com/nodejs/gyp-next/releases) to the [__Python Packaging Index__](https://pypi.org/project/gyp-next) (PyPI) and can be installed with the command:
|
||||
* `python3 -m pip install gyp-next`
|
12
node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc
generated
vendored
Normal file
12
node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
// Copyright (c) 2013 Google Inc. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// This file is used to generate an empty .pdb -- with a 4KB pagesize -- that is
|
||||
// then used during the final link for modules that have large PDBs. Otherwise,
|
||||
// the linker will generate a pdb with a page size of 1KB, which imposes a limit
|
||||
// of 1GB on the .pdb. By generating an initial empty .pdb with the compiler
|
||||
// (rather than the linker), this limit is avoided. With this in place PDBs may
|
||||
// grow to 2GB.
|
||||
//
|
||||
// This file is referenced by the msvs_large_pdb mechanism in MSVSUtil.py.
|
8
node_modules/node-gyp/gyp/gyp
generated
vendored
Normal file
8
node_modules/node-gyp/gyp/gyp
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
# Copyright 2013 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
set -e
|
||||
base=$(dirname "$0")
|
||||
exec python "${base}/gyp_main.py" "$@"
|
5
node_modules/node-gyp/gyp/gyp.bat
generated
vendored
Normal file
5
node_modules/node-gyp/gyp/gyp.bat
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
@rem Copyright (c) 2009 Google Inc. All rights reserved.
|
||||
@rem Use of this source code is governed by a BSD-style license that can be
|
||||
@rem found in the LICENSE file.
|
||||
|
||||
@python "%~dp0gyp_main.py" %*
|
45
node_modules/node-gyp/gyp/gyp_main.py
generated
vendored
Normal file
45
node_modules/node-gyp/gyp/gyp_main.py
generated
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2009 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
|
||||
def IsCygwin():
|
||||
# Function copied from pylib/gyp/common.py
|
||||
try:
|
||||
out = subprocess.Popen(
|
||||
"uname", stdout=subprocess.PIPE, stderr=subprocess.STDOUT
|
||||
)
|
||||
stdout, _ = out.communicate()
|
||||
return "CYGWIN" in stdout.decode("utf-8")
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def UnixifyPath(path):
|
||||
try:
|
||||
if not IsCygwin():
|
||||
return path
|
||||
out = subprocess.Popen(
|
||||
["cygpath", "-u", path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT
|
||||
)
|
||||
stdout, _ = out.communicate()
|
||||
return stdout.decode("utf-8")
|
||||
except Exception:
|
||||
return path
|
||||
|
||||
|
||||
# Make sure we're using the version of pylib in this repo, not one installed
|
||||
# elsewhere on the system. Also convert to Unix style path on Cygwin systems,
|
||||
# else the 'gyp' library will not be found
|
||||
path = UnixifyPath(sys.argv[0])
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(path), "pylib"))
|
||||
import gyp # noqa: E402
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(gyp.script_main())
|
367
node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
generated
vendored
Normal file
367
node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
generated
vendored
Normal file
@@ -0,0 +1,367 @@
|
||||
# Copyright (c) 2012 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""New implementation of Visual Studio project generation."""
|
||||
|
||||
import hashlib
|
||||
import os
|
||||
import random
|
||||
from operator import attrgetter
|
||||
|
||||
import gyp.common
|
||||
|
||||
|
||||
def cmp(x, y):
|
||||
return (x > y) - (x < y)
|
||||
|
||||
|
||||
# Initialize random number generator
|
||||
random.seed()
|
||||
|
||||
# GUIDs for project types
|
||||
ENTRY_TYPE_GUIDS = {
|
||||
"project": "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}",
|
||||
"folder": "{2150E333-8FDC-42A3-9474-1A3956D46DE8}",
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Helper functions
|
||||
|
||||
|
||||
def MakeGuid(name, seed="msvs_new"):
|
||||
"""Returns a GUID for the specified target name.
|
||||
|
||||
Args:
|
||||
name: Target name.
|
||||
seed: Seed for MD5 hash.
|
||||
Returns:
|
||||
A GUID-line string calculated from the name and seed.
|
||||
|
||||
This generates something which looks like a GUID, but depends only on the
|
||||
name and seed. This means the same name/seed will always generate the same
|
||||
GUID, so that projects and solutions which refer to each other can explicitly
|
||||
determine the GUID to refer to explicitly. It also means that the GUID will
|
||||
not change when the project for a target is rebuilt.
|
||||
"""
|
||||
# Calculate a MD5 signature for the seed and name.
|
||||
d = hashlib.md5((str(seed) + str(name)).encode("utf-8")).hexdigest().upper()
|
||||
# Convert most of the signature to GUID form (discard the rest)
|
||||
guid = (
|
||||
"{"
|
||||
+ d[:8]
|
||||
+ "-"
|
||||
+ d[8:12]
|
||||
+ "-"
|
||||
+ d[12:16]
|
||||
+ "-"
|
||||
+ d[16:20]
|
||||
+ "-"
|
||||
+ d[20:32]
|
||||
+ "}"
|
||||
)
|
||||
return guid
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
class MSVSSolutionEntry:
|
||||
def __cmp__(self, other):
|
||||
# Sort by name then guid (so things are in order on vs2008).
|
||||
return cmp((self.name, self.get_guid()), (other.name, other.get_guid()))
|
||||
|
||||
|
||||
class MSVSFolder(MSVSSolutionEntry):
|
||||
"""Folder in a Visual Studio project or solution."""
|
||||
|
||||
def __init__(self, path, name=None, entries=None, guid=None, items=None):
|
||||
"""Initializes the folder.
|
||||
|
||||
Args:
|
||||
path: Full path to the folder.
|
||||
name: Name of the folder.
|
||||
entries: List of folder entries to nest inside this folder. May contain
|
||||
Folder or Project objects. May be None, if the folder is empty.
|
||||
guid: GUID to use for folder, if not None.
|
||||
items: List of solution items to include in the folder project. May be
|
||||
None, if the folder does not directly contain items.
|
||||
"""
|
||||
if name:
|
||||
self.name = name
|
||||
else:
|
||||
# Use last layer.
|
||||
self.name = os.path.basename(path)
|
||||
|
||||
self.path = path
|
||||
self.guid = guid
|
||||
|
||||
# Copy passed lists (or set to empty lists)
|
||||
self.entries = sorted(entries or [], key=attrgetter("path"))
|
||||
self.items = list(items or [])
|
||||
|
||||
self.entry_type_guid = ENTRY_TYPE_GUIDS["folder"]
|
||||
|
||||
def get_guid(self):
|
||||
if self.guid is None:
|
||||
# Use consistent guids for folders (so things don't regenerate).
|
||||
self.guid = MakeGuid(self.path, seed="msvs_folder")
|
||||
return self.guid
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
class MSVSProject(MSVSSolutionEntry):
|
||||
"""Visual Studio project."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
path,
|
||||
name=None,
|
||||
dependencies=None,
|
||||
guid=None,
|
||||
spec=None,
|
||||
build_file=None,
|
||||
config_platform_overrides=None,
|
||||
fixpath_prefix=None,
|
||||
):
|
||||
"""Initializes the project.
|
||||
|
||||
Args:
|
||||
path: Absolute path to the project file.
|
||||
name: Name of project. If None, the name will be the same as the base
|
||||
name of the project file.
|
||||
dependencies: List of other Project objects this project is dependent
|
||||
upon, if not None.
|
||||
guid: GUID to use for project, if not None.
|
||||
spec: Dictionary specifying how to build this project.
|
||||
build_file: Filename of the .gyp file that the vcproj file comes from.
|
||||
config_platform_overrides: optional dict of configuration platforms to
|
||||
used in place of the default for this target.
|
||||
fixpath_prefix: the path used to adjust the behavior of _fixpath
|
||||
"""
|
||||
self.path = path
|
||||
self.guid = guid
|
||||
self.spec = spec
|
||||
self.build_file = build_file
|
||||
# Use project filename if name not specified
|
||||
self.name = name or os.path.splitext(os.path.basename(path))[0]
|
||||
|
||||
# Copy passed lists (or set to empty lists)
|
||||
self.dependencies = list(dependencies or [])
|
||||
|
||||
self.entry_type_guid = ENTRY_TYPE_GUIDS["project"]
|
||||
|
||||
if config_platform_overrides:
|
||||
self.config_platform_overrides = config_platform_overrides
|
||||
else:
|
||||
self.config_platform_overrides = {}
|
||||
self.fixpath_prefix = fixpath_prefix
|
||||
self.msbuild_toolset = None
|
||||
|
||||
def set_dependencies(self, dependencies):
|
||||
self.dependencies = list(dependencies or [])
|
||||
|
||||
def get_guid(self):
|
||||
if self.guid is None:
|
||||
# Set GUID from path
|
||||
# TODO(rspangler): This is fragile.
|
||||
# 1. We can't just use the project filename sans path, since there could
|
||||
# be multiple projects with the same base name (for example,
|
||||
# foo/unittest.vcproj and bar/unittest.vcproj).
|
||||
# 2. The path needs to be relative to $SOURCE_ROOT, so that the project
|
||||
# GUID is the same whether it's included from base/base.sln or
|
||||
# foo/bar/baz/baz.sln.
|
||||
# 3. The GUID needs to be the same each time this builder is invoked, so
|
||||
# that we don't need to rebuild the solution when the project changes.
|
||||
# 4. We should be able to handle pre-built project files by reading the
|
||||
# GUID from the files.
|
||||
self.guid = MakeGuid(self.name)
|
||||
return self.guid
|
||||
|
||||
def set_msbuild_toolset(self, msbuild_toolset):
|
||||
self.msbuild_toolset = msbuild_toolset
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
class MSVSSolution:
|
||||
"""Visual Studio solution."""
|
||||
|
||||
def __init__(
|
||||
self, path, version, entries=None, variants=None, websiteProperties=True
|
||||
):
|
||||
"""Initializes the solution.
|
||||
|
||||
Args:
|
||||
path: Path to solution file.
|
||||
version: Format version to emit.
|
||||
entries: List of entries in solution. May contain Folder or Project
|
||||
objects. May be None, if the folder is empty.
|
||||
variants: List of build variant strings. If none, a default list will
|
||||
be used.
|
||||
websiteProperties: Flag to decide if the website properties section
|
||||
is generated.
|
||||
"""
|
||||
self.path = path
|
||||
self.websiteProperties = websiteProperties
|
||||
self.version = version
|
||||
|
||||
# Copy passed lists (or set to empty lists)
|
||||
self.entries = list(entries or [])
|
||||
|
||||
if variants:
|
||||
# Copy passed list
|
||||
self.variants = variants[:]
|
||||
else:
|
||||
# Use default
|
||||
self.variants = ["Debug|Win32", "Release|Win32"]
|
||||
# TODO(rspangler): Need to be able to handle a mapping of solution config
|
||||
# to project config. Should we be able to handle variants being a dict,
|
||||
# or add a separate variant_map variable? If it's a dict, we can't
|
||||
# guarantee the order of variants since dict keys aren't ordered.
|
||||
|
||||
# TODO(rspangler): Automatically write to disk for now; should delay until
|
||||
# node-evaluation time.
|
||||
self.Write()
|
||||
|
||||
def Write(self, writer=gyp.common.WriteOnDiff):
|
||||
"""Writes the solution file to disk.
|
||||
|
||||
Raises:
|
||||
IndexError: An entry appears multiple times.
|
||||
"""
|
||||
# Walk the entry tree and collect all the folders and projects.
|
||||
all_entries = set()
|
||||
entries_to_check = self.entries[:]
|
||||
while entries_to_check:
|
||||
e = entries_to_check.pop(0)
|
||||
|
||||
# If this entry has been visited, nothing to do.
|
||||
if e in all_entries:
|
||||
continue
|
||||
|
||||
all_entries.add(e)
|
||||
|
||||
# If this is a folder, check its entries too.
|
||||
if isinstance(e, MSVSFolder):
|
||||
entries_to_check += e.entries
|
||||
|
||||
all_entries = sorted(all_entries, key=attrgetter("path"))
|
||||
|
||||
# Open file and print header
|
||||
f = writer(self.path)
|
||||
f.write(
|
||||
"Microsoft Visual Studio Solution File, "
|
||||
"Format Version %s\r\n" % self.version.SolutionVersion()
|
||||
)
|
||||
f.write("# %s\r\n" % self.version.Description())
|
||||
|
||||
# Project entries
|
||||
sln_root = os.path.split(self.path)[0]
|
||||
for e in all_entries:
|
||||
relative_path = gyp.common.RelativePath(e.path, sln_root)
|
||||
# msbuild does not accept an empty folder_name.
|
||||
# use '.' in case relative_path is empty.
|
||||
folder_name = relative_path.replace("/", "\\") or "."
|
||||
f.write(
|
||||
'Project("%s") = "%s", "%s", "%s"\r\n'
|
||||
% (
|
||||
e.entry_type_guid, # Entry type GUID
|
||||
e.name, # Folder name
|
||||
folder_name, # Folder name (again)
|
||||
e.get_guid(), # Entry GUID
|
||||
)
|
||||
)
|
||||
|
||||
# TODO(rspangler): Need a way to configure this stuff
|
||||
if self.websiteProperties:
|
||||
f.write(
|
||||
"\tProjectSection(WebsiteProperties) = preProject\r\n"
|
||||
'\t\tDebug.AspNetCompiler.Debug = "True"\r\n'
|
||||
'\t\tRelease.AspNetCompiler.Debug = "False"\r\n'
|
||||
"\tEndProjectSection\r\n"
|
||||
)
|
||||
|
||||
if isinstance(e, MSVSFolder):
|
||||
if e.items:
|
||||
f.write("\tProjectSection(SolutionItems) = preProject\r\n")
|
||||
for i in e.items:
|
||||
f.write(f"\t\t{i} = {i}\r\n")
|
||||
f.write("\tEndProjectSection\r\n")
|
||||
|
||||
if isinstance(e, MSVSProject):
|
||||
if e.dependencies:
|
||||
f.write("\tProjectSection(ProjectDependencies) = postProject\r\n")
|
||||
for d in e.dependencies:
|
||||
f.write(f"\t\t{d.get_guid()} = {d.get_guid()}\r\n")
|
||||
f.write("\tEndProjectSection\r\n")
|
||||
|
||||
f.write("EndProject\r\n")
|
||||
|
||||
# Global section
|
||||
f.write("Global\r\n")
|
||||
|
||||
# Configurations (variants)
|
||||
f.write("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n")
|
||||
for v in self.variants:
|
||||
f.write(f"\t\t{v} = {v}\r\n")
|
||||
f.write("\tEndGlobalSection\r\n")
|
||||
|
||||
# Sort config guids for easier diffing of solution changes.
|
||||
config_guids = []
|
||||
config_guids_overrides = {}
|
||||
for e in all_entries:
|
||||
if isinstance(e, MSVSProject):
|
||||
config_guids.append(e.get_guid())
|
||||
config_guids_overrides[e.get_guid()] = e.config_platform_overrides
|
||||
config_guids.sort()
|
||||
|
||||
f.write("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n")
|
||||
for g in config_guids:
|
||||
for v in self.variants:
|
||||
nv = config_guids_overrides[g].get(v, v)
|
||||
# Pick which project configuration to build for this solution
|
||||
# configuration.
|
||||
f.write(
|
||||
"\t\t%s.%s.ActiveCfg = %s\r\n"
|
||||
% (
|
||||
g, # Project GUID
|
||||
v, # Solution build configuration
|
||||
nv, # Project build config for that solution config
|
||||
)
|
||||
)
|
||||
|
||||
# Enable project in this solution configuration.
|
||||
f.write(
|
||||
"\t\t%s.%s.Build.0 = %s\r\n"
|
||||
% (
|
||||
g, # Project GUID
|
||||
v, # Solution build configuration
|
||||
nv, # Project build config for that solution config
|
||||
)
|
||||
)
|
||||
f.write("\tEndGlobalSection\r\n")
|
||||
|
||||
# TODO(rspangler): Should be able to configure this stuff too (though I've
|
||||
# never seen this be any different)
|
||||
f.write("\tGlobalSection(SolutionProperties) = preSolution\r\n")
|
||||
f.write("\t\tHideSolutionNode = FALSE\r\n")
|
||||
f.write("\tEndGlobalSection\r\n")
|
||||
|
||||
# Folder mappings
|
||||
# Omit this section if there are no folders
|
||||
if any([e.entries for e in all_entries if isinstance(e, MSVSFolder)]):
|
||||
f.write("\tGlobalSection(NestedProjects) = preSolution\r\n")
|
||||
for e in all_entries:
|
||||
if not isinstance(e, MSVSFolder):
|
||||
continue # Does not apply to projects, only folders
|
||||
for subentry in e.entries:
|
||||
f.write(f"\t\t{subentry.get_guid()} = {e.get_guid()}\r\n")
|
||||
f.write("\tEndGlobalSection\r\n")
|
||||
|
||||
f.write("EndGlobal\r\n")
|
||||
|
||||
f.close()
|
206
node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
generated
vendored
Normal file
206
node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
generated
vendored
Normal file
@@ -0,0 +1,206 @@
|
||||
# Copyright (c) 2012 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""Visual Studio project reader/writer."""
|
||||
|
||||
import gyp.easy_xml as easy_xml
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
class Tool:
|
||||
"""Visual Studio tool."""
|
||||
|
||||
def __init__(self, name, attrs=None):
|
||||
"""Initializes the tool.
|
||||
|
||||
Args:
|
||||
name: Tool name.
|
||||
attrs: Dict of tool attributes; may be None.
|
||||
"""
|
||||
self._attrs = attrs or {}
|
||||
self._attrs["Name"] = name
|
||||
|
||||
def _GetSpecification(self):
|
||||
"""Creates an element for the tool.
|
||||
|
||||
Returns:
|
||||
A new xml.dom.Element for the tool.
|
||||
"""
|
||||
return ["Tool", self._attrs]
|
||||
|
||||
|
||||
class Filter:
|
||||
"""Visual Studio filter - that is, a virtual folder."""
|
||||
|
||||
def __init__(self, name, contents=None):
|
||||
"""Initializes the folder.
|
||||
|
||||
Args:
|
||||
name: Filter (folder) name.
|
||||
contents: List of filenames and/or Filter objects contained.
|
||||
"""
|
||||
self.name = name
|
||||
self.contents = list(contents or [])
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
class Writer:
|
||||
"""Visual Studio XML project writer."""
|
||||
|
||||
def __init__(self, project_path, version, name, guid=None, platforms=None):
|
||||
"""Initializes the project.
|
||||
|
||||
Args:
|
||||
project_path: Path to the project file.
|
||||
version: Format version to emit.
|
||||
name: Name of the project.
|
||||
guid: GUID to use for project, if not None.
|
||||
platforms: Array of string, the supported platforms. If null, ['Win32']
|
||||
"""
|
||||
self.project_path = project_path
|
||||
self.version = version
|
||||
self.name = name
|
||||
self.guid = guid
|
||||
|
||||
# Default to Win32 for platforms.
|
||||
if not platforms:
|
||||
platforms = ["Win32"]
|
||||
|
||||
# Initialize the specifications of the various sections.
|
||||
self.platform_section = ["Platforms"]
|
||||
for platform in platforms:
|
||||
self.platform_section.append(["Platform", {"Name": platform}])
|
||||
self.tool_files_section = ["ToolFiles"]
|
||||
self.configurations_section = ["Configurations"]
|
||||
self.files_section = ["Files"]
|
||||
|
||||
# Keep a dict keyed on filename to speed up access.
|
||||
self.files_dict = dict()
|
||||
|
||||
def AddToolFile(self, path):
|
||||
"""Adds a tool file to the project.
|
||||
|
||||
Args:
|
||||
path: Relative path from project to tool file.
|
||||
"""
|
||||
self.tool_files_section.append(["ToolFile", {"RelativePath": path}])
|
||||
|
||||
def _GetSpecForConfiguration(self, config_type, config_name, attrs, tools):
|
||||
"""Returns the specification for a configuration.
|
||||
|
||||
Args:
|
||||
config_type: Type of configuration node.
|
||||
config_name: Configuration name.
|
||||
attrs: Dict of configuration attributes; may be None.
|
||||
tools: List of tools (strings or Tool objects); may be None.
|
||||
Returns:
|
||||
"""
|
||||
# Handle defaults
|
||||
if not attrs:
|
||||
attrs = {}
|
||||
if not tools:
|
||||
tools = []
|
||||
|
||||
# Add configuration node and its attributes
|
||||
node_attrs = attrs.copy()
|
||||
node_attrs["Name"] = config_name
|
||||
specification = [config_type, node_attrs]
|
||||
|
||||
# Add tool nodes and their attributes
|
||||
if tools:
|
||||
for t in tools:
|
||||
if isinstance(t, Tool):
|
||||
specification.append(t._GetSpecification())
|
||||
else:
|
||||
specification.append(Tool(t)._GetSpecification())
|
||||
return specification
|
||||
|
||||
def AddConfig(self, name, attrs=None, tools=None):
|
||||
"""Adds a configuration to the project.
|
||||
|
||||
Args:
|
||||
name: Configuration name.
|
||||
attrs: Dict of configuration attributes; may be None.
|
||||
tools: List of tools (strings or Tool objects); may be None.
|
||||
"""
|
||||
spec = self._GetSpecForConfiguration("Configuration", name, attrs, tools)
|
||||
self.configurations_section.append(spec)
|
||||
|
||||
def _AddFilesToNode(self, parent, files):
|
||||
"""Adds files and/or filters to the parent node.
|
||||
|
||||
Args:
|
||||
parent: Destination node
|
||||
files: A list of Filter objects and/or relative paths to files.
|
||||
|
||||
Will call itself recursively, if the files list contains Filter objects.
|
||||
"""
|
||||
for f in files:
|
||||
if isinstance(f, Filter):
|
||||
node = ["Filter", {"Name": f.name}]
|
||||
self._AddFilesToNode(node, f.contents)
|
||||
else:
|
||||
node = ["File", {"RelativePath": f}]
|
||||
self.files_dict[f] = node
|
||||
parent.append(node)
|
||||
|
||||
def AddFiles(self, files):
|
||||
"""Adds files to the project.
|
||||
|
||||
Args:
|
||||
files: A list of Filter objects and/or relative paths to files.
|
||||
|
||||
This makes a copy of the file/filter tree at the time of this call. If you
|
||||
later add files to a Filter object which was passed into a previous call
|
||||
to AddFiles(), it will not be reflected in this project.
|
||||
"""
|
||||
self._AddFilesToNode(self.files_section, files)
|
||||
# TODO(rspangler) This also doesn't handle adding files to an existing
|
||||
# filter. That is, it doesn't merge the trees.
|
||||
|
||||
def AddFileConfig(self, path, config, attrs=None, tools=None):
|
||||
"""Adds a configuration to a file.
|
||||
|
||||
Args:
|
||||
path: Relative path to the file.
|
||||
config: Name of configuration to add.
|
||||
attrs: Dict of configuration attributes; may be None.
|
||||
tools: List of tools (strings or Tool objects); may be None.
|
||||
|
||||
Raises:
|
||||
ValueError: Relative path does not match any file added via AddFiles().
|
||||
"""
|
||||
# Find the file node with the right relative path
|
||||
parent = self.files_dict.get(path)
|
||||
if not parent:
|
||||
raise ValueError('AddFileConfig: file "%s" not in project.' % path)
|
||||
|
||||
# Add the config to the file node
|
||||
spec = self._GetSpecForConfiguration("FileConfiguration", config, attrs, tools)
|
||||
parent.append(spec)
|
||||
|
||||
def WriteIfChanged(self):
|
||||
"""Writes the project file."""
|
||||
# First create XML content definition
|
||||
content = [
|
||||
"VisualStudioProject",
|
||||
{
|
||||
"ProjectType": "Visual C++",
|
||||
"Version": self.version.ProjectVersion(),
|
||||
"Name": self.name,
|
||||
"ProjectGUID": self.guid,
|
||||
"RootNamespace": self.name,
|
||||
"Keyword": "Win32Proj",
|
||||
},
|
||||
self.platform_section,
|
||||
self.tool_files_section,
|
||||
self.configurations_section,
|
||||
["References"], # empty section
|
||||
self.files_section,
|
||||
["Globals"], # empty section
|
||||
]
|
||||
easy_xml.WriteXmlIfChanged(content, self.project_path, encoding="Windows-1252")
|
1270
node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
generated
vendored
Normal file
1270
node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1547
node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
generated
vendored
Normal file
1547
node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
59
node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
generated
vendored
Normal file
59
node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
# Copyright (c) 2012 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""Visual Studio project reader/writer."""
|
||||
|
||||
import gyp.easy_xml as easy_xml
|
||||
|
||||
|
||||
class Writer:
|
||||
"""Visual Studio XML tool file writer."""
|
||||
|
||||
def __init__(self, tool_file_path, name):
|
||||
"""Initializes the tool file.
|
||||
|
||||
Args:
|
||||
tool_file_path: Path to the tool file.
|
||||
name: Name of the tool file.
|
||||
"""
|
||||
self.tool_file_path = tool_file_path
|
||||
self.name = name
|
||||
self.rules_section = ["Rules"]
|
||||
|
||||
def AddCustomBuildRule(
|
||||
self, name, cmd, description, additional_dependencies, outputs, extensions
|
||||
):
|
||||
"""Adds a rule to the tool file.
|
||||
|
||||
Args:
|
||||
name: Name of the rule.
|
||||
description: Description of the rule.
|
||||
cmd: Command line of the rule.
|
||||
additional_dependencies: other files which may trigger the rule.
|
||||
outputs: outputs of the rule.
|
||||
extensions: extensions handled by the rule.
|
||||
"""
|
||||
rule = [
|
||||
"CustomBuildRule",
|
||||
{
|
||||
"Name": name,
|
||||
"ExecutionDescription": description,
|
||||
"CommandLine": cmd,
|
||||
"Outputs": ";".join(outputs),
|
||||
"FileExtensions": ";".join(extensions),
|
||||
"AdditionalDependencies": ";".join(additional_dependencies),
|
||||
},
|
||||
]
|
||||
self.rules_section.append(rule)
|
||||
|
||||
def WriteIfChanged(self):
|
||||
"""Writes the tool file."""
|
||||
content = [
|
||||
"VisualStudioToolFile",
|
||||
{"Version": "8.00", "Name": self.name},
|
||||
self.rules_section,
|
||||
]
|
||||
easy_xml.WriteXmlIfChanged(
|
||||
content, self.tool_file_path, encoding="Windows-1252"
|
||||
)
|
153
node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
generated
vendored
Normal file
153
node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
generated
vendored
Normal file
@@ -0,0 +1,153 @@
|
||||
# Copyright (c) 2012 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""Visual Studio user preferences file writer."""
|
||||
|
||||
import os
|
||||
import re
|
||||
import socket # for gethostname
|
||||
|
||||
import gyp.easy_xml as easy_xml
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
def _FindCommandInPath(command):
|
||||
"""If there are no slashes in the command given, this function
|
||||
searches the PATH env to find the given command, and converts it
|
||||
to an absolute path. We have to do this because MSVS is looking
|
||||
for an actual file to launch a debugger on, not just a command
|
||||
line. Note that this happens at GYP time, so anything needing to
|
||||
be built needs to have a full path."""
|
||||
if "/" in command or "\\" in command:
|
||||
# If the command already has path elements (either relative or
|
||||
# absolute), then assume it is constructed properly.
|
||||
return command
|
||||
else:
|
||||
# Search through the path list and find an existing file that
|
||||
# we can access.
|
||||
paths = os.environ.get("PATH", "").split(os.pathsep)
|
||||
for path in paths:
|
||||
item = os.path.join(path, command)
|
||||
if os.path.isfile(item) and os.access(item, os.X_OK):
|
||||
return item
|
||||
return command
|
||||
|
||||
|
||||
def _QuoteWin32CommandLineArgs(args):
|
||||
new_args = []
|
||||
for arg in args:
|
||||
# Replace all double-quotes with double-double-quotes to escape
|
||||
# them for cmd shell, and then quote the whole thing if there
|
||||
# are any.
|
||||
if arg.find('"') != -1:
|
||||
arg = '""'.join(arg.split('"'))
|
||||
arg = '"%s"' % arg
|
||||
|
||||
# Otherwise, if there are any spaces, quote the whole arg.
|
||||
elif re.search(r"[ \t\n]", arg):
|
||||
arg = '"%s"' % arg
|
||||
new_args.append(arg)
|
||||
return new_args
|
||||
|
||||
|
||||
class Writer:
|
||||
"""Visual Studio XML user user file writer."""
|
||||
|
||||
def __init__(self, user_file_path, version, name):
|
||||
"""Initializes the user file.
|
||||
|
||||
Args:
|
||||
user_file_path: Path to the user file.
|
||||
version: Version info.
|
||||
name: Name of the user file.
|
||||
"""
|
||||
self.user_file_path = user_file_path
|
||||
self.version = version
|
||||
self.name = name
|
||||
self.configurations = {}
|
||||
|
||||
def AddConfig(self, name):
|
||||
"""Adds a configuration to the project.
|
||||
|
||||
Args:
|
||||
name: Configuration name.
|
||||
"""
|
||||
self.configurations[name] = ["Configuration", {"Name": name}]
|
||||
|
||||
def AddDebugSettings(
|
||||
self, config_name, command, environment={}, working_directory=""
|
||||
):
|
||||
"""Adds a DebugSettings node to the user file for a particular config.
|
||||
|
||||
Args:
|
||||
command: command line to run. First element in the list is the
|
||||
executable. All elements of the command will be quoted if
|
||||
necessary.
|
||||
working_directory: other files which may trigger the rule. (optional)
|
||||
"""
|
||||
command = _QuoteWin32CommandLineArgs(command)
|
||||
|
||||
abs_command = _FindCommandInPath(command[0])
|
||||
|
||||
if environment and isinstance(environment, dict):
|
||||
env_list = [f'{key}="{val}"' for (key, val) in environment.items()]
|
||||
environment = " ".join(env_list)
|
||||
else:
|
||||
environment = ""
|
||||
|
||||
n_cmd = [
|
||||
"DebugSettings",
|
||||
{
|
||||
"Command": abs_command,
|
||||
"WorkingDirectory": working_directory,
|
||||
"CommandArguments": " ".join(command[1:]),
|
||||
"RemoteMachine": socket.gethostname(),
|
||||
"Environment": environment,
|
||||
"EnvironmentMerge": "true",
|
||||
# Currently these are all "dummy" values that we're just setting
|
||||
# in the default manner that MSVS does it. We could use some of
|
||||
# these to add additional capabilities, I suppose, but they might
|
||||
# not have parity with other platforms then.
|
||||
"Attach": "false",
|
||||
"DebuggerType": "3", # 'auto' debugger
|
||||
"Remote": "1",
|
||||
"RemoteCommand": "",
|
||||
"HttpUrl": "",
|
||||
"PDBPath": "",
|
||||
"SQLDebugging": "",
|
||||
"DebuggerFlavor": "0",
|
||||
"MPIRunCommand": "",
|
||||
"MPIRunArguments": "",
|
||||
"MPIRunWorkingDirectory": "",
|
||||
"ApplicationCommand": "",
|
||||
"ApplicationArguments": "",
|
||||
"ShimCommand": "",
|
||||
"MPIAcceptMode": "",
|
||||
"MPIAcceptFilter": "",
|
||||
},
|
||||
]
|
||||
|
||||
# Find the config, and add it if it doesn't exist.
|
||||
if config_name not in self.configurations:
|
||||
self.AddConfig(config_name)
|
||||
|
||||
# Add the DebugSettings onto the appropriate config.
|
||||
self.configurations[config_name].append(n_cmd)
|
||||
|
||||
def WriteIfChanged(self):
|
||||
"""Writes the user file."""
|
||||
configs = ["Configurations"]
|
||||
for config, spec in sorted(self.configurations.items()):
|
||||
configs.append(spec)
|
||||
|
||||
content = [
|
||||
"VisualStudioUserFile",
|
||||
{"Version": self.version.ProjectVersion(), "Name": self.name},
|
||||
configs,
|
||||
]
|
||||
easy_xml.WriteXmlIfChanged(
|
||||
content, self.user_file_path, encoding="Windows-1252"
|
||||
)
|
271
node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
generated
vendored
Normal file
271
node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
generated
vendored
Normal file
@@ -0,0 +1,271 @@
|
||||
# Copyright (c) 2013 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""Utility functions shared amongst the Windows generators."""
|
||||
|
||||
import copy
|
||||
import os
|
||||
|
||||
|
||||
# A dictionary mapping supported target types to extensions.
|
||||
TARGET_TYPE_EXT = {
|
||||
"executable": "exe",
|
||||
"loadable_module": "dll",
|
||||
"shared_library": "dll",
|
||||
"static_library": "lib",
|
||||
"windows_driver": "sys",
|
||||
}
|
||||
|
||||
|
||||
def _GetLargePdbShimCcPath():
|
||||
"""Returns the path of the large_pdb_shim.cc file."""
|
||||
this_dir = os.path.abspath(os.path.dirname(__file__))
|
||||
src_dir = os.path.abspath(os.path.join(this_dir, "..", ".."))
|
||||
win_data_dir = os.path.join(src_dir, "data", "win")
|
||||
large_pdb_shim_cc = os.path.join(win_data_dir, "large-pdb-shim.cc")
|
||||
return large_pdb_shim_cc
|
||||
|
||||
|
||||
def _DeepCopySomeKeys(in_dict, keys):
|
||||
"""Performs a partial deep-copy on |in_dict|, only copying the keys in |keys|.
|
||||
|
||||
Arguments:
|
||||
in_dict: The dictionary to copy.
|
||||
keys: The keys to be copied. If a key is in this list and doesn't exist in
|
||||
|in_dict| this is not an error.
|
||||
Returns:
|
||||
The partially deep-copied dictionary.
|
||||
"""
|
||||
d = {}
|
||||
for key in keys:
|
||||
if key not in in_dict:
|
||||
continue
|
||||
d[key] = copy.deepcopy(in_dict[key])
|
||||
return d
|
||||
|
||||
|
||||
def _SuffixName(name, suffix):
|
||||
"""Add a suffix to the end of a target.
|
||||
|
||||
Arguments:
|
||||
name: name of the target (foo#target)
|
||||
suffix: the suffix to be added
|
||||
Returns:
|
||||
Target name with suffix added (foo_suffix#target)
|
||||
"""
|
||||
parts = name.rsplit("#", 1)
|
||||
parts[0] = f"{parts[0]}_{suffix}"
|
||||
return "#".join(parts)
|
||||
|
||||
|
||||
def _ShardName(name, number):
|
||||
"""Add a shard number to the end of a target.
|
||||
|
||||
Arguments:
|
||||
name: name of the target (foo#target)
|
||||
number: shard number
|
||||
Returns:
|
||||
Target name with shard added (foo_1#target)
|
||||
"""
|
||||
return _SuffixName(name, str(number))
|
||||
|
||||
|
||||
def ShardTargets(target_list, target_dicts):
|
||||
"""Shard some targets apart to work around the linkers limits.
|
||||
|
||||
Arguments:
|
||||
target_list: List of target pairs: 'base/base.gyp:base'.
|
||||
target_dicts: Dict of target properties keyed on target pair.
|
||||
Returns:
|
||||
Tuple of the new sharded versions of the inputs.
|
||||
"""
|
||||
# Gather the targets to shard, and how many pieces.
|
||||
targets_to_shard = {}
|
||||
for t in target_dicts:
|
||||
shards = int(target_dicts[t].get("msvs_shard", 0))
|
||||
if shards:
|
||||
targets_to_shard[t] = shards
|
||||
# Shard target_list.
|
||||
new_target_list = []
|
||||
for t in target_list:
|
||||
if t in targets_to_shard:
|
||||
for i in range(targets_to_shard[t]):
|
||||
new_target_list.append(_ShardName(t, i))
|
||||
else:
|
||||
new_target_list.append(t)
|
||||
# Shard target_dict.
|
||||
new_target_dicts = {}
|
||||
for t in target_dicts:
|
||||
if t in targets_to_shard:
|
||||
for i in range(targets_to_shard[t]):
|
||||
name = _ShardName(t, i)
|
||||
new_target_dicts[name] = copy.copy(target_dicts[t])
|
||||
new_target_dicts[name]["target_name"] = _ShardName(
|
||||
new_target_dicts[name]["target_name"], i
|
||||
)
|
||||
sources = new_target_dicts[name].get("sources", [])
|
||||
new_sources = []
|
||||
for pos in range(i, len(sources), targets_to_shard[t]):
|
||||
new_sources.append(sources[pos])
|
||||
new_target_dicts[name]["sources"] = new_sources
|
||||
else:
|
||||
new_target_dicts[t] = target_dicts[t]
|
||||
# Shard dependencies.
|
||||
for t in sorted(new_target_dicts):
|
||||
for deptype in ("dependencies", "dependencies_original"):
|
||||
dependencies = copy.copy(new_target_dicts[t].get(deptype, []))
|
||||
new_dependencies = []
|
||||
for d in dependencies:
|
||||
if d in targets_to_shard:
|
||||
for i in range(targets_to_shard[d]):
|
||||
new_dependencies.append(_ShardName(d, i))
|
||||
else:
|
||||
new_dependencies.append(d)
|
||||
new_target_dicts[t][deptype] = new_dependencies
|
||||
|
||||
return (new_target_list, new_target_dicts)
|
||||
|
||||
|
||||
def _GetPdbPath(target_dict, config_name, vars):
|
||||
"""Returns the path to the PDB file that will be generated by a given
|
||||
configuration.
|
||||
|
||||
The lookup proceeds as follows:
|
||||
- Look for an explicit path in the VCLinkerTool configuration block.
|
||||
- Look for an 'msvs_large_pdb_path' variable.
|
||||
- Use '<(PRODUCT_DIR)/<(product_name).(exe|dll).pdb' if 'product_name' is
|
||||
specified.
|
||||
- Use '<(PRODUCT_DIR)/<(target_name).(exe|dll).pdb'.
|
||||
|
||||
Arguments:
|
||||
target_dict: The target dictionary to be searched.
|
||||
config_name: The name of the configuration of interest.
|
||||
vars: A dictionary of common GYP variables with generator-specific values.
|
||||
Returns:
|
||||
The path of the corresponding PDB file.
|
||||
"""
|
||||
config = target_dict["configurations"][config_name]
|
||||
msvs = config.setdefault("msvs_settings", {})
|
||||
|
||||
linker = msvs.get("VCLinkerTool", {})
|
||||
|
||||
pdb_path = linker.get("ProgramDatabaseFile")
|
||||
if pdb_path:
|
||||
return pdb_path
|
||||
|
||||
variables = target_dict.get("variables", {})
|
||||
pdb_path = variables.get("msvs_large_pdb_path", None)
|
||||
if pdb_path:
|
||||
return pdb_path
|
||||
|
||||
pdb_base = target_dict.get("product_name", target_dict["target_name"])
|
||||
pdb_base = "{}.{}.pdb".format(pdb_base, TARGET_TYPE_EXT[target_dict["type"]])
|
||||
pdb_path = vars["PRODUCT_DIR"] + "/" + pdb_base
|
||||
|
||||
return pdb_path
|
||||
|
||||
|
||||
def InsertLargePdbShims(target_list, target_dicts, vars):
|
||||
"""Insert a shim target that forces the linker to use 4KB pagesize PDBs.
|
||||
|
||||
This is a workaround for targets with PDBs greater than 1GB in size, the
|
||||
limit for the 1KB pagesize PDBs created by the linker by default.
|
||||
|
||||
Arguments:
|
||||
target_list: List of target pairs: 'base/base.gyp:base'.
|
||||
target_dicts: Dict of target properties keyed on target pair.
|
||||
vars: A dictionary of common GYP variables with generator-specific values.
|
||||
Returns:
|
||||
Tuple of the shimmed version of the inputs.
|
||||
"""
|
||||
# Determine which targets need shimming.
|
||||
targets_to_shim = []
|
||||
for t in target_dicts:
|
||||
target_dict = target_dicts[t]
|
||||
|
||||
# We only want to shim targets that have msvs_large_pdb enabled.
|
||||
if not int(target_dict.get("msvs_large_pdb", 0)):
|
||||
continue
|
||||
# This is intended for executable, shared_library and loadable_module
|
||||
# targets where every configuration is set up to produce a PDB output.
|
||||
# If any of these conditions is not true then the shim logic will fail
|
||||
# below.
|
||||
targets_to_shim.append(t)
|
||||
|
||||
large_pdb_shim_cc = _GetLargePdbShimCcPath()
|
||||
|
||||
for t in targets_to_shim:
|
||||
target_dict = target_dicts[t]
|
||||
target_name = target_dict.get("target_name")
|
||||
|
||||
base_dict = _DeepCopySomeKeys(
|
||||
target_dict, ["configurations", "default_configuration", "toolset"]
|
||||
)
|
||||
|
||||
# This is the dict for copying the source file (part of the GYP tree)
|
||||
# to the intermediate directory of the project. This is necessary because
|
||||
# we can't always build a relative path to the shim source file (on Windows
|
||||
# GYP and the project may be on different drives), and Ninja hates absolute
|
||||
# paths (it ends up generating the .obj and .obj.d alongside the source
|
||||
# file, polluting GYPs tree).
|
||||
copy_suffix = "large_pdb_copy"
|
||||
copy_target_name = target_name + "_" + copy_suffix
|
||||
full_copy_target_name = _SuffixName(t, copy_suffix)
|
||||
shim_cc_basename = os.path.basename(large_pdb_shim_cc)
|
||||
shim_cc_dir = vars["SHARED_INTERMEDIATE_DIR"] + "/" + copy_target_name
|
||||
shim_cc_path = shim_cc_dir + "/" + shim_cc_basename
|
||||
copy_dict = copy.deepcopy(base_dict)
|
||||
copy_dict["target_name"] = copy_target_name
|
||||
copy_dict["type"] = "none"
|
||||
copy_dict["sources"] = [large_pdb_shim_cc]
|
||||
copy_dict["copies"] = [
|
||||
{"destination": shim_cc_dir, "files": [large_pdb_shim_cc]}
|
||||
]
|
||||
|
||||
# This is the dict for the PDB generating shim target. It depends on the
|
||||
# copy target.
|
||||
shim_suffix = "large_pdb_shim"
|
||||
shim_target_name = target_name + "_" + shim_suffix
|
||||
full_shim_target_name = _SuffixName(t, shim_suffix)
|
||||
shim_dict = copy.deepcopy(base_dict)
|
||||
shim_dict["target_name"] = shim_target_name
|
||||
shim_dict["type"] = "static_library"
|
||||
shim_dict["sources"] = [shim_cc_path]
|
||||
shim_dict["dependencies"] = [full_copy_target_name]
|
||||
|
||||
# Set up the shim to output its PDB to the same location as the final linker
|
||||
# target.
|
||||
for config_name, config in shim_dict.get("configurations").items():
|
||||
pdb_path = _GetPdbPath(target_dict, config_name, vars)
|
||||
|
||||
# A few keys that we don't want to propagate.
|
||||
for key in ["msvs_precompiled_header", "msvs_precompiled_source", "test"]:
|
||||
config.pop(key, None)
|
||||
|
||||
msvs = config.setdefault("msvs_settings", {})
|
||||
|
||||
# Update the compiler directives in the shim target.
|
||||
compiler = msvs.setdefault("VCCLCompilerTool", {})
|
||||
compiler["DebugInformationFormat"] = "3"
|
||||
compiler["ProgramDataBaseFileName"] = pdb_path
|
||||
|
||||
# Set the explicit PDB path in the appropriate configuration of the
|
||||
# original target.
|
||||
config = target_dict["configurations"][config_name]
|
||||
msvs = config.setdefault("msvs_settings", {})
|
||||
linker = msvs.setdefault("VCLinkerTool", {})
|
||||
linker["GenerateDebugInformation"] = "true"
|
||||
linker["ProgramDatabaseFile"] = pdb_path
|
||||
|
||||
# Add the new targets. They must go to the beginning of the list so that
|
||||
# the dependency generation works as expected in ninja.
|
||||
target_list.insert(0, full_copy_target_name)
|
||||
target_list.insert(0, full_shim_target_name)
|
||||
target_dicts[full_copy_target_name] = copy_dict
|
||||
target_dicts[full_shim_target_name] = shim_dict
|
||||
|
||||
# Update the original target to depend on the shim target.
|
||||
target_dict.setdefault("dependencies", []).append(full_shim_target_name)
|
||||
|
||||
return (target_list, target_dicts)
|
574
node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
generated
vendored
Normal file
574
node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
666
node_modules/node-gyp/gyp/pylib/gyp/__init__.py
generated
vendored
Normal file
666
node_modules/node-gyp/gyp/pylib/gyp/__init__.py
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
654
node_modules/node-gyp/gyp/pylib/gyp/common.py
generated
vendored
Normal file
654
node_modules/node-gyp/gyp/pylib/gyp/common.py
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
78
node_modules/node-gyp/gyp/pylib/gyp/common_test.py
generated
vendored
Normal file
78
node_modules/node-gyp/gyp/pylib/gyp/common_test.py
generated
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2012 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""Unit tests for the common.py file."""
|
||||
|
||||
import gyp.common
|
||||
import unittest
|
||||
import sys
|
||||
|
||||
|
||||
class TestTopologicallySorted(unittest.TestCase):
|
||||
def test_Valid(self):
|
||||
"""Test that sorting works on a valid graph with one possible order."""
|
||||
graph = {
|
||||
"a": ["b", "c"],
|
||||
"b": [],
|
||||
"c": ["d"],
|
||||
"d": ["b"],
|
||||
}
|
||||
|
||||
def GetEdge(node):
|
||||
return tuple(graph[node])
|
||||
|
||||
self.assertEqual(
|
||||
gyp.common.TopologicallySorted(graph.keys(), GetEdge), ["a", "c", "d", "b"]
|
||||
)
|
||||
|
||||
def test_Cycle(self):
|
||||
"""Test that an exception is thrown on a cyclic graph."""
|
||||
graph = {
|
||||
"a": ["b"],
|
||||
"b": ["c"],
|
||||
"c": ["d"],
|
||||
"d": ["a"],
|
||||
}
|
||||
|
||||
def GetEdge(node):
|
||||
return tuple(graph[node])
|
||||
|
||||
self.assertRaises(
|
||||
gyp.common.CycleError, gyp.common.TopologicallySorted, graph.keys(), GetEdge
|
||||
)
|
||||
|
||||
|
||||
class TestGetFlavor(unittest.TestCase):
|
||||
"""Test that gyp.common.GetFlavor works as intended"""
|
||||
|
||||
original_platform = ""
|
||||
|
||||
def setUp(self):
|
||||
self.original_platform = sys.platform
|
||||
|
||||
def tearDown(self):
|
||||
sys.platform = self.original_platform
|
||||
|
||||
def assertFlavor(self, expected, argument, param):
|
||||
sys.platform = argument
|
||||
self.assertEqual(expected, gyp.common.GetFlavor(param))
|
||||
|
||||
def test_platform_default(self):
|
||||
self.assertFlavor("freebsd", "freebsd9", {})
|
||||
self.assertFlavor("freebsd", "freebsd10", {})
|
||||
self.assertFlavor("openbsd", "openbsd5", {})
|
||||
self.assertFlavor("solaris", "sunos5", {})
|
||||
self.assertFlavor("solaris", "sunos", {})
|
||||
self.assertFlavor("linux", "linux2", {})
|
||||
self.assertFlavor("linux", "linux3", {})
|
||||
self.assertFlavor("linux", "linux", {})
|
||||
|
||||
def test_param(self):
|
||||
self.assertFlavor("foobar", "linux2", {"flavor": "foobar"})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
165
node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
generated
vendored
Normal file
165
node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
generated
vendored
Normal file
@@ -0,0 +1,165 @@
|
||||
# Copyright (c) 2011 Google Inc. All rights reserved.
|
||||
# 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
|
||||
from functools import reduce
|
||||
|
||||
|
||||
def XmlToString(content, encoding="utf-8", pretty=False):
|
||||
""" Writes the XML content to disk, touching the file only if it has changed.
|
||||
|
||||
Visual Studio files have a lot of pre-defined structures. This function makes
|
||||
it easy to represent these structures as Python data structures, instead of
|
||||
having to create a lot of function calls.
|
||||
|
||||
Each XML element of the content is represented as a list composed of:
|
||||
1. The name of the element, a string,
|
||||
2. The attributes of the element, a dictionary (optional), and
|
||||
3+. The content of the element, if any. Strings are simple text nodes and
|
||||
lists are child elements.
|
||||
|
||||
Example 1:
|
||||
<test/>
|
||||
becomes
|
||||
['test']
|
||||
|
||||
Example 2:
|
||||
<myelement a='value1' b='value2'>
|
||||
<childtype>This is</childtype>
|
||||
<childtype>it!</childtype>
|
||||
</myelement>
|
||||
|
||||
becomes
|
||||
['myelement', {'a':'value1', 'b':'value2'},
|
||||
['childtype', 'This is'],
|
||||
['childtype', 'it!'],
|
||||
]
|
||||
|
||||
Args:
|
||||
content: The structured content to be converted.
|
||||
encoding: The encoding to report on the first XML line.
|
||||
pretty: True if we want pretty printing with indents and new lines.
|
||||
|
||||
Returns:
|
||||
The XML content as a string.
|
||||
"""
|
||||
# We create a huge list of all the elements of the file.
|
||||
xml_parts = ['<?xml version="1.0" encoding="%s"?>' % encoding]
|
||||
if pretty:
|
||||
xml_parts.append("\n")
|
||||
_ConstructContentList(xml_parts, content, pretty)
|
||||
|
||||
# Convert it to a string
|
||||
return "".join(xml_parts)
|
||||
|
||||
|
||||
def _ConstructContentList(xml_parts, specification, pretty, level=0):
|
||||
""" Appends the XML parts corresponding to the specification.
|
||||
|
||||
Args:
|
||||
xml_parts: A list of XML parts to be appended to.
|
||||
specification: The specification of the element. See EasyXml docs.
|
||||
pretty: True if we want pretty printing with indents and new lines.
|
||||
level: Indentation level.
|
||||
"""
|
||||
# The first item in a specification is the name of the element.
|
||||
if pretty:
|
||||
indentation = " " * level
|
||||
new_line = "\n"
|
||||
else:
|
||||
indentation = ""
|
||||
new_line = ""
|
||||
name = specification[0]
|
||||
if not isinstance(name, str):
|
||||
raise Exception(
|
||||
"The first item of an EasyXml specification should be "
|
||||
"a string. Specification was " + str(specification)
|
||||
)
|
||||
xml_parts.append(indentation + "<" + name)
|
||||
|
||||
# Optionally in second position is a dictionary of the attributes.
|
||||
rest = specification[1:]
|
||||
if rest and isinstance(rest[0], dict):
|
||||
for at, val in sorted(rest[0].items()):
|
||||
xml_parts.append(f' {at}="{_XmlEscape(val, attr=True)}"')
|
||||
rest = rest[1:]
|
||||
if rest:
|
||||
xml_parts.append(">")
|
||||
all_strings = reduce(lambda x, y: x and isinstance(y, str), rest, True)
|
||||
multi_line = not all_strings
|
||||
if multi_line and new_line:
|
||||
xml_parts.append(new_line)
|
||||
for child_spec in rest:
|
||||
# If it's a string, append a text node.
|
||||
# Otherwise recurse over that child definition
|
||||
if isinstance(child_spec, str):
|
||||
xml_parts.append(_XmlEscape(child_spec))
|
||||
else:
|
||||
_ConstructContentList(xml_parts, child_spec, pretty, level + 1)
|
||||
if multi_line and indentation:
|
||||
xml_parts.append(indentation)
|
||||
xml_parts.append(f"</{name}>{new_line}")
|
||||
else:
|
||||
xml_parts.append("/>%s" % new_line)
|
||||
|
||||
|
||||
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:
|
||||
content: The structured content to be written.
|
||||
path: Location of the file.
|
||||
encoding: The encoding to report on the first line of the XML file.
|
||||
pretty: True if we want pretty printing with indents and new lines.
|
||||
"""
|
||||
xml_string = XmlToString(content, encoding, pretty)
|
||||
if win32 and os.linesep != "\r\n":
|
||||
xml_string = xml_string.replace("\n", "\r\n")
|
||||
|
||||
default_encoding = locale.getdefaultlocale()[1]
|
||||
if default_encoding and default_encoding.upper() != encoding.upper():
|
||||
xml_string = xml_string.encode(encoding)
|
||||
|
||||
# Get the old content
|
||||
try:
|
||||
with open(path) as file:
|
||||
existing = file.read()
|
||||
except OSError:
|
||||
existing = None
|
||||
|
||||
# It has changed, write it
|
||||
if existing != xml_string:
|
||||
with open(path, "wb") as file:
|
||||
file.write(xml_string)
|
||||
|
||||
|
||||
_xml_escape_map = {
|
||||
'"': """,
|
||||
"'": "'",
|
||||
"<": "<",
|
||||
">": ">",
|
||||
"&": "&",
|
||||
"\n": "
",
|
||||
"\r": "
",
|
||||
}
|
||||
|
||||
|
||||
_xml_escape_re = re.compile("(%s)" % "|".join(map(re.escape, _xml_escape_map.keys())))
|
||||
|
||||
|
||||
def _XmlEscape(value, attr=False):
|
||||
""" Escape a string for inclusion in XML."""
|
||||
|
||||
def replace(match):
|
||||
m = match.string[match.start() : match.end()]
|
||||
# don't replace single quotes in attrs
|
||||
if attr and m == "'":
|
||||
return m
|
||||
return _xml_escape_map[m]
|
||||
|
||||
return _xml_escape_re.sub(replace, value)
|
109
node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
generated
vendored
Normal file
109
node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
generated
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2011 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
""" Unit tests for the easy_xml.py file. """
|
||||
|
||||
import gyp.easy_xml as easy_xml
|
||||
import unittest
|
||||
|
||||
from io import StringIO
|
||||
|
||||
|
||||
class TestSequenceFunctions(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.stderr = StringIO()
|
||||
|
||||
def test_EasyXml_simple(self):
|
||||
self.assertEqual(
|
||||
easy_xml.XmlToString(["test"]),
|
||||
'<?xml version="1.0" encoding="utf-8"?><test/>',
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
easy_xml.XmlToString(["test"], encoding="Windows-1252"),
|
||||
'<?xml version="1.0" encoding="Windows-1252"?><test/>',
|
||||
)
|
||||
|
||||
def test_EasyXml_simple_with_attributes(self):
|
||||
self.assertEqual(
|
||||
easy_xml.XmlToString(["test2", {"a": "value1", "b": "value2"}]),
|
||||
'<?xml version="1.0" encoding="utf-8"?><test2 a="value1" b="value2"/>',
|
||||
)
|
||||
|
||||
def test_EasyXml_escaping(self):
|
||||
original = "<test>'\"\r&\nfoo"
|
||||
converted = "<test>'"
&
foo"
|
||||
converted_apos = converted.replace("'", "'")
|
||||
self.assertEqual(
|
||||
easy_xml.XmlToString(["test3", {"a": original}, original]),
|
||||
'<?xml version="1.0" encoding="utf-8"?><test3 a="%s">%s</test3>'
|
||||
% (converted, converted_apos),
|
||||
)
|
||||
|
||||
def test_EasyXml_pretty(self):
|
||||
self.assertEqual(
|
||||
easy_xml.XmlToString(
|
||||
["test3", ["GrandParent", ["Parent1", ["Child"]], ["Parent2"]]],
|
||||
pretty=True,
|
||||
),
|
||||
'<?xml version="1.0" encoding="utf-8"?>\n'
|
||||
"<test3>\n"
|
||||
" <GrandParent>\n"
|
||||
" <Parent1>\n"
|
||||
" <Child/>\n"
|
||||
" </Parent1>\n"
|
||||
" <Parent2/>\n"
|
||||
" </GrandParent>\n"
|
||||
"</test3>\n",
|
||||
)
|
||||
|
||||
def test_EasyXml_complex(self):
|
||||
# We want to create:
|
||||
target = (
|
||||
'<?xml version="1.0" encoding="utf-8"?>'
|
||||
"<Project>"
|
||||
'<PropertyGroup Label="Globals">'
|
||||
"<ProjectGuid>{D2250C20-3A94-4FB9-AF73-11BC5B73884B}</ProjectGuid>"
|
||||
"<Keyword>Win32Proj</Keyword>"
|
||||
"<RootNamespace>automated_ui_tests</RootNamespace>"
|
||||
"</PropertyGroup>"
|
||||
'<Import Project="$(VCTargetsPath)\\Microsoft.Cpp.props"/>'
|
||||
"<PropertyGroup "
|
||||
"Condition=\"'$(Configuration)|$(Platform)'=="
|
||||
'\'Debug|Win32\'" Label="Configuration">'
|
||||
"<ConfigurationType>Application</ConfigurationType>"
|
||||
"<CharacterSet>Unicode</CharacterSet>"
|
||||
"</PropertyGroup>"
|
||||
"</Project>"
|
||||
)
|
||||
|
||||
xml = easy_xml.XmlToString(
|
||||
[
|
||||
"Project",
|
||||
[
|
||||
"PropertyGroup",
|
||||
{"Label": "Globals"},
|
||||
["ProjectGuid", "{D2250C20-3A94-4FB9-AF73-11BC5B73884B}"],
|
||||
["Keyword", "Win32Proj"],
|
||||
["RootNamespace", "automated_ui_tests"],
|
||||
],
|
||||
["Import", {"Project": "$(VCTargetsPath)\\Microsoft.Cpp.props"}],
|
||||
[
|
||||
"PropertyGroup",
|
||||
{
|
||||
"Condition": "'$(Configuration)|$(Platform)'=='Debug|Win32'",
|
||||
"Label": "Configuration",
|
||||
},
|
||||
["ConfigurationType", "Application"],
|
||||
["CharacterSet", "Unicode"],
|
||||
],
|
||||
]
|
||||
)
|
||||
self.assertEqual(xml, target)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
55
node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
generated
vendored
Normal file
55
node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (c) 2011 Google Inc. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""These functions are executed via gyp-flock-tool when using the Makefile
|
||||
generator. Used on systems that don't have a built-in flock."""
|
||||
|
||||
import fcntl
|
||||
import os
|
||||
import struct
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def main(args):
|
||||
executor = FlockTool()
|
||||
executor.Dispatch(args)
|
||||
|
||||
|
||||
class FlockTool:
|
||||
"""This class emulates the 'flock' command."""
|
||||
|
||||
def Dispatch(self, args):
|
||||
"""Dispatches a string command to a method."""
|
||||
if len(args) < 1:
|
||||
raise Exception("Not enough arguments")
|
||||
|
||||
method = "Exec%s" % self._CommandifyName(args[0])
|
||||
getattr(self, method)(*args[1:])
|
||||
|
||||
def _CommandifyName(self, name_string):
|
||||
"""Transforms a tool name like copy-info-plist to CopyInfoPlist"""
|
||||
return name_string.title().replace("-", "")
|
||||
|
||||
def ExecFlock(self, lockfile, *cmd_list):
|
||||
"""Emulates the most basic behavior of Linux's flock(1)."""
|
||||
# Rely on exception handling to report errors.
|
||||
# Note that the stock python on SunOS has a bug
|
||||
# where fcntl.flock(fd, LOCK_EX) always fails
|
||||
# with EBADF, that's why we use this F_SETLK
|
||||
# hack instead.
|
||||
fd = os.open(lockfile, os.O_WRONLY | os.O_NOCTTY | os.O_CREAT, 0o666)
|
||||
if sys.platform.startswith("aix"):
|
||||
# Python on AIX is compiled with LARGEFILE support, which changes the
|
||||
# struct size.
|
||||
op = struct.pack("hhIllqq", fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
|
||||
else:
|
||||
op = struct.pack("hhllhhl", fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
|
||||
fcntl.fcntl(fd, fcntl.F_SETLK, op)
|
||||
return subprocess.call(cmd_list)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main(sys.argv[1:]))
|
0
node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py
generated
vendored
Normal file
0
node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py
generated
vendored
Normal file
808
node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
generated
vendored
Normal file
808
node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1173
node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
generated
vendored
Normal file
1173
node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1321
node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
generated
vendored
Normal file
1321
node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user