Full Code of nodejs/node-gyp for AI

main 13814583a476 cached
185 files
2.5 MB
653.0k tokens
1547 symbols
1 requests
Download .txt
Showing preview only (2,608K chars total). Download the full file or copy to clipboard to get everything.
Repository: nodejs/node-gyp
Branch: main
Commit: 13814583a476
Files: 185
Total size: 2.5 MB

Directory structure:
gitextract_l_68u8to/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   ├── scripts/
│   │   └── check-engines.js
│   └── workflows/
│       ├── release-please.yml
│       ├── tests.yml
│       ├── update-gyp-next.yml
│       └── visual-studio.yml
├── .gitignore
├── .npmignore
├── .release-please-manifest.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── addon.gypi
├── bin/
│   └── node-gyp.js
├── docs/
│   ├── Error-pre-versions-of-node-cannot-be-installed.md
│   ├── Force-npm-to-use-global-node-gyp.md
│   ├── Home.md
│   ├── Linking-to-OpenSSL.md
│   ├── README.md
│   ├── Updating-npm-bundled-node-gyp.md
│   └── binding.gyp-files-in-the-wild.md
├── eslint.config.js
├── gyp/
│   ├── .github/
│   │   ├── dependabot.yml
│   │   └── workflows/
│   │       ├── node-gyp.yml
│   │       ├── nodejs.yml
│   │       ├── python_tests.yml
│   │       └── release-please.yml
│   ├── .gitignore
│   ├── .release-please-manifest.json
│   ├── AUTHORS
│   ├── CHANGELOG.md
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── LICENSE
│   ├── README.md
│   ├── data/
│   │   ├── ninja/
│   │   │   └── build.ninja
│   │   └── win/
│   │       └── large-pdb-shim.cc
│   ├── docs/
│   │   ├── GypVsCMake.md
│   │   ├── Hacking.md
│   │   ├── InputFormatReference.md
│   │   ├── LanguageSpecification.md
│   │   ├── README.md
│   │   ├── Testing.md
│   │   └── UserDocumentation.md
│   ├── gyp
│   ├── gyp.bat
│   ├── gyp_main.py
│   ├── pylib/
│   │   ├── gyp/
│   │   │   ├── MSVSNew.py
│   │   │   ├── MSVSProject.py
│   │   │   ├── MSVSSettings.py
│   │   │   ├── MSVSSettings_test.py
│   │   │   ├── MSVSToolFile.py
│   │   │   ├── MSVSUserFile.py
│   │   │   ├── MSVSUtil.py
│   │   │   ├── MSVSVersion.py
│   │   │   ├── __init__.py
│   │   │   ├── common.py
│   │   │   ├── common_test.py
│   │   │   ├── easy_xml.py
│   │   │   ├── easy_xml_test.py
│   │   │   ├── flock_tool.py
│   │   │   ├── generator/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── analyzer.py
│   │   │   │   ├── android.py
│   │   │   │   ├── cmake.py
│   │   │   │   ├── compile_commands_json.py
│   │   │   │   ├── dump_dependency_json.py
│   │   │   │   ├── eclipse.py
│   │   │   │   ├── gypd.py
│   │   │   │   ├── gypsh.py
│   │   │   │   ├── make.py
│   │   │   │   ├── msvs.py
│   │   │   │   ├── msvs_test.py
│   │   │   │   ├── ninja.py
│   │   │   │   ├── ninja_test.py
│   │   │   │   ├── xcode.py
│   │   │   │   └── xcode_test.py
│   │   │   ├── input.py
│   │   │   ├── input_test.py
│   │   │   ├── mac_tool.py
│   │   │   ├── msvs_emulation.py
│   │   │   ├── ninja_syntax.py
│   │   │   ├── simple_copy.py
│   │   │   ├── win_tool.py
│   │   │   ├── xcode_emulation.py
│   │   │   ├── xcode_emulation_test.py
│   │   │   ├── xcode_ninja.py
│   │   │   ├── xcodeproj_file.py
│   │   │   └── xml_fix.py
│   │   └── packaging/
│   │       ├── LICENSE
│   │       ├── LICENSE.APACHE
│   │       ├── LICENSE.BSD
│   │       ├── __init__.py
│   │       ├── _elffile.py
│   │       ├── _manylinux.py
│   │       ├── _musllinux.py
│   │       ├── _parser.py
│   │       ├── _structures.py
│   │       ├── _tokenizer.py
│   │       ├── markers.py
│   │       ├── metadata.py
│   │       ├── py.typed
│   │       ├── requirements.py
│   │       ├── specifiers.py
│   │       ├── tags.py
│   │       ├── utils.py
│   │       └── version.py
│   ├── pyproject.toml
│   ├── release-please-config.json
│   ├── test_gyp.py
│   └── tools/
│       ├── README
│       ├── Xcode/
│       │   ├── README
│       │   └── Specifications/
│       │       ├── gyp.pbfilespec
│       │       └── gyp.xclangspec
│       ├── emacs/
│       │   ├── README
│       │   ├── gyp-tests.el
│       │   ├── gyp.el
│       │   ├── run-unit-tests.sh
│       │   └── testdata/
│       │       ├── media.gyp
│       │       └── media.gyp.fontified
│       ├── graphviz.py
│       ├── pretty_gyp.py
│       ├── pretty_sln.py
│       └── pretty_vcproj.py
├── lib/
│   ├── Find-VisualStudio.cs
│   ├── build.js
│   ├── clean.js
│   ├── configure.js
│   ├── create-config-gypi.js
│   ├── download.js
│   ├── find-node-directory.js
│   ├── find-python.js
│   ├── find-visualstudio.js
│   ├── install.js
│   ├── list.js
│   ├── log.js
│   ├── node-gyp.js
│   ├── process-release.js
│   ├── rebuild.js
│   ├── remove.js
│   └── util.js
├── macOS_Catalina_acid_test.sh
├── package.json
├── release-please-config.json
├── src/
│   └── win_delay_load_hook.cc
├── test/
│   ├── common.js
│   ├── fixtures/
│   │   ├── VSSetup_VS_2019_Professional_workload.txt
│   │   ├── VSSetup_VS_2022_VS2019_workload.txt
│   │   ├── VSSetup_VS_2022_multiple_install.txt
│   │   ├── VSSetup_VS_2022_workload.txt
│   │   ├── VSSetup_VS_2022_workload_missing_sdk.txt
│   │   ├── VS_2017_BuildTools_minimal.txt
│   │   ├── VS_2017_Community_workload.txt
│   │   ├── VS_2017_Express.txt
│   │   ├── VS_2017_Unusable.txt
│   │   ├── VS_2019_BuildTools_minimal.txt
│   │   ├── VS_2019_Community_workload.txt
│   │   ├── VS_2019_Preview.txt
│   │   ├── VS_2022_BuildTools_arm64_only.txt
│   │   ├── VS_2022_Community_workload.txt
│   │   ├── VS_2026_Community_workload.txt
│   │   ├── VS_2026_Insiders_workload.txt
│   │   ├── certs.js
│   │   ├── nodedir/
│   │   │   └── include/
│   │   │       └── node/
│   │   │           └── config.gypi
│   │   └── test-charmap.py
│   ├── simple-proxy.js
│   ├── test-addon.js
│   ├── test-configure-nodedir.js
│   ├── test-configure-python.js
│   ├── test-create-config-gypi.js
│   ├── test-download.js
│   ├── test-find-accessible-sync.js
│   ├── test-find-node-directory.js
│   ├── test-find-python.js
│   ├── test-find-visualstudio.js
│   ├── test-install.js
│   ├── test-options.js
│   ├── test-process-release.js
│   └── test-windows-make.js
└── update-gyp.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!--
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/main/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 -->


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Thank you for your pull request. Please review the below requirements.

Contributor guide: https://github.com/nodejs/node/blob/main/CONTRIBUTING.md
-->

##### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->

- [ ] `npm install && npm run lint && 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 -->



================================================
FILE: .github/dependabot.yml
================================================
# Keep GitHub Actions up to date with Dependabot...
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "daily"
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"


================================================
FILE: .github/scripts/check-engines.js
================================================
const { join } = require('path')
const semver = require('semver')
const Arborist = require('@npmcli/arborist')

const run = async (path, useEngines) => {
  const pkgPath = join(path, 'package.json')
  const pkg = require(pkgPath)

  const engines = useEngines || pkg.engines.node

  const arb = new Arborist({ path })
  const tree = await arb.loadActual({ forceActual: true })
  const deps = await tree.querySelectorAll(`#${pkg.name} > .prod:attr(engines, [node])`)

  const invalid = []
  for (const dep of deps) {
    const depEngines = dep.target.package.engines.node
    if (!semver.subset(engines, depEngines)) {
      invalid.push({
        name: `${dep.name}@${dep.version}`,
        location: dep.location,
        engines: depEngines
      })
    }
  }

  if (invalid.length) {
    const msg = 'The following production dependencies are not compatible with ' +
`\`engines.node: ${engines}\` found in \`${pkgPath}\`:\n` + invalid.map((dep) => [
  `${dep.name}:`,
  `  engines.node: ${dep.engines}`,
  `  location: ${dep.location}`
    ].join('\n')).join('\n')
    throw new Error(msg)
  }
}

run(process.cwd(), ...process.argv.slice(2)).then(() => console.log('Success')).catch((err) => {
  console.error(err)
  process.exitCode = 1
})


================================================
FILE: .github/workflows/release-please.yml
================================================
name: release-please

on:
  push:
    branches:
      - main

permissions:
  id-token: write  # Required for OIDC
  contents: read

jobs:
  release-please:
    outputs:
      release_created:  ${{ steps.release.outputs.release_created }}
    runs-on: ubuntu-latest
    steps:
      - uses: googleapis/release-please-action@v4
        id: release
        with:
          token: ${{ secrets.GH_USER_TOKEN }}
          # 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`

  npm-publish:
    needs: release-please
    if: ${{ needs.release-please.outputs.release_created }}
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write # to generate npm provenance statements
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version: lts/*
          registry-url: 'https://registry.npmjs.org'
      - run: npm install npm@11 -g # Use npm@11 to publish with OIDC
      - run: npm publish --provenance --access public


================================================
FILE: .github/workflows/tests.yml
================================================
# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources
# TODO: add `python -m pytest --doctest-modules`

name: Tests
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  workflow_call:

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  lint-python:
    name: Lint Python
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
    - uses: astral-sh/ruff-action@v3
      with:
        args: "check --select=E,F,PLC,PLE,UP,W,YTT --ignore=E721,PLC0206,PLC0415,PLC1901,S101,UP031 --target-version=py39"
    - run: ruff format --check --diff

  lint-js:
    name: Lint JS
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v6
    - name: Use Node.js 22.x
      uses: actions/setup-node@v6
      with:
        node-version: 22.x
    - name: Install Dependencies
      run: npm install
    - name: Lint
      run: npm run lint

  check-engines:
    name: Check Engines
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v6
    - name: Use Node.js 22.x
      uses: actions/setup-node@v6
      with:
        node-version: 22.x
    - name: Install Dependencies
      run: npm install
    - name: Check Engines
      run: |
        # TODO: move this to its own action
        npm install @npmcli/arborist@7 semver@7 --no-save
        node .github/scripts/check-engines.js

  test-pack:
    name: Test Pack
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v6
    - name: Use Node.js 22.x
      uses: actions/setup-node@v6
      with:
        node-version: 22.x
    - name: Update npm
      run: npm install npm@latest -g
    - name: Install Dependencies
      run: npm install
    - name: Pack
      id: pack
      env:
        NODE_GYP_TEMP_DIR: '${{ runner.temp }}/node-gyp'
      run: |
        mkdir -p $NODE_GYP_TEMP_DIR
        npm pack
        tar xzf *.tgz -C $NODE_GYP_TEMP_DIR --strip-components=1
        cp -r test/ $NODE_GYP_TEMP_DIR/test/
        echo "dir=$NODE_GYP_TEMP_DIR" >> "$GITHUB_OUTPUT"
    - name: Test
      working-directory: ${{ steps.pack.outputs.dir }}
      env:
        FULL_TEST: '1'
      run: |
        npm install
        npm test

  tests:
    strategy:
      fail-fast: false
      max-parallel: 11
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]
        python: ["3.10", "3.12", "3.14"]
        node: [20.x, 22.x, 24.x]
        include:
          - os: macos-15-intel  # macOS on Intel
            python: "3.14"
            node: 24.x
          - os: ubuntu-24.04-arm  # Ubuntu on ARM
            python: "3.14"
            node: 24.x
          - os: windows-11-arm  # Windows on ARM
            python: "3.14"
            node: 24.x
    name: ${{ matrix.os }} - ${{ matrix.python }} - ${{ matrix.node }}
    runs-on: ${{ matrix.os }}
    env:
      WASI_VERSION: '25'
      WASI_VERSION_FULL: '25.0'
      WASI_SDK_PATH: 'wasi-sdk-25.0'
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v6
      - name: Use Node.js ${{ matrix.node }}
        uses: actions/setup-node@v6
        with:
          node-version: ${{ matrix.node }}
      - name: Use Python ${{ matrix.python }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python }}
          allow-prereleases: true
      - uses: seanmiddleditch/gha-setup-ninja@v6
      - name: Install wasi-sdk (Windows)
        shell: pwsh
        if: runner.os == 'Windows'
        run: |
          $MaxRetries = 3
          $RetryDelay = 10
          $Attempt = 0
          while ($Attempt -lt $MaxRetries) {
            try {
              Start-BitsTransfer -Source https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${env:WASI_VERSION}/wasi-sdk-${env:WASI_VERSION_FULL}-x86_64-windows.tar.gz
              break
            }
            catch {
              Write-Host "Error: $($_.Exception.Message)"
              $Attempt++
              if ($Attempt -lt $MaxRetries) {
                Write-Host "Retrying in $RetryDelay seconds"
                Start-Sleep -Seconds $RetryDelay
              }
              else {
                Write-Host "Max retries reached. Download failed."
                exit 1
              }
            }
          }
          New-Item -ItemType Directory -Path ${env:WASI_SDK_PATH}
          tar -zxvf wasi-sdk-${env:WASI_VERSION_FULL}-x86_64-windows.tar.gz -C ${env:WASI_SDK_PATH} --strip 1
      - name: Install Dependencies
        run: |
          npm install
          pip install pytest
      - name: Set Windows Env
        if: runner.os == 'Windows'
        run: |
          echo 'GYP_MSVS_VERSION=2015' >> $Env:GITHUB_ENV
          echo 'GYP_MSVS_OVERRIDE_PATH=C:\\Dummy' >> $Env:GITHUB_ENV
      - name: Run Python Tests
        run: python -m pytest
      - name: Run Tests (macOS or Linux)
        if: runner.os != 'Windows'
        shell: bash
        run: npm test --python="${pythonLocation}/python"
        env:
          FULL_TEST: ${{ (matrix.node == '24.x' && matrix.python == '3.14') && '1' || '0' }}
      - name: Run Tests (Windows)
        if: runner.os == 'Windows'
        shell: bash # Building wasm on Windows requires using make generator, it only works in bash
        run: npm run test --python="${pythonLocation}\\python.exe"
        env:
          FULL_TEST: ${{ (matrix.node == '24.x' && matrix.python == '3.14') && '1' || '0' }}


================================================
FILE: .github/workflows/update-gyp-next.yml
================================================
name: Update gyp-next

on:
  schedule:
    # Run once a week at 12:00 AM UTC on Sunday.
    - cron: 0 0 * * *
  workflow_dispatch:

permissions:
  contents: read

env:
  NODE_VERSION: lts/*

jobs:
  update-gyp-next:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6
        with:
          persist-credentials: false

      - uses: actions/github-script@v8
        id: get-gyp-next-version
        with:
          script: |
            const result = await github.rest.repos.getLatestRelease({
              owner: 'nodejs',
              repo: 'gyp-next',
            });
            return result.data.tag_name
          result-encoding: string

      - name: Update gyp-next
        run: |
          python update-gyp.py --no-commit ${{ steps.get-gyp-next-version.outputs.result }}

      - name: Open or update PR for the gyp-next update
        uses: gr2m/create-or-update-pull-request-action@v1
        with:
          branch: actions/update-gyp-next
          author: Node.js GitHub Bot <github-bot@iojs.org>
          title: 'feat: update gyp-next to ${{ steps.get-gyp-next-version.outputs.result }}'
          commit-message: 'feat: update gyp-next to ${{ steps.get-gyp-next-version.outputs.result }}'
          update-pull-request-title-and-body: true
          body: >
            This is an automated update of the gyp-next to
            https://github.com/nodejs/gyp-next/releases/tag/${{ steps.get-gyp-next-version.outputs.result }}.
        env:
          GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}


================================================
FILE: .github/workflows/visual-studio.yml
================================================
# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources

name: visual-studio
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  visual-studio:
    strategy:
      fail-fast: false
      max-parallel: 8
      matrix:
        include:
          - os: windows-2022
            msvs-version: 2022
          - os: windows-2025
            msvs-version: 2022  # Fix this when Visual Studio 2025 is released
          - os: windows-11-arm
            msvs-version: 2022  # Fix this when Visual Studio 2025 is released
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v6
      - name: Use Python 3
        uses: actions/setup-python@v6
        with:
          python-version: "3.x"
      - name: Install Dependencies
        run: npm install
      - name: Run Node tests
        shell: pwsh
        run: npm run test --python="${env:pythonLocation}\\python.exe" --msvs-version="${{ matrix.msvs-version }}"


================================================
FILE: .gitignore
================================================
.ncu
.nyc_output
*.swp
gyp/test
node_modules
node-gyp-*.tgz
package-lock.json
test/.node-gyp


================================================
FILE: .npmignore
================================================
.ncu
.nyc_output
*.swp
/.github/
/docs/
/gyp/.github/
/gyp/*.md
/gyp/AUTHORS
/gyp/test
/gyp/tools/
/node-gyp-*.tgz
/test/
/test/.node-gyp
/update-gyp.py
node-gyp-*.tgz


================================================
FILE: .release-please-manifest.json
================================================
{
    ".": "12.2.0"
}


================================================
FILE: CHANGELOG.md
================================================
# Changelog

## [12.2.0](https://github.com/nodejs/node-gyp/compare/v12.1.0...v12.2.0) (2026-01-26)


### Features

* include built package version in error logs ([#3254](https://github.com/nodejs/node-gyp/issues/3254)) ([ee9cbdd](https://github.com/nodejs/node-gyp/commit/ee9cbdd6e1d40dc7c1cdc5ed6a75432c716eaf3f))
* update gyp-next to v0.21.1 ([#3273](https://github.com/nodejs/node-gyp/issues/3273)) ([888ff2c](https://github.com/nodejs/node-gyp/commit/888ff2c48a4cf5602013b96b52c6670906976f63))


### Bug Fixes

* cpu concurrency detection on some platforms ([#3255](https://github.com/nodejs/node-gyp/issues/3255)) ([f15b79a](https://github.com/nodejs/node-gyp/commit/f15b79a03c54cea0f66d940a0d6d839df867a319)), closes [#3191](https://github.com/nodejs/node-gyp/issues/3191)
* python is no longer a valid npm config setting ([#3258](https://github.com/nodejs/node-gyp/issues/3258)) ([c7c678f](https://github.com/nodejs/node-gyp/commit/c7c678f89837d956194f326b01c5a8eb1d745db3))
* Switch to URL instead of url.parse ([#3256](https://github.com/nodejs/node-gyp/issues/3256)) ([3f81949](https://github.com/nodejs/node-gyp/commit/3f819499d8ce6d46c646466de7b9492bf7bde663))
* Test Windows on Python 3.14, not 3.13 ([#3262](https://github.com/nodejs/node-gyp/issues/3262)) ([7b4f315](https://github.com/nodejs/node-gyp/commit/7b4f315e4dad880c841d21df641d6dd9b68bf36b))


### Core

* **deps:** bump actions/checkout from 5 to 6 ([#3248](https://github.com/nodejs/node-gyp/issues/3248)) ([db5385c](https://github.com/nodejs/node-gyp/commit/db5385c5467e5bfb914b9954f0313c46f1f4e10d))


### Doc

* add a note about changes in gyp folder ([#3259](https://github.com/nodejs/node-gyp/issues/3259)) ([a52bc81](https://github.com/nodejs/node-gyp/commit/a52bc819f44b881854ff798865ad416430e3dce2))
* correct typos ([#3269](https://github.com/nodejs/node-gyp/issues/3269)) ([0f2bc7d](https://github.com/nodejs/node-gyp/commit/0f2bc7d2e0665b1c7bb03e1cd8653ea330277a70))
* remove obsolete Microsoft Node.js Guidelines link ([#3268](https://github.com/nodejs/node-gyp/issues/3268)) ([30cda26](https://github.com/nodejs/node-gyp/commit/30cda268730798dc0f67182c8c568d8b8069964e))
* update Python manual install instructions for Windows ([#3265](https://github.com/nodejs/node-gyp/issues/3265)) ([0407877](https://github.com/nodejs/node-gyp/commit/0407877e3e26d3201f74cf1a9deabbbfc40bdbb7))


### Miscellaneous

* **deps:** upgrade tar to 7.5.4 to address CVE-2026-23950 ([#3271](https://github.com/nodejs/node-gyp/issues/3271)) ([7bf371c](https://github.com/nodejs/node-gyp/commit/7bf371c4dd7c694232ab3169d02fe8197e1ecc6d))

## [12.1.0](https://github.com/nodejs/node-gyp/compare/v12.0.0...v12.1.0) (2025-11-12)


### Features

* Add support for Visual Studio 2026 (18.x) ([69e5fd2](https://github.com/nodejs/node-gyp/commit/69e5fd2c98ac83dad5200a47515b301ccd80d2d3))
* Support for Visual Studio 2026 (18.x) ([69e5fd2](https://github.com/nodejs/node-gyp/commit/69e5fd2c98ac83dad5200a47515b301ccd80d2d3))

## [12.0.0](https://github.com/nodejs/node-gyp/compare/v11.5.0...v12.0.0) (2025-11-10)


### ⚠ BREAKING CHANGES

* align to npm 11 node engine range

### Features

* align to npm 11 node engine range ([2f85686](https://github.com/nodejs/node-gyp/commit/2f85686bbe745673350a8f9dbb0e86ee0190f213))
* update gyp-next to v0.21.0 ([c57cd2e](https://github.com/nodejs/node-gyp/commit/c57cd2e86dc57707475b9f7e676e189f064817de))


### Core

* **deps:** bump actions/setup-node from 5 to 6 ([ae90e63](https://github.com/nodejs/node-gyp/commit/ae90e632d9fab85f4cd902dc9205ba9dfafaf3bc))
* **deps:** bump env-paths from 2.2.1 to 3.0.0 ([#3235](https://github.com/nodejs/node-gyp/issues/3235)) ([5fffb2f](https://github.com/nodejs/node-gyp/commit/5fffb2ffee304cc898fdea7a0cd9e41d54c53839))
* **deps:** bump which from 5.0.0 to 6.0.0 ([#3238](https://github.com/nodejs/node-gyp/issues/3238)) ([eaa8e34](https://github.com/nodejs/node-gyp/commit/eaa8e34cb5a0710bef0602c42e5840b47eb76822))
* make-fetch-happen@15.0.0 ([e2b9d21](https://github.com/nodejs/node-gyp/commit/e2b9d21bce27c35d18fcb6f8583e386d15ce395c))
* nopt@9.0.0 ([9bdeaf3](https://github.com/nodejs/node-gyp/commit/9bdeaf307cd7a254946859d306465989fa39dfb2))
* proc-log@6.0.0 ([dfc68df](https://github.com/nodejs/node-gyp/commit/dfc68dfba3c17deb0bda9a395bb49d8fb9fa5951))


### Miscellaneous

* increase test timeouts ([#3237](https://github.com/nodejs/node-gyp/issues/3237)) ([3b41971](https://github.com/nodejs/node-gyp/commit/3b41971e2f6b90e02b1d7df592d403b8dfc8fa4d))
* setup dependabot for npm ([86d65c7](https://github.com/nodejs/node-gyp/commit/86d65c7874eb41eb49c9b8bbf342becac8e57c6f))
* update devDependencies ([41b0cea](https://github.com/nodejs/node-gyp/commit/41b0cea2f12342a790580cc8f844f075d49e096c))

## [11.5.0](https://github.com/nodejs/node-gyp/compare/v11.4.2...v11.5.0) (2025-10-15)


### Features

* update gyp-next to v0.20.5 ([#3222](https://github.com/nodejs/node-gyp/issues/3222)) ([848e950](https://github.com/nodejs/node-gyp/commit/848e950833b90f0b25f346710ee42e9be4797604))


### Bug Fixes

* **ci:** Run Visual Studio test on Windows 11 on ARM ([#3217](https://github.com/nodejs/node-gyp/issues/3217)) ([8bd3f63](https://github.com/nodejs/node-gyp/commit/8bd3f6354b8bd43262a4d99d58a568beab0459e8))
* **ci:** Test on Python 3.14 release candidate 3 on Linux and macOS ([#3216](https://github.com/nodejs/node-gyp/issues/3216)) ([085b445](https://github.com/nodejs/node-gyp/commit/085b445d1c00f8f1fc6a6ff80d8a93c6643f11ee))


### Core

* **deps:** bump actions/github-script from 7 to 8 ([#3213](https://github.com/nodejs/node-gyp/issues/3213)) ([c6b968c](https://github.com/nodejs/node-gyp/commit/c6b968caf7f4e22687fc10716162675b1411f713))
* **deps:** bump actions/setup-node from 4 to 5 ([#3211](https://github.com/nodejs/node-gyp/issues/3211)) ([921c04d](https://github.com/nodejs/node-gyp/commit/921c04d142549f172d3aeae4097c9e0af05599dd))
* **deps:** bump actions/setup-python from 5 to 6 ([#3210](https://github.com/nodejs/node-gyp/issues/3210)) ([6b70b05](https://github.com/nodejs/node-gyp/commit/6b70b05ed21cb977214348c97c2b97515c0d08f3))

## [11.4.2](https://github.com/nodejs/node-gyp/compare/v11.4.1...v11.4.2) (2025-08-26)


### Bug Fixes

* add adaptation for OpenHarmony platform ([#3207](https://github.com/nodejs/node-gyp/issues/3207)) ([b406532](https://github.com/nodejs/node-gyp/commit/b406532c77659c441c845708ec3ecdf09f013a3b))

### Miscellaneous

* update gyp-next to v0.20.4 ([#3208](https://github.com/nodejs/node-gyp/issues/3208)) ([adc61b1](https://github.com/nodejs/node-gyp/commit/adc61b1458315d9648591e74bf16bbe39511401e))
* **ci:** Update Node.js version matrix in `tests.yml` ([#3209](https://github.com/nodejs/node-gyp/issues/3209)) ([a4e1da6](https://github.com/nodejs/node-gyp/commit/a4e1da6683a37fde565e1ea50f1fa86fa99a83c7))
* ruff format Python code ([#3203](https://github.com/nodejs/node-gyp/issues/3203)) ([cb30a53](https://github.com/nodejs/node-gyp/commit/cb30a538eadf49ca0310980ffb0bfdb8fcebf0a4))

## [11.4.1](https://github.com/nodejs/node-gyp/compare/v11.4.0...v11.4.1) (2025-08-20)


### Miscellaneous

* **release:** use npm@11 for OIDC publishing ([#3202](https://github.com/nodejs/node-gyp/issues/3202)) ([6b9638a](https://github.com/nodejs/node-gyp/commit/6b9638a0f80352e5bf7c1702e6ef622a6474d44a)), closes [#3201](https://github.com/nodejs/node-gyp/issues/3201)

## [11.4.0](https://github.com/nodejs/node-gyp/compare/v11.3.0...v11.4.0) (2025-08-19)


### Features

* read from config case-insensitively ([#3198](https://github.com/nodejs/node-gyp/issues/3198)) ([5538e6c](https://github.com/nodejs/node-gyp/commit/5538e6c5d78dffd41e2a588adfa7ea9022150b9d))
* support reading config from package.json ([#3196](https://github.com/nodejs/node-gyp/issues/3196)) ([1822dff](https://github.com/nodejs/node-gyp/commit/1822dff4f616a30ac3ca72e5946d81389cb8557e)), closes [#3156](https://github.com/nodejs/node-gyp/issues/3156)


### Core

* **deps:** bump actions/checkout from 4 to 5 ([#3193](https://github.com/nodejs/node-gyp/issues/3193)) ([27f5505](https://github.com/nodejs/node-gyp/commit/27f5505ec236551081366bf8a9c13ef5d8e468bf))


### Miscellaneous

* use npm oicd connection for publishing ([#3197](https://github.com/nodejs/node-gyp/issues/3197)) ([0773615](https://github.com/nodejs/node-gyp/commit/077361502933fcb994ca365c3c07c03177503df2))

## [11.3.0](https://github.com/nodejs/node-gyp/compare/v11.2.0...v11.3.0) (2025-07-29)


### Features

* update gyp-next to v0.20.2 ([#3169](https://github.com/nodejs/node-gyp/issues/3169)) ([0e65632](https://github.com/nodejs/node-gyp/commit/0e656322c1e94041331ab3b01bf66c2ef9bd6ead))


### Bug Fixes

* Correct Visual Studio 2019 test version ([#3153](https://github.com/nodejs/node-gyp/issues/3153)) ([7d883b5](https://github.com/nodejs/node-gyp/commit/7d883b5cf4c26e76065201f85b0be36d5ebdcc0e))
* Normalize win32 library names ([#3189](https://github.com/nodejs/node-gyp/issues/3189)) ([b81a665](https://github.com/nodejs/node-gyp/commit/b81a665acfb9d88102e8044a8ec8ca74a3e9eccc))
* use temp dir for tar extraction on all platforms ([#3170](https://github.com/nodejs/node-gyp/issues/3170)) ([b41864f](https://github.com/nodejs/node-gyp/commit/b41864f7c1c60e4a160c1b4dd91558dcaa3f74e4)), closes [#3165](https://github.com/nodejs/node-gyp/issues/3165)


### Miscellaneous

* retry wasi-sdk download in CI ([#3151](https://github.com/nodejs/node-gyp/issues/3151)) ([8f3cd8b](https://github.com/nodejs/node-gyp/commit/8f3cd8b3a157bccd8d7110e7d46a27c2926625cd))
* Windows 2019 has been removed from GitHub Actions ([#3190](https://github.com/nodejs/node-gyp/issues/3190)) ([3df8789](https://github.com/nodejs/node-gyp/commit/3df8789a9aa73c60707eec8f02f4e926491d6102))

## [11.2.0](https://github.com/nodejs/node-gyp/compare/v11.1.0...v11.2.0) (2025-04-01)


### Features

* update gyp-next to v0.20.0 ([#3149](https://github.com/nodejs/node-gyp/issues/3149)) ([80e9c79](https://github.com/nodejs/node-gyp/commit/80e9c795a739c490cfbc85633e63022b36a7c70d))


### Bug Fixes

* disable msbuild.exe nodeReuse ([#3112](https://github.com/nodejs/node-gyp/issues/3112)) ([0cf16d2](https://github.com/nodejs/node-gyp/commit/0cf16d29fe604266fb47325496287a63075ea532))
* use maxRetries on fs.rm calls ([#3113](https://github.com/nodejs/node-gyp/issues/3113)) ([a2772a7](https://github.com/nodejs/node-gyp/commit/a2772a76709f939af1e80dd8fe766ca2143aa5bf))


### Tests

* fix wasm test on Windows ([#3145](https://github.com/nodejs/node-gyp/issues/3145)) ([ee1d6fd](https://github.com/nodejs/node-gyp/commit/ee1d6fd8d83c9dd3eae7df7ec533bb6b39e1a812))
* use maxRetries with tests too ([#3150](https://github.com/nodejs/node-gyp/issues/3150)) ([0ccbe7e](https://github.com/nodejs/node-gyp/commit/0ccbe7e90afb096b46a7818ba127a4871237952e))


### Doc

* add ffi-napi to docs/README.md ([#3138](https://github.com/nodejs/node-gyp/issues/3138)) ([4885110](https://github.com/nodejs/node-gyp/commit/48851107ad8c5d2cf18a55e8bd2764f5938e7102))


### Miscellaneous

* switch to tinyglobby ([#3133](https://github.com/nodejs/node-gyp/issues/3133)) ([c3b3ab0](https://github.com/nodejs/node-gyp/commit/c3b3ab06ee0f092cd5c0646120d57e56d41b79fc))
* update tinyglobby ([#3136](https://github.com/nodejs/node-gyp/issues/3136)) ([b21cf87](https://github.com/nodejs/node-gyp/commit/b21cf874f58883f3fd4dd07bec3b584fb07e831d))

## [11.1.0](https://github.com/nodejs/node-gyp/compare/v11.0.0...v11.1.0) (2025-02-10)


### Features

* update gyp-next to v0.19.1 ([#3122](https://github.com/nodejs/node-gyp/issues/3122)) ([504250e](https://github.com/nodejs/node-gyp/commit/504250e5e3e27c6ef6dcfcaa744b36e1a99c1be8))


### Bug Fixes

* Find VC.Tools.ARM64 on arm64 machine ([#3075](https://github.com/nodejs/node-gyp/issues/3075)) ([b899fae](https://github.com/nodejs/node-gyp/commit/b899faed56270d3d8496da7576b5750b264c2c21))
* try libnode.dll first in load_exe_hook ([#2834](https://github.com/nodejs/node-gyp/issues/2834)) ([b9d10a5](https://github.com/nodejs/node-gyp/commit/b9d10a5a37081e2a731937e43eca52c83609e7f5))


### Miscellaneous

* add gyp-next updater ([#3105](https://github.com/nodejs/node-gyp/issues/3105)) ([e3f9a77](https://github.com/nodejs/node-gyp/commit/e3f9a7756f65a7f4e50799017b3dc51d5bc195b2))
* Test on Ubuntu-24.04-arm and Node.js v23 ([#3121](https://github.com/nodejs/node-gyp/issues/3121)) ([2530f51](https://github.com/nodejs/node-gyp/commit/2530f51cec3ba595184e5bcb7fe1245e240beb59))
* Use astral-sh/ruff-action@v3 to run the Python linter ([#3114](https://github.com/nodejs/node-gyp/issues/3114)) ([94448fc](https://github.com/nodejs/node-gyp/commit/94448fcd9f090814bce1c4361471dae199dc2e82))

## [11.0.0](https://github.com/nodejs/node-gyp/compare/v10.3.1...v11.0.0) (2024-12-03)


### ⚠ BREAKING CHANGES

* drop node 16 support ([#3102](https://github.com/nodejs/node-gyp/issues/3102))

### Features

* drop node 16 support ([#3102](https://github.com/nodejs/node-gyp/issues/3102)) ([0e6b6f8](https://github.com/nodejs/node-gyp/commit/0e6b6f8bea615cf031d76ecff9102a38e5474c72))


### Miscellaneous

* migrate from standard to neostandard ([#3103](https://github.com/nodejs/node-gyp/issues/3103)) ([a130178](https://github.com/nodejs/node-gyp/commit/a13017807d0ae7da8fa076b0bcf23153af7c60a6))

## [10.3.1](https://github.com/nodejs/node-gyp/compare/v10.3.0...v10.3.1) (2024-12-02)


### Miscellaneous

* fix npm-publish dependencies and add provenance ([#3099](https://github.com/nodejs/node-gyp/issues/3099)) ([6dded88](https://github.com/nodejs/node-gyp/commit/6dded88065872a32f44114e60731ba4b701ec057))

## [10.3.0](https://github.com/nodejs/node-gyp/compare/v10.2.0...v10.3.0) (2024-11-29)


### Features

* prohibit compiling with ClangCL on Windows ([#3098](https://github.com/nodejs/node-gyp/issues/3098)) ([88260bf](https://github.com/nodejs/node-gyp/commit/88260bf86aeb4c39959b78104a5edc3dc88d3aef))


### Bug Fixes

* **ci:** use correct release-please-action domain after organization url was changed ([#3032](https://github.com/nodejs/node-gyp/issues/3032)) ([d1ed3d4](https://github.com/nodejs/node-gyp/commit/d1ed3d4dc3a53b8ccab4093d002e43945bbece0e))


### Miscellaneous

* add links to Code of Conduct from root file ([#2196](https://github.com/nodejs/node-gyp/issues/2196)) ([d22e2eb](https://github.com/nodejs/node-gyp/commit/d22e2eb080807c6290533a67249c343a7605a989))
* publish to npm with release-please ([#3051](https://github.com/nodejs/node-gyp/issues/3051)) ([8319847](https://github.com/nodejs/node-gyp/commit/831984736393a3ea8417efec5255f95d53a70785))

## [10.2.0](https://github.com/nodejs/node-gyp/compare/v10.1.0...v10.2.0) (2024-07-09)


### Features

* allow VCINSTALLDIR to specify a portable instance ([#3036](https://github.com/nodejs/node-gyp/issues/3036)) ([d38af2e](https://github.com/nodejs/node-gyp/commit/d38af2e0c2a81b12cd221b1f8517fb89e609d62c))
* **gyp:** update gyp to v0.18.1 ([#3039](https://github.com/nodejs/node-gyp/issues/3039)) ([ea99fea](https://github.com/nodejs/node-gyp/commit/ea99fea83485dc5be04db01df9b2fdbe05319b8e))
* support `rebuild` and `build` for cross-compiling Node-API module to wasm on Windows ([#2974](https://github.com/nodejs/node-gyp/issues/2974)) ([6318d2b](https://github.com/nodejs/node-gyp/commit/6318d2b210224415ff5932c2863e6cc14d4583dc))


### Core

* add an arch check to VS 2019 ([#3025](https://github.com/nodejs/node-gyp/issues/3025)) ([323957b](https://github.com/nodejs/node-gyp/commit/323957b74e9586fb3fbfb2acad5040379c778de6))
* **deps:** bump seanmiddleditch/gha-setup-ninja from 4 to 5 ([#3041](https://github.com/nodejs/node-gyp/issues/3041)) ([10f6730](https://github.com/nodejs/node-gyp/commit/10f6730be660e7a38be8a12111937e37fcf74834))
* proc-log@4.0.0 ([#3022](https://github.com/nodejs/node-gyp/issues/3022)) ([141aa6b](https://github.com/nodejs/node-gyp/commit/141aa6bf029e6f984be8ea98aaf985e5df894082))
* tar@6.2.1 ([#3021](https://github.com/nodejs/node-gyp/issues/3021)) ([b22d5ee](https://github.com/nodejs/node-gyp/commit/b22d5eef861892c968052ffc1c71b551f738163b))


### Doc

* `node-pre-gyp` is no longer maintained ([#3015](https://github.com/nodejs/node-gyp/issues/3015)) ([93186f1](https://github.com/nodejs/node-gyp/commit/93186f10c966b4148fc500e48f8cbffacccdfa3c))
* add the way to configuring Python dependency for Windows PowerShell ([#2996](https://github.com/nodejs/node-gyp/issues/2996)) ([9fd7936](https://github.com/nodejs/node-gyp/commit/9fd7936f0d7232a8a79e6a7b6cbfb814d9042b13))
* Installation -- Python >= v3.12 requires `node-gyp` >= v10 ([#3010](https://github.com/nodejs/node-gyp/issues/3010)) ([a6b48fc](https://github.com/nodejs/node-gyp/commit/a6b48fca9993e54d757cd110f6b41f8200d99ca4))


### Miscellaneous

* fix ruff command ([#3044](https://github.com/nodejs/node-gyp/issues/3044)) ([b3916d5](https://github.com/nodejs/node-gyp/commit/b3916d5b25704a53e89be16b500036a14bdc5060))

## [10.1.0](https://github.com/nodejs/node-gyp/compare/v10.0.1...v10.1.0) (2024-03-13)


### Features

* improve visual studio detection ([#2957](https://github.com/nodejs/node-gyp/issues/2957)) ([109e3d4](https://github.com/nodejs/node-gyp/commit/109e3d4245504a7b75c99f578e1203c0ef4b518e))


### Core

* add support for locally installed headers ([#2964](https://github.com/nodejs/node-gyp/issues/2964)) ([3298731](https://github.com/nodejs/node-gyp/commit/329873141f0d3e3787d3c006801431da04e4ed0c))
* **deps:** bump actions/setup-python from 4 to 5 ([#2960](https://github.com/nodejs/node-gyp/issues/2960)) ([3f0df7e](https://github.com/nodejs/node-gyp/commit/3f0df7e9334e49e8c7f6fdbbb9e1e6c5a8cca53b))
* **deps:** bump google-github-actions/release-please-action ([#2961](https://github.com/nodejs/node-gyp/issues/2961)) ([b1f1808](https://github.com/nodejs/node-gyp/commit/b1f1808bfff0d51e6d3eb696ab6a5b89b7b9630c))
* print Python executable path using UTF-8 ([#2995](https://github.com/nodejs/node-gyp/issues/2995)) ([c472912](https://github.com/nodejs/node-gyp/commit/c4729129daa9bb5204246b857826fb391ac961e1))
* update supported vs versions ([#2959](https://github.com/nodejs/node-gyp/issues/2959)) ([391cc5b](https://github.com/nodejs/node-gyp/commit/391cc5b9b25cffe0cb2edcba3583414a771b4a15))


### Doc

* npm is currently v10 ([#2970](https://github.com/nodejs/node-gyp/issues/2970)) ([7705a22](https://github.com/nodejs/node-gyp/commit/7705a22f31a62076e9f8429780a459f4ad71ea4c))
* remove outdated Node versions from readme ([#2955](https://github.com/nodejs/node-gyp/issues/2955)) ([ae8478e](https://github.com/nodejs/node-gyp/commit/ae8478ec32d9b2fa71b591ac22cdf867ef2e9a7d))
* remove outdated update engines.node reference in 10.0.0 changelog ([b42e796](https://github.com/nodejs/node-gyp/commit/b42e7966177f006f3d1aab1d27885d8372c8ed01))


### Miscellaneous

* only run release please on push ([cff9ac2](https://github.com/nodejs/node-gyp/commit/cff9ac2c3083769a383e00bc60b91562f03116e3))
* upgrade release please action from v2 to v4 ([#2982](https://github.com/nodejs/node-gyp/issues/2982)) ([0035d8e](https://github.com/nodejs/node-gyp/commit/0035d8e9dc98b94f0bc8cd9023a6fa635003703e))

### [10.0.1](https://www.github.com/nodejs/node-gyp/compare/v10.0.0...v10.0.1) (2023-11-02)


### Bug Fixes

* use local `util` for `findAccessibleSync()` ([b39e681](https://www.github.com/nodejs/node-gyp/commit/b39e6819aa9e2c45107d6e60a4913ca036ebfbfd))


### Miscellaneous

* add parallel test logging ([7de1f5f](https://www.github.com/nodejs/node-gyp/commit/7de1f5f32d550d26d48fe4f76aed5866744edcba))
* lint fixes ([4e0ed99](https://www.github.com/nodejs/node-gyp/commit/4e0ed992566f43abc6e988af091ad07fde04acbf))
* use platform specific timeouts in tests ([a68586a](https://www.github.com/nodejs/node-gyp/commit/a68586a67d0af238300662cc062422b42820044d))

## [10.0.0](https://www.github.com/nodejs/node-gyp/compare/v9.4.0...v10.0.0) (2023-10-28)


### ⚠ BREAKING CHANGES

* use .npmignore file to limit which files are published (#2921)
* the `Gyp` class exported is now created using ECMAScript classes and therefore might have small differences to classes that were previously created with `util.inherits`.
* All internal functions have been coverted to return promises and no longer accept callbacks. This is not a breaking change for users but may be breaking to consumers of `node-gyp` if you are requiring internal functions directly.
* `node-gyp` now supports node `^16.14.0 || >=18.0.0`

### Features

* convert all internal functions to async/await ([355622f](https://www.github.com/nodejs/node-gyp/commit/355622f4aac3bd3056b9e03aac5fa2f42a4b3576))
* convert internal classes from util.inherits to classes ([d52997e](https://www.github.com/nodejs/node-gyp/commit/d52997e975b9da6e0cea3d9b99873e9ddc768679))
* drop node 14 support ([#2929](https://www.github.com/nodejs/node-gyp/issues/2929)) ([1b3bd34](https://www.github.com/nodejs/node-gyp/commit/1b3bd341b40f384988d03207ce8187e93ba609bc))
* drop rimraf dependency ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* **gyp:** update gyp to v0.16.1 ([#2923](https://www.github.com/nodejs/node-gyp/issues/2923)) ([707927c](https://www.github.com/nodejs/node-gyp/commit/707927cd579205ef2b4b17e61c1cce24c056b452))
* replace npmlog with proc-log ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* update engines.node to ^14.17.0 || ^16.13.0 || >=18.0.0 ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* use .npmignore file to limit which files are published ([#2921](https://www.github.com/nodejs/node-gyp/issues/2921)) ([864a979](https://www.github.com/nodejs/node-gyp/commit/864a979930cf0ef5ad64bc887b901fa8955d058f))


### Bug Fixes

* create Python symlink only during builds, and clean it up after ([#2721](https://www.github.com/nodejs/node-gyp/issues/2721)) ([0f1f667](https://www.github.com/nodejs/node-gyp/commit/0f1f667b737d21905e283df100a2cb639993562a))
* promisify build command ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* use fs/promises in favor of fs.promises ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))


### Tests

* increase mocha timeout ([#2887](https://www.github.com/nodejs/node-gyp/issues/2887)) ([445c28f](https://www.github.com/nodejs/node-gyp/commit/445c28fabc5fbdf9c3bb3341fb70660a3530f6ad))
* update expired certs ([#2908](https://www.github.com/nodejs/node-gyp/issues/2908)) ([5746691](https://www.github.com/nodejs/node-gyp/commit/5746691a36f7b37019d4b8d4e9616aec43d20410))


### Doc

* Add note about Python symlinks (PR 2362) to CHANGELOG.md for 9.1.0 ([#2783](https://www.github.com/nodejs/node-gyp/issues/2783)) ([b3d41ae](https://www.github.com/nodejs/node-gyp/commit/b3d41aeb737ddd54cc292f363abc561dcc0a614e))
* README.md Do not hardcode the supported versions of Python ([#2880](https://www.github.com/nodejs/node-gyp/issues/2880)) ([bb93b94](https://www.github.com/nodejs/node-gyp/commit/bb93b946a9c74934b59164deb52128cf913c97d5))
* update applicable GitHub links from master to main ([#2843](https://www.github.com/nodejs/node-gyp/issues/2843)) ([d644ce4](https://www.github.com/nodejs/node-gyp/commit/d644ce48311edf090d0e920ad449e5766c757933))
* Update windows installation instructions in README.md ([#2882](https://www.github.com/nodejs/node-gyp/issues/2882)) ([c9caa2e](https://www.github.com/nodejs/node-gyp/commit/c9caa2ecf3c7deae68444ce8fabb32d2dca651cd))


### Core

* find python checks order changed on windows ([#2872](https://www.github.com/nodejs/node-gyp/issues/2872)) ([b030555](https://www.github.com/nodejs/node-gyp/commit/b030555cdb754d9c23906e7e707115cd077bbf76))
* glob@10.3.10 ([#2926](https://www.github.com/nodejs/node-gyp/issues/2926)) ([4bef1ec](https://www.github.com/nodejs/node-gyp/commit/4bef1ecc7554097d92beb397fbe1a546c5227545))
* glob@8.0.3 ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* make-fetch-happen@13.0.0 ([#2927](https://www.github.com/nodejs/node-gyp/issues/2927)) ([059bb6f](https://www.github.com/nodejs/node-gyp/commit/059bb6fd41bb50955a9efbd97887773d60d53221))
* nopt@^7.0.0 ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* standard@17.0.0 and fix linting errors ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* which@3.0.0 ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* which@4.0.0 ([#2928](https://www.github.com/nodejs/node-gyp/issues/2928)) ([e388255](https://www.github.com/nodejs/node-gyp/commit/e38825531403aabeae7abe58e76867f31b832f36))


### Miscellaneous

* add check engines script to CI ([#2922](https://www.github.com/nodejs/node-gyp/issues/2922)) ([21a7249](https://www.github.com/nodejs/node-gyp/commit/21a7249b40d8f95e7721e450fd18764adb1648a7))
* empty commit to add changelog entries from [#2770](https://www.github.com/nodejs/node-gyp/issues/2770) ([4a50fe3](https://www.github.com/nodejs/node-gyp/commit/4a50fe31574217c4b2a798fc72b19947a64ceea1))
* GitHub Workflows security hardening ([#2740](https://www.github.com/nodejs/node-gyp/issues/2740)) ([26683e9](https://www.github.com/nodejs/node-gyp/commit/26683e993df038fb94d89f2276f3535e4522d79a))
* misc testing fixes ([#2930](https://www.github.com/nodejs/node-gyp/issues/2930)) ([4e493d4](https://www.github.com/nodejs/node-gyp/commit/4e493d4fb262d12ac52c84979071ccc79e666a1a))
* run tests after release please PR ([3032e10](https://www.github.com/nodejs/node-gyp/commit/3032e1061cc2b7b49f83c397d385bafddc6b0214))

## [9.4.0](https://www.github.com/nodejs/node-gyp/compare/v9.3.1...v9.4.0) (2023-06-12)


### Features

* add support for native windows arm64 build tools ([bb76021](https://www.github.com/nodejs/node-gyp/commit/bb76021d35964d2bb125bc6214286f35ae4e6cad))
* Upgrade Python linting from flake8 to ruff ([#2815](https://www.github.com/nodejs/node-gyp/issues/2815)) ([fc0ddc6](https://www.github.com/nodejs/node-gyp/commit/fc0ddc6523c62b10e5ca1257500b3ceac01450a7))


### Bug Fixes

* extract tarball to temp directory on Windows ([#2846](https://www.github.com/nodejs/node-gyp/issues/2846)) ([aaa117c](https://www.github.com/nodejs/node-gyp/commit/aaa117c514430aa2c1e568b95df1b6ed1c1fd3b6))
* log statement is for devDir not nodedir ([#2840](https://www.github.com/nodejs/node-gyp/issues/2840)) ([55048f8](https://www.github.com/nodejs/node-gyp/commit/55048f8be5707c295fb0876306aded75638a8b63))


### Miscellaneous

* get update-gyp.py to work with Python >= v3.5 ([#2826](https://www.github.com/nodejs/node-gyp/issues/2826)) ([337e8e6](https://www.github.com/nodejs/node-gyp/commit/337e8e68209bd2481cbb11dacce61234dc5c9419))


### Doc

* docs/README.md add advise about deprecated node-sass ([#2828](https://www.github.com/nodejs/node-gyp/issues/2828)) ([6f3c2d3](https://www.github.com/nodejs/node-gyp/commit/6f3c2d3c6c0de0dbf8c7245f34c2e0b3eea53812))
* Update README.md ([#2822](https://www.github.com/nodejs/node-gyp/issues/2822)) ([c7927e2](https://www.github.com/nodejs/node-gyp/commit/c7927e228dfde059c93e08c26b54dd8026144583))


### Tests

* remove deprecated Node.js and Python ([#2868](https://www.github.com/nodejs/node-gyp/issues/2868)) ([a0b3d1c](https://www.github.com/nodejs/node-gyp/commit/a0b3d1c3afed71a74501476fcbc6ee3fface4d13))

### [9.3.1](https://www.github.com/nodejs/node-gyp/compare/v9.3.0...v9.3.1) (2022-12-16)


### Bug Fixes

* increase node 12 support to ^12.13 ([#2771](https://www.github.com/nodejs/node-gyp/issues/2771)) ([888efb9](https://www.github.com/nodejs/node-gyp/commit/888efb9055857afee6a6b54550722cf9ae3ee323))


### Miscellaneous

* update python test matrix ([#2774](https://www.github.com/nodejs/node-gyp/issues/2774)) ([38f01fa](https://www.github.com/nodejs/node-gyp/commit/38f01fa57d10fdb3db7697121d957bc2e0e96508))

## [9.3.0](https://www.github.com/nodejs/node-gyp/compare/v9.2.0...v9.3.0) (2022-10-10)


### Features

* **gyp:** update gyp to v0.14.0 ([#2749](https://www.github.com/nodejs/node-gyp/issues/2749)) ([713b8dc](https://www.github.com/nodejs/node-gyp/commit/713b8dcdbf44532ca9453a127da266386cc737f8))
* remove support for VS2015 in Node.js >=19 ([#2746](https://www.github.com/nodejs/node-gyp/issues/2746)) ([131d1a4](https://www.github.com/nodejs/node-gyp/commit/131d1a463baf034a04154bcda753a8295f112a34))
* support IBM Open XL C/C++ on z/OS ([#2743](https://www.github.com/nodejs/node-gyp/issues/2743)) ([7d0c83d](https://www.github.com/nodejs/node-gyp/commit/7d0c83d2a95aca743dff972826d0da26203acfc4))

## [9.2.0](https://www.github.com/nodejs/node-gyp/compare/v9.1.0...v9.2.0) (2022-10-02)


### Features

* Add proper support for IBM i ([a26494f](https://www.github.com/nodejs/node-gyp/commit/a26494fbb8883d9ef784503979e115dec3e2791e))
* **gyp:** update gyp to v0.13.0 ([3e2a532](https://www.github.com/nodejs/node-gyp/commit/3e2a5324f1c24f3a04bca04cf54fe23d5c4d5e50))


### Bug Fixes

* node.js debugger adds stderr (but exit code is 0) -> shouldn't throw ([#2719](https://www.github.com/nodejs/node-gyp/issues/2719)) ([c379a74](https://www.github.com/nodejs/node-gyp/commit/c379a744c65c7ab07c2c3193d9c7e8f25ae1b05e))


### Core

* enable support for zoslib on z/OS ([#2600](https://www.github.com/nodejs/node-gyp/issues/2600)) ([83c0a12](https://www.github.com/nodejs/node-gyp/commit/83c0a12bf23b4cbf3125d41f9e2d4201db76c9ae))


### Miscellaneous

* update dependency - nopt@6.0.0 ([#2707](https://www.github.com/nodejs/node-gyp/issues/2707)) ([8958ecf](https://www.github.com/nodejs/node-gyp/commit/8958ecf2bb719227bbcbf155891c3186ee219a2e))

## [9.1.0](https://www.github.com/nodejs/node-gyp/compare/v9.0.0...v9.1.0) (2022-07-13)


### Features

* Update function getSDK() to support Windows 11 SDK ([#2565](https://www.github.com/nodejs/node-gyp/issues/2565)) ([ea8520e](https://www.github.com/nodejs/node-gyp/commit/ea8520e3855374bd15b6d001fe112d58a8d7d737))


### Bug Fixes

* extend tap timeout length to allow for slow CI ([6f74c76](https://www.github.com/nodejs/node-gyp/commit/6f74c762fe3c19bdd20245cb5c02e2dfa65d9451))
* new ca & server certs, bundle in .js file and unpack for testing ([147e3d3](https://www.github.com/nodejs/node-gyp/commit/147e3d34f44a97deb7aa507207680cf0f4e662a2))
* re-label ([#2689](https://www.github.com/nodejs/node-gyp/issues/2689)) ([f0b7863](https://www.github.com/nodejs/node-gyp/commit/f0b7863dadfa365afc173025ae95351aec79abd9))
* typo on readme ([bf81cd4](https://www.github.com/nodejs/node-gyp/commit/bf81cd452b931dd4dfa82762c23dd530a075d992))


### Doc

* update docs/README.md with latest version number ([62d2815](https://www.github.com/nodejs/node-gyp/commit/62d28151bf8266a34e1bcceeb25b4e6e2ae5ca5d))


### Core

* update due to rename of primary branch ([ca1f068](https://www.github.com/nodejs/node-gyp/commit/ca1f0681a5567ca8cd51acebccd37a633f19bc6a))
* Add Python symlink to path (for non-Windows OSes only) ([#2362](https://github.com/nodejs/node-gyp/pull/2362)) ([b9ddcd5](https://github.com/nodejs/node-gyp/commit/b9ddcd5bbd93b05b03674836b6ebdae2c2e74c8c))


### Tests

* Try msvs-version: [2016, 2019, 2022] ([#2700](https://www.github.com/nodejs/node-gyp/issues/2700)) ([68b5b5b](https://www.github.com/nodejs/node-gyp/commit/68b5b5be9c94ac20c55e88654ff6f55234d7130a))
* Upgrade GitHub Actions ([#2623](https://www.github.com/nodejs/node-gyp/issues/2623)) ([245cd5b](https://www.github.com/nodejs/node-gyp/commit/245cd5bbe4441d4f05e88f2fa20a86425419b6af))
* Upgrade GitHub Actions ([#2701](https://www.github.com/nodejs/node-gyp/issues/2701)) ([1c64ca7](https://www.github.com/nodejs/node-gyp/commit/1c64ca7f4702c6eb43ecd16fbd67b5d939041621))

## [9.0.0](https://www.github.com/nodejs/node-gyp/compare/v8.4.1...v9.0.0) (2022-02-24)


### ⚠ BREAKING CHANGES

* increase "engines" to "node" : "^12.22 || ^14.13 || >=16" (#2601)

### Bug Fixes

* _ in npm_config_ env variables ([eef4eef](https://www.github.com/nodejs/node-gyp/commit/eef4eefccb13ff6a32db862709ee5b2d4edf7e95))
* update make-fetch-happen to a minimum of 10.0.3 ([839e414](https://www.github.com/nodejs/node-gyp/commit/839e414b63790c815a4a370d0feee8f24a94d40f))


### Miscellaneous

* add minimal SECURITY.md ([#2560](https://www.github.com/nodejs/node-gyp/issues/2560)) ([c2a1850](https://www.github.com/nodejs/node-gyp/commit/c2a185056e2e589b520fbc0bcc59c2935cd07ede))


### Doc

* Add notes/disclaimers for upgrading the copy of node-gyp that npm uses ([#2585](https://www.github.com/nodejs/node-gyp/issues/2585)) ([faf6d48](https://www.github.com/nodejs/node-gyp/commit/faf6d48f8a77c08a313baf9332358c4b1231c73c))
* Rename and update Common-issues.md --> docs/README.md ([#2567](https://www.github.com/nodejs/node-gyp/issues/2567)) ([2ef5fb8](https://www.github.com/nodejs/node-gyp/commit/2ef5fb86277c4d81baffc0b9f642a8d86be1bfa5))
* rephrase explanation of which node-gyp is used by npm ([#2587](https://www.github.com/nodejs/node-gyp/issues/2587)) ([a2f2988](https://www.github.com/nodejs/node-gyp/commit/a2f298870692022302fa27a1d42363c4a72df407))
* title match content ([#2574](https://www.github.com/nodejs/node-gyp/issues/2574)) ([6e8f93b](https://www.github.com/nodejs/node-gyp/commit/6e8f93be0443f2649d4effa7bc773a9da06a33b4))
* Update Python versions ([#2571](https://www.github.com/nodejs/node-gyp/issues/2571)) ([e069f13](https://www.github.com/nodejs/node-gyp/commit/e069f13658a8bfb5fd60f74708cf8be0856d92e3))


### Core

* add lib.target as path for searching libnode on z/OS ([1d499dd](https://www.github.com/nodejs/node-gyp/commit/1d499dd5606f39de2d34fa822fd0fa5ce17fbd06))
* increase "engines" to "node" : "^12.22 || ^14.13 || >=16" ([#2601](https://www.github.com/nodejs/node-gyp/issues/2601)) ([6562f92](https://www.github.com/nodejs/node-gyp/commit/6562f92a6f2e67aeae081ddf5272ff117f1fab07))
* make-fetch-happen@10.0.1 ([78f6660](https://www.github.com/nodejs/node-gyp/commit/78f66604e0df480d4f36a8fa4f3618c046a6fbdc))

### [8.4.1](https://www.github.com/nodejs/node-gyp/compare/v8.4.0...v8.4.1) (2021-11-19)


### Bug Fixes

* windows command missing space ([#2553](https://www.github.com/nodejs/node-gyp/issues/2553)) ([cc37b88](https://www.github.com/nodejs/node-gyp/commit/cc37b880690706d3c5d04d5a68c76c392a0a23ed))


### Doc

* fix typo in powershell node-gyp update ([787cf7f](https://www.github.com/nodejs/node-gyp/commit/787cf7f8e5ddd5039e02b64ace6b7b15e06fe0a4))


### Core

* npmlog@6.0.0 ([8083f6b](https://www.github.com/nodejs/node-gyp/commit/8083f6b855bd7f3326af04c5f5269fc28d7f2508))

## [8.4.0](https://www.github.com/nodejs/node-gyp/compare/v8.3.0...v8.4.0) (2021-11-05)


### Features

* build with config.gypi from node headers ([a27dc08](https://www.github.com/nodejs/node-gyp/commit/a27dc08696911c6d81e76cc228697243069103c1))
* support vs2022 ([#2533](https://www.github.com/nodejs/node-gyp/issues/2533)) ([5a00387](https://www.github.com/nodejs/node-gyp/commit/5a00387e5f8018264a1822f6c4d5dbf425f21cf6))

## [8.3.0](https://www.github.com/nodejs/node-gyp/compare/v8.2.0...v8.3.0) (2021-10-11)


### Features

* **gyp:** update gyp to v0.10.0 ([#2521](https://www.github.com/nodejs/node-gyp/issues/2521)) ([5585792](https://www.github.com/nodejs/node-gyp/commit/5585792922a97f0629f143c560efd74470eae87f))


### Tests

* Python 3.10 was release on Oct. 4th ([#2504](https://www.github.com/nodejs/node-gyp/issues/2504)) ([0a67dcd](https://www.github.com/nodejs/node-gyp/commit/0a67dcd1307f3560495219253241eafcbf4e2a69))


### Miscellaneous

* **deps:** bump make-fetch-happen from 8.0.14 to 9.1.0 ([b05b4fe](https://www.github.com/nodejs/node-gyp/commit/b05b4fe9891f718f40edf547e9b50e982826d48a))
* refactor the creation of config.gypi file ([f2ad87f](https://www.github.com/nodejs/node-gyp/commit/f2ad87ff65f98ad66daa7225ad59d99b759a2b07))

## [8.2.0](https://www.github.com/nodejs/node-gyp/compare/v8.1.0...v8.2.0) (2021-08-23)


### Features

* **gyp:** update gyp to v0.9.6 ([#2481](https://www.github.com/nodejs/node-gyp/issues/2481)) ([ed9a9ed](https://www.github.com/nodejs/node-gyp/commit/ed9a9ed653a17c84afa3c327161992d0da7d0cea))


### Bug Fixes

* add error arg back into catch block for older Node.js users ([5cde818](https://www.github.com/nodejs/node-gyp/commit/5cde818aac715477e9e9747966bb6b4c4ed070a8))
* change default gyp update message ([#2420](https://www.github.com/nodejs/node-gyp/issues/2420)) ([cfd12ff](https://www.github.com/nodejs/node-gyp/commit/cfd12ff3bb0eb4525173413ef6a94b3cd8398cad))
* doc how to update node-gyp independently from npm ([c8c0af7](https://www.github.com/nodejs/node-gyp/commit/c8c0af72e78141a02b5da4cd4d704838333a90bd))
* missing spaces ([f0882b1](https://www.github.com/nodejs/node-gyp/commit/f0882b1264b2fa701adbc81a3be0b3cba80e333d))


### Core

* deep-copy process.config during configure ([#2368](https://www.github.com/nodejs/node-gyp/issues/2368)) ([5f1a06c](https://www.github.com/nodejs/node-gyp/commit/5f1a06c50f3b0c3d292f64948f85a004cfcc5c87))


### Miscellaneous

* **deps:** bump tar from 6.1.0 to 6.1.2 ([#2474](https://www.github.com/nodejs/node-gyp/issues/2474)) ([ec15a3e](https://www.github.com/nodejs/node-gyp/commit/ec15a3e5012004172713c11eebcc9d852d32d380))
* fix typos discovered by codespell ([#2442](https://www.github.com/nodejs/node-gyp/issues/2442)) ([2d0ce55](https://www.github.com/nodejs/node-gyp/commit/2d0ce5595e232a3fc7c562cdf39efb77e2312cc1))
* GitHub Actions Test on node: [12.x, 14.x, 16.x] ([#2439](https://www.github.com/nodejs/node-gyp/issues/2439)) ([b7bccdb](https://www.github.com/nodejs/node-gyp/commit/b7bccdb527d93b0bb0ce99713f083ce2985fe85c))


### Doc

* correct link to "binding.gyp files out in the wild" ([#2483](https://www.github.com/nodejs/node-gyp/issues/2483)) ([660dd7b](https://www.github.com/nodejs/node-gyp/commit/660dd7b2a822c184be8027b300e68be67b366772))
* **wiki:** Add a link to the node-midi binding.gyp file. ([b354711](https://www.github.com/nodejs/node-gyp/commit/b3547115f6e356358138310e857c7f1ec627a8a7))
* **wiki:** add bcrypt ([e199cfa](https://www.github.com/nodejs/node-gyp/commit/e199cfa8fc6161492d2a6ade2190510d0ebf7c0f))
* **wiki:** Add helpful information ([4eda827](https://www.github.com/nodejs/node-gyp/commit/4eda8275c03dae6d2f5c40f3c1dbe930d84b0f2b))
* **wiki:** Add node-canvas ([13a9553](https://www.github.com/nodejs/node-gyp/commit/13a955317b39caf98fd1f412d8d3f41599e979fd))
* **wiki:** Add node-openvg-canvas and node-openvg. ([61f709e](https://www.github.com/nodejs/node-gyp/commit/61f709ec4d9f256a6467e9ff84430a48eeb629d1))
* **wiki:** add one more example ([77f3632](https://www.github.com/nodejs/node-gyp/commit/77f363272930d3d4d24fd3973be22e6237128fcc))
* **wiki:** add topcube, node-osmium, and node-osrm ([1a75d2b](https://www.github.com/nodejs/node-gyp/commit/1a75d2bf2f562ba50846893a516e111cfbb50885))
* **wiki:** Added details for properly fixing ([3d4d9d5](https://www.github.com/nodejs/node-gyp/commit/3d4d9d52d6b5b49de06bb0bb5b68e2686d2b7ebd))
* **wiki:** Added Ghostscript4JS ([bf4bed1](https://www.github.com/nodejs/node-gyp/commit/bf4bed1b96a7d22fba6f97f4552ad09f32ac3737))
* **wiki:** added levelup ([1575bce](https://www.github.com/nodejs/node-gyp/commit/1575bce3a53db628bfb023fd6f3258fdf98c3195))
* **wiki:** Added nk-mysql (nodamysql) ([5b4f2d0](https://www.github.com/nodejs/node-gyp/commit/5b4f2d0e1d5d3eadfd03aaf9c1668340f76c4bea))
* **wiki:** Added nk-xrm-installer .gyp references, including .py scripts for providing complete reference to examples of fetching source via http, extracting, and moving files (as opposed to copying) ([ceb3088](https://www.github.com/nodejs/node-gyp/commit/ceb30885b74f6789374ef52267b84767be93ebe4))
* **wiki:** Added tip about resolving frustrating LNK1181 error ([e64798d](https://www.github.com/nodejs/node-gyp/commit/e64798de8cac6031ad598a86d7599e81b4d20b17))
* **wiki:** ADDED: Node.js binding to OpenCV ([e2dc777](https://www.github.com/nodejs/node-gyp/commit/e2dc77730b09d7ee8682d7713a7603a2d7aacabd))
* **wiki:** Adding link to node-cryptopp's gyp file ([875adbe](https://www.github.com/nodejs/node-gyp/commit/875adbe2a4669fa5f2be0250ffbf98fb55e800fd))
* **wiki:** Adding the sharp library to the list ([9dce0e4](https://www.github.com/nodejs/node-gyp/commit/9dce0e41650c3fa973e6135a79632d022c662a1d))
* **wiki:** Adds node-fann ([23e3d48](https://www.github.com/nodejs/node-gyp/commit/23e3d485ed894ba7c631e9c062f5e366b50c416c))
* **wiki:** Adds node-inotify and v8-profiler ([b6e542f](https://www.github.com/nodejs/node-gyp/commit/b6e542f644dbbfe22b88524ec500696e06ee4af7))
* **wiki:** Bumping Python version from 2.3 to 2.7 as per the node-gyp readme ([55ebd6e](https://www.github.com/nodejs/node-gyp/commit/55ebd6ebacde975bf84f7bf4d8c66e64cc7cd0da))
* **wiki:** C++ build tools version upgraded ([5b899b7](https://www.github.com/nodejs/node-gyp/commit/5b899b70db729c392ced7c98e8e17590c6499fc3))
* **wiki:** change bcrypt url to binding.gyp file ([e11bdd8](https://www.github.com/nodejs/node-gyp/commit/e11bdd84de6144492d3eb327d67cbf2d62da1a76))
* **wiki:** Clarification + direct link to VS2010 ([531c724](https://www.github.com/nodejs/node-gyp/commit/531c724561d947b5d870de8d52dd8c3c51c5ec2d))
* **wiki:** Correcting the link to node-osmium ([fae7516](https://www.github.com/nodejs/node-gyp/commit/fae7516a1d2829b6e234eaded74fb112ebd79a05))
* **wiki:** Created "binding.gyp" files out in the wild (markdown) ([d4fd143](https://www.github.com/nodejs/node-gyp/commit/d4fd14355bbe57f229f082f47bb2b3670868203f))
* **wiki:** Created Common issues (markdown) ([a38299e](https://www.github.com/nodejs/node-gyp/commit/a38299ea340ceb0e732c6dc6a1b4760257644839))
* **wiki:** Created Error: "pre" versions of node cannot be installed (markdown) ([98bc80d](https://www.github.com/nodejs/node-gyp/commit/98bc80d7a62ba70c881f3c39d94f804322e57852))
* **wiki:** Created Linking to OpenSSL (markdown) ([c46d00d](https://www.github.com/nodejs/node-gyp/commit/c46d00d83bac5173dea8bbbb175a1a7de74fdaca))
* **wiki:** Created Updating npm's bundled node gyp (markdown) ([e0ac8d1](https://www.github.com/nodejs/node-gyp/commit/e0ac8d15af46aadd1c220599e63199b154a514e6))
* **wiki:** Created use of undeclared identifier 'TypedArray' (markdown) ([65ba711](https://www.github.com/nodejs/node-gyp/commit/65ba71139e9b7f64ac823e575ee9dbf17d937ce4))
* **wiki:** Created Visual Studio 2010 Setup (markdown) ([5b80e83](https://www.github.com/nodejs/node-gyp/commit/5b80e834c8f79dda9fb2770a876ff3cf649c06f3))
* **wiki:** Created Visual studio 2012 setup (markdown) ([becef31](https://www.github.com/nodejs/node-gyp/commit/becef316b6c46a33e783667720ee074a0141d1a5))
* **wiki:** Destroyed Visual Studio 2010 Setup (markdown) ([93423b4](https://www.github.com/nodejs/node-gyp/commit/93423b43606de9664aeb79635825f5e9941ec9bc))
* **wiki:** Destroyed Visual studio 2012 setup (markdown) ([3601508](https://www.github.com/nodejs/node-gyp/commit/3601508bb10fa05da0ddc7e70d57e4b4dd679657))
* **wiki:** Different commands for Windows npm v6 vs. v7 ([0fce46b](https://www.github.com/nodejs/node-gyp/commit/0fce46b53340c85e8091cde347d5ed23a443c82f))
* **wiki:** Drop  in favor of ([9285ff6](https://www.github.com/nodejs/node-gyp/commit/9285ff6e451c52c070a05f05f0a9602621d91d53))
* **wiki:** Explicit link to Visual C++ 2010 Express ([378c363](https://www.github.com/nodejs/node-gyp/commit/378c3632f02c096ed819ec8f2611c65bef0c0554))
* **wiki:** fix link to gyp file used to build libsqlite3 ([54db8d7](https://www.github.com/nodejs/node-gyp/commit/54db8d7ac33e3f98220960b5d86cfa18a75b53cb))
* **wiki:** Fix link to node-zipfile ([92e49a8](https://www.github.com/nodejs/node-gyp/commit/92e49a858ed69cb4847a26a5676ab56ef5e2de33))
* **wiki:** fixed node-serialport link ([954ee53](https://www.github.com/nodejs/node-gyp/commit/954ee530b3972d1db591fce32368e4e31b5a25d8))
* **wiki:** I highly missing it in common issue as every windows biggner face that issue ([d617fae](https://www.github.com/nodejs/node-gyp/commit/d617faee29c40871ca5c8f93efd0ce929a40d541))
* **wiki:** if ouns that the -h did not help. I founs on github that there was support for visual studio 2015, while i couldn't install node-red beacuse it kept telling me the key 2015 was missing. looking in he gyp python code i found the local file was bot up t dat with the github repo. updating took several efforts before i tried to drop the -g option. ([408b72f](https://www.github.com/nodejs/node-gyp/commit/408b72f561329408daeb17834436e381406efcc8))
* **wiki:** If permissions error, please try  and then the command. ([ee8e1c1](https://www.github.com/nodejs/node-gyp/commit/ee8e1c1e5334096d58e0d6bca6c006f2ee9c88cb))
* **wiki:** Improve Unix instructions ([c3e5487](https://www.github.com/nodejs/node-gyp/commit/c3e548736645b535ea5bce613d74ca3e98598243))
* **wiki:** link to docs/ from README ([b52e487](https://www.github.com/nodejs/node-gyp/commit/b52e487eac1eb421573d1e67114a242eeff45a00))
* **wiki:** Lower case L ([3aa2c6b](https://www.github.com/nodejs/node-gyp/commit/3aa2c6bdb07971b87505e32e32548d75264bd19f))
* **wiki:** Make changes discussed in https://github.com/nodejs/node-gyp/issues/2416 ([1dcad87](https://www.github.com/nodejs/node-gyp/commit/1dcad873539027511a5f0243baf770ea90f6f4e2))
* **wiki:** move wiki docs into doc/ ([f0a4835](https://www.github.com/nodejs/node-gyp/commit/f0a48355d86534ec3bdabcdb3ce3340fa2e17f39))
* **wiki:** node-sass in the wild ([d310a73](https://www.github.com/nodejs/node-gyp/commit/d310a73d64d0065050377baac7047472f7424a1b))
* **wiki:** node-srs was a 404 ([bbca21a](https://www.github.com/nodejs/node-gyp/commit/bbca21a1e1ede4c473aff365ca71989a5bda7b57))
* **wiki:** Note: VS2010 seems to be no longer available!  VS2013 or nothing! ([7b5dcaf](https://www.github.com/nodejs/node-gyp/commit/7b5dcafafccdceae4b8f2b53ac9081a694b6ade8))
* **wiki:** safer doc names, remove unnecessary TypedArray doc ([161c235](https://www.github.com/nodejs/node-gyp/commit/161c2353ef5b562f4acfb2fd77608fcbd0800fc0))
* **wiki:** sorry, forgot to mention a specific windows version. ([d69dffc](https://www.github.com/nodejs/node-gyp/commit/d69dffc16c2b1e3c60dcb5d1c35a49270ba22a35))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([7444b47](https://www.github.com/nodejs/node-gyp/commit/7444b47a7caac1e14d1da474a7fcfcf88d328017))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([d766b74](https://www.github.com/nodejs/node-gyp/commit/d766b7427851e6c2edc02e2504a7be9be7e330c0))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([d319b0e](https://www.github.com/nodejs/node-gyp/commit/d319b0e98c7085de8e51bc5595eba4264b99a7d5))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([3c6692d](https://www.github.com/nodejs/node-gyp/commit/3c6692d538f0ce973869aa237118b7d2483feccd))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([93392d5](https://www.github.com/nodejs/node-gyp/commit/93392d559ce6f250b9c7fe8177e6c88603809dc1))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([8841158](https://www.github.com/nodejs/node-gyp/commit/88411588f300e9b7c00fe516ecd977a1feeeb15c))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([81bfa1f](https://www.github.com/nodejs/node-gyp/commit/81bfa1f1b63d522a9f8a9ae9ca0c7ae90fe75140))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([d1cd237](https://www.github.com/nodejs/node-gyp/commit/d1cd237bad06fa507adb354b9e2181a14dc63d24))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([3de9e17](https://www.github.com/nodejs/node-gyp/commit/3de9e17e0b8a387eafe7bd18d0ec1e3191d118e8))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([a9b7096](https://www.github.com/nodejs/node-gyp/commit/a9b70968fb956eab3b95672048b94350e1565ca3))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([3236069](https://www.github.com/nodejs/node-gyp/commit/3236069689e7e0eb15b324fce74ab58158956f98))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([1462755](https://www.github.com/nodejs/node-gyp/commit/14627556966e5d513bdb8e5208f0e1300f68991f))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([7ab1337](https://www.github.com/nodejs/node-gyp/commit/7ab133752a6c402bb96dcd3d671d73e03e9487ad))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([640895d](https://www.github.com/nodejs/node-gyp/commit/640895d36b7448c646a3b850c1e159106f83c724))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([ced8c96](https://www.github.com/nodejs/node-gyp/commit/ced8c968457f285ab8989c291d28173d7730833c))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([27b883a](https://www.github.com/nodejs/node-gyp/commit/27b883a350ad0db6b9130d7b996f35855ec34c7a))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([d29fb13](https://www.github.com/nodejs/node-gyp/commit/d29fb134f1c4b9dd729ba95f2979e69e0934809f))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([2765891](https://www.github.com/nodejs/node-gyp/commit/27658913e6220cf0371b4b73e25a0e4ab11108a1))
* **wiki:** Updated "binding.gyp" files out in the wild (markdown) ([dc97766](https://www.github.com/nodejs/node-gyp/commit/dc9776648d432bca6775c176641f16da14522d4c))
* **wiki:** Updated Error: "pre" versions of node cannot be installed (markdown) ([e9f8b33](https://www.github.com/nodejs/node-gyp/commit/e9f8b33d1f87d04f22cb09a814d7c55d0fa38446))
* **wiki:** Updated Home (markdown) ([3407109](https://www.github.com/nodejs/node-gyp/commit/3407109325cf7ba1e925656b9eb75feffab0557c))
* **wiki:** Updated Home (markdown) ([6e392bc](https://www.github.com/nodejs/node-gyp/commit/6e392bcdd3dd1691773e6e16e1dffc35931b81e0))
* **wiki:** Updated Home (markdown) ([65efe32](https://www.github.com/nodejs/node-gyp/commit/65efe32ccb8d446ce569453364f922dd9d27c945))
* **wiki:** Updated Home (markdown) ([ea28f09](https://www.github.com/nodejs/node-gyp/commit/ea28f0947af91fa638be355143f5df89d2e431c8))
* **wiki:** Updated Home (markdown) ([0e37ff4](https://www.github.com/nodejs/node-gyp/commit/0e37ff48b306c12149661b375895741d3d710da7))
* **wiki:** Updated Home (markdown) ([b398ef4](https://www.github.com/nodejs/node-gyp/commit/b398ef46f660d2b1506508550dadfb4c35639e4b))
* **wiki:** Updated Linking to OpenSSL (markdown) ([8919028](https://www.github.com/nodejs/node-gyp/commit/8919028921fd304f08044098434f0dc6071fb7cf))
* **wiki:** Updated Linking to OpenSSL (markdown) ([c00eb77](https://www.github.com/nodejs/node-gyp/commit/c00eb778fc7dc27e4dab3a9219035ea20458b33b))
* **wiki:** Updated node-levelup to node-leveldown (broken links) ([59668bb](https://www.github.com/nodejs/node-gyp/commit/59668bb0b904feccf3c09afa2fd37378c77af967))
* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([d314854](https://www.github.com/nodejs/node-gyp/commit/d31485415ef69d46effa6090c95698341965de1b))
* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([11858b0](https://www.github.com/nodejs/node-gyp/commit/11858b0655d1eee00c62ad628e719d4378803d14))
* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([33561e9](https://www.github.com/nodejs/node-gyp/commit/33561e9cbf5f4eb46111318503c77df2c6eb484a))
* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([4a7f2d0](https://www.github.com/nodejs/node-gyp/commit/4a7f2d0d869a65c99a78504976567017edadf657))
* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([979a706](https://www.github.com/nodejs/node-gyp/commit/979a7063b950c088a7f4896fc3a48e1d00dfd231))
* **wiki:** Updated Updating npm's bundled node gyp (markdown) ([e50e04d](https://www.github.com/nodejs/node-gyp/commit/e50e04d7b6a3754ea0aa11fe8cef491b3bc5bdd4))

## [8.1.0](https://www.github.com/nodejs/node-gyp/compare/v8.0.0...v8.1.0) (2021-05-28)


### Features

* **gyp:** update gyp to v0.9.1 ([#2402](https://www.github.com/nodejs/node-gyp/issues/2402)) ([814b1b0](https://www.github.com/nodejs/node-gyp/commit/814b1b0eda102afb9fc87e81638a9cf5b650bb10))


### Miscellaneous

* add `release-please-action` for automated releases ([#2395](https://www.github.com/nodejs/node-gyp/issues/2395)) ([07e9d7c](https://www.github.com/nodejs/node-gyp/commit/07e9d7c7ee80ba119ea760c635f72fd8e7efe198))


### Core

* fail gracefully if we can't find the username ([#2375](https://www.github.com/nodejs/node-gyp/issues/2375)) ([fca4795](https://www.github.com/nodejs/node-gyp/commit/fca4795512c67dc8420aaa0d913b5b89a4b147f3))
* log as yes/no whether build dir was created ([#2370](https://www.github.com/nodejs/node-gyp/issues/2370)) ([245dee5](https://www.github.com/nodejs/node-gyp/commit/245dee5b62581309946872ae253226ea3a42c0e3))


### Doc

* fix v8.0.0 release date ([4b83c3d](https://www.github.com/nodejs/node-gyp/commit/4b83c3de7300457919d53f26d96ea9ad6f6bedd8))
* remove redundant version info ([#2403](https://www.github.com/nodejs/node-gyp/issues/2403)) ([1423670](https://www.github.com/nodejs/node-gyp/commit/14236709de64b100a424396b91a5115639daa0ef))
* Update README.md Visual Studio Community page polski to auto ([#2371](https://www.github.com/nodejs/node-gyp/issues/2371)) ([1b4697a](https://www.github.com/nodejs/node-gyp/commit/1b4697abf69ef574a48faf832a7098f4c6c224a5))

## v8.0.0 2021-04-03

* [[`0d8a6f1b19`](https://github.com/nodejs/node-gyp/commit/0d8a6f1b19)] - **ci**: update actions/setup-node to v2 (#2302) (Sora Morimoto) [#2302](https://github.com/nodejs/node-gyp/pull/2302)
* [[`15a5c7d45b`](https://github.com/nodejs/node-gyp/commit/15a5c7d45b)] - **ci**: migrate deprecated grammar (#2285) (Jiawen Geng) [#2285](https://github.com/nodejs/node-gyp/pull/2285)
* [[`06ddde27f9`](https://github.com/nodejs/node-gyp/commit/06ddde27f9)] - **deps**: sync mutual dependencies with npm (DeeDeeG) [#2348](https://github.com/nodejs/node-gyp/pull/2348)
* [[`a5fd1f41e3`](https://github.com/nodejs/node-gyp/commit/a5fd1f41e3)] - **doc**: add downloads badge (#2352) (Jiawen Geng) [#2352](https://github.com/nodejs/node-gyp/pull/2352)
* [[`cc1cbce056`](https://github.com/nodejs/node-gyp/commit/cc1cbce056)] - **doc**: update macOS\_Catalina.md (#2293) (iMrLopez) [#2293](https://github.com/nodejs/node-gyp/pull/2293)
* [[`6287118fc4`](https://github.com/nodejs/node-gyp/commit/6287118fc4)] - **doc**: updated README.md to copy easily (#2281) (மனோஜ்குமார் பழனிச்சாமி) [#2281](https://github.com/nodejs/node-gyp/pull/2281)
* [[`66c0f04467`](https://github.com/nodejs/node-gyp/commit/66c0f04467)] - **doc**: add missing `sudo` to Catalina doc (Karl Horky) [#2244](https://github.com/nodejs/node-gyp/pull/2244)
* [[`0da2e0140d`](https://github.com/nodejs/node-gyp/commit/0da2e0140d)] - **gyp**: update gyp to v0.8.1 (#2355) (DeeDeeG) [#2355](https://github.com/nodejs/node-gyp/pull/2355)
* [[`0093ec8646`](https://github.com/nodejs/node-gyp/commit/0093ec8646)] - **gyp**: Improve our flake8 linting tests (Christian Clauss) [#2356](https://github.com/nodejs/node-gyp/pull/2356)
* [[`a78b584236`](https://github.com/nodejs/node-gyp/commit/a78b584236)] - **(SEMVER-MAJOR)** **gyp**: remove support for Python 2 (#2300) (Christian Clauss) [#2300](https://github.com/nodejs/node-gyp/pull/2300)
* [[`c3c510d89e`](https://github.com/nodejs/node-gyp/commit/c3c510d89e)] - **gyp**: update gyp to v0.8.0 (#2318) (Christian Clauss) [#2318](https://github.com/nodejs/node-gyp/pull/2318)
* [[`9e1397c52e`](https://github.com/nodejs/node-gyp/commit/9e1397c52e)] - **(SEMVER-MAJOR)** **gyp**: update gyp to v0.7.0 (#2284) (Jiawen Geng) [#2284](https://github.com/nodejs/node-gyp/pull/2284)
* [[`1bd18f3e77`](https://github.com/nodejs/node-gyp/commit/1bd18f3e77)] - **(SEMVER-MAJOR)** **lib**: drop Python 2 support in find-python.js (#2333) (DeeDeeG) [#2333](https://github.com/nodejs/node-gyp/pull/2333)
* [[`e81602ef55`](https://github.com/nodejs/node-gyp/commit/e81602ef55)] - **(SEMVER-MAJOR)** **lib**: migrate requests to fetch (#2220) (Matias Lopez) [#2220](https://github.com/nodejs/node-gyp/pull/2220)
* [[`392b7760b4`](https://github.com/nodejs/node-gyp/commit/392b7760b4)] - **lib**: avoid changing process.config (#2322) (Michaël Zasso) [#2322](https://github.com/nodejs/node-gyp/pull/2322)

## v7.1.2 2020-10-17

* [[`096e3aded5`](https://github.com/nodejs/node-gyp/commit/096e3aded5)] - **gyp**: update gyp to 0.6.2 (Myles Borins) [#2241](https://github.com/nodejs/node-gyp/pull/2241)
* [[`54f97cd243`](https://github.com/nodejs/node-gyp/commit/54f97cd243)] - **doc**: add cmd to reset `xcode-select` to initial state (Valera Rozuvan) [#2235](https://github.com/nodejs/node-gyp/pull/2235)

## v7.1.1 2020-10-15

This release restores the location of shared library builds to the pre-v7
location. In v7.0.0 until this release, shared library outputs were placed
in a lib.target subdirectory inside the build/{Release,Debug} directory for
builds using `make` (Linux, etc.). This is inconsistent with macOS (Xcode)
behavior and previous node-gyp behavior so has been reverted.
We consider this a bug-fix rather than semver-major change.

* [[`18bf2d1d38`](https://github.com/nodejs/node-gyp/commit/18bf2d1d38)] - **deps**: update deps to match npm@7 (Rod Vagg) [#2240](https://github.com/nodejs/node-gyp/pull/2240)
* [[`ee6a837cb7`](https://github.com/nodejs/node-gyp/commit/ee6a837cb7)] - **gyp**: update gyp to 0.6.1 (Rod Vagg) [#2238](https://github.com/nodejs/node-gyp/pull/2238)
* [[`3e7f8ccafc`](https://github.com/nodejs/node-gyp/commit/3e7f8ccafc)] - **lib**: better log message when ps fails (Martin Midtgaard) [#2229](https://github.com/nodejs/node-gyp/pull/2229)
* [[`7fb314339f`](https://github.com/nodejs/node-gyp/commit/7fb314339f)] - **test**: GitHub Actions: Test on Python 3.9 (Christian Clauss) [#2230](https://github.com/nodejs/node-gyp/pull/2230)
* [[`754996b9ec`](https://github.com/nodejs/node-gyp/commit/754996b9ec)] - **doc**: replace status badges with new Actions badge (Rod Vagg) [#2218](https://github.com/nodejs/node-gyp/pull/2218)
* [[`2317dc400c`](https://github.com/nodejs/node-gyp/commit/2317dc400c)] - **ci**: switch to GitHub Actions (Shelley Vohr) [#2210](https://github.com/nodejs/node-gyp/pull/2210)
* [[`2cca9b74f7`](https://github.com/nodejs/node-gyp/commit/2cca9b74f7)] - **doc**: drop the --production flag for installing windows-build-tools (DeeDeeG) [#2206](https://github.com/nodejs/node-gyp/pull/2206)

## v7.1.0 2020-08-12

* [[`aaf33c3029`](https://github.com/nodejs/node-gyp/commit/aaf33c3029)] - **build**: add update-gyp script (Samuel Attard) [#2167](https://github.com/nodejs/node-gyp/pull/2167)
* * [[`3baa4e4172`](https://github.com/nodejs/node-gyp/commit/3baa4e4172)] - **(SEMVER-MINOR)** **gyp**: update gyp to 0.4.0 (Samuel Attard) [#2165](https://github.com/nodejs/node-gyp/pull/2165)
* * [[`f461d56c53`](https://github.com/nodejs/node-gyp/commit/f461d56c53)] - **(SEMVER-MINOR)** **build**: support apple silicon (arm64 darwin) builds (Samuel Attard) [#2165](https://github.com/nodejs/node-gyp/pull/2165)
* * [[`ee6fa7d3bc`](https://github.com/nodejs/node-gyp/commit/ee6fa7d3bc)] - **docs**: note that node-gyp@7 should solve Catalina CLT issues (Rod Vagg) [#2156](https://github.com/nodejs/node-gyp/pull/2156)
* * [[`4fc8ff179d`](https://github.com/nodejs/node-gyp/commit/4fc8ff179d)] - **doc**: silence curl for macOS Catalina acid test (Chia Wei Ong) [#2150](https://github.com/nodejs/node-gyp/pull/2150)
* * [[`7857cb2eb1`](https://github.com/nodejs/node-gyp/commit/7857cb2eb1)] - **deps**: increase "engines" to "node" : "\>= 10.12.0" (DeeDeeG) [#2153](https://github.com/nodejs/node-gyp/pull/2153)

## v7.0.0 2020-06-03

* [[`e18a61afc1`](https://github.com/nodejs/node-gyp/commit/e18a61afc1)] - **build**: shrink bloated addon binaries on windows (Shelley Vohr) [#2060](https://github.com/nodejs/node-gyp/pull/2060)
* [[`4937722cf5`](https://github.com/nodejs/node-gyp/commit/4937722cf5)] - **(SEMVER-MAJOR)** **deps**: replace mkdirp with {recursive} mkdir (Rod Vagg) [#2123](https://github.com/nodejs/node-gyp/pull/2123)
* [[`d45438a047`](https://github.com/nodejs/node-gyp/commit/d45438a047)] - **(SEMVER-MAJOR)** **deps**: update deps, match to npm@7 (Rod Vagg) [#2126](https://github.com/nodejs/node-gyp/pull/2126)
* [[`ba4f34b7d6`](https://github.com/nodejs/node-gyp/commit/ba4f34b7d6)] - **doc**: update catalina xcode clt download link (Dario Vladovic) [#2133](https://github.com/nodejs/node-gyp/pull/2133)
* [[`f7bfce96ed`](https://github.com/nodejs/node-gyp/commit/f7bfce96ed)] - **doc**: update acid test and introduce curl|bash test script (Dario Vladovic) [#2105](https://github.com/nodejs/node-gyp/pull/2105)
* [[`e529f3309d`](https://github.com/nodejs/node-gyp/commit/e529f3309d)] - **doc**: update README to reflect upgrade to gyp-next (Ujjwal Sharma) [#2092](https://github.com/nodejs/node-gyp/pull/2092)
* [[`9aed6286a3`](https://github.com/nodejs/node-gyp/commit/9aed6286a3)] - **doc**: give more attention to Catalina issues doc (Matheus Marchini) [#2134](https://github.com/nodejs/node-gyp/pull/2134)
* [[`963f2a7b48`](https://github.com/nodejs/node-gyp/commit/963f2a7b48)] - **doc**: improve Catalina discoverability for search engines (Matheus Marchini) [#2135](https://github.com/nodejs/node-gyp/pull/2135)
* [[`7b75af349b`](https://github.com/nodejs/node-gyp/commit/7b75af349b)] - **doc**: add macOS Catalina software update info (Karl Horky) [#2078](https://github.com/nodejs/node-gyp/pull/2078)
* [[`4f23c7bee2`](https://github.com/nodejs/node-gyp/commit/4f23c7bee2)] - **doc**: update link to the code of conduct (#2073) (Michaël Zasso) [#2073](https://github.com/nodejs/node-gyp/pull/2073)
* [[`473cfa283f`](https://github.com/nodejs/node-gyp/commit/473cfa283f)] - **doc**: note in README that Python 3.8 is supported (#2072) (Michaël Zasso) [#2072](https://github.com/nodejs/node-gyp/pull/2072)
* [[`e7402b4a7c`](https://github.com/nodejs/node-gyp/commit/e7402b4a7c)] - **doc**: update catalina xcode cli tools download link (#2044) (Dario Vladović) [#2044](https://github.com/nodejs/node-gyp/pull/2044)
* [[`35de45984f`](https://github.com/nodejs/node-gyp/commit/35de45984f)] - **doc**: update catalina xcode cli tools download link; formatting (Jonathan Hult) [#2034](https://github.com/nodejs/node-gyp/pull/2034)
* [[`48642191f5`](https://github.com/nodejs/node-gyp/commit/48642191f5)] - **doc**: add download link for Command Line Tools for Xcode (Przemysław Bitkowski) [#2029](https://github.com/nodejs/node-gyp/pull/2029)
* [[`ae5b150051`](https://github.com/nodejs/node-gyp/commit/ae5b150051)] - **doc**: Catalina suggestion: remove /Library/Developer/CommandLineTools (Christian Clauss) [#2022](https://github.com/nodejs/node-gyp/pull/2022)
* [[`d1dea13fe4`](https://github.com/nodejs/node-gyp/commit/d1dea13fe4)] - **doc**: fix changelog 6.1.0 release year to be 2020 (Quentin Vernot) [#2021](https://github.com/nodejs/node-gyp/pull/2021)
* [[`6356117b08`](https://github.com/nodejs/node-gyp/commit/6356117b08)] - **doc, bin**: stop suggesting opening  node-gyp issues (Bartosz Sosnowski) [#2096](https://github.com/nodejs/node-gyp/pull/2096)
* [[`a6b76a8b48`](https://github.com/nodejs/node-gyp/commit/a6b76a8b48)] - **gyp**: update gyp to 0.2.1 (Ujjwal Sharma) [#2092](https://github.com/nodejs/node-gyp/pull/2092)
* [[`ebc34ec823`](https://github.com/nodejs/node-gyp/commit/ebc34ec823)] - **gyp**: update gyp to 0.2.0 (Ujjwal Sharma) [#2092](https://github.com/nodejs/node-gyp/pull/2092)
* [[`972780bde7`](https://github.com/nodejs/node-gyp/commit/972780bde7)] - **(SEMVER-MAJOR)** **gyp**: sync code base with nodejs repo (#1975) (Michaël Zasso) [#1975](https://github.com/nodejs/node-gyp/pull/1975)
* [[`c255ffbf6a`](https://github.com/nodejs/node-gyp/commit/c255ffbf6a)] - **lib**: drop "-2" flag for "py.exe" launcher (DeeDeeG) [#2131](https://github.com/nodejs/node-gyp/pull/2131)
* [[`1f7e1e93b5`](https://github.com/nodejs/node-gyp/commit/1f7e1e93b5)] - **lib**: ignore VS instances that cause COMExceptions (Andrew Casey) [#2018](https://github.com/nodejs/node-gyp/pull/2018)
* [[`741ab096d5`](https://github.com/nodejs/node-gyp/commit/741ab096d5)] - **test**: remove support for EOL versions of Node.js (Shelley Vohr)
* [[`ca86ef2539`](https://github.com/nodejs/node-gyp/commit/ca86ef2539)] - **test**: bump actions/checkout from v1 to v2 (BSKY) [#2063](https://github.com/nodejs/node-gyp/pull/2063)

## v6.1.0 2020-01-08

* [[`9a7dd16b76`](https://github.com/nodejs/node-gyp/commit/9a7dd16b76)] - **doc**: remove backticks from Python version list (Rod Vagg) [#2011](https://github.com/nodejs/node-gyp/pull/2011)
* [[`26cd6eaea6`](https://github.com/nodejs/node-gyp/commit/26cd6eaea6)] - **doc**: add GitHub Actions badge (#1994) (Rod Vagg) [#1994](https://github.com/nodejs/node-gyp/pull/1994)
* [[`312c12ef4f`](https://github.com/nodejs/node-gyp/commit/312c12ef4f)] - **doc**: update macOS\_Catalina.md (#1992) (James Home) [#1992](https://github.com/nodejs/node-gyp/pull/1992)
* [[`f7b6b6b77b`](https://github.com/nodejs/node-gyp/commit/f7b6b6b77b)] - **doc**: fix typo in README.md (#1985) (Suraneti Rodsuwan) [#1985](https://github.com/nodejs/node-gyp/pull/1985)
* [[`6b8f2652dd`](https://github.com/nodejs/node-gyp/commit/6b8f2652dd)] - **doc**: add travis badge (Rod Vagg) [#1971](https://github.com/nodejs/node-gyp/pull/1971)
* [[`20aa0b44f7`](https://github.com/nodejs/node-gyp/commit/20aa0b44f7)] - **doc**: macOS Catalina add two commands (Christian Clauss) [#1962](https://github.com/nodejs/node-gyp/pull/1962)
* [[`14f2a07a39`](https://github.com/nodejs/node-gyp/commit/14f2a07a39)] - **gyp**: list(dict) so we can del dict(key) while iterating (Christian Clauss) [#2009](https://github.com/nodejs/node-gyp/pull/2009)
* [[`f242ce4d2c`](https://github.com/nodejs/node-gyp/commit/f242ce4d2c)] - **lib**: compatibility with semver ≥ 7 (`new` for semver.Range) (Xavier Guimard) [#2006](https://github.com/nodejs/node-gyp/pull/2006)
* [[`3bcba2a01a`](https://github.com/nodejs/node-gyp/commit/3bcba2a01a)] - **(SEMVER-MINOR)** **lib**: noproxy support, match proxy detection to `request` (Matias Lopez) [#1978](https://github.com/nodejs/node-gyp/pull/1978)
* [[`470cc2178e`](https://github.com/nodejs/node-gyp/commit/470cc2178e)] - **test**: remove old docker test harness (#1993) (Rod Vagg) [#1993](https://github.com/nodejs/node-gyp/pull/1993)
* [[`31ecc8421d`](https://github.com/nodejs/node-gyp/commit/31ecc8421d)] - **test**: add Windows to GitHub Actions testing (#1996) (Christian Clauss) [#1996](https://github.com/nodejs/node-gyp/pull/1996)
* [[`5a729e86ee`](https://github.com/nodejs/node-gyp/commit/5a729e86ee)] - **test**: fix typo in header download test (#2001) (Richard Lau) [#2001](https://github.com/nodejs/node-gyp/pull/2001)
* [[`345c70e56d`](https://github.com/nodejs/node-gyp/commit/345c70e56d)] - **test**: direct python invocation & simpler pyenv (Matias Lopez) [#1979](https://github.com/nodejs/node-gyp/pull/1979)
* [[`d6a7e0e1fb`](https://github.com/nodejs/node-gyp/commit/d6a7e0e1fb)] - **test**: fix macOS Travis on Python 2.7 & 3.7 (Christian Clauss) [#1979](https://github.com/nodejs/node-gyp/pull/1979)
* [[`5a64e9bd32`](https://github.com/nodejs/node-gyp/commit/5a64e9bd32)] - **test**: initial Github Actions with Ubuntu & macOS (Christian Clauss) [#1985](https://github.com/nodejs/node-gyp/pull/1985)
* [[`04da736d38`](https://github.com/nodejs/node-gyp/commit/04da736d38)] - **test**: fix Python unittests (cclauss) [#1961](https://github.com/nodejs/node-gyp/pull/1961)
* [[`0670e5189d`](https://github.com/nodejs/node-gyp/commit/0670e5189d)] - **test**: add header download test (Rod Vagg) [#1796](https://github.com/nodejs/node-gyp/pull/1796)
* [[`c506a6a150`](https://github.com/nodejs/node-gyp/commit/c506a6a150)] - **test**: configure proper devDir for invoking configure() (Rod Vagg) [#1796](https://github.com/nodejs/node-gyp/pull/1796)

## v6.0.1 2019-11-01

* [[`8ec2e681d5`](https://github.com/nodejs/node-gyp/commit/8ec2e681d5)] - **doc**: add macOS\_Catalina.md document (cclauss) [#1940](https://github.com/nodejs/node-gyp/pull/1940)
* [[`1b11be63cc`](https://github.com/nodejs/node-gyp/commit/1b11be63cc)] - **gyp**: python3 fixes: utf8 decode, use of 'None' in eval (Wilfried Goesgens) [#1925](https://github.com/nodejs/node-gyp/pull/1925)
* [[`c0282daa48`](https://github.com/nodejs/node-gyp/commit/c0282daa48)] - **gyp**: iteritems() -\> items() in compile\_commands\_json.py (cclauss) [#1947](https://github.com/nodejs/node-gyp/pull/1947)
* [[`d8e09a1b6a`](https://github.com/nodejs/node-gyp/commit/d8e09a1b6a)] - **gyp**: make cmake python3 compatible (gengjiawen) [#1944](https://github.com/nodejs/node-gyp/pull/1944)
* [[`9c0f3404f0`](https://github.com/nodejs/node-gyp/commit/9c0f3404f0)] - **gyp**: fix TypeError in XcodeVersion() (Christian Clauss) [#1939](https://github.com/nodejs/node-gyp/pull/1939)
* [[`bb2eb72a3f`](https://github.com/nodejs/node-gyp/commit/bb2eb72a3f)] - **gyp**: finish decode stdout on Python 3 (Christian Clauss) [#1937](https://github.com/nodejs/node-gyp/pull/1937)
* [[`f0693413d9`](https://github.com/nodejs/node-gyp/commit/f0693413d9)] - **src,win**: allow 403 errors for arm64 node.lib (Richard Lau) [#1934](https://github.com/nodejs/node-gyp/pull/1934)
* [[`c60c22de58`](https://github.com/nodejs/node-gyp/commit/c60c22de58)] - **deps**: update deps to roughly match current npm@6 (Rod Vagg) [#1920](https://github.com/nodejs/node-gyp/pull/1920)
* [[`b91718eefc`](https://github.com/nodejs/node-gyp/commit/b91718eefc)] - **test**: upgrade Linux Travis CI to Python 3.8 (Christian Clauss) [#1923](https://github.com/nodejs/node-gyp/pull/1923)
* [[`3538a317b6`](https://github.com/nodejs/node-gyp/commit/3538a317b6)] - **doc**: adjustments to the README.md for new users (Dan Pike) [#1919](https://github.com/nodejs/node-gyp/pull/1919)
* [[`4fff8458c0`](https://github.com/nodejs/node-gyp/commit/4fff8458c0)] - **travis**: ignore failed `brew upgrade npm`, update xcode (Christian Clauss) [#1932](https://github.com/nodejs/node-gyp/pull/1932)
* [[`60e4488f08`](https://github.com/nodejs/node-gyp/commit/60e4488f08)] - **build**: avoid bare exceptions in xcode\_emulation.py (Christian Clauss) [#1932](https://github.com/nodejs/node-gyp/pull/1932)
* [[`032db2a2d0`](https://github.com/nodejs/node-gyp/commit/032db2a2d0)] - **lib,install**: always download SHA sums on Windows (Sam Hughes) [#1926](https://github.com/nodejs/node-gyp/pull/1926)
* [[`5a83630c33`](https://github.com/nodejs/node-gyp/commit/5a83630c33)] - **travis**: add Windows + Python 3.8 to the mix (Rod Vagg) [#1921](https://github.com/nodejs/node-gyp/pull/1921)

## v6.0.0 2019-10-04

* [[`dd0e97ef0b`](https://github.com/nodejs/node-gyp/commit/dd0e97ef0b)] - **(SEMVER-MAJOR)** **lib**: try to find `python` after `python3` (Sam Roberts) [#1907](https://github.com/nodejs/node-gyp/pull/1907)
* [[`f60ed47d14`](https://github.com/nodejs/node-gyp/commit/f60ed47d14)] - **travis**: add Python 3.5 and 3.6 tests on Linux (Christian Clauss) [#1903](https://github.com/nodejs/node-gyp/pull/1903)
* [[`c763ca1838`](https://github.com/nodejs/node-gyp/commit/c763ca1838)] - **(SEMVER-MAJOR)** **doc**: Declare that node-gyp is Python 3 compatible (cclauss) [#1811](https://github.com/nodejs/node-gyp/pull/1811)
* [[`3d1c60ab81`](https://github.com/nodejs/node-gyp/commit/3d1c60ab81)] - **(SEMVER-MAJOR)** **lib**: accept Python 3 by default (João Reis) [#1844](https://github.com/nodejs/node-gyp/pull/1844)
* [[`c6e3b65a23`](https://github.com/nodejs/node-gyp/commit/c6e3b65a23)] - **(SEMVER-MAJOR)** **lib**: raise the minimum Python version from 2.6 to 2.7 (cclauss) [#1818](https://github.com/nodejs/node-gyp/pull/1818)

## v5.1.1 2020-05-25

* [[`bdd3a79abe`](https://github.com/nodejs/node-gyp/commit/bdd3a79abe)] - **build**: shrink bloated addon binaries on windows (Shelley Vohr) [#2060](https://github.com/nodejs/node-gyp/pull/2060)
* [[`1f2ba75bc0`](https://github.com/nodejs/node-gyp/commit/1f2ba75bc0)] - **doc**: add macOS Catalina software update info (Karl Horky) [#2078](https://github.com/nodejs/node-gyp/pull/2078)
* [[`c106d915f5`](https://github.com/nodejs/node-gyp/commit/c106d915f5)] - **doc**: update catalina xcode cli tools download link (#2044) (Dario Vladović) [#2044](https://github.com/nodejs/node-gyp/pull/2044)
* [[`9a6fea92e2`](https://github.com/nodejs/node-gyp/commit/9a6fea92e2)] - **doc**: update catalina xcode cli tools download link; formatting (Jonathan Hult) [#2034](https://github.com/nodejs/node-gyp/pull/2034)
* [[`59b0b1add8`](https://github.com/nodejs/node-gyp/commit/59b0b1add8)] - **doc**: add download link for Command Line Tools for Xcode (Przemysław Bitkowski) [#2029](https://github.com/nodejs/node-gyp/pull/2029)
* [[`bb8d0e7b10`](https://github.com/nodejs/node-gyp/commit/bb8d0e7b10)] - **doc**: Catalina suggestion: remove /Library/Developer/CommandLineTools (Christian Clauss) [#2022](https://github.com/nodejs/node-gyp/pull/2022)
* [[`fb2e80d4e3`](https://github.com/nodejs/node-gyp/commit/fb2e80d4e3)] - **doc**: update link to the code of conduct (#2073) (Michaël Zasso) [#2073](https://github.com/nodejs/node-gyp/pull/2073)
* [[`251d9c885c`](https://github.com/nodejs/node-gyp/commit/251d9c885c)] - **doc**: note in README that Python 3.8 is supported (#2072) (Michaël Zasso) [#2072](https://github.com/nodejs/node-gyp/pull/2072)
* [[`2b6fc3c8d6`](https://github.com/nodejs/node-gyp/commit/2b6fc3c8d6)] - **doc, bin**: stop suggesting opening  node-gyp issues (Bartosz Sosnowski) [#2096](https://github.com/nodejs/node-gyp/pull/2096)
* [[`a876ae58ad`](https://github.com/nodejs/node-gyp/commit/a876ae58ad)] - **test**: bump actions/checkout from v1 to v2 (BSKY) [#2063](https://github.com/nodejs/node-gyp/pull/2063)

## v5.1.0 2020-02-05

* [[`f37a8b40d0`](https://github.com/nodejs/node-gyp/commit/f37a8b40d0)] - **doc**: add GitHub Actions badge (#1994) (Rod Vagg) [#1994](https://github.com/nodejs/node-gyp/pull/1994)
* [[`cb3f6aae5e`](https://github.com/nodejs/node-gyp/commit/cb3f6aae5e)] - **doc**: update macOS\_Catalina.md (#1992) (James Home) [#1992](https://github.com/nodejs/node-gyp/pull/1992)
* [[`0607596a4c`](https://github.com/nodejs/node-gyp/commit/0607596a4c)] - **doc**: fix typo in README.md (#1985) (Suraneti Rodsuwan) [#1985](https://github.com/nodejs/node-gyp/pull/1985)
* [[`0d5a415a14`](https://github.com/nodejs/node-gyp/commit/0d5a415a14)] - **doc**: add travis badge (Rod Vagg) [#1971](https://github.com/nodejs/node-gyp/pull/1971)
* [[`103740cd95`](https://github.com/nodejs/node-gyp/commit/103740cd95)] - **gyp**: list(dict) so we can del dict(key) while iterating (Christian Clauss) [#2009](https://github.com/nodejs/node-gyp/pull/2009)
* [[`278dcddbdd`](https://github.com/nodejs/node-gyp/commit/278dcddbdd)] - **lib**: ignore VS instances that cause COMExceptions (Andrew Casey) [#2018](https://github.com/nodejs/node-gyp/pull/2018)
* [[`1694907bbf`](https://github.com/nodejs/node-gyp/commit/1694907bbf)] - **lib**: compatibility with semver ≥ 7 (`new` for semver.Range) (Xavier Guimard) [#2006](https://github.com/nodejs/node-gyp/pull/2006)
* [[`a3f1143514`](https://github.com/nodejs/node-gyp/commit/a3f1143514)] - **(SEMVER-MINOR)** **lib**: noproxy support, match proxy detection to `request` (Matias Lopez) [#1978](https://github.com/nodejs/node-gyp/pull/1978)
* [[`52365819c7`](https://github.com/nodejs/node-gyp/commit/52365819c7)] - **test**: remove old docker test harness (#1993) (Rod Vagg) [#1993](https://github.com/nodejs/node-gyp/pull/1993)
* [[`bc509c511d`](https://github.com/nodejs/node-gyp/commit/bc509c511d)] - **test**: add Windows to GitHub Actions testing (#1996) (Christian Clauss) [#1996](https://github.com/nodejs/node-gyp/pull/1996)
* [[`91ee26dd48`](https://github.com/nodejs/node-gyp/commit/91ee26dd48)] - **test**: fix typo in header download test (#2001) (Richard Lau) [#2001](https://github.com/nodejs/node-gyp/pull/2001)
* [[`0923f344c9`](https://github.com/nodejs/node-gyp/commit/0923f344c9)] - **test**: direct python invocation & simpler pyenv (Matias Lopez) [#1979](https://github.com/nodejs/node-gyp/pull/1979)
* [[`32c8744b34`](https://github.com/nodejs/node-gyp/commit/32c8744b34)] - **test**: fix macOS Travis on Python 2.7 & 3.7 (Christian Clauss) [#1979](https://github.com/nodejs/node-gyp/pull/1979)
* [[`fd4b1351e4`](https://github.com/nodejs/node-gyp/commit/fd4b1351e4)] - **test**: initial Github Actions with Ubuntu & macOS (Christian Clauss) [#1985](https://github.com/nodejs/node-gyp/pull/1985)

## v5.0.7 2019-12-16

Republish of v5.0.6 with unnecessary tarball removed from pack file.

## v5.0.6 2019-12-16

* [[`cdec00286f`](https://github.com/nodejs/node-gyp/commit/cdec00286f)] - **doc**: adjustments to the README.md for new users (Dan Pike) [#1919](https://github.com/nodejs/node-gyp/pull/1919)
* [[`b7c8233ef2`](https://github.com/nodejs/node-gyp/commit/b7c8233ef2)] - **test**: fix Python unittests (cclauss) [#1961](https://github.com/nodejs/node-gyp/pull/1961)
* [[`e12b00ab0a`](https://github.com/nodejs/node-gyp/commit/e12b00ab0a)] - **doc**: macOS Catalina add two commands (Christian Clauss) [#1962](https://github.com/nodejs/node-gyp/pull/1962)
* [[`70b9890c0d`](https://github.com/nodejs/node-gyp/commit/70b9890c0d)] - **test**: add header download test (Rod Vagg) [#1796](https://github.com/nodejs/node-gyp/pull/1796)
* [[`4029fa8629`](https://github.com/nodejs/node-gyp/commit/4029fa8629)] - **test**: configure proper devDir for invoking configure() (Rod Vagg) [#1796](https://github.com/nodejs/node-gyp/pull/1796)
* [[`fe8b02cc8b`](https://github.com/nodejs/node-gyp/commit/fe8b02cc8b)] - **doc**: add macOS\_Catalina.md document (cclauss) [#1940](https://github.com/nodejs/node-gyp/pull/1940)
* [[`8ea47ce365`](https://github.com/nodejs/node-gyp/commit/8ea47ce365)] - **gyp**: python3 fixes: utf8 decode, use of 'None' in eval (Wilfried Goesgens) [#1925](https://github.com/nodejs/node-gyp/pull/1925)
* [[`c7229716ba`](https://github.com/nodejs/node-gyp/commit/c7229716ba)] - **gyp**: iteritems() -\> items() in compile\_commands\_json.py (cclauss) [#1947](https://github.com/nodejs/node-gyp/pull/1947)
* [[`2a18b2a0f8`](https://github.com/nodejs/node-gyp/commit/2a18b2a0f8)] - **gyp**: make cmake python3 compatible (gengjiawen) [#1944](https://github.com/nodejs/node-gyp/pull/1944)
* [[`70f391e844`](https://github.com/nodejs/node-gyp/commit/70f391e844)] - **gyp**: fix TypeError in XcodeVersion() (Christian Clauss) [#1939](https://github.com/nodejs/node-gyp/pull/1939)
* [[`9f4f0fa34e`](https://github.com/nodejs/node-gyp/commit/9f4f0fa34e)] - **gyp**: finish decode stdout on Python 3 (Christian Clauss) [#1937](https://github.com/nodejs/node-gyp/pull/1937)
* [[`7cf507906d`](https://github.com/nodejs/node-gyp/commit/7cf507906d)] - **src,win**: allow 403 errors for arm64 node.lib (Richard Lau) [#1934](https://github.com/nodejs/node-gyp/pull/1934)
* [[`ad0d182c01`](https://github.com/nodejs/node-gyp/commit/ad0d182c01)] - **deps**: update deps to roughly match current npm@6 (Rod Vagg) [#1920](https://github.com/nodejs/node-gyp/pull/1920)
* [[`1553081ed6`](https://github.com/nodejs/node-gyp/commit/1553081ed6)] - **test**: upgrade Linux Travis CI to Python 3.8 (Christian Clauss) [#1923](https://github.com/nodejs/node-gyp/pull/1923)
* [[`0705cae9aa`](https://github.com/nodejs/node-gyp/commit/0705cae9aa)] - **travis**: ignore failed `brew upgrade npm`, update xcode (Christian Clauss) [#1932](https://github.com/nodejs/node-gyp/pull/1932)
* [[`7bfdb6f5bf`](https://github.com/nodejs/node-gyp/commit/7bfdb6f5bf)] - **build**: avoid bare exceptions in xcode\_emulation.py (Christian Clauss) [#1932](https://github.com/nodejs/node-gyp/pull/1932)
* [[`7edf7658fa`](https://github.com/nodejs/node-gyp/commit/7edf7658fa)] - **lib,install**: always download SHA sums on Windows (Sam Hughes) [#1926](https://github.com/nodejs/node-gyp/pull/1926)
* [[`69056d04fe`](https://github.com/nodejs/node-gyp/commit/69056d04fe)] - **travis**: add Windows + Python 3.8 to the mix (Rod Vagg) [#1921](https://github.com/nodejs/node-gyp/pull/1921)

## v5.0.5 2019-10-04

* [[`3891391746`](https://github.com/nodejs/node-gyp/commit/3891391746)] - **doc**: reconcile README with Python 3 compat changes (Rod Vagg) [#1911](https://github.com/nodejs/node-gyp/pull/1911)
* [[`07f81f1920`](https://github.com/nodejs/node-gyp/commit/07f81f1920)] - **lib**: accept Python 3 after Python 2 (Sam Roberts) [#1910](https://github.com/nodejs/node-gyp/pull/1910)
* [[`04ce59f4a2`](https://github.com/nodejs/node-gyp/commit/04ce59f4a2)] - **doc**: clarify Python configuration, etc (Sam Roberts) [#1908](https://github.com/nodejs/node-gyp/pull/1908)
* [[`01c46ee3df`](https://github.com/nodejs/node-gyp/commit/01c46ee3df)] - **gyp**: add \_\_lt\_\_ to MSVSSolutionEntry (João Reis) [#1904](https://github.com/nodejs/node-gyp/pull/1904)
* [[`735d961b99`](https://github.com/nodejs/node-gyp/commit/735d961b99)] - **win**: support VS 2017 Desktop Express (João Reis) [#1902](https://github.com/nodejs/node-gyp/pull/1902)
* [[`3834156a92`](https://github.com/nodejs/node-gyp/commit/3834156a92)] - **test**: add Python 3.5 and 3.6 tests on Linux (cclauss) [#1909](https://github.com/nodejs/node-gyp/pull/1909)
* [[`1196e990d8`](https://github.com/nodejs/node-gyp/commit/1196e990d8)] - **src**: update to standard@14 (Rod Vagg) [#1899](https://github.com/nodejs/node-gyp/pull/1899)
* [[`53ee7dfe89`](https://github.com/nodejs/node-gyp/commit/53ee7dfe89)] - **gyp**: fix undefined name: cflags --\> ldflags (Christian Clauss) [#1901](https://github.com/nodejs/node-gyp/pull/1901)
* [[`5871dcf6c9`](https://github.com/nodejs/node-gyp/commit/5871dcf6c9)] - **src,win**: add support for fetching arm64 node.lib (Richard Townsend) [#1875](https://github.com/nodejs/node-gyp/pull/1875)

## v5.0.4 2019-09-27

* [[`1236869ffc`](https://github.com/nodejs/node-gyp/commit/1236869ffc)] - **gyp**: modify XcodeVersion() to convert "4.2" to "0420" and "10.0" to "1000" (Christian Clauss) [#1895](https://github.com/nodejs/node-gyp/pull/1895)
* [[`36638afe48`](https://github.com/nodejs/node-gyp/commit/36638afe48)] - **gyp**: more decode stdout on Python 3 (cclauss) [#1894](https://github.com/nodejs/node-gyp/pull/1894)
* [[`f753c167c5`](https://github.com/nodejs/node-gyp/commit/f753c167c5)] - **gyp**: decode stdout on Python 3 (cclauss) [#1890](https://github.com/nodejs/node-gyp/pull/1890)
* [[`60a4083523`](https://github.com/nodejs/node-gyp/commit/60a4083523)] - **doc**: update xcode install instructions to match Node's BUILDING (Nhan Khong) [#1884](https://github.com/nodejs/node-gyp/pull/1884)
* [[`19dbc9ac32`](https://github.com/nodejs/node-gyp/commit/19dbc9ac32)] - **deps**: update tar to 4.4.12 (Matheus Marchini) [#1889](https://github.com/nodejs/node-gyp/pull/1889)
* [[`5f3ed92181`](https://github.com/nodejs/node-gyp/commit/5f3ed92181)] - **bin**: fix the usage instructions (Halit Ogunc) [#1888](https://github.com/nodejs/node-gyp/pull/1888)
* [[`aab118edf1`](https://github.com/nodejs/node-gyp/commit/aab118edf1)] - **lib**: adding keep-alive header to download requests (Milad Farazmand) [#1863](https://github.com/nodejs/node-gyp/pull/1863)
* [[`1186e89326`](https://github.com/nodejs/node-gyp/commit/1186e89326)] - **lib**: ignore non-critical os.userInfo() failures (Rod Vagg) [#1835](https://github.com/nodejs/node-gyp/pull/1835)
* [[`785e527c3d`](https://github.com/nodejs/node-gyp/commit/785e527c3d)] - **doc**: fix missing argument for setting python path (lagorsse) [#1802](https://github.com/nodejs/node-gyp/pull/1802)
* [[`a97615196c`](https://github.com/nodejs/node-gyp/commit/a97615196c)] - **gyp**: rm semicolons (Python != JavaScript) (MattIPv4) [#1858](https://github.com/nodejs/node-gyp/pull/1858)
* [[`06019bac24`](https://github.com/nodejs/node-gyp/commit/06019bac24)] - **gyp**: assorted typo fixes (XhmikosR) [#1853](https://github.com/nodejs/node-gyp/pull/1853)
* [[`3f4972c1ca`](https://github.com/nodejs/node-gyp/commit/3f4972c1ca)] - **gyp**: use "is" when comparing to None (Vladyslav Burzakovskyy) [#1860](https://github.com/nodejs/node-gyp/pull/1860)
* [[`1cb4708073`](https://github.com/nodejs/node-gyp/commit/1cb4708073)] - **src,win**: improve unmanaged handling (Peter Sabath) [#1852](https://github.com/nodejs/node-gyp/pull/1852)
* [[`5553cd910e`](https://github.com/nodejs/node-gyp/commit/5553cd910e)] - **gyp**: improve Windows+Cygwin compatibility (Jose Quijada) [#1817](https://github.com/nodejs/node-gyp/pull/1817)
* [[`8bcb1fbb43`](https://github.com/nodejs/node-gyp/commit/8bcb1fbb43)] - **gyp**: Python 3 Windows fixes (João Reis) [#1843](https://github.com/nodejs/node-gyp/pull/1843)
* [[`2e24d0a326`](https://github.com/nodejs/node-gyp/commit/2e24d0a326)] - **test**: accept Python 3 in test-find-python.js (João Reis) [#1843](https://github.com/nodejs/node-gyp/pull/1843)
* [[`1267b4dc1c`](https://github.com/nodejs/node-gyp/commit/1267b4dc1c)] - **build**: add test run Python 3.7 on macOS (Christian Clauss) [#1843](https://github.com/nodejs/node-gyp/pull/1843)
* [[`da1b031aa3`](https://github.com/nodejs/node-gyp/commit/da1b031aa3)] - **build**: import StringIO on Python 2 and Python 3 (Christian Clauss) [#1836](https://github.com/nodejs/node-gyp/pull/1836)
* [[`fa0ed4aa42`](https://github.com/nodejs/node-gyp/commit/fa0ed4aa42)] - **build**: more Python 3 compat, replace compile with ast (cclauss) [#1820](https://github.com/nodejs/node-gyp/pull/1820)
* [[`18d5c7c9d0`](https://github.com/nodejs/node-gyp/commit/18d5c7c9d0)] - **win,src**: update win\_delay\_load\_hook.cc to work with /clr (Ivan Petrovic) [#1819](https://github.com/nodejs/node-gyp/pull/1819)

## v5.0.3 2019-07-17

* [[`66ad305775`](https://github.com/nodejs/node-gyp/commit/66ad305775)] - **python**: accept Python 3 conditionally (João Reis) [#1815](https://github.com/nodejs/node-gyp/pull/1815)
* [[`7e7fce3fed`](https://github.com/nodejs/node-gyp/commit/7e7fce3fed)] - **python**: move Python detection to its own file (João Reis) [#1815](https://github.com/nodejs/node-gyp/pull/1815)
* [[`e40c99e283`](https://github.com/nodejs/node-gyp/commit/e40c99e283)] - **src**: implement standard.js linting (Rod Vagg) [#1794](https://github.com/nodejs/node-gyp/pull/1794)
* [[`bb92c761a9`](https://github.com/nodejs/node-gyp/commit/bb92c761a9)] - **test**: add Node.js 6 on Windows to Travis CI (João Reis) [#1812](https://github.com/nodejs/node-gyp/pull/1812)
* [[`7fd924079f`](https://github.com/nodejs/node-gyp/commit/7fd924079f)] - **test**: increase tap timeout (João Reis) [#1812](https://github.com/nodejs/node-gyp/pull/1812)
* [[`7e8127068f`](https://github.com/nodejs/node-gyp/commit/7e8127068f)] - **test**: cover supported node versions with travis (Rod Vagg) [#1809](https://github.com/nodejs/node-gyp/pull/1809)
* [[`24109148df`](https://github.com/nodejs/node-gyp/commit/24109148df)] - **test**: downgrade to tap@^12 for continued Node 6 support (Rod Vagg) [#1808](https://github.com/nodejs/node-gyp/pull/1808)
* [[`656117cc4a`](https://github.com/nodejs/node-gyp/commit/656117cc4a)] - **win**: make VS path match case-insensitive (João Reis) [#1806](https://github.com/nodejs/node-gyp/pull/1806)

## v5.0.2 2019-06-27

* [[`2761afbf73`](https://github.com/nodejs/node-gyp/commit/2761afbf73)] - **build,test**: add duplicate symbol test (Gabriel Schulhof) [#1689](https://github.com/nodejs/node-gyp/pull/1689)
* [[`82f129d6de`](https://github.com/nodejs/node-gyp/commit/82f129d6de)] - **gyp**: replace optparse to argparse (KiYugadgeter) [#1591](https://github.com/nodejs/node-gyp/pull/1591)
* [[`afaaa29c61`](https://github.com/nodejs/node-gyp/commit/afaaa29c61)] - **gyp**: remove from \_\_future\_\_ import with\_statement (cclauss) [#1799](https://github.com/nodejs/node-gyp/pull/1799)
* [[`a991f633d6`](https://github.com/nodejs/node-gyp/commit/a991f633d6)] - **gyp**: fix the remaining Python 3 issues (cclauss) [#1793](https://github.com/nodejs/node-gyp/pull/1793)
* [[`f952b08f84`](https://github.com/nodejs/node-gyp/commit/f952b08f84)] - **gyp**: move from \_\_future\_\_ import to the top of the file (cclauss) [#1789](https://github.com/nodejs/node-gyp/pull/1789)
* [[`4f4a677dfa`](https://github.com/nodejs/node-gyp/commit/4f4a677dfa)] - **gyp**: use different default compiler for z/OS (Shuowang (Wayne) Zhang) [#1768](https://github.com/nodejs/node-gyp/pull/1768)
* [[`03683f09d6`](https://github.com/nodejs/node-gyp/commit/03683f09d6)] - **lib**: code de-duplication (Pavel Medvedev) [#965](https://github.com/nodejs/node-gyp/pull/965)
* [[`611bc3c89f`](https://github.com/nodejs/node-gyp/commit/611bc3c89f)] - **lib**: add .json suffix for explicit require (Rod Vagg) [#1787](https://github.com/nodejs/node-gyp/pull/1787)
* [[`d3478d7b0b`](https://github.com/nodejs/node-gyp/commit/d3478d7b0b)] - **meta**: add to .gitignore (Refael Ackermann) [#1573](https://github.com/nodejs/node-gyp/pull/1573)
* [[`7a9a038e9e`](https://github.com/nodejs/node-gyp/commit/7a9a038e9e)] - **test**: add parallel test runs on macOS and Windows (cclauss) [#1800](https://github.com/nodejs/node-gyp/pull/1800)
* [[`7dd7f2b2a2`](https://github.com/nodejs/node-gyp/commit/7dd7f2b2a2)] - **test**: fix Python syntax error in test-adding.js (cclauss) [#1793](https://github.com/nodejs/node-gyp/pull/1793)
* [[`395f843de0`](https://github.com/nodejs/node-gyp/commit/395f843de0)] - **test**: replace self-signed cert with 'localhost' (Rod Vagg) [#1795](https://github.com/nodejs/node-gyp/pull/1795)
* [[`a52c6eb9e8`](https://github.com/nodejs/node-gyp/commit/a52c6eb9e8)] - **test**: migrate from tape to tap (Rod Vagg) [#1795](https://github.com/nodejs/node-gyp/pull/1795)
* [[`ec2eb44a30`](https://github.com/nodejs/node-gyp/commit/ec2eb44a30)] - **test**: use Nan in duplicate\_symbols (Gabriel Schulhof) [#1689](https://github.com/nodejs/node-gyp/pull/1689)
* [[`1597c84aad`](https://github.com/nodejs/node-gyp/commit/1597c84aad)] - **test**: use Travis CI to run tests on every pull request (cclauss) [#1752](https://github.com/nodejs/node-gyp/pull/1752)
* [[`dd9bf929ac`](https://github.com/nodejs/node-gyp/commit/dd9bf929ac)] - **zos**: update compiler options (Shuowang (Wayne) Zhang) [#1768](https://github.com/nodejs/node-gyp/pull/1768)

## v5.0.1 2019-06-20

* [[`e3861722ed`](https://github.com/nodejs/node-gyp/commit/e3861722ed)] - **doc**: document --jobs max (David Sanders) [#1770](https://github.com/nodejs/node-gyp/pull/1770)
* [[`1cfdb28886`](https://github.com/nodejs/node-gyp/commit/1cfdb28886)] - **lib**: reintroduce support for iojs file naming for releases \>= 1 && \< 4 (Samuel Attard) [#1777](https://github.com/nodejs/node-gyp/pull/1777)

## v5.0.0 2019-06-13

* [[`8a83972743`](https://github.com/nodejs/node-gyp/commit/8a83972743)] - **(SEMVER-MAJOR)** **bin**: follow XDG OS conventions for storing data (Selwyn) [#1570](https://github.com/nodejs/node-gyp/pull/1570)
* [[`9e46872ea3`](https://github.com/nodejs/node-gyp/commit/9e46872ea3)] - **bin,lib**: remove extra comments/lines/spaces (Jon Moss) [#1508](https://github.com/nodejs/node-gyp/pull/1508)
* [[`8098ebdeb4`](https://github.com/nodejs/node-gyp/commit/8098ebdeb4)] - **deps**: replace `osenv` dependency with native `os` (Selwyn)
* [[`f83b457e03`](https://github.com/nodejs/node-gyp/commit/f83b457e03)] - **deps**: bump request to 2.8.7, fixes heok/hawk issues (Rohit Hazra) [#1492](https://github.com/nodejs/node-gyp/pull/1492)
* [[`323cee7323`](https://github.com/nodejs/node-gyp/commit/323cee7323)] - **deps**: pin `request` version range (Refael Ackermann) [#1300](https://github.com/nodejs/node-gyp/pull/1300)
* [[`c515912d08`](https://github.com/nodejs/node-gyp/commit/c515912d08)] - **doc**: improve issue template (Bartosz Sosnowski) [#1618](https://github.com/nodejs/node-gyp/pull/1618)
* [[`cca2d66727`](https://github.com/nodejs/node-gyp/commit/cca2d66727)] - **doc**: python info needs own header (Taylor D. Lee) [#1245](https://github.com/nodejs/node-gyp/pull/1245)
* [[`3e64c780f5`](https://github.com/nodejs/node-gyp/commit/3e64c780f5)] - **doc**: lint README.md (Jon Moss) [#1498](https://github.com/nodejs/node-gyp/pull/1498)
* [[`a20faedc91`](https://github.com/nodejs/node-gyp/commit/a20faedc91)] - **(SEMVER-MAJOR)** **gyp**: enable MARMASM items only on new VS versions (João Reis) [#1762](https://github.com/nodejs/node-gyp/pull/1762)
* [[`721eb691cf`](https://github.com/nodejs/node-gyp/commit/721eb691cf)] - **gyp**: teach MSVS generator about MARMASM Items (Jon Kunkee) [#1679](https://github.com/nodejs/node-gyp/pull/1679)
* [[`91744bfecc`](https://github.com/nodejs/node-gyp/commit/91744bfecc)] - **gyp**: add support for Windows on Arm (Richard Townsend) [#1739](https://github.com/nodejs/node-gyp/pull/1739)
* [[`a6e0a6c7ed`](https://github.com/nodejs/node-gyp/commit/a6e0a6c7ed)] - **gyp**: move compile\_commands\_json (Paul Maréchal) [#1661](https://github.com/nodejs/node-gyp/pull/1661)
* [[`92e8b52cee`](https://github.com/nodejs/node-gyp/commit/92e8b52cee)] - **gyp**: fix target --\> self.target (cclauss)
* [[`febdfa2137`](https://github.com/nodejs/node-gyp/commit/febdfa2137)] - **gyp**: fix sntex error (cclauss) [#1333](https://github.com/nodejs/node-gyp/pull/1333)
* [[`588d333c14`](https://github.com/nodejs/node-gyp/commit/588d333c14)] - **gyp**: \_winreg module was renamed to winreg in Python 3. (Craig Rodrigues)
* [[`98226d198c`](https://github.com/nodejs/node-gyp/commit/98226d198c)] - **gyp**: replace basestring with str, but only on Python 3. (Craig Rodrigues)
* [[`7535e4478e`](https://github.com/nodejs/node-gyp/commit/7535e4478e)] - **gyp**: replace deprecated functions (Craig Rodrigues)
* [[`2040cd21cc`](https://github.com/nodejs/node-gyp/commit/2040cd21cc)] - **gyp**: use print as a function, as specified in PEP 3105. (Craig Rodrigues)
* [[`abef93ded5`](https://github.com/nodejs/node-gyp/commit/abef93ded5)] - **gyp**: get ready for python 3 (cclauss)
* [[`43031fadcb`](https://github.com/nodejs/node-gyp/commit/43031fadcb)] - **python**: clean-up detection (João Reis) [#1582](https://github.com/nodejs/node-gyp/pull/1582)
* [[`49ab79d221`](https://github.com/nodejs/node-gyp/commit/49ab79d221)] - **python**: more informative error (Refael Ackermann) [#1269](https://github.com/nodejs/node-gyp/pull/1269)
* [[`997bc3c748`](https://github.com/nodejs/node-gyp/commit/997bc3c748)] - **readme**: add ARM64 info to MSVC setup instructions (Jon Kunkee) [#1655](https://github.com/nodejs/node-gyp/pull/1655)
* [[`788e767179`](https://github.com/nodejs/node-gyp/commit/788e767179)] - **test**: remove unused variable (João Reis)
* [[`6f5a408934`](https://github.com/nodejs/node-gyp/commit/6f5a408934)] - **tools**: fix usage of inherited -fPIC and -fPIE (Jens) [#1340](https://github.com/nodejs/node-gyp/pull/1340)
* [[`0efb8fb34b`](https://github.com/nodejs/node-gyp/commit/0efb8fb34b)] - **(SEMVER-MAJOR)** **win**: support running in VS Command Prompt (João Reis) [#1762](https://github.com/nodejs/node-gyp/pull/1762)
* [[`360ddbdf3a`](https://github.com/nodejs/node-gyp/commit/360ddbdf3a)] - **(SEMVER-MAJOR)** **win**: add support for Visual Studio 2019 (João Reis) [#1762](https://github.com/nodejs/node-gyp/pull/1762)
* [[`8f43f68275`](https://github.com/nodejs/node-gyp/commit/8f43f68275)] - **(SEMVER-MAJOR)** **win**: detect all VS versions in node-gyp (João Reis) [#1762](https://github.com/nodejs/node-gyp/pull/1762)
* [[`7fe4095974`](https://github.com/nodejs/node-gyp/commit/7fe4095974)] - **(SEMVER-MAJOR)** **win**: generic Visual Studio 2017 detection (João Reis) [#1762](https://github.com/nodejs/node-gyp/pull/1762)
* [[`7a71d68bce`](https://github.com/nodejs/node-gyp/commit/7a71d68bce)] - **win**: use msbuild from the configure stage (Bartosz Sosnowski) [#1654](https://github.com/nodejs/node-gyp/pull/1654)
* [[`d3b21220a0`](https://github.com/nodejs/node-gyp/commit/d3b21220a0)] - **win**: fix delay-load hook for electron 4 (Andy Dill)
* [[`81f3a92338`](https://github.com/nodejs/node-gyp/commit/81f3a92338)] - Update list of Node.js versions to test against. (Ben Noordhuis) [#1670](https://github.com/nodejs/node-gyp/pull/1670)
* [[`4748f6ab75`](https://github.com/nodejs/node-gyp/commit/4748f6ab75)] - Remove deprecated compatibility code. (Ben Noordhuis) [#1670](https://github.com/nodejs/node-gyp/pull/1670)
* [[`45e3221fd4`](https://github.com/nodejs/node-gyp/commit/45e3221fd4)] - Remove an outdated workaround for Python 2.4 (cclauss) [#1650](https://github.com/nodejs/node-gyp/pull/1650)
* [[`721dc7d314`](https://github.com/nodejs/node-gyp/commit/721dc7d314)] - Add ARM64 to MSBuild /Platform logic (Jon Kunkee) [#1655](https://github.com/nodejs/node-gyp/pull/1655)
* [[`a5b7410497`](https://github.com/nodejs/node-gyp/commit/a5b7410497)] - Add ESLint no-unused-vars rule (Jon Moss) [#1497](https://github.com/nodejs/node-gyp/pull/1497)

## v4.0.0 2019-04-24

* [[`ceed5cbe10`](https://github.com/nodejs/node-gyp/commit/ceed5cbe10)] - **deps**: updated tar package version to 4.4.8 (Pobegaylo Maksim) [#1713](https://github.com/nodejs/node-gyp/pull/1713)
* [[`374519e066`](https://github.com/nodejs/node-gyp/commit/374519e066)] - **(SEMVER-MAJOR)** Upgrade to tar v3 (isaacs) [#1212](https://github.com/nodejs/node-gyp/pull/1212)
* [[`e6699d13cd`](https://github.com/nodejs/node-gyp/commit/e6699d13cd)] - **test**: fix addon test for Node.js 12 and V8 7.4 (Richard Lau) [#1705](https://github.com/nodejs/node-gyp/pull/1705)
* [[`0c6bf530a0`](https://github.com/nodejs/node-gyp/commit/0c6bf530a0)] - **lib**: use print() for python version detection (GreenAddress) [#1534](https://github.com/nodejs/node-gyp/pull/1534)

## v3.8.0 2018-08-09

* [[`c5929cb4fe`](https://github.com/nodejs/node-gyp/commit/c5929cb4fe)] - **doc**: update Xcode preferences tab name. (Ivan Daniluk) [#1330](https://github.com/nodejs/node-gyp/pull/1330)
* [[`8b488da8b9`](https://github.com/nodejs/node-gyp/commit/8b488da8b9)] - **doc**: update link to commit guidelines (Jonas Hermsmeier) [#1456](https://github.com/nodejs/node-gyp/pull/1456)
* [[`b4fe8c16f9`](https://github.com/nodejs/node-gyp/commit/b4fe8c16f9)] - **doc**: fix visual studio links (Bartosz Sosnowski) [#1490](https://github.com/nodejs/node-gyp/pull/1490)
* [[`536759c7e9`](https://github.com/nodejs/node-gyp/commit/536759c7e9)] - **configure**: use sys.version\_info to get python version (Yang Guo) [#1504](https://github.com/nodejs/node-gyp/pull/1504)
* [[`94c39c604e`](https://github.com/nodejs/node-gyp/commit/94c39c604e)] - **gyp**: fix ninja build failure (GYP patch) (Daniel Bevenius) [nodejs/node#12484](https://github.com/nodejs/node/pull/12484)
* [[`e8ea74e0fa`](https://github.com/nodejs/node-gyp/commit/e8ea74e0fa)] - **tools**: patch gyp to avoid xcrun errors (Ujjwal Sharma) [nodejs/node#21520](https://github.com/nodejs/node/pull/21520)
* [[`ea9aff44f2`](https://github.com/nodejs/node-gyp/commit/ea9aff44f2)] - **tools**: fix "the the" typos in comments (Masashi Hirano) [nodejs/node#20716](https://github.com/nodejs/node/pull/20716)
* [[`207e5aa4fd`](https://github.com/nodejs/node-gyp/commit/207e5aa4fd)] - **gyp**: implement LD/LDXX for ninja and FIPS (Sam Roberts)
* [[`b416c5f4b7`](https://github.com/nodejs/node-gyp/commit/b416c5f4b7)] - **gyp**: enable cctest to use objects (gyp part) (Daniel Bevenius) [nodejs/node#12450](https://github.com/nodejs/node/pull/12450)
* [[`40692d016b`](https://github.com/nodejs/node-gyp/commit/40692d016b)] - **gyp**: add compile\_commands.json gyp generator (Ben Noordhuis) [nodejs/node#12450](https://github.com/nodejs/node/pull/12450)
* [[`fc3c4e2b10`](https://github.com/nodejs/node-gyp/commit/fc3c4e2b10)] - **gyp**: float gyp patch for long filenames (Anna Henningsen) [nodejs/node#7963](https://github.com/nodejs/node/pull/7963)
* [[`8aedbfdef6`](https://github.com/nodejs/node-gyp/commit/8aedbfdef6)] - **gyp**: backport GYP fix to fix AIX shared suffix (Stewart Addison)
* [[`6cd84b84fc`](https://github.com/nodejs/node-gyp/commit/6cd84b84fc)] - **test**: formatting and minor fixes for execFileSync replacement (Rod Vagg) [#1521](https://github.com/nodejs/node-gyp/pull/1521)
* [[`60e421363f`](https://github.com/nodejs/node-gyp/commit/60e421363f)] - **test**: added test/processExecSync.js for when execFileSync is not available. (Rohit Hazra) [#1492](https://github.com/nodejs/node-gyp/pull/1492)
* [[`969447c5bd`](https://github.com/nodejs/node-gyp/commit/969447c5bd)] - **deps**: bump request to 2.8.7, fixes heok/hawk issues (Rohit Hazra) [#1492](https://github.com/nodejs/node-gyp/pull/1492)
* [[`340403ccfe`](https://github.com/nodejs/node-gyp/commit/340403ccfe)] - **win**: improve parsing of SDK version (Alessandro Vergani) [#1516](https://github.com/nodejs/node-gyp/pull/1516)

## v3.7.0 2018-06-08

* [[`84cea7b30d`](https://github.com/nodejs/node-gyp/commit/84cea7b30d)] - Remove unused gyp test scripts. (Ben Noordhuis) [#1458](https://github.com/nodejs/node-gyp/pull/1458)
* [[`0540e4ec63`](https://github.com/nodejs/node-gyp/commit/0540e4ec63)] - **gyp**: escape spaces in filenames in make generator (Jeff Senn) [#1436](https://github.com/nodejs/node-gyp/pull/1436)
* [[`88fc6fa0ec`](https://github.com/nodejs/node-gyp/commit/88fc6fa0ec)] - Drop dependency on minimatch. (Brian Woodward) [#1158](https://github.com/nodejs/node-gyp/pull/1158)
* [[`1e203c5148`](https://github.com/nodejs/node-gyp/commit/1e203c5148)] - Fix include path when pointing to Node.js source (Richard Lau) [#1055](https://github.com/nodejs/node-gyp/pull/1055)
* [[`53d8cb967c`](https://github.com/nodejs/node-gyp/commit/53d8cb967c)] - Prefix build targets with /t: on Windows (Natalie Wolfe) [#1164](https://github.com/nodejs/node-gyp/pull/1164)
* [[`53a5f8ff38`](https://github.com/nodejs/node-gyp/commit/53a5f8ff38)] - **gyp**: add support for .mm files to msvs generator (Julien Racle) [#1167](https://github.com/nodejs/node-gyp/pull/1167)
* [[`dd8561e528`](https://github.com/nodejs/node-gyp/commit/dd8561e528)] - **zos**: don't use universal-new-lines mode (John Barboza) [#1451](https://github.com/nodejs/node-gyp/pull/1451)
* [[`e5a69010ed`](https://github.com/nodejs/node-gyp/commit/e5a69010ed)] - **zos**: add search locations for libnode.x (John Barboza) [#1451](https://github.com/nodejs/node-gyp/pull/1451)
* [[`79febace53`](https://github.com/nodejs/node-gyp/commit/79febace53)] - **doc**: update macOS information in README (Josh Parnham) [#1323](https://github.com/nodejs/node-gyp/pull/1323)
* [[`9425448945`](https://github.com/nodejs/node-gyp/commit/9425448945)] - **gyp**: don't print xcodebuild not found errors (Gibson Fahnestock) [#1370](https://github.com/nodejs/node-gyp/pull/1370)
* [[`6f1286f5b2`](https://github.com/nodejs/node-gyp/commit/6f1286f5b2)] - Fix infinite install loop. (Ben Noordhuis) [#1384](https://github.com/nodejs/node-gyp/pull/1384)
* [[`2580b9139e`](https://github.com/nodejs/node-gyp/commit/2580b9139e)] - Update `--nodedir` description in README. (Ben Noordhuis) [#1372](https://github.com/nodejs/node-gyp/pull/1372)
* [[`a61360391a`](https://github.com/nodejs/node-gyp/commit/a61360391a)] - Update README with another way to install on windows (JeffAtDeere) [#1352](https://github.com/nodejs/node-gyp/pull/1352)
* [[`47496bf6dc`](https://github.com/nodejs/node-gyp/commit/47496bf6dc)] - Fix IndexError when parsing GYP files. (Ben Noordhuis) [#1267](https://github.com/nodejs/node-gyp/pull/1267)
* [[`b2024dee7b`](https://github.com/nodejs/node-gyp/commit/b2024dee7b)] - **zos**: support platform (John Barboza) [#1276](https://github.com/nodejs/node-gyp/pull/1276)
* [[`90d86512f4`](https://github.com/nodejs/node-gyp/commit/90d86512f4)] - **win**: run PS with `-NoProfile` (Refael Ackermann) [#1292](https://github.com/nodejs/node-gyp/pull/1292)
* [[`2da5f86ef7`](https://github.com/nodejs/node-gyp/commit/2da5f86ef7)] - **doc**: add github PR and Issue templates (Gibson Fahnestock) [#1228](https://github.com/nodejs/node-gyp/pull/1228)
* [[`a46a770d68`](https://github.com/nodejs/node-gyp/commit/a46a770d68)] - **doc**: update proposed DCO and CoC (Mikeal Rogers) [#1229](https://github.com/nodejs/node-gyp/pull/1229)
* [[`7e803d58e0`](https://github.com/nodejs/node-gyp/commit/7e803d58e0)] - **doc**: headerify the Install instructions (Nick Schonning) [#1225](https://github.com/nodejs/node-gyp/pull/1225)
* [[`f27599193a`](https://github.com/nodejs/node-gyp/commit/f27599193a)] - **gyp**: update xml string encoding conversion (Liu Chao) [#1203](https://github.com/nodejs/node-gyp/pull/1203)
* [[`0a07e481f7`](https://github.com/nodejs/node-gyp/commit/0a07e481f7)] - **configure**: don't set ensure if tarball is set (Gibson Fahnestock) [#1220](https://github.com/nodejs/node-gyp/pull/1220)

## v3.6.3 2018-06-08

* [[`90cd2e8da9`](https://github.com/nodejs/node-gyp/commit/90cd2e8da9)] - **gyp**: fix regex to match multi-digit versions (Jonas Hermsmeier) [#1455](https://github.com/nodejs/node-gyp/pull/1455)
* [[`7900122337`](https://github.com/nodejs/node-gyp/commit/7900122337)] - deps: pin `request` version range (Refael Ackerman) [#1300](https://github.com/nodejs/node-gyp/pull/1300)

## v3.6.2 2017-06-01

* [[`72afdd62cd`](https://github.com/nodejs/node-gyp/commit/72afdd62cd)] - **build**: rename copyNodeLib() to doBuild() (Liu Chao) [#1206](https://github.com/nodejs/node-gyp/pull/1206)
* [[`bad903ac70`](https://github.com/nodejs/node-gyp/commit/bad903ac70)] - **win**: more robust parsing of SDK version (Refael Ackermann) [#1198](https://github.com/nodejs/node-gyp/pull/1198)
* [[`241752f381`](https://github.com/nodejs/node-gyp/commit/241752f381)] - Log dist-url. (Ben Noordhuis) [#1170](https://github.com/nodejs/node-gyp/pull/1170)
* [[`386746c7d1`](https://github.com/nodejs/node-gyp/commit/386746c7d1)] - **configure**: use full path in node_lib_file GYP var (Pavel Medvedev) [#964](https://github.com/nodejs/node-gyp/pull/964)
* [[`0913b2dd99`](https://github.com/nodejs/node-gyp/commit/0913b2dd99)] - **build, win**: use target_arch to link with node.lib (Pavel Medvedev) [#964](https://github.com/nodejs/node-gyp/pull/964)
* [[`c307b302f7`](https://github.com/nodejs/node-gyp/commit/c307b302f7)] - **doc**: blorb about setting `npm_config_OPTION_NAME` (Refael Ackermann) [#1185](https://github.com/nodejs/node-gyp/pull/1185)

## v3.6.1 2017-04-30

* [[`49801716c2`](https://github.com/nodejs/node-gyp/commit/49801716c2)] - **test**: fix test-find-python on v0.10.x buildbot. (Ben Noordhuis) [#1172](https://github.com/nodejs/node-gyp/pull/1172)
* [[`a83a3801fc`](https://github.com/nodejs/node-gyp/commit/a83a3801fc)] - **test**: fix test/test-configure-python on AIX (Richard Lau) [#1131](https://github.com/nodejs/node-gyp/pull/1131)
* [[`8a767145c9`](https://github.com/nodejs/node-gyp/commit/8a767145c9)] - **gyp**: Revert quote_cmd workaround (Kunal Pathak) [#1153](https://github.com/nodejs/node-gyp/pull/1153)
* [[`c09cf7671e`](https://github.com/nodejs/node-gyp/commit/c09cf7671e)] - **doc**: add a note for using `configure` on Windows (Vse Mozhet Byt) [#1152](https://github.com/nodejs/node-gyp/pull/1152)
* [[`da9cb5f411`](https://github.com/nodejs/node-gyp/commit/da9cb5f411)] - Delete superfluous .patch files. (Ben Noordhuis) [#1122](https://github.com/nodejs/node-gyp/pull/1122)

## v3.6.0 2017-03-16

* [[`ae141e1906`](https://github.com/nodejs/node-gyp/commit/ae141e1906)] - **win**: find and setup for VS2017 (Refael Ackermann) [#1130](https://github.com/nodejs/node-gyp/pull/1130)
* [[`ec5fc36a80`](https://github.com/nodejs/node-gyp/commit/ec5fc36a80)] - Add support to build node.js with chakracore for ARM. (Kunal Pathak) [#873](https://github.com/nodejs/node-gyp/pull/873)
* [[`a04ea3051a`](https://github.com/nodejs/node-gyp/commit/a04ea3051a)] - Add support to build node.js with chakracore. (Kunal Pathak) [#873](https://github.com/nodejs/node-gyp/pull/873)
* [[`93d7fa83c8`](https://github.com/nodejs/node-gyp/commit/93d7fa83c8)] - Upgrade semver dependency. (Ben Noordhuis) [#1107](https://github.com/nodejs/node-gyp/pull/1107)
* [[`ff9a6fadfd`](https://github.com/nodejs/node-gyp/commit/ff9a6fadfd)] - Update link of gyp as Google code is shutting down (Peter Dave Hello) [#1061](https://github.com/nodejs/node-gyp/pull/1061)

## v3.5.0 2017-01-10

* [[`762d19a39e`](https://github.com/nodejs/node-gyp/commit/762d19a39e)] - \[doc\] merge History.md and CHANGELOG.md (Rod Vagg)
* [[`80fc5c3d31`](https://github.com/nodejs/node-gyp/commit/80fc5c3d31)] - Fix deprecated dependency warning (Simone Primarosa) [#1069](https://github.com/nodejs/node-gyp/pull/1069)
* [[`05c44944fd`](https://github.com/nodejs/node-gyp/commit/05c44944fd)] - Open the build file with universal-newlines mode (Guy Margalit) [#1053](https://github.com/nodejs/node-gyp/pull/1053)
* [[`37ae7be114`](https://github.com/nodejs/node-gyp/commit/37ae7be114)] - Try python launcher when stock python is python 3. (Ben Noordhuis) [#992](https://github.com/nodejs/node-gyp/pull/992)
* [[`e3778d9907`](https://github.com/nodejs/node-gyp/commit/e3778d9907)] - Add lots of findPython() tests. (Ben Noordhuis) [#992](https://github.com/nodejs/node-gyp/pull/992)
* [[`afc766adf6`](https://github.com/nodejs/node-gyp/commit/afc766adf6)] - Unset executable bit for .bat files (Pavel Medvedev) [#969](https://github.com/nodejs/node-gyp/pull/969)
* [[`ddac348991`](https://github.com/nodejs/node-gyp/commit/ddac348991)] - Use push on PYTHONPATH and add tests (Michael Hart) [#990](https://github.com/nodejs/node-gyp/pull/990)
* [[`b182a19042`](https://github.com/nodejs/node-gyp/commit/b182a19042)] - ***Revert*** "add "path-array" dep" (Michael Hart) [#990](https://github.com/nodejs/node-gyp/pull/990)
* [[`7c08b85c5a`](https://github.com/nodejs/node-gyp/commit/7c08b85c5a)] - ***Revert*** "**configure**: use "path-array" for PYTHONPATH" (Michael Hart) [#990](https://github.com/nodejs/node-gyp/pull/990)
* [[`9c8d275526`](https://github.com/nodejs/node-gyp/commit/9c8d275526)] - Add --devdir flag. (Ben Noordhuis) [#916](https://github.com/nodejs/node-gyp/pull/916)
* [[`f6eab1f9e4`](https://github.com/nodejs/node-gyp/commit/f6eab1f9e4)] - **doc**: add windows-build-tools to readme (Felix Rieseberg) [#970](https://github.com/nodejs/node-gyp/pull/970)

## v3.4.0 2016-06-28

* [[`ce5fd04e94`](https://github.com/nodejs/node-gyp/commit/ce5fd04e94)] - **deps**: update minimatch version (delphiactual) [#961](https://github.com/nodejs/node-gyp/pull/961)
* [[`77383ddd85`](https://github.com/nodejs/node-gyp/commit/77383ddd85)] - Replace fs.accessSync call to fs.statSync (Richard Lau) [#955](https://github.com/nodejs/node-gyp/pull/955)
* [[`0dba4bda57`](https://github.com/nodejs/node-gyp/commit/0dba4bda57)] - **test**: add simple addon test (Richard Lau) [#955](https://github.com/nodejs/node-gyp/pull/955)
* [[`c4344b3889`](https://github.com/nodejs/node-gyp/commit/c4344b3889)] - **doc**: add --target option to README (Gibson Fahnestock) [#958](https://github.com/nodejs/node-gyp/pull/958)
* [[`cc778e9215`](https://github.com/nodejs/node-gyp/commit/cc778e9215)] - Override BUILDING_UV_SHARED, BUILDING_V8_SHARED. (Ben Noordhuis) [#915](https://github.com/nodejs/node-gyp/pull/915)
* [[`af35b2ad32`](https://github.com/nodejs/node-gyp/commit/af35b2ad32)] - Move VC++ Build Tools to Build Tools landing page. (Andrew Pardoe) [#953](https://github.com/nodejs/node-gyp/pull/953)
* [[`f31482e226`](https://github.com/nodejs/node-gyp/commit/f31482e226)] - **win**: work around __pfnDliNotifyHook2 type change (Alexis Campailla) [#952](https://github.com/nodejs/node-gyp/pull/952)
* [[`3df8222fa5`](https://github.com/nodejs/node-gyp/commit/3df8222fa5)] - Allow for npmlog@3.x (Rebecca Turner) [#950](https://github.com/nodejs/node-gyp/pull/950)
* [[`a4fa07b390`](https://github.com/nodejs/node-gyp/commit/a4fa07b390)] - More verbose error on locating msbuild.exe failure. (Mateusz Jaworski) [#930](https://github.com/nodejs/node-gyp/pull/930)
* [[`4ee31329e0`](https://github.com/nodejs/node-gyp/commit/4ee31329e0)] - **doc**: add command options to README.md (Gibson Fahnestock) [#937](https://github.com/nodejs/node-gyp/pull/937)
* [[`c8c7ca86b9`](https://github.com/nodejs/node-gyp/commit/c8c7ca86b9)] - Add --silent option for zero output. (Gibson Fahnestock) [#937](https://github.com/nodejs/node-gyp/pull/937)
* [[`ac29d23a7c`](https://github.com/nodejs/node-gyp/commit/ac29d23a7c)] - Upgrade to glob@7.0.3. (Ben Noordhuis) [#943](https://github.com/nodejs/node-gyp/pull/943)
* [[`15fd56be3d`](https://github.com/nodejs/node-gyp/commit/15fd56be3d)] - Enable V8 deprecation warnings for native modules (Matt Loring) [#920](https://github.com/nodejs/node-gyp/pull/920)
* [[`7f1c1b960c`](https://github.com/nodejs/node-gyp/commit/7f1c1b960c)] - **gyp**: improvements for android generator (Robert Chiras) [#935](https://github.com/nodejs/node-gyp/pull/935)
* [[`088082766c`](https://github.com/nodejs/node-gyp/commit/088082766c)] - Update Windows install instructions (Sara Itani) [#867](https://github.com/nodejs/node-gyp/pull/867)
* [[`625c1515f9`](https://github.com/nodejs/node-gyp/commit/625c1515f9)] - **gyp**: inherit CC/CXX for CC/CXX.host (Johan Bergström) [#908](https://github.com/nodejs/node-gyp/pull/908)
* [[`3bcb1720e4`](https://github.com/nodejs/node-gyp/commit/3bcb1720e4)] - Add support for the Python launcher on Windows (Patrick Westerhoff) [#894](https://github.com/nodejs/node-gyp/pull/894

## v3.3.1 2016-03-04

* [[`a981ef847a`](https://github.com/nodejs/node-gyp/commit/a981ef847a)] - **gyp**: fix android generator (Robert Chiras) [#889](https://github.com/nodejs/node-gyp/pull/889)

## v3.3.0 2016-02-16

* [[`818d854a4d`](https://github.com/nodejs/node-gyp/commit/818d854a4d)] - Introduce NODEJS_ORG_MIRROR and IOJS_ORG_MIRROR (Rod Vagg) [#878](https://github.com/nodejs/node-gyp/pull/878)
* [[`d1e4cc4b62`](https://github.com/nodejs/node-gyp/commit/d1e4cc4b62)] - **(SEMVER-MINOR)** Download headers tarball for ~0.12.10 || ~0.10.42 (Rod Vagg) [#877](https://github.com/nodejs/node-gyp/pull/877)
* [[`6e28ad1bea`](https://github.com/nodejs/node-gyp/commit/6e28ad1bea)] - Allow for npmlog@2.x (Rebecca Turner) [#861](https://github.com/nodejs/node-gyp/pull/861)
* [[`07371e5812`](https://github.com/nodejs/node-gyp/commit/07371e5812)] - Use -fPIC for NetBSD. (Marcin Cieślak) [#856](https://github.com/nodejs/node-gyp/pull/856)
* [[`8c4b0ffa50`](https://github.com/nodejs/node-gyp/commit/8c4b0ffa50)] - **(SEMVER-MINOR)** Add --cafile command line option. (Ben Noordhuis) [#837](https://github.com/nodejs/node-gyp/pull/837)
* [[`b3ad43498e`](https://github.com/nodejs/node-gyp/commit/b3ad43498e)] - **(SEMVER-MINOR)** Make download() function testable. (Ben Noordhuis) [#837](https://github.com/nodejs/node-gyp/pull/837)

## v3.2.1 2015-12-03

* [[`ab89b477c4`](https://github.com/nodejs/node-gyp/commit/ab89b477c4)] - Upgrade gyp to b3cef02. (Ben Noordhuis) [#831](https://github.com/nodejs/node-gyp/pull/831)
* [[`90078ecb17`](https://github.com/nodejs/node-gyp/commit/90078ecb17)] - Define WIN32_LEAN_AND_MEAN conditionally. (Ben Noordhuis) [#824](https://github.com/nodejs/node-gyp/pull/824)

## v3.2.0 2015-11-25

* [[`268f1ca4c7`](https://github.com/nodejs/node-gyp/commit/268f1ca4c7)] - Use result of `which` when searching for python. (Refael Ackermann) [#668](https://github.com/nodejs/node-gyp/pull/668)
* [[`817ed9bd78`](https://github.com/nodejs/node-gyp/commit/817ed9bd78)] - Add test for python executable search logic. (Ben Noordhuis) [#756](https://github.com/nodejs/node-gyp/pull/756)
* [[`0e2dfda1f3`](https://github.com/nodejs/node-gyp/commit/0e2dfda1f3)] - Fix test/test-options when run through `npm test`. (Ben Noordhuis) [#755](https://github.com/nodejs/node-gyp/pull/755)
* [[`9bfa0876b4`](https://github.com/nodejs/node-gyp/commit/9bfa0876b4)] - Add support for AIX (Michael Dawson) [#753](https://github.com/nodejs/node-gyp/pull/753)
* [[`a8d441a0a2`](https://github.com/nodejs/node-gyp/commit/a8d441a0a2)] - Update README for Windows 10 support. (Jason Williams) [#766](https://github.com/nodejs/node-gyp/pull/766)
* [[`d1d6015276`](https://github.com/nodejs/node-gyp/commit/d1d6015276)] - Update broken links and switch to HTTPS. (andrew morton)

## v3.1.0 2015-11-14

* [[`9049241f91`](https://github.com/nodejs/node-gyp/commit/9049241f91)] - **gyp**: don't use links at all, just copy the files instead (Nathan Zadoks)
* [[`8ef90348d1`](https://github.com/nodejs/node-gyp/commit/8ef90348d1)] - **gyp**: apply https://codereview.chromium.org/11361103/ (Nathan Rajlich)
* [[`a2ed0df84e`](https://github.com/nodejs/node-gyp/commit/a2ed0df84e)] - **gyp**: always install into $PRODUCT_DIR (Nathan Rajlich)
* [[`cc8b2fa83e`](https://github.com/nodejs/node-gyp/commit/cc8b2fa83e)] - Update gyp to b3cef02. (Imran Iqbal) [#781](https://github.com/nodejs/node-gyp/pull/781)
* [[`f5d86eb84e`](https://github.com/nodejs/node-gyp/commit/f5d86eb84e)] - Update to tar@2.0.0. (Edgar Muentes) [#797](https://github.com/nodejs/node-gyp/pull/797)
* [[`2ac7de02c4`](https://github.com/nodejs/node-gyp/commit/2ac7de02c4)] - Fix infinite loop with zero-length options. (Ben Noordhuis) [#745](https://github.com/nodejs/node-gyp/pull/745)
* [[`101bed639b`](https://github.com/nodejs/node-gyp/commit/101bed639b)] - This platform value came from debian package, and now the value (Jérémy Lal) [#738](https://github.com/nodejs/node-gyp/pull/738)

## v3.0.3 2015-09-14

* [[`ad827cda30`](https://github.com/nodejs/node-gyp/commit/ad827cda30)] - tarballUrl global and && when checking for iojs (Lars-Magnus Skog) [#729](https://github.com/nodejs/node-gyp/pull/729)

## v3.0.2 2015-09-12

* [[`6e8c3bf3c6`](https://github.com/nodejs/node-gyp/commit/6e8c3bf3c6)] - add back support for passing additional cmdline args (Rod Vagg) [#723](https://github.com/nodejs/node-gyp/pull/723)
* [[`ff82f2f3b9`](https://github.com/nodejs/node-gyp/commit/ff82f2f3b9)] - fixed broken link in docs to Visual Studio 2013 download (simon-p-r) [#722](https://github.com/nodejs/node-gyp/pull/722)

## v3.0.1 2015-09-08

* [[`846337e36b`](https://github.com/nodejs/node-gyp/commit/846337e36b)] - normalise versions for target == this comparison (Rod Vagg) [#716](https://github.com/nodejs/node-gyp/pull/716)

## v3.0.0 2015-09-08

* [[`9720d0373c`](https://github.com/nodejs/node-gyp/commit/9720d0373c)] - remove node_modules from tree (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
* [[`6dcf220db7`](https://github.com/nodejs/node-gyp/commit/6dcf220db7)] - test version major directly, don't use semver.satisfies() (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
* [[`938dd18d1c`](https://github.com/nodejs/node-gyp/commit/938dd18d1c)] - refactor for clarity, fix dist-url, add env var dist-url functionality (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
* [[`9e9df66a06`](https://github.com/nodejs/node-gyp/commit/9e9df66a06)] - use process.release, make aware of io.js & node v4 differences (Rod Vagg) [#711](https://github.com/nodejs/node-gyp/pull/711)
* [[`1ea7ed01f4`](https://github.com/nodejs/node-gyp/commit/1ea7ed01f4)] - **deps**: update graceful-fs dependency to the latest (Sakthipriyan Vairamani) [#714](https://github.com/nodejs/node-gyp/pull/714)
* [[`0fbc387b35`](https://github.com/nodejs/node-gyp/commit/0fbc387b35)] - Update repository URLs. (Ben Noordhuis) [#715](https://github.com/nodejs/node-gyp/pull/715)
* [[`bbedb8868b`](https://github.com/nodejs/node-gyp/commit/bbedb8868b)] - **(SEMVER-MAJOR)** **win**: enable delay-load hook by default (Jeremiah Senkpiel) [#708](https://github.com/nodejs/node-gyp/pull/708)
* [[`85ed107565`](https://github.com/nodejs/node-gyp/commit/85ed107565)] - Merge pull request #664 from othiym23/othiym23/allow-semver-5 (Nathan Rajlich)
* [[`0c720d234c`](https://github.com/nodejs/node-gyp/commit/0c720d234c)] - allow semver@5 (Forrest L Norvell)

## 2.0.2 / 2015-07-14

  * Use HTTPS for dist url (#656, @SonicHedgehog)
  * Merge pull request #648 from nevosegal/master
  * Merge pull request #650 from magic890/patch-1
  * Updated Installation section on README
  * Updated link to gyp user documentation
  * Fix download error message spelling (#643, @tomxtobin)
  * Merge pull request #637 from lygstate/master
  * Set NODE_GYP_DIR for addon.gypi to setting absolute path for
    src/win_delay_load_hook.c, and fixes of the long relative path issue on Win32.
    Fixes #636 (#637, @lygstate).

## 2.0.1 / 2015-05-28

  * configure: try/catch the semver range.test() call
  * README: update for visual studio 2013 (#510, @samccone)

## 2.0.0 / 2015-05-24

  * configure: check for python2 executable by default, fallback to python
  * configure: don't clobber existing $PYTHONPATH
  * configure: use "path-array" for PYTHONPATH
  * gyp: fix for non-acsii userprofile name on Windows
  * gyp: always install into $PRODUCT_DIR
  * gyp: apply https://codereview.chromium.org/11361103/
  * gyp: don't use links at all, just copy the files instead
  * gyp: update gyp to e1c8fcf7
  * Updated README.md with updated Windows build info
  * Show URL when a download fails
  * package: add a "license" field
  * move HMODULE m declaration to top
  * Only add "-undefined dynamic_lookup" to loadable_module targets
  * win: optionally allow node.exe/iojs.exe to be renamed
  * Avoid downloading shasums if using tarPath
  * Add target name preprocessor define: `NODE_GYP_MODULE_NAME`
  * Show better error message in case of bad network settings


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct

* [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md)
* [Node.js Moderation Policy](https://github.com/nodejs/admin/blob/master/Moderation-Policy.md)


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to node-gyp

## Making changes to gyp-next

Changes in the subfolder `gyp/` should be submitted to the
[`gyp-next`][] repository first. The `gyp/` folder is regularly
synced from [`gyp-next`][] with GitHub Actions workflow
[`update-gyp-next.yml`](.github/workflows/update-gyp-next.yml),
and any changes in this folder would be overridden by the workflow.

## Code of Conduct

Please read the
[Code of Conduct](https://github.com/nodejs/admin/blob/main/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.

[`gyp-next`]: https://github.com/nodejs/gyp-next


================================================
FILE: LICENSE
================================================
(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.


================================================
FILE: README.md
================================================
# `node-gyp` - Node.js native addon build tool

[![Build Status](https://github.com/nodejs/node-gyp/workflows/Tests/badge.svg?branch=main)](https://github.com/nodejs/node-gyp/actions?query=workflow%3ATests+branch%3Amain)
![npm](https://img.shields.io/npm/dm/node-gyp)

`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 and extended to support the development of Node.js native
addons.

Note that `node-gyp` is _not_ used to build Node.js itself.

All current and LTS target versions of Node.js are supported. Depending on what version of Node.js is actually installed on your system
`node-gyp` downloads the necessary development files or headers for the target version. List of stable Node.js versions can be found on [Node.js website](https://nodejs.org/en/about/previous-releases).

## Features

 * The same build commands work on any of the supported platforms
 * Supports the targeting of different versions of Node.js

## Installation

> [!Important]
> Python >= v3.12 requires `node-gyp` >= v10

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

   * [A supported version of Python](https://devguide.python.org/versions/)
   * `make`
   * A proper C/C++ compiler toolchain, like [GCC](https://gcc.gnu.org)

### On macOS

   * [A supported version of Python](https://devguide.python.org/versions/)
   * `Xcode Command Line Tools` which will install `clang`, `clang++`, and `make`.
     * Install the `Xcode Command Line Tools` standalone by running `xcode-select --install`. -- OR --
     * Alternatively, if you already have the [full Xcode installed](https://developer.apple.com/xcode/download/), you can install the Command Line Tools under the menu `Xcode -> Open Developer Tool -> More Developer Tools...`.


### On Windows

Install tools with [Chocolatey](https://chocolatey.org):
``` bash
choco install python visualstudio2022-workload-vctools -y
```

Or install and configure Python and Visual Studio tools manually:

  * Follow the instructions in [Using Python on Windows](https://docs.python.org/3/using/windows.html) to install
    the current [version of Python](https://www.python.org/downloads/).

   * Install Visual C++ Build Environment: For Visual Studio 2019 or later, use the `Desktop development with C++` workload from [Visual Studio Community](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community).  For a version older than Visual Studio 2019, install [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) with the `Visual C++ build tools` option.

   To target native ARM64 Node.js on Windows on ARM, add the components "Visual C++ compilers and libraries for ARM64" and "Visual C++ ATL for ARM64".

   To use the native ARM64 C++ compiler on Windows on ARM, ensure that you have Visual Studio 2022 [17.4 or later](https://devblogs.microsoft.com/visualstudio/arm64-visual-studio-is-officially-here/) installed.

It's advised to install the following PowerShell module: [VSSetup](https://github.com/microsoft/vssetup.powershell) using `Install-Module VSSetup -Scope CurrentUser`.
This will make Visual Studio detection logic use a more flexible and accessible method, avoiding PowerShell's `ConstrainedLanguage` mode.

### Configuring Python Dependency

`node-gyp` requires that you have installed a [supported version of Python](https://devguide.python.org/versions/).
If you have multiple versions of Python installed, you can identify which 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 the `npm_config_python` environment variable
to the appropriate path:
``` bash
export npm_config_python=/path/to/executable/python
```
&nbsp;&nbsp;&nbsp;&nbsp;Or on Windows:
```console
py --list-paths  # To see the installed Python versions
set npm_config_python=C:\path\to\python.exe  # CMD
$Env:npm_config_python="C:\path\to\python.exe"  # PowerShell
```

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 supported 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
built-in 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 third-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/main/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

### package.json

Use the `config` object in your package.json with each key in the form `node_gyp_OPTION_NAME`. Any of the command
options listed above can be set (dashes in option names should be replaced by underscores).

For example, to set `devdir` equal to `/tmp/.gyp`, your package.json would contain this:

```json
{
  "config": {
    "node_gyp_devdir": "/tmp/.gyp"
  }
}
```

### Environment variables

Use the form `npm_package_config_node_gyp_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_package_config_node_gyp_devdir=/tmp/.gyp
```

Or this on Windows:

```console
set npm_package_config_node_gyp_devdir=c:\temp\.gyp
```

Note that in versions of npm before v11 it was possible to use the prefix `npm_config_` for
environment variables. This was deprecated in npm@11 and will be removed in npm@12 so it
is recommended to convert your environment variables to the above format.

### `npm` configuration for npm versions before v9

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.


================================================
FILE: SECURITY.md
================================================
If you believe you have found a security issue in the software in this
repository, please consult https://github.com/nodejs/node/blob/HEAD/SECURITY.md.

================================================
FILE: addon.gypi
================================================
{
  '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=="os400"', {
        'ldflags': [
          '-Wl,-bimport:<(node_exp_file)'
        ],
      }],
      [ 'OS=="zos"', {
        'conditions': [
          [ '"<!(echo $CC)" != "clang" and \
             "<!(echo $CC)" != "ibm-clang64" and \
             "<!(echo $CC)" != "ibm-clang"', {
            'cflags': [
              '-q64',
              '-Wc,DLL',
              '-qlonglong',
              '-qenum=int',
              '-qxclang=-fexec-charset=ISO8859-1'
            ],
            'ldflags': [
              '-q64',
              '<(node_exp_file)',
            ],
          }, {
            'cflags': [
              '-m64',
            ],
            'ldflags': [
              '-m64',
              '<(node_exp_file)',
            ],
          }],
        ],
        'defines': [
          '_ALL_SOURCE',
          'MAP_FAILED=-1',
          '_UNIX03_SOURCE',
        ],
      }],
      [ '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 openharmony" or \
         (OS=="linux" and target_arch!="ia32")', {
        'cflags': [ '-fPIC' ],
      }],
    ]
  }
}


================================================
FILE: bin/node-gyp.js
================================================
#!/usr/bin/env node

'use strict'

process.title = 'node-gyp'

const envPaths = require('env-paths')
const gyp = require('../')
const log = require('../lib/log')
const os = require('os')

/**
 * Process and execute the selected commands.
 */

const prog = gyp()
let completed = false
prog.parseArgv(process.argv)
prog.devDir = prog.opts.devdir

const 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')) {
    log.stdout('v%s', prog.version)
  } else {
    log.stdout('%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.
 */

const dir = prog.opts.directory
if (dir) {
  const fs = require('fs')
  try {
    const 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)
    }
  }
}

async function run () {
  const command = prog.todo.shift()
  if (!command) {
    // done!
    completed = true
    log.info('ok')
    return
  }

  try {
    const args = await prog.commands[command.name](command.args) ?? []

    if (command.name === 'list') {
      if (args.length) {
        args.forEach((version) => log.stdout(version))
      } else {
        log.stdout('No node development files installed. Use `node-gyp install` to install a version.')
      }
    } else if (args.length >= 1) {
      log.stdout(...args.slice(1))
    }

    // now run the next command in the queue
    return run()
  } catch (err) {
    log.error(command.name + ' error')
    log.error('stack', err.stack)
    errorMessage()
    log.error('not ok')
    return process.exit(1)
  }
}

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
  const 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)
  // print the npm package version
  for (const env of ['npm_package_name', 'npm_package_version']) {
    const value = process.env[env]
    if (value != null) {
      log.error(`$${env}`, value)
    }
  }
}

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()


================================================
FILE: docs/Error-pre-versions-of-node-cannot-be-installed.md
================================================
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
```

================================================
FILE: docs/Force-npm-to-use-global-node-gyp.md
================================================
# Force npm to use global installed node-gyp

**Note: These instructions only work with npm 6 or older. For a solution that works with npm 8 (or older), see [Updating-npm-bundled-node-gyp.md](Updating-npm-bundled-node-gyp.md).**

[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 located at `npm/node_modules`, within npm's private dependencies which are separate from *globally* accessible packages. Therefore this internal copy of node-gyp is independent from any globally installed copy of node-gyp that
may have been installed via `npm install -g node-gyp`.

So npm's internal copy of node-gyp **isn't** stored inside *global* `node_modules` and thus isn't available for use as a standalone package. npm uses it's *internal* copy of `node-gyp` to automatically build native addons.

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` (where internal copy of node-gyp is stored). So it will get into your `$PATH` and you will be able to use this globally installed version (**but not internal node-gyp of npm**) as any other globally installed package.

The catch is that npm **won't** use global version unless you tell it to, it'll keep on using the **internal one**. 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
```


================================================
FILE: docs/Home.md
================================================
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]]


================================================
FILE: docs/Linking-to-OpenSSL.md
================================================
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"
```

================================================
FILE: docs/README.md
================================================
## Versions of `node-gyp` that are earlier than v11.x.x

Please look thru your error log for the string `gyp info using node-gyp@` and if that version number is less than the [current release of node-gyp](https://github.com/nodejs/node-gyp/releases) then __please upgrade__ using [these instructions](https://github.com/nodejs/node-gyp/blob/main/docs/Updating-npm-bundled-node-gyp.md) and then try your command again.

## `node-sass` is deprecated

Please be aware that the package [`node-sass` is deprecated](https://github.com/sass/node-sass#node-sass) so you should actively seek alternatives.  You can try:
```
npm uninstall node-sass
npm install sass --save
# or ...
npm install --global node-sass@latest
```
`node-sass` projects _may_ work by downgrading to Node.js v14 but [that release is end-of-life](https://github.com/nodejs/release#release-schedule).

In any case, please avoid opening new `node-sass` issues on this repo because we [cannot help much](https://github.com/nodejs/node-gyp/issues?q=is%3Aissue+label%3A%22Node+Sass+--%3E+Dart+Sass%22).

## `ffi-napi` is no longer maintained

* node-ffi-napi/node-ffi-napi#269

There are a couple of workarounds (https://koffi.dev or `node-ffi-rs`) on that issue but using `ffi-napi` or its forks has proven problematic on modern versions of operating systems, Node.js, node-gyp, and Python.

In any case, please avoid opening new `ffi-napi` issues on this repo because we [cannot help much](https://github.com/nodejs/node-gyp/issues?q=label%3Affi-napi).


================================================
FILE: docs/Updating-npm-bundled-node-gyp.md
================================================
# Updating the npm-bundled version of node-gyp

**Note: These instructions are (only) tested and known to work with npm 8 and older.**

**Note: These instructions will be undone if you reinstall or upgrade npm or node! For a more permanent (and simpler) solution, see [Force-npm-to-use-global-node-gyp.md](Force-npm-to-use-global-node-gyp.md). (npm 6 or older only!)**

[Many issues](https://github.com/nodejs/node-gyp/issues?q=label%3A"ERR!+node-gyp+-v+<%3D+v9.x.x") 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`.

This means that while `node-gyp` doesn't get installed into your `$PATH` by default, npm still keeps its own copy to invoke when you
attempt to `npm install` a native add-on.

Sometimes, you may need to update npm's internal node-gyp to a newer version than what is installed. A simple `npm install -g node-gyp`
_won't_ do the trick since npm will continue to use its internal copy over the global one.

So instead:

## Version of npm

We need to start by knowing your version of `npm`:
```bash
npm --version
```

## Linux, macOS, Solaris, etc.

Unix is easy. Just run the following command.

If your npm is version ___7 or higher___, do:
```bash
$ npm explore npm/node_modules/@npmcli/run-script -g -- npm_config_global=false npm install node-gyp@latest
```

Else if your npm is version ___less than 7___, do:
```bash
$ npm explore npm/node_modules/npm-lifecycle -g -- npm install node-gyp@latest
```

If the command fails with a permissions error, please try `sudo` and then the command.

## Windows

Windows is a bit trickier, since `npm` might be installed in the "Program Files" directory, which needs admin privileges to modify current Windows. Therefore, run the following commands __inside a `cmd.exe` started with "Run as Administrator"__:

First, we need to find the location of `node`. If you don't already know the location that `node.exe` got installed to, then run:
```bash
$ where node
```

Now `cd` to the directory that `node.exe` is contained in e.g.:
```bash
$ cd "C:\Program Files\nodejs"
```

If your npm version is ___7 or higher___, do:
```bash
cd node_modules\npm\node_modules\@npmcli\run-script
```

Else if your npm version is ___less than 7___, do:
```bash
cd node_modules\npm\node_modules\npm-lifecycle
```

Finish by running:
```bash
$ npm install node-gyp@latest
```


================================================
FILE: docs/binding.gyp-files-in-the-wild.md
================================================
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-oracledb](https://github.com/oracle/node-oracledb/blob/main/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)
 * [node-heapdump](https://github.com/bnoordhuis/node-heapdump/blob/master/binding.gyp)


================================================
FILE: eslint.config.js
================================================
'use strict'

module.exports = require('neostandard')({})


================================================
FILE: gyp/.github/dependabot.yml
================================================
# Keep GitHub Actions up to date with Dependabot...
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    groups:
      GitHub_Actions:
        patterns:
          - "*"  # Group all Actions updates into a single larger pull request
    schedule:
      interval: weekly
  - package-ecosystem: "pip"
    directory: "/"
    groups:
      pip:
        patterns:
          - "*"  # Group all pip updates into a single larger pull request
    schedule:
      interval: weekly


================================================
FILE: gyp/.github/workflows/node-gyp.yml
================================================
name: node-gyp integration
on:
  push:
  pull_request:
  workflow_dispatch:

jobs:
  node-gyp-integration:
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]
        python-version: ["3.10", "3.12", "3.14"]
        include:
          - os: macos-15-intel  # macOS on Intel
            python-version: "3.14"
          - os: ubuntu-24.04-arm  # Ubuntu on ARM
            python-version: "3.14"
          - os: windows-11-arm  # Windows on ARM
            python-version: "3.14"
    runs-on: ${{ matrix.os }}
    steps:
      - name: Clone gyp-next
        uses: actions/checkout@v6
        with:
          path: gyp-next
      - name: Clone nodejs/node-gyp
        uses: actions/checkout@v6
        with:
          repository: nodejs/node-gyp
          path: node-gyp
      - uses: actions/setup-node@v6
        with:
          node-version: "lts/*"
      - uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}
          allow-prereleases: true
      - name: Install Python dependencies
        run: |
          cd gyp-next
          python -m pip install --upgrade pip
          pip install --editable .
          pip uninstall -y gyp-next
      - name: Install Node.js 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 (macOS or Linux)
        if: runner.os != 'Windows'
        run: |
          cd node-gyp
          npm test --python="${pythonLocation}/python"
      - name: Run tests (Windows)
        if: runner.os == 'Windows'
        shell: pwsh
        run: |
          cd node-gyp
          npm run test --python="${env:pythonLocation}\\python.exe"


================================================
FILE: gyp/.github/workflows/nodejs.yml
================================================
name: Node.js integration
on:
  push:
  pull_request:
  workflow_dispatch:

jobs:
  nodejs-integration:
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]
        python-version: ["3.10", "3.12", "3.14"]
        include:
          - os: macos-15-intel  # macOS on Intel
            python-version: "3.14"
          - os: ubuntu-24.04-arm  # Ubuntu on ARM
            python-version: "3.14"
          - os: windows-11-arm  # Windows on ARM
            python-version: "3.14"

    runs-on: ${{ matrix.os }}
    steps:
      - name: Clone gyp-next
        uses: actions/checkout@v6
        with:
          path: gyp-next
      - name: Clone nodejs/node
        uses: actions/checkout@v6
        with:
          repository: nodejs/node
          path: node
      - uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}
          allow-prereleases: true
      - name: Replace gyp in Node.js
        shell: bash
        run: |
          rm -rf node/tools/gyp
          cp -r gyp-next node/tools/gyp

      # macOS and Linux
      - name: Run configure
        if: runner.os != 'Windows'
        run: |
          cd node
          ./configure

      # Windows
      - name: Install deps
        if: runner.os == 'Windows'
        run: choco install nasm
      - name: Run configure
        if: runner.os == 'Windows'
        run: |
          cd node
          ./vcbuild.bat nobuild


================================================
FILE: gyp/.github/workflows/python_tests.yml
================================================
# TODO: Enable os: windows-latest
# TODO: Enable pytest --doctest-modules

name: Python_tests
on:
  push:
  pull_request:
  workflow_dispatch:

jobs:
  Python_tests:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      max-parallel: 5
      matrix:
        os: [macos-15-intel, macos-latest, ubuntu-latest] # , windows-latest]
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
        include:
          - os: macos-26
            python-version: 3.x
    steps:
      - uses: actions/checkout@v6
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}
          allow-prereleases: true
      - uses: seanmiddleditch/gha-setup-ninja@v6
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install --editable ".[dev]"
      - run: ./gyp -V && ./gyp --version && gyp -V && gyp --version
      - name: Lint with ruff  # See pyproject.toml for settings
        uses: astral-sh/ruff-action@v3
      - run: ruff format --check --diff
      - name: Test with pytest  # See pyproject.toml for settings
        run: pytest
      # - name: Run doctests with pytest
      #   run: pytest --doctest-modules
      - name: Test CLI commands on a pipx install
        run: |
          pipx run --no-cache --spec ./ gyp --help
          pipx run --no-cache --spec ./ gyp --version


================================================
FILE: gyp/.github/workflows/release-please.yml
================================================
on:
  push:
    branches:
      - main

name: release-please
jobs:
  release-please:
    runs-on: ubuntu-latest
    outputs:
      release_created: ${{ steps.release.outputs.release_created }}
      tag_name: ${{ steps.release.outputs.tag_name }}
    permissions:
      contents: write
      pull-requests: write
    steps:
      - uses: google-github-actions/release-please-action@v4
        id: release

  build:
    name: Build distribution
    needs:
      - release-please
    if: ${{ needs.release-please.outputs.release_created }}  # only publish on release
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
    - name: Build a binary wheel and a source tarball
      run: pipx run build
    - name: Store the distribution packages
      uses: actions/upload-artifact@v6
      with:
        name: python-package-distributions
        path: dist/

  publish-to-pypi:
    name: >-
      Publish Python distribution to PyPI
    needs:
      - release-please
      - build
    if: ${{ needs.release-please.outputs.release_created }}  # only publish on release
    runs-on: ubuntu-latest
    environment:
      name: pypi
      url: https://pypi.org/p/gyp-next
    permissions:
      id-token: write # IMPORTANT: mandatory for trusted publishing
    steps:
    - name: Download all the dists
      uses: actions/download-artifact@v7
      with:
        name: python-package-distributions
        path: dist/
    - name: Publish distribution to PyPI
      uses: pypa/gh-action-pypi-publish@release/v1

  github-release:
    name: >-
      Publish Python distribution to GitHub Release
    needs:
      - release-please
      - build
    if: ${{ needs.release-please.outputs.release_created }}  # only publish on release
    runs-on: ubuntu-latest
    permissions:
      contents: write # IMPORTANT: mandatory for making GitHub Releases
      id-token: write # IMPORTANT: mandatory for sigstore
    steps:
    - name: Download all the dists
      uses: actions/download-artifact@v7
      with:
        name: python-package-distributions
        path: dist/
    - name: Sign the dists with Sigstore
      uses: sigstore/gh-action-sigstore-python@v3.2.0
      with:
        inputs: >-
          ./dist/*.tar.gz
          ./dist/*.whl
    - name: Upload artifact signatures to GitHub Release
      env:
        GITHUB_TOKEN: ${{ github.token }}
      # Upload to GitHub Release using the `gh` CLI.
      # `dist/` contains the built packages, and the
      # sigstore-produced signatures and certificates.
      run: >-
        gh release upload
        ${{ needs.release-please.outputs.tag_name }} dist/**
        --repo '${{ github.repository }}'


================================================
FILE: gyp/.gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# static files generated from Django application using `collectstatic`
media
static

test/fixtures/out
*.actual


================================================
FILE: gyp/.release-please-manifest.json
================================================
{
    ".": "0.21.1"
}


================================================
FILE: gyp/AUTHORS
================================================
# 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>
Christian Clauss <cclauss@me.com>


================================================
FILE: gyp/CHANGELOG.md
================================================
# Changelog

## [0.21.1](https://github.com/nodejs/gyp-next/compare/v0.21.0...v0.21.1) (2026-01-24)


### Bug Fixes

* replace weak hash functions with SHA-256 ([#329](https://github.com/nodejs/gyp-next/issues/329)) ([958029e](https://github.com/nodejs/gyp-next/commit/958029e6e4969a871d15e78cd083bb102bebb381))

## [0.21.0](https://github.com/nodejs/gyp-next/compare/v0.20.5...v0.21.0) (2025-11-04)


### Features

* add support for Visual Studio 2026 ([#319](https://github.com/nodejs/gyp-next/issues/319)) ([cb13bbc](https://github.com/nodejs/gyp-next/commit/cb13bbc4ab7a7d86b51221b39ebee4281e1d3e19))

## [0.20.5](https://github.com/nodejs/gyp-next/compare/v0.20.4...v0.20.5) (2025-10-13)


### Bug Fixes

* Fix ruff v0.13.0 adds ruff rule RUF059 ([bd4491a](https://github.com/nodejs/gyp-next/commit/bd4491a3ba641eeb040b785bbce367f72c3baf19))
* handle `None` case in xcode_emulation regexes ([#311](https://github.com/nodejs/gyp-next/issues/311)) ([b21ee31](https://github.com/nodejs/gyp-next/commit/b21ee3150eea9fc1a8811e910e5ba64f42e1fb77))

## [0.20.4](https://github.com/nodejs/gyp-next/compare/v0.20.3...v0.20.4) (2025-08-25)


### Bug Fixes

* **cli:** remove duplicate usage ([#308](https://github.com/nodejs/gyp-next/issues/308)) ([0996f60](https://github.com/nodejs/gyp-next/commit/0996f60e9bc83ec9d7b31e39bebd23f8dc990130))
* **docs:** Add running gyp via uv ([#306](https://github.com/nodejs/gyp-next/issues/306)) ([0e43f61](https://github.com/nodejs/gyp-next/commit/0e43f61da8154f9b460ccba9ce4c0a25d2383ac4))

## [0.20.3](https://github.com/nodejs/gyp-next/compare/v0.20.2...v0.20.3) (2025-08-20)


### Bug Fixes

* compilation failure on the OpenHarmony platform ([#301](https://github.com/nodejs/gyp-next/issues/301)) ([0cf7a14](https://github.com/nodejs/gyp-next/commit/0cf7a142be06f686b8b42849791de902f177cf9f))
* make xcode_emulation handle `xcodebuild` not in the `PATH` ([#303](https://github.com/nodejs/gyp-next/issues/303)) ([8224dee](https://github.com/nodejs/gyp-next/commit/8224deef984add7e7afe846cfb82c9d3fa6da1fb))

## [0.20.2](https://github.com/nodejs/gyp-next/compare/v0.20.1...v0.20.2) (2025-06-22)


### Bug Fixes

* Python lint import-outside-top-level ruff rule PLC0415 ([#298](https://github.com/nodejs/gyp-next/issues/298)) ([34f4df6](https://github.com/nodejs/gyp-next/commit/34f4df614936ee6a056e47406ebbe7e3c1cb6540))

## [0.20.1](https://github.com/nodejs/gyp-next/compare/v0.20.0...v0.20.1) (2025-06-06)


### Bug Fixes

* Ensure Consistent Order of build_files in WriteAutoRegenerationRule ([#293](https://github.com/nodejs/gyp-next/issues/293)) ([59b5903](https://github.com/nodejs/gyp-next/commit/59b59035f4ae63419343ffdafe0f0ff511ada17d))
* ignore failure of `GetCompilerPredefines` ([#295](https://github.com/nodejs/gyp-next/issues/295)) ([0eaea29](https://github.com/nodejs/gyp-next/commit/0eaea297f0fbb0869597aa162f66f78eb2468fad))

## [0.20.0](https://github.com/nodejs/gyp-next/compare/v0.19.1...v0.20.0) (2025-03-27)


### ⚠ BREAKING CHANGES

* resolve issue with relative paths during linking ([#284](https://github.com/nodejs/gyp-next/issues/284))

### Bug Fixes

* python lint  more ruff rules ([#291](https://github.com/nodejs/gyp-next/issues/291)) ([fabc78c](https://github.com/nodejs/gyp-next/commit/fabc78caffcf988365d970ced5a151f40525077e))
* remove explicit installation of setuptools ([#278](https://github.com/nodejs/gyp-next/issues/278)) ([e476778](https://github.com/nodejs/gyp-next/commit/e4767782c70ca8427184694589d9f0ded5eeed22))
* resolve issue with relative paths during linking ([#284](https://github.com/nodejs/gyp-next/issues/284)) ([a2d7439](https://github.com/nodejs/gyp-next/commit/a2d7439fbd3c03f01e1149fdbe682f754bc6cc7f))

## [0.19.1](https://github.com/nodejs/gyp-next/compare/v0.19.0...v0.19.1) (2024-12-09)


### Bug Fixes

* fixup for break in EscapeForCString ([#274](https://github.com/nodejs/gyp-next/issues/274)) ([610f661](https://github.com/nodejs/gyp-next/commit/610f661da877a358c8b3cbc106b528fb1d0b8095))

## [0.19.0](https://github.com/nodejs/gyp-next/compare/v0.18.3...v0.19.0) (2024-12-03)


### Features

* provide escaped version of `PROD
Download .txt
gitextract_l_68u8to/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   ├── scripts/
│   │   └── check-engines.js
│   └── workflows/
│       ├── release-please.yml
│       ├── tests.yml
│       ├── update-gyp-next.yml
│       └── visual-studio.yml
├── .gitignore
├── .npmignore
├── .release-please-manifest.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── addon.gypi
├── bin/
│   └── node-gyp.js
├── docs/
│   ├── Error-pre-versions-of-node-cannot-be-installed.md
│   ├── Force-npm-to-use-global-node-gyp.md
│   ├── Home.md
│   ├── Linking-to-OpenSSL.md
│   ├── README.md
│   ├── Updating-npm-bundled-node-gyp.md
│   └── binding.gyp-files-in-the-wild.md
├── eslint.config.js
├── gyp/
│   ├── .github/
│   │   ├── dependabot.yml
│   │   └── workflows/
│   │       ├── node-gyp.yml
│   │       ├── nodejs.yml
│   │       ├── python_tests.yml
│   │       └── release-please.yml
│   ├── .gitignore
│   ├── .release-please-manifest.json
│   ├── AUTHORS
│   ├── CHANGELOG.md
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── LICENSE
│   ├── README.md
│   ├── data/
│   │   ├── ninja/
│   │   │   └── build.ninja
│   │   └── win/
│   │       └── large-pdb-shim.cc
│   ├── docs/
│   │   ├── GypVsCMake.md
│   │   ├── Hacking.md
│   │   ├── InputFormatReference.md
│   │   ├── LanguageSpecification.md
│   │   ├── README.md
│   │   ├── Testing.md
│   │   └── UserDocumentation.md
│   ├── gyp
│   ├── gyp.bat
│   ├── gyp_main.py
│   ├── pylib/
│   │   ├── gyp/
│   │   │   ├── MSVSNew.py
│   │   │   ├── MSVSProject.py
│   │   │   ├── MSVSSettings.py
│   │   │   ├── MSVSSettings_test.py
│   │   │   ├── MSVSToolFile.py
│   │   │   ├── MSVSUserFile.py
│   │   │   ├── MSVSUtil.py
│   │   │   ├── MSVSVersion.py
│   │   │   ├── __init__.py
│   │   │   ├── common.py
│   │   │   ├── common_test.py
│   │   │   ├── easy_xml.py
│   │   │   ├── easy_xml_test.py
│   │   │   ├── flock_tool.py
│   │   │   ├── generator/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── analyzer.py
│   │   │   │   ├── android.py
│   │   │   │   ├── cmake.py
│   │   │   │   ├── compile_commands_json.py
│   │   │   │   ├── dump_dependency_json.py
│   │   │   │   ├── eclipse.py
│   │   │   │   ├── gypd.py
│   │   │   │   ├── gypsh.py
│   │   │   │   ├── make.py
│   │   │   │   ├── msvs.py
│   │   │   │   ├── msvs_test.py
│   │   │   │   ├── ninja.py
│   │   │   │   ├── ninja_test.py
│   │   │   │   ├── xcode.py
│   │   │   │   └── xcode_test.py
│   │   │   ├── input.py
│   │   │   ├── input_test.py
│   │   │   ├── mac_tool.py
│   │   │   ├── msvs_emulation.py
│   │   │   ├── ninja_syntax.py
│   │   │   ├── simple_copy.py
│   │   │   ├── win_tool.py
│   │   │   ├── xcode_emulation.py
│   │   │   ├── xcode_emulation_test.py
│   │   │   ├── xcode_ninja.py
│   │   │   ├── xcodeproj_file.py
│   │   │   └── xml_fix.py
│   │   └── packaging/
│   │       ├── LICENSE
│   │       ├── LICENSE.APACHE
│   │       ├── LICENSE.BSD
│   │       ├── __init__.py
│   │       ├── _elffile.py
│   │       ├── _manylinux.py
│   │       ├── _musllinux.py
│   │       ├── _parser.py
│   │       ├── _structures.py
│   │       ├── _tokenizer.py
│   │       ├── markers.py
│   │       ├── metadata.py
│   │       ├── py.typed
│   │       ├── requirements.py
│   │       ├── specifiers.py
│   │       ├── tags.py
│   │       ├── utils.py
│   │       └── version.py
│   ├── pyproject.toml
│   ├── release-please-config.json
│   ├── test_gyp.py
│   └── tools/
│       ├── README
│       ├── Xcode/
│       │   ├── README
│       │   └── Specifications/
│       │       ├── gyp.pbfilespec
│       │       └── gyp.xclangspec
│       ├── emacs/
│       │   ├── README
│       │   ├── gyp-tests.el
│       │   ├── gyp.el
│       │   ├── run-unit-tests.sh
│       │   └── testdata/
│       │       ├── media.gyp
│       │       └── media.gyp.fontified
│       ├── graphviz.py
│       ├── pretty_gyp.py
│       ├── pretty_sln.py
│       └── pretty_vcproj.py
├── lib/
│   ├── Find-VisualStudio.cs
│   ├── build.js
│   ├── clean.js
│   ├── configure.js
│   ├── create-config-gypi.js
│   ├── download.js
│   ├── find-node-directory.js
│   ├── find-python.js
│   ├── find-visualstudio.js
│   ├── install.js
│   ├── list.js
│   ├── log.js
│   ├── node-gyp.js
│   ├── process-release.js
│   ├── rebuild.js
│   ├── remove.js
│   └── util.js
├── macOS_Catalina_acid_test.sh
├── package.json
├── release-please-config.json
├── src/
│   └── win_delay_load_hook.cc
├── test/
│   ├── common.js
│   ├── fixtures/
│   │   ├── VSSetup_VS_2019_Professional_workload.txt
│   │   ├── VSSetup_VS_2022_VS2019_workload.txt
│   │   ├── VSSetup_VS_2022_multiple_install.txt
│   │   ├── VSSetup_VS_2022_workload.txt
│   │   ├── VSSetup_VS_2022_workload_missing_sdk.txt
│   │   ├── VS_2017_BuildTools_minimal.txt
│   │   ├── VS_2017_Community_workload.txt
│   │   ├── VS_2017_Express.txt
│   │   ├── VS_2017_Unusable.txt
│   │   ├── VS_2019_BuildTools_minimal.txt
│   │   ├── VS_2019_Community_workload.txt
│   │   ├── VS_2019_Preview.txt
│   │   ├── VS_2022_BuildTools_arm64_only.txt
│   │   ├── VS_2022_Community_workload.txt
│   │   ├── VS_2026_Community_workload.txt
│   │   ├── VS_2026_Insiders_workload.txt
│   │   ├── certs.js
│   │   ├── nodedir/
│   │   │   └── include/
│   │   │       └── node/
│   │   │           └── config.gypi
│   │   └── test-charmap.py
│   ├── simple-proxy.js
│   ├── test-addon.js
│   ├── test-configure-nodedir.js
│   ├── test-configure-python.js
│   ├── test-create-config-gypi.js
│   ├── test-download.js
│   ├── test-find-accessible-sync.js
│   ├── test-find-node-directory.js
│   ├── test-find-python.js
│   ├── test-find-visualstudio.js
│   ├── test-install.js
│   ├── test-options.js
│   ├── test-process-release.js
│   └── test-windows-make.js
└── update-gyp.py
Download .txt
SYMBOL INDEX (1547 symbols across 90 files)

FILE: bin/node-gyp.js
  function run (line 71) | async function run () {
  function errorMessage (line 119) | function errorMessage () {
  function issueMessage (line 137) | function issueMessage () {

FILE: gyp/gyp_main.py
  function IsCygwin (line 12) | def IsCygwin():
  function UnixifyPath (line 24) | def UnixifyPath(path):

FILE: gyp/pylib/gyp/MSVSNew.py
  function cmp (line 15) | def cmp(x, y):
  function MakeGuid (line 32) | def MakeGuid(name, seed="msvs_new"):
  class MSVSSolutionEntry (line 69) | class MSVSSolutionEntry:
    method __cmp__ (line 70) | def __cmp__(self, other):
  class MSVSFolder (line 75) | class MSVSFolder(MSVSSolutionEntry):
    method __init__ (line 78) | def __init__(self, path, name=None, entries=None, guid=None, items=None):
    method get_guid (line 105) | def get_guid(self):
  class MSVSProject (line 115) | class MSVSProject(MSVSSolutionEntry):
    method __init__ (line 118) | def __init__(
    method set_dependencies (line 163) | def set_dependencies(self, dependencies):
    method get_guid (line 166) | def get_guid(self):
    method set_msbuild_toolset (line 183) | def set_msbuild_toolset(self, msbuild_toolset):
  class MSVSSolution (line 190) | class MSVSSolution:
    method __init__ (line 193) | def __init__(
    method Write (line 230) | def Write(self, writer=gyp.common.WriteOnDiff):

FILE: gyp/pylib/gyp/MSVSProject.py
  class Tool (line 12) | class Tool:
    method __init__ (line 15) | def __init__(self, name, attrs=None):
    method _GetSpecification (line 25) | def _GetSpecification(self):
  class Filter (line 34) | class Filter:
    method __init__ (line 37) | def __init__(self, name, contents=None):
  class Writer (line 51) | class Writer:
    method __init__ (line 54) | def __init__(self, project_path, version, name, guid=None, platforms=N...
    method AddToolFile (line 84) | def AddToolFile(self, path):
    method _GetSpecForConfiguration (line 92) | def _GetSpecForConfiguration(self, config_type, config_name, attrs, to...
    method AddConfig (line 122) | def AddConfig(self, name, attrs=None, tools=None):
    method _AddFilesToNode (line 133) | def _AddFilesToNode(self, parent, files):
    method AddFiles (line 151) | def AddFiles(self, files):
    method AddFileConfig (line 165) | def AddFileConfig(self, path, config, attrs=None, tools=None):
    method WriteIfChanged (line 186) | def WriteIfChanged(self):

FILE: gyp/pylib/gyp/MSVSSettings.py
  class _Tool (line 35) | class _Tool:
    method __init__ (line 43) | def __init__(self, msvs_name, msbuild_name):
  function _AddTool (line 48) | def _AddTool(tool):
  function _GetMSBuildToolSettings (line 62) | def _GetMSBuildToolSettings(msbuild_settings, tool):
  class _Type (line 67) | class _Type:
    method ValidateMSVS (line 70) | def ValidateMSVS(self, value):
    method ValidateMSBuild (line 80) | def ValidateMSBuild(self, value):
    method ConvertToMSBuild (line 90) | def ConvertToMSBuild(self, value):
  class _String (line 105) | class _String(_Type):
    method ValidateMSVS (line 108) | def ValidateMSVS(self, value):
    method ValidateMSBuild (line 112) | def ValidateMSBuild(self, value):
    method ConvertToMSBuild (line 116) | def ConvertToMSBuild(self, value):
  class _StringList (line 121) | class _StringList(_Type):
    method ValidateMSVS (line 124) | def ValidateMSVS(self, value):
    method ValidateMSBuild (line 128) | def ValidateMSBuild(self, value):
    method ConvertToMSBuild (line 132) | def ConvertToMSBuild(self, value):
  class _Boolean (line 140) | class _Boolean(_Type):
    method _Validate (line 143) | def _Validate(self, value):
    method ValidateMSVS (line 147) | def ValidateMSVS(self, value):
    method ValidateMSBuild (line 150) | def ValidateMSBuild(self, value):
    method ConvertToMSBuild (line 153) | def ConvertToMSBuild(self, value):
  class _Integer (line 158) | class _Integer(_Type):
    method __init__ (line 161) | def __init__(self, msbuild_base=10):
    method ValidateMSVS (line 165) | def ValidateMSVS(self, value):
    method ValidateMSBuild (line 169) | def ValidateMSBuild(self, value):
    method ConvertToMSBuild (line 173) | def ConvertToMSBuild(self, value):
  class _Enumeration (line 178) | class _Enumeration(_Type):
    method __init__ (line 191) | def __init__(self, label_list, new=None):
    method ValidateMSVS (line 198) | def ValidateMSVS(self, value):
    method ValidateMSBuild (line 202) | def ValidateMSBuild(self, value):
    method ConvertToMSBuild (line 206) | def ConvertToMSBuild(self, value):
  function _Same (line 234) | def _Same(tool, name, setting_type):
  function _Renamed (line 245) | def _Renamed(tool, msvs_name, msbuild_name, setting_type):
  function _Moved (line 264) | def _Moved(tool, settings_name, msbuild_tool_name, setting_type):
  function _MovedAndRenamed (line 270) | def _MovedAndRenamed(
  function _MSVSOnly (line 293) | def _MSVSOnly(tool, name, setting_type):
  function _MSBuildOnly (line 310) | def _MSBuildOnly(tool, name, setting_type):
  function _ConvertedToAdditionalOption (line 328) | def _ConvertedToAdditionalOption(tool, msvs_name, flag):
  function _CustomGeneratePreprocessedFile (line 350) | def _CustomGeneratePreprocessedFile(tool, msvs_name):
  function _ValidateExclusionSetting (line 384) | def _ValidateExclusionSetting(setting, settings, error_msg, stderr=sys.s...
  function FixVCMacroSlashes (line 408) | def FixVCMacroSlashes(s):
  function ConvertVCMacrosToMSBuild (line 421) | def ConvertVCMacrosToMSBuild(s):
  function ConvertToMSBuildSettings (line 444) | def ConvertToMSBuildSettings(msvs_settings, stderr=sys.stderr):
  function ValidateMSVSSettings (line 492) | def ValidateMSVSSettings(settings, stderr=sys.stderr):
  function ValidateMSBuildSettings (line 503) | def ValidateMSBuildSettings(settings, stderr=sys.stderr):
  function _ValidateSettings (line 514) | def _ValidateSettings(validators, settings, stderr):

FILE: gyp/pylib/gyp/MSVSSettings_test.py
  class TestSequenceFunctions (line 15) | class TestSequenceFunctions(unittest.TestCase):
    method setUp (line 16) | def setUp(self):
    method _ExpectedWarnings (line 19) | def _ExpectedWarnings(self, expected):
    method testValidateMSVSSettings_tool_names (line 26) | def testValidateMSVSSettings_tool_names(self):
    method testValidateMSVSSettings_settings (line 45) | def testValidateMSVSSettings_settings(self):
    method testValidateMSBuildSettings_settings (line 298) | def testValidateMSBuildSettings_settings(self):
    method testConvertToMSBuildSettings_empty (line 589) | def testConvertToMSBuildSettings_empty(self):
    method testConvertToMSBuildSettings_minimal (line 599) | def testConvertToMSBuildSettings_minimal(self):
    method testConvertToMSBuildSettings_warnings (line 631) | def testConvertToMSBuildSettings_warnings(self):
    method testConvertToMSBuildSettings_full_synthetic (line 692) | def testConvertToMSBuildSettings_full_synthetic(self):
    method testConvertToMSBuildSettings_actual (line 1143) | def testConvertToMSBuildSettings_actual(self):

FILE: gyp/pylib/gyp/MSVSToolFile.py
  class Writer (line 10) | class Writer:
    method __init__ (line 13) | def __init__(self, tool_file_path, name):
    method AddCustomBuildRule (line 24) | def AddCustomBuildRule(
    method WriteIfChanged (line 50) | def WriteIfChanged(self):

FILE: gyp/pylib/gyp/MSVSUserFile.py
  function _FindCommandInPath (line 16) | def _FindCommandInPath(command):
  function _QuoteWin32CommandLineArgs (line 38) | def _QuoteWin32CommandLineArgs(args):
  class Writer (line 55) | class Writer:
    method __init__ (line 58) | def __init__(self, user_file_path, version, name):
    method AddConfig (line 71) | def AddConfig(self, name):
    method AddDebugSettings (line 79) | def AddDebugSettings(
    method WriteIfChanged (line 139) | def WriteIfChanged(self):

FILE: gyp/pylib/gyp/MSVSUtil.py
  function _GetLargePdbShimCcPath (line 20) | def _GetLargePdbShimCcPath():
  function _DeepCopySomeKeys (line 29) | def _DeepCopySomeKeys(in_dict, keys):
  function _SuffixName (line 47) | def _SuffixName(name, suffix):
  function _ShardName (line 61) | def _ShardName(name, number):
  function ShardTargets (line 73) | def ShardTargets(target_list, target_dicts):
  function _GetPdbPath (line 129) | def _GetPdbPath(target_dict, config_name, vars):
  function InsertLargePdbShims (line 168) | def InsertLargePdbShims(target_list, target_dicts, vars):

FILE: gyp/pylib/gyp/MSVSVersion.py
  function JoinPath (line 15) | def JoinPath(*args):
  class VisualStudioVersion (line 19) | class VisualStudioVersion:
    method __init__ (line 22) | def __init__(
    method ShortName (line 48) | def ShortName(self):
    method Description (line 51) | def Description(self):
    method SolutionVersion (line 55) | def SolutionVersion(self):
    method ProjectVersion (line 59) | def ProjectVersion(self):
    method FlatSolution (line 63) | def FlatSolution(self):
    method UsesVcxproj (line 66) | def UsesVcxproj(self):
    method ProjectExtension (line 70) | def ProjectExtension(self):
    method Path (line 74) | def Path(self):
    method ToolPath (line 78) | def ToolPath(self, tool):
    method DefaultToolset (line 82) | def DefaultToolset(self):
    method _SetupScriptInternal (line 87) | def _SetupScriptInternal(self, target_arch):
    method SetupScript (line 144) | def SetupScript(self, target_arch):
  function _RegistryQueryBase (line 154) | def _RegistryQueryBase(sysdir, key, value):
  function _RegistryQuery (line 184) | def _RegistryQuery(key, value=None):
  function _RegistryGetValueUsingWinReg (line 212) | def _RegistryGetValueUsingWinReg(key, value):
  function _RegistryGetValue (line 233) | def _RegistryGetValue(key, value):
  function _CreateVersion (line 263) | def _CreateVersion(name, path, sdk_based=False):
  function _ConvertToCygpath (line 440) | def _ConvertToCygpath(path):
  function _DetectVisualStudioVersions (line 448) | def _DetectVisualStudioVersions(versions_to_check, force_express):
  function SelectVisualStudioVersion (line 541) | def SelectVisualStudioVersion(version="auto", allow_fallback=True):

FILE: gyp/pylib/gyp/__init__.py
  function EscapeForCString (line 29) | def EscapeForCString(string: bytes | str) -> str:
  function DebugOutput (line 43) | def DebugOutput(mode, message, *args):
  function FindBuildFiles (line 60) | def FindBuildFiles():
  function Load (line 70) | def Load(
  function NameValueListToDict (line 187) | def NameValueListToDict(name_value_list):
  function ShlexEnv (line 210) | def ShlexEnv(env_name):
  function FormatOpt (line 216) | def FormatOpt(opt, value):
  function RegenerateAppendFlag (line 222) | def RegenerateAppendFlag(flag, values, predicate, env_name, options):
  function RegenerateFlags (line 245) | def RegenerateFlags(options):
  class RegeneratableOptionParser (line 304) | class RegeneratableOptionParser(argparse.ArgumentParser):
    method __init__ (line 305) | def __init__(self, usage):
    method add_argument (line 309) | def add_argument(self, *args, **kw):
    method parse_args (line 340) | def parse_args(self, *args):
  function gyp_main (line 346) | def gyp_main(args):
  function main (line 693) | def main(args):
  function script_main (line 702) | def script_main():

FILE: gyp/pylib/gyp/common.py
  class memoize (line 18) | class memoize:
    method __init__ (line 19) | def __init__(self, func):
    method __call__ (line 23) | def __call__(self, *args):
  class GypError (line 32) | class GypError(Exception):
  function ExceptionAppend (line 38) | def ExceptionAppend(e, msg):
  function FindQualifiedTargets (line 48) | def FindQualifiedTargets(target, qualified_list):
  function ParseQualifiedTarget (line 56) | def ParseQualifiedTarget(target):
  function ResolveTarget (line 75) | def ResolveTarget(build_file, target, toolset):
  function BuildFile (line 110) | def BuildFile(fully_qualified_target):
  function GetEnvironFallback (line 115) | def GetEnvironFallback(var_list, default):
  function QualifiedTarget (line 124) | def QualifiedTarget(build_file, target, toolset):
  function RelativePath (line 135) | def RelativePath(path, relative_to, follow_path_symlink=True):
  function InvertRelativePath (line 178) | def InvertRelativePath(path, toplevel_dir=None):
  function FixIfRelativePath (line 191) | def FixIfRelativePath(path, relative_to):
  function UnrelativePath (line 198) | def UnrelativePath(path, relative_to):
  function EncodePOSIXShellArgument (line 261) | def EncodePOSIXShellArgument(argument):
  function EncodePOSIXShellList (line 281) | def EncodePOSIXShellList(list):
  function DeepDependencyTargets (line 294) | def DeepDependencyTargets(target_dicts, roots):
  function BuildFileTargets (line 313) | def BuildFileTargets(target_list, build_file):
  function AllTargets (line 318) | def AllTargets(target_list, target_dicts, build_file):
  function WriteOnDiff (line 325) | def WriteOnDiff(filename):
  function EnsureDirExists (line 414) | def EnsureDirExists(path):
  function GetCompilerPredefines (line 422) | def GetCompilerPredefines():  # -> dict
  function GetFlavorByPlatform (line 485) | def GetFlavorByPlatform():
  function GetFlavor (line 513) | def GetFlavor(params):
  function CopyTool (line 526) | def CopyTool(flavor, out_path, generator_flags={}):
  function uniquer (line 571) | def uniquer(seq, idfun=lambda x: x):
  class OrderedSet (line 584) | class OrderedSet(MutableSet):  # noqa: PLW1641
    method __init__ (line 586) | def __init__(self, iterable=None):
    method __len__ (line 593) | def __len__(self):
    method __contains__ (line 596) | def __contains__(self, key):
    method add (line 599) | def add(self, key):
    method discard (line 605) | def discard(self, key):
    method __iter__ (line 611) | def __iter__(self):
    method __reversed__ (line 618) | def __reversed__(self):
    method pop (line 626) | def pop(self, last=True):  # pylint: disable=W0221
    method __repr__ (line 633) | def __repr__(self):
    method __eq__ (line 638) | def __eq__(self, other):
    method update (line 644) | def update(self, iterable):
  class CycleError (line 650) | class CycleError(Exception):
    method __init__ (line 653) | def __init__(self, nodes):
    method __str__ (line 656) | def __str__(self):
  function TopologicallySorted (line 660) | def TopologicallySorted(graph, get_edges):
  function CrossCompileRequested (line 703) | def CrossCompileRequested():
  function IsCygwin (line 717) | def IsCygwin():

FILE: gyp/pylib/gyp/common_test.py
  class TestTopologicallySorted (line 18) | class TestTopologicallySorted(unittest.TestCase):
    method test_Valid (line 19) | def test_Valid(self):
    method test_Cycle (line 38) | def test_Cycle(self):
  class TestGetFlavor (line 55) | class TestGetFlavor(unittest.TestCase):
    method setUp (line 60) | def setUp(self):
    method tearDown (line 63) | def tearDown(self):
    method assertFlavor (line 66) | def assertFlavor(self, expected, argument, param):
    method test_platform_default (line 70) | def test_platform_default(self):
    method test_param (line 80) | def test_param(self):
    class MockCommunicate (line 83) | class MockCommunicate:
      method __init__ (line 84) | def __init__(self, stdout):
      method decode (line 87) | def decode(self, encoding):
    method test_GetCompilerPredefines (line 93) | def test_GetCompilerPredefines(self, mock_mkstemp, mock_unlink, mock_c...

FILE: gyp/pylib/gyp/easy_xml.py
  function XmlToString (line 12) | def XmlToString(content, encoding="utf-8", pretty=False):
  function _ConstructContentList (line 60) | def _ConstructContentList(xml_parts, specification, pretty, level=0):
  function WriteXmlIfChanged (line 110) | def WriteXmlIfChanged(
  function _XmlEscape (line 160) | def _XmlEscape(value, attr=False):

FILE: gyp/pylib/gyp/easy_xml_test.py
  class TestSequenceFunctions (line 15) | class TestSequenceFunctions(unittest.TestCase):
    method setUp (line 16) | def setUp(self):
    method test_EasyXml_simple (line 19) | def test_EasyXml_simple(self):
    method test_EasyXml_simple_with_attributes (line 30) | def test_EasyXml_simple_with_attributes(self):
    method test_EasyXml_escaping (line 36) | def test_EasyXml_escaping(self):
    method test_EasyXml_pretty (line 46) | def test_EasyXml_pretty(self):
    method test_EasyXml_complex (line 63) | def test_EasyXml_complex(self):

FILE: gyp/pylib/gyp/flock_tool.py
  function main (line 16) | def main(args):
  class FlockTool (line 21) | class FlockTool:
    method Dispatch (line 24) | def Dispatch(self, args):
    method _CommandifyName (line 32) | def _CommandifyName(self, name_string):
    method ExecFlock (line 36) | def ExecFlock(self, lockfile, *cmd_list):

FILE: gyp/pylib/gyp/generator/analyzer.py
  function _ToGypPath (line 123) | def _ToGypPath(path):
  function _ResolveParent (line 130) | def _ResolveParent(path, base_path_components):
  function _AddSources (line 151) | def _AddSources(sources, base_path, base_path_components, result):
  function _ExtractSourcesFromAction (line 175) | def _ExtractSourcesFromAction(action, base_path, base_path_components, r...
  function _ToLocalPath (line 180) | def _ToLocalPath(toplevel_dir, path):
  function _ExtractSources (line 189) | def _ExtractSources(target, target_dict, toplevel_dir):
  class Target (line 218) | class Target:
    method __init__ (line 238) | def __init__(self, name):
  class Config (line 254) | class Config:
    method __init__ (line 259) | def __init__(self):
    method Init (line 265) | def Init(self, params):
  function _WasBuildFileModified (line 289) | def _WasBuildFileModified(build_file, data, files, toplevel_dir):
  function _GetOrCreateTargetByName (line 319) | def _GetOrCreateTargetByName(targets, target_name):
  function _DoesTargetTypeRequireBuild (line 330) | def _DoesTargetTypeRequireBuild(target_dict):
  function _GenerateTargets (line 340) | def _GenerateTargets(data, target_list, target_dicts, toplevel_dir, file...
  function _GetUnqualifiedToTargetMapping (line 428) | def _GetUnqualifiedToTargetMapping(all_targets, to_find):
  function _DoesTargetDependOnMatchingTargets (line 447) | def _DoesTargetDependOnMatchingTargets(target):
  function _GetTargetsDependingOnMatchingTargets (line 468) | def _GetTargetsDependingOnMatchingTargets(possible_targets):
  function _AddCompileTargets (line 481) | def _AddCompileTargets(target, roots, add_if_no_ancestor, result):
  function _GetCompileTargets (line 538) | def _GetCompileTargets(matching_targets, supplied_targets):
  function _WriteOutput (line 549) | def _WriteOutput(params, **values):
  function _WasGypIncludeFileModified (line 593) | def _WasGypIncludeFileModified(params, files):
  function _NamesNotIn (line 604) | def _NamesNotIn(names, mapping):
  function _LookupTargets (line 609) | def _LookupTargets(names, mapping):
  function CalculateVariables (line 615) | def CalculateVariables(default_variables, params):
  class TargetCalculator (line 630) | class TargetCalculator:
    method __init__ (line 633) | def __init__(
    method _supplied_target_names (line 660) | def _supplied_target_names(self):
    method _supplied_target_names_no_all (line 663) | def _supplied_target_names_no_all(self):
    method is_build_impacted (line 669) | def is_build_impacted(self):
    method find_matching_test_target_names (line 673) | def find_matching_test_target_names(self):
    method find_matching_compile_target_names (line 719) | def find_matching_compile_target_names(self):
  function GenerateOutput (line 743) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/android.py
  function IsCPPExtension (line 81) | def IsCPPExtension(ext):
  function Sourceify (line 85) | def Sourceify(path):
  class AndroidMkWriter (line 103) | class AndroidMkWriter:
    method __init__ (line 109) | def __init__(self, android_top_dir):
    method Write (line 112) | def Write(
    method WriteActions (line 252) | def WriteActions(self, actions, extra_sources, extra_outputs):
    method WriteRules (line 358) | def WriteRules(self, rules, extra_sources, extra_outputs):
    method WriteCopies (line 458) | def WriteCopies(self, copies, extra_outputs):
    method WriteSourceFlags (line 500) | def WriteSourceFlags(self, spec, configs):
    method WriteSources (line 553) | def WriteSources(self, spec, configs, extra_sources):
    method ComputeAndroidModule (line 638) | def ComputeAndroidModule(self, spec):
    method ComputeOutputParts (line 669) | def ComputeOutputParts(self, spec):
    method ComputeOutputBasename (line 709) | def ComputeOutputBasename(self, spec):
    method ComputeOutput (line 717) | def ComputeOutput(self, spec):
    method NormalizeIncludePaths (line 747) | def NormalizeIncludePaths(self, include_paths):
    method ExtractIncludesFromCFlags (line 763) | def ExtractIncludesFromCFlags(self, cflags):
    method FilterLibraries (line 781) | def FilterLibraries(self, libraries):
    method ComputeDeps (line 819) | def ComputeDeps(self, spec):
    method WriteTargetFlags (line 842) | def WriteTargetFlags(self, spec, configs, link_deps):
    method WriteTarget (line 885) | def WriteTarget(
    method WriteList (line 963) | def WriteList(
    method WriteLn (line 985) | def WriteLn(self, text=""):
    method LocalPathify (line 988) | def LocalPathify(self, path):
    method ExpandInputRoot (line 1007) | def ExpandInputRoot(self, template, expansion, dirname):
  function PerformBuild (line 1017) | def PerformBuild(data, configurations, params):
  function GenerateOutput (line 1028) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/cmake.py
  function RemovePrefix (line 76) | def RemovePrefix(a, prefix):
  function CalculateVariables (line 81) | def CalculateVariables(default_variables, params):
  function Compilable (line 86) | def Compilable(filename):
  function Linkable (line 91) | def Linkable(filename):
  function NormjoinPathForceCMakeSource (line 96) | def NormjoinPathForceCMakeSource(base_path, rel_path):
  function NormjoinPath (line 114) | def NormjoinPath(base_path, rel_path):
  function CMakeStringEscape (line 125) | def CMakeStringEscape(a):
  function SetFileProperty (line 144) | def SetFileProperty(output, source_name, property_name, values, sep):
  function SetFilesProperty (line 157) | def SetFilesProperty(output, variable, property_name, values, sep):
  function SetTargetProperty (line 170) | def SetTargetProperty(output, target_name, property_name, values, sep=""):
  function SetVariable (line 183) | def SetVariable(output, variable_name, value):
  function SetVariableList (line 192) | def SetVariableList(output, variable_name, values):
  function UnsetVariable (line 205) | def UnsetVariable(output, variable_name):
  function WriteVariable (line 212) | def WriteVariable(output, variable_name, prepend=None):
  class CMakeTargetType (line 220) | class CMakeTargetType:
    method __init__ (line 221) | def __init__(self, command, modifier, property_modifier):
  function StringToCMakeTargetName (line 236) | def StringToCMakeTargetName(a):
  function WriteActions (line 247) | def WriteActions(target_name, actions, extra_sources, extra_deps, path_t...
  function NormjoinRulePathForceCMakeSource (line 329) | def NormjoinRulePathForceCMakeSource(base_path, rel_path, rule_source):
  function WriteRules (line 336) | def WriteRules(target_name, rules, extra_sources, extra_deps, path_to_gy...
  function WriteCopies (line 454) | def WriteCopies(target_name, copies, extra_deps, path_to_gyp, output):
  function CreateCMakeTargetBaseName (line 562) | def CreateCMakeTargetBaseName(qualified_target):
  function CreateCMakeTargetFullName (line 573) | def CreateCMakeTargetFullName(qualified_target):
  class CMakeNamer (line 584) | class CMakeNamer:
    method __init__ (line 605) | def __init__(self, target_list):
    method CreateCMakeTargetName (line 617) | def CreateCMakeTargetName(self, qualified_target):
  function WriteTarget (line 624) | def WriteTarget(
  function GenerateOutputForConfig (line 1139) | def GenerateOutputForConfig(target_list, target_dicts, data, params, con...
  function PerformBuild (line 1260) | def PerformBuild(data, configurations, params):
  function CallGenerateOutputForConfig (line 1286) | def CallGenerateOutputForConfig(arglist):
  function GenerateOutput (line 1295) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/compile_commands_json.py
  function IsMac (line 37) | def IsMac(params):
  function CalculateVariables (line 41) | def CalculateVariables(default_variables, params):
  function AddCommandsForTarget (line 45) | def AddCommandsForTarget(cwd, target, params, per_config_commands):
  function GenerateOutput (line 100) | def GenerateOutput(target_list, target_dicts, data, params):
  function PerformBuild (line 127) | def PerformBuild(data, configurations, params):

FILE: gyp/pylib/gyp/generator/dump_dependency_json.py
  function CalculateVariables (line 46) | def CalculateVariables(default_variables, params):
  function CalculateGeneratorInputInfo (line 57) | def CalculateGeneratorInputInfo(params):
  function GenerateOutput (line 79) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/eclipse.py
  function CalculateVariables (line 60) | def CalculateVariables(default_variables, params):
  function CalculateGeneratorInputInfo (line 70) | def CalculateGeneratorInputInfo(params):
  function GetAllIncludeDirectories (line 79) | def GetAllIncludeDirectories(
  function GetCompilerPath (line 178) | def GetCompilerPath(target_list, data, options):
  function GetAllDefines (line 202) | def GetAllDefines(target_list, target_dicts, data, config_name, params, ...
  function WriteIncludePaths (line 258) | def WriteIncludePaths(out, eclipse_langs, include_dirs):
  function WriteMacros (line 277) | def WriteMacros(out, eclipse_langs, defines):
  function GenerateOutputForConfig (line 296) | def GenerateOutputForConfig(target_list, target_dicts, data, params, con...
  function GenerateCdtSettingsFile (line 331) | def GenerateCdtSettingsFile(
  function GenerateClasspathFile (line 372) | def GenerateClasspathFile(
  function GetJavaJars (line 407) | def GetJavaJars(target_list, target_dicts, toplevel_dir):
  function GetJavaSourceDirs (line 420) | def GetJavaSourceDirs(target_list, target_dicts, toplevel_dir):
  function GenerateOutput (line 448) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/gypd.py
  function GenerateOutput (line 73) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/gypsh.py
  function GenerateOutput (line 40) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/make.py
  function CalculateVariables (line 66) | def CalculateVariables(default_variables, params):
  function CalculateGeneratorInputInfo (line 112) | def CalculateGeneratorInputInfo(params):
  function WriteRootHeaderSuffixRules (line 628) | def WriteRootHeaderSuffixRules(writer):
  function Compilable (line 697) | def Compilable(filename):
  function Linkable (line 702) | def Linkable(filename):
  function Target (line 707) | def Target(filename):
  function EscapeShellArgument (line 712) | def EscapeShellArgument(s):
  function EscapeMakeVariableExpansion (line 720) | def EscapeMakeVariableExpansion(s):
  function EscapeCppDefine (line 726) | def EscapeCppDefine(s):
  function QuoteIfNecessary (line 735) | def QuoteIfNecessary(string):
  function replace_sep (line 743) | def replace_sep(string):
  function StringToMakefileVariable (line 749) | def StringToMakefileVariable(string):
  function Sourceify (line 757) | def Sourceify(path):
  function QuoteSpaces (line 766) | def QuoteSpaces(s, quote=r"\ "):
  function SourceifyAndQuoteSpaces (line 770) | def SourceifyAndQuoteSpaces(path):
  class MakefileWriter (line 784) | class MakefileWriter:
    method __init__ (line 790) | def __init__(self, generator_flags, flavor):
    method Write (line 837) | def Write(
    method WriteSubMake (line 990) | def WriteSubMake(self, output_filename, makefile_path, targets, build_...
    method WriteActions (line 1018) | def WriteActions(
    method WriteRules (line 1143) | def WriteRules(
    method WriteCopies (line 1287) | def WriteCopies(self, copies, extra_outputs, part_of_all):
    method WriteMacBundleResources (line 1327) | def WriteMacBundleResources(self, resources, bundle_deps):
    method WriteMacInfoPlist (line 1344) | def WriteMacInfoPlist(self, bundle_deps):
    method WriteSources (line 1384) | def WriteSources(
    method WritePchTargets (line 1532) | def WritePchTargets(self, pch_commands):
    method ComputeOutputBasename (line 1563) | def ComputeOutputBasename(self, spec):
    method _InstallImmediately (line 1615) | def _InstallImmediately(self):
    method ComputeOutput (line 1623) | def ComputeOutput(self, spec):
    method ComputeMacBundleOutput (line 1637) | def ComputeMacBundleOutput(self, spec):
    method ComputeMacBundleBinaryOutput (line 1643) | def ComputeMacBundleBinaryOutput(self, spec):
    method ComputeDeps (line 1648) | def ComputeDeps(self, spec):
    method GetSharedObjectFromSidedeck (line 1674) | def GetSharedObjectFromSidedeck(self, sidedeck):
    method GetUnversionedSidedeckFromSidedeck (line 1678) | def GetUnversionedSidedeckFromSidedeck(self, sidedeck):
    method WriteDependencyOnExtraOutputs (line 1682) | def WriteDependencyOnExtraOutputs(self, target, extra_outputs):
    method WriteTarget (line 1690) | def WriteTarget(
    method WriteList (line 2076) | def WriteList(self, value_list, variable=None, prefix="", quoter=Quote...
    method WriteDoCmd (line 2089) | def WriteDoCmd(
    method WriteMakeRule (line 2116) | def WriteMakeRule(
    method WriteAndroidNdkModuleRule (line 2189) | def WriteAndroidNdkModuleRule(self, module_name, all_sources, link_deps):
    method WriteLn (line 2281) | def WriteLn(self, text=""):
    method GetSortedXcodeEnv (line 2284) | def GetSortedXcodeEnv(self, additional_settings=None):
    method GetSortedXcodePostbuildEnv (line 2293) | def GetSortedXcodePostbuildEnv(self):
    method WriteSortedXcodeEnv (line 2305) | def WriteSortedXcodeEnv(self, target, env):
    method Objectify (line 2315) | def Objectify(self, path):
    method Pchify (line 2323) | def Pchify(self, path, lang):
    method Absolutify (line 2333) | def Absolutify(self, path):
    method ExpandInputRoot (line 2343) | def ExpandInputRoot(self, template, expansion, dirname):
    method _InstallableTargetInstallPath (line 2352) | def _InstallableTargetInstallPath(self):
  function WriteAutoRegenerationRule (line 2370) | def WriteAutoRegenerationRule(params, root_makefile, makefile_name, buil...
  function PerformBuild (line 2405) | def PerformBuild(data, configurations, params):
  function GenerateOutput (line 2416) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/msvs.py
  function _GetDomainAndUserName (line 107) | def _GetDomainAndUserName():
  function _NormalizedSource (line 136) | def _NormalizedSource(source):
  function _FixPath (line 154) | def _FixPath(path, separator="\\"):
  function _IsWindowsAbsPath (line 180) | def _IsWindowsAbsPath(path):
  function _FixPaths (line 190) | def _FixPaths(paths, separator="\\"):
  function _ConvertSourcesToFilterHierarchy (line 195) | def _ConvertSourcesToFilterHierarchy(
  function _ToolAppend (line 269) | def _ToolAppend(tools, tool_name, setting, value, only_if_unset=False):
  function _ToolSetOrAppend (line 275) | def _ToolSetOrAppend(tools, tool_name, setting, value, only_if_unset=Fal...
  function _ConfigTargetVersion (line 302) | def _ConfigTargetVersion(config_data):
  function _ConfigPlatform (line 306) | def _ConfigPlatform(config_data):
  function _ConfigBaseName (line 310) | def _ConfigBaseName(config_name, platform_name):
  function _ConfigFullName (line 317) | def _ConfigFullName(config_name, config_data):
  function _ConfigWindowsTargetPlatformVersion (line 322) | def _ConfigWindowsTargetPlatformVersion(config_data, version):
  function _BuildCommandLineForRuleRaw (line 361) | def _BuildCommandLineForRuleRaw(
  function _BuildCommandLineForRule (line 441) | def _BuildCommandLineForRule(spec, rule, has_input_path, do_setup_env):
  function _AddActionStep (line 457) | def _AddActionStep(actions_dict, inputs, outputs, description, command):
  function _AddCustomBuildToolForMSVS (line 492) | def _AddCustomBuildToolForMSVS(
  function _AddAccumulatedActionsToMSVS (line 524) | def _AddAccumulatedActionsToMSVS(p, spec, actions_dict):
  function _RuleExpandPath (line 557) | def _RuleExpandPath(path, input_file):
  function _FindRuleTriggerFiles (line 578) | def _FindRuleTriggerFiles(rule, sources):
  function _RuleInputsAndOutputs (line 590) | def _RuleInputsAndOutputs(rule, trigger_file):
  function _GenerateNativeRulesForMSVS (line 611) | def _GenerateNativeRulesForMSVS(p, rules, output_dir, spec, options):
  function _Cygwinify (line 650) | def _Cygwinify(path):
  function _GenerateExternalRules (line 656) | def _GenerateExternalRules(rules, output_dir, spec, sources, options, ac...
  function _EscapeEnvironmentVariableExpansion (line 741) | def _EscapeEnvironmentVariableExpansion(s):
  function _EscapeCommandLineArgumentForMSVS (line 762) | def _EscapeCommandLineArgumentForMSVS(s):
  function _EscapeVCProjCommandLineArgListItem (line 793) | def _EscapeVCProjCommandLineArgListItem(s):
  function _EscapeCppDefineForMSVS (line 842) | def _EscapeCppDefineForMSVS(s):
  function _EscapeCommandLineArgumentForMSBuild (line 856) | def _EscapeCommandLineArgumentForMSBuild(s):
  function _EscapeMSBuildSpecialCharacters (line 867) | def _EscapeMSBuildSpecialCharacters(s):
  function _EscapeCppDefineForMSBuild (line 881) | def _EscapeCppDefineForMSBuild(s):
  function _GenerateRulesForMSVS (line 892) | def _GenerateRulesForMSVS(
  function _AdjustSourcesForRules (line 922) | def _AdjustSourcesForRules(rules, sources, excluded_sources, is_msbuild):
  function _FilterActionsFromExcluded (line 944) | def _FilterActionsFromExcluded(excluded_sources, actions_to_add):
  function _GetDefaultConfiguration (line 957) | def _GetDefaultConfiguration(spec):
  function _GetGuidOfProject (line 961) | def _GetGuidOfProject(proj_path, spec):
  function _GetMsbuildToolsetOfProject (line 987) | def _GetMsbuildToolsetOfProject(proj_path, spec, version):
  function _GenerateProject (line 1007) | def _GenerateProject(project, options, version, generator_flags, spec):
  function _GenerateMSVSProject (line 1030) | def _GenerateMSVSProject(project, options, version, generator_flags):
  function _GetUniquePlatforms (line 1092) | def _GetUniquePlatforms(spec):
  function _CreateMSVSUserFile (line 1108) | def _CreateMSVSUserFile(proj_path, version, spec):
  function _GetMSVSConfigurationType (line 1125) | def _GetMSVSConfigurationType(spec, build_file):
  function _AddConfigurationToMSVSProject (line 1159) | def _AddConfigurationToMSVSProject(p, spec, config_type, config_name, co...
  function _GetIncludeDirs (line 1249) | def _GetIncludeDirs(config):
  function _GetLibraryDirs (line 1273) | def _GetLibraryDirs(config):
  function _GetLibraries (line 1288) | def _GetLibraries(spec):
  function _GetOutputFilePathAndTool (line 1314) | def _GetOutputFilePathAndTool(spec, msbuild):
  function _GetOutputTargetExt (line 1353) | def _GetOutputTargetExt(spec):
  function _GetDefines (line 1370) | def _GetDefines(config):
  function _GetDisabledWarnings (line 1386) | def _GetDisabledWarnings(config):
  function _GetModuleDefinition (line 1390) | def _GetModuleDefinition(spec):
  function _ConvertToolsToExpectedForm (line 1409) | def _ConvertToolsToExpectedForm(tools):
  function _AddConfigurationToMSVS (line 1436) | def _AddConfigurationToMSVS(p, spec, tools, config, config_type, config_...
  function _GetMSVSAttributes (line 1454) | def _GetMSVSAttributes(spec, config, config_type):
  function _AddNormalizedSources (line 1481) | def _AddNormalizedSources(sources_set, sources_array):
  function _PrepareListOfSources (line 1485) | def _PrepareListOfSources(spec, generator_flags, gyp_file):
  function _AdjustSourcesAndConvertToFilterHierarchy (line 1524) | def _AdjustSourcesAndConvertToFilterHierarchy(
  function _IdlFilesHandledNonNatively (line 1584) | def _IdlFilesHandledNonNatively(spec, sources):
  function _GetPrecompileRelatedFiles (line 1596) | def _GetPrecompileRelatedFiles(spec):
  function _ExcludeFilesFromBeingBuilt (line 1607) | def _ExcludeFilesFromBeingBuilt(p, spec, excluded_sources, excluded_idl,...
  function _GetExcludedFilesFromBuild (line 1623) | def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl):
  function _AddToolFilesToMSVS (line 1644) | def _AddToolFilesToMSVS(p, spec):
  function _HandlePreCompiledHeaders (line 1654) | def _HandlePreCompiledHeaders(p, sources, spec):
  function _AddActions (line 1702) | def _AddActions(actions_to_add, spec, relative_path_of_gyp_file):
  function _WriteMSVSUserFile (line 1729) | def _WriteMSVSUserFile(project_path, version, spec):
  function _AddCopies (line 1751) | def _AddCopies(actions_to_add, spec):
  function _GetCopies (line 1763) | def _GetCopies(spec):
  function _GetPathDict (line 1799) | def _GetPathDict(root, path):
  function _DictsToFolders (line 1811) | def _DictsToFolders(base_path, bucket, flat):
  function _CollapseSingles (line 1833) | def _CollapseSingles(parent, node):
  function _GatherSolutionFolders (line 1850) | def _GatherSolutionFolders(sln_projects, project_objects, flat):
  function _GetPathOfProject (line 1871) | def _GetPathOfProject(qualified_target, spec, options, msvs_version):
  function _GetPlatformOverridesOfProject (line 1892) | def _GetPlatformOverridesOfProject(spec):
  function _CreateProjectObjects (line 1907) | def _CreateProjectObjects(target_list, target_dicts, options, msvs_versi...
  function _InitNinjaFlavor (line 1958) | def _InitNinjaFlavor(params, target_list, target_dicts):
  function CalculateVariables (line 2009) | def CalculateVariables(default_variables, params):
  function PerformBuild (line 2040) | def PerformBuild(data, configurations, params):
  function CalculateGeneratorInputInfo (line 2059) | def CalculateGeneratorInputInfo(params):
  function GenerateOutput (line 2077) | def GenerateOutput(target_list, target_dicts, data, params):
  function _GenerateMSBuildFiltersFile (line 2169) | def _GenerateMSBuildFiltersFile(
  function _AppendFiltersForMSBuild (line 2215) | def _AppendFiltersForMSBuild(
  function _MapFileToMsBuildSourceType (line 2273) | def _MapFileToMsBuildSourceType(
  function _GenerateRulesForMSBuild (line 2316) | def _GenerateRulesForMSBuild(
  class MSBuildRule (line 2369) | class MSBuildRule:
    method __init__ (line 2389) | def __init__(self, rule, spec):
  function _GenerateMSBuildRulePropsFile (line 2428) | def _GenerateMSBuildRulePropsFile(props_path, msbuild_rules):
  function _GenerateMSBuildRuleTargetsFile (line 2470) | def _GenerateMSBuildRuleTargetsFile(targets_path, msbuild_rules):
  function _GenerateMSBuildRuleXmlFile (line 2672) | def _GenerateMSBuildRuleXmlFile(xml_path, msbuild_rules):
  function _GetConfigurationAndPlatform (line 2896) | def _GetConfigurationAndPlatform(name, settings, spec):
  function _GetConfigurationCondition (line 2904) | def _GetConfigurationCondition(name, settings, spec):
  function _GetMSBuildProjectConfigurations (line 2910) | def _GetMSBuildProjectConfigurations(configurations, spec):
  function _GetMSBuildGlobalProperties (line 2926) | def _GetMSBuildGlobalProperties(spec, version, guid, gyp_file_name):
  function _GetMSBuildConfigurationDetails (line 2997) | def _GetMSBuildConfigurationDetails(spec, build_file):
  function _GetMSBuildLocalProperties (line 3027) | def _GetMSBuildLocalProperties(msbuild_toolset):
  function _GetMSBuildPropertySheets (line 3041) | def _GetMSBuildPropertySheets(configurations, spec):
  function _ConvertMSVSBuildAttributes (line 3089) | def _ConvertMSVSBuildAttributes(spec, config, build_file):
  function _ConvertMSVSCharacterSet (line 3110) | def _ConvertMSVSCharacterSet(char_set):
  function _ConvertMSVSConfigurationType (line 3116) | def _ConvertMSVSConfigurationType(config_type):
  function _GetMSBuildAttributes (line 3128) | def _GetMSBuildAttributes(spec, config, build_file):
  function _GetMSBuildConfigurationGlobalProperties (line 3182) | def _GetMSBuildConfigurationGlobalProperties(spec, configurations, build...
  function _AddConditionalProperty (line 3234) | def _AddConditionalProperty(properties, condition, name, value):
  function _GetMSBuildPropertyGroup (line 3258) | def _GetMSBuildPropertyGroup(spec, label, properties):
  function _GetMSBuildToolSettingsSections (line 3314) | def _GetMSBuildToolSettingsSections(spec, configurations):
  function _FinalizeMSBuildSettings (line 3337) | def _FinalizeMSBuildSettings(spec, configuration):
  function _GetValueFormattedForMSBuild (line 3443) | def _GetValueFormattedForMSBuild(tool_name, name, value):
  function _VerifySourcesExist (line 3472) | def _VerifySourcesExist(sources, root_dir):
  function _GetMSBuildSources (line 3496) | def _GetMSBuildSources(
  function _AddSources2 (line 3539) | def _AddSources2(
  function _GetMSBuildProjectReferences (line 3628) | def _GetMSBuildProjectReferences(project):
  function _GenerateMSBuildProject (line 3669) | def _GenerateMSBuildProject(project, options, version, generator_flags, ...
  function _GetMSBuildExternalBuilderTargets (line 3820) | def _GetMSBuildExternalBuilderTargets(spec):
  function _GetMSBuildExtensions (line 3862) | def _GetMSBuildExtensions(props_files_of_rules):
  function _GetMSBuildExtensionTargets (line 3869) | def _GetMSBuildExtensionTargets(targets_files_of_rules):
  function _GenerateActionsForMSBuild (line 3876) | def _GenerateActionsForMSBuild(spec, actions_to_add):
  function _AddMSBuildAction (line 3941) | def _AddMSBuildAction(

FILE: gyp/pylib/gyp/generator/msvs_test.py
  class TestSequenceFunctions (line 14) | class TestSequenceFunctions(unittest.TestCase):
    method setUp (line 15) | def setUp(self):
    method test_GetLibraries (line 18) | def test_GetLibraries(self):

FILE: gyp/pylib/gyp/generator/ninja.py
  function StripPrefix (line 67) | def StripPrefix(arg, prefix):
  function QuoteShellArgument (line 73) | def QuoteShellArgument(arg, flavor):
  function Define (line 85) | def Define(d, flavor):
  function AddArch (line 95) | def AddArch(output, arch):
  class Target (line 101) | class Target:
    method __init__ (line 125) | def __init__(self, type):
    method Linkable (line 156) | def Linkable(self):
    method UsesToc (line 160) | def UsesToc(self, flavor):
    method PreActionInput (line 170) | def PreActionInput(self, flavor):
    method PreCompileInput (line 177) | def PreCompileInput(self):
    method FinalOutput (line 182) | def FinalOutput(self):
  class NinjaWriter (line 213) | class NinjaWriter:
    method __init__ (line 214) | def __init__(
    method ExpandSpecial (line 259) | def ExpandSpecial(self, path, product_dir=None):
    method ExpandRuleVariables (line 288) | def ExpandRuleVariables(self, path, root, dirname, source, ext, name):
    method GypPathToNinja (line 298) | def GypPathToNinja(self, path, env=None):
    method GypPathToUniqueOutput (line 318) | def GypPathToUniqueOutput(self, path, qualified=True):
    method WriteCollapsedDependencies (line 356) | def WriteCollapsedDependencies(self, name, targets, order_only=None):
    method _SubninjaNameForArch (line 372) | def _SubninjaNameForArch(self, arch):
    method WriteSpec (line 376) | def WriteSpec(self, spec, config_name, generator_flags):
    method _WinIdlRule (line 550) | def _WinIdlRule(self, source, prebuild, outputs):
    method WriteWinIdlFiles (line 575) | def WriteWinIdlFiles(self, spec, prebuild):
    method WriteActionsRulesCopies (line 585) | def WriteActionsRulesCopies(
    method GenerateDescription (line 629) | def GenerateDescription(self, verb, message, fallback):
    method WriteActions (line 643) | def WriteActions(
    method WriteRules (line 684) | def WriteRules(
    method WriteCopies (line 828) | def WriteCopies(self, copies, prebuild, mac_bundle_depends):
    method WriteiOSFrameworkHeaders (line 860) | def WriteiOSFrameworkHeaders(self, spec, outputs, prebuild):
    method WriteMacBundleResources (line 884) | def WriteMacBundleResources(self, resources, bundle_depends):
    method WriteMacXCassets (line 915) | def WriteMacXCassets(self, xcassets, bundle_depends):
    method WriteMacInfoPlist (line 966) | def WriteMacInfoPlist(self, partial_info_plist, bundle_depends):
    method WriteSources (line 1009) | def WriteSources(
    method WriteSourcesForArch (line 1054) | def WriteSourcesForArch(
    method WritePchTargets (line 1282) | def WritePchTargets(self, ninja_file, pch_commands):
    method WriteLink (line 1304) | def WriteLink(self, spec, config_name, config, link_deps, compile_deps):
    method WriteLinkForArch (line 1346) | def WriteLinkForArch(
    method WriteTarget (line 1569) | def WriteTarget(self, spec, config_name, config, link_deps, compile_de...
    method WriteMacBundle (line 1644) | def WriteMacBundle(self, spec, mac_bundle_depends, is_empty):
    method GetToolchainEnv (line 1676) | def GetToolchainEnv(self, additional_settings=None):
    method GetMsvsToolchainEnv (line 1683) | def GetMsvsToolchainEnv(self, additional_settings=None):
    method GetSortedXcodeEnv (line 1689) | def GetSortedXcodeEnv(self, additional_settings=None):
    method GetSortedXcodePostbuildEnv (line 1701) | def GetSortedXcodePostbuildEnv(self):
    method AppendPostbuildVariable (line 1713) | def AppendPostbuildVariable(
    method GetPostbuildCommand (line 1721) | def GetPostbuildCommand(self, spec, output, output_binary, is_command_...
    method ComputeExportEnvString (line 1766) | def ComputeExportEnvString(self, env):
    method ComputeMacBundleOutput (line 1778) | def ComputeMacBundleOutput(self):
    method ComputeOutputFileName (line 1786) | def ComputeOutputFileName(self, spec, type=None):
    method ComputeOutput (line 1837) | def ComputeOutput(self, spec, arch=None):
    method WriteVariableList (line 1887) | def WriteVariableList(self, ninja_file, var, values):
    method WriteNewNinjaRule (line 1893) | def WriteNewNinjaRule(
  function CalculateVariables (line 1978) | def CalculateVariables(default_variables, params):
  function ComputeOutputDir (line 2040) | def ComputeOutputDir(params):
  function CalculateGeneratorInputInfo (line 2053) | def CalculateGeneratorInputInfo(params):
  function OpenOutput (line 2068) | def OpenOutput(path, mode="w"):
  function CommandWithWrapper (line 2074) | def CommandWithWrapper(cmd, wrappers, prog):
  function GetDefaultConcurrentLinks (line 2080) | def GetDefaultConcurrentLinks():
  function _GetWinLinkRuleNameSuffix (line 2133) | def _GetWinLinkRuleNameSuffix(embed_manifest):
  function _AddWinLinkRules (line 2139) | def _AddWinLinkRules(master_ninja, embed_manifest):
  function GenerateOutputForConfig (line 2202) | def GenerateOutputForConfig(target_list, target_dicts, data, params, con...
  function GenerateCompileDBWithNinja (line 2884) | def GenerateCompileDBWithNinja(path, targets=["all"]):
  function PerformBuild (line 2905) | def PerformBuild(data, configurations, params):
  function CallGenerateOutputForConfig (line 2914) | def CallGenerateOutputForConfig(arglist):
  function GenerateOutput (line 2923) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/ninja_test.py
  class TestPrefixesAndSuffixes (line 16) | class TestPrefixesAndSuffixes(unittest.TestCase):
    method test_BinaryNamesWindows (line 17) | def test_BinaryNamesWindows(self):
    method test_BinaryNamesLinux (line 35) | def test_BinaryNamesLinux(self):
    method test_GenerateCompileDBWithNinja (line 54) | def test_GenerateCompileDBWithNinja(self):

FILE: gyp/pylib/gyp/generator/xcode.py
  function CreateXCConfigurationList (line 101) | def CreateXCConfigurationList(configuration_names):
  class XcodeProject (line 112) | class XcodeProject:
    method __init__ (line 113) | def __init__(self, gyp_path, path, build_file_dict):
    method Finalize1 (line 138) | def Finalize1(self, xcode_targets, serialize_all_tests):
    method Finalize2 (line 388) | def Finalize2(self, xcode_targets, xcode_target_to_target_dict):
    method Write (line 456) | def Write(self):
  function AddSourceToTarget (line 522) | def AddSourceToTarget(source, type, pbxp, xct):
  function AddResourceToTarget (line 548) | def AddResourceToTarget(resource, pbxp, xct):
  function AddHeaderToTarget (line 554) | def AddHeaderToTarget(header, pbxp, xct, is_public):
  function ExpandXcodeVariables (line 564) | def ExpandXcodeVariables(string, expansions):
  function EscapeXcodeDefine (line 593) | def EscapeXcodeDefine(s):
  function PerformBuild (line 601) | def PerformBuild(data, configurations, params):
  function CalculateGeneratorInputInfo (line 619) | def CalculateGeneratorInputInfo(params):
  function GenerateOutput (line 641) | def GenerateOutput(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/generator/xcode_test.py
  class TestEscapeXcodeDefine (line 15) | class TestEscapeXcodeDefine(unittest.TestCase):
    method test_InheritedRemainsUnescaped (line 18) | def test_InheritedRemainsUnescaped(self):
    method test_Escaping (line 21) | def test_Escaping(self):

FILE: gyp/pylib/gyp/input.py
  function IsPathSection (line 56) | def IsPathSection(section):
  function GetIncludedBuildFiles (line 139) | def GetIncludedBuildFiles(build_file_path, aux_data, included=None):
  function CheckedEval (line 172) | def CheckedEval(file_contents):
  function CheckNode (line 188) | def CheckNode(node, keypath):
  function LoadOneBuildFile (line 223) | def LoadOneBuildFile(build_file_path, data, aux_data, includes, is_targe...
  function LoadBuildFileIncludesIntoDict (line 271) | def LoadBuildFileIncludesIntoDict(
  function LoadBuildFileIncludesIntoList (line 313) | def LoadBuildFileIncludesIntoList(sublist, sublist_path, data, aux_data,...
  function ProcessToolsetsInDict (line 325) | def ProcessToolsetsInDict(data):
  function LoadTargetBuildFile (line 362) | def LoadTargetBuildFile(
  function CallLoadTargetBuildFile (line 500) | def CallLoadTargetBuildFile(
  class ParallelProcessingError (line 555) | class ParallelProcessingError(Exception):
  class ParallelState (line 559) | class ParallelState:
    method __init__ (line 567) | def __init__(self):
    method LoadTargetBuildFileCallback (line 586) | def LoadTargetBuildFileCallback(self, result):
  function LoadTargetBuildFilesParallel (line 606) | def LoadTargetBuildFilesParallel(
  function FindEnclosingBracketGroup (line 673) | def FindEnclosingBracketGroup(input_str):
  function IsStrCanonicalInt (line 691) | def IsStrCanonicalInt(string):
  function FixupPlatformCommand (line 744) | def FixupPlatformCommand(cmd):
  function ExpandVariables (line 758) | def ExpandVariables(input, phase, variables, build_file):
  function EvalCondition (line 1112) | def EvalCondition(condition, conditions_key, phase, variables, build_file):
  function EvalSingleCondition (line 1157) | def EvalSingleCondition(cond_expr, true_dict, false_dict, phase, variabl...
  function ProcessConditionsInDict (line 1200) | def ProcessConditionsInDict(the_dict, phase, variables, build_file):
  function LoadAutomaticVariablesFromDict (line 1248) | def LoadAutomaticVariablesFromDict(variables, the_dict):
  function LoadVariablesFromVariablesDict (line 1256) | def LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key):
  function ProcessVariablesAndConditionsInDict (line 1284) | def ProcessVariablesAndConditionsInDict(
  function ProcessVariablesAndConditionsInList (line 1401) | def ProcessVariablesAndConditionsInList(the_list, phase, variables, buil...
  function BuildTargetsDict (line 1438) | def BuildTargetsDict(data):
  function QualifyDependencies (line 1464) | def QualifyDependencies(targets):
  function ExpandWildcardDependencies (line 1513) | def ExpandWildcardDependencies(targets, data):
  function Unify (line 1589) | def Unify(items):
  function RemoveDuplicateDependencies (line 1595) | def RemoveDuplicateDependencies(targets):
  function Filter (line 1605) | def Filter(items, item):
  function RemoveSelfDependencies (line 1611) | def RemoveSelfDependencies(targets):
  function RemoveLinkDependenciesFromNoneTargets (line 1625) | def RemoveLinkDependenciesFromNoneTargets(targets):
  class DependencyGraphNode (line 1640) | class DependencyGraphNode:
    class CircularException (line 1649) | class CircularException(GypError):
    method __init__ (line 1652) | def __init__(self, ref):
    method __repr__ (line 1657) | def __repr__(self):
    method FlattenToList (line 1660) | def FlattenToList(self):
    method FindCycles (line 1711) | def FindCycles(self):
    method DirectDependencies (line 1731) | def DirectDependencies(self, dependencies=None):
    method _AddImportedDependencies (line 1743) | def _AddImportedDependencies(self, targets, dependencies=None):
    method DirectAndImportedDependencies (line 1785) | def DirectAndImportedDependencies(self, targets, dependencies=None):
    method DeepDependencies (line 1794) | def DeepDependencies(self, dependencies=None):
    method _LinkDependenciesInternal (line 1811) | def _LinkDependenciesInternal(
    method DependenciesForLinkSettings (line 1907) | def DependenciesForLinkSettings(self, targets):
    method DependenciesToLinkAgainst (line 1922) | def DependenciesToLinkAgainst(self, targets):
  function BuildDependencyList (line 1929) | def BuildDependencyList(targets):
  function VerifyNoGYPFileCircularDependencies (line 1981) | def VerifyNoGYPFileCircularDependencies(targets):
  function DoDependentSettings (line 2041) | def DoDependentSettings(key, flat_list, targets, dependency_nodes):
  function AdjustStaticLibraryDependencies (line 2073) | def AdjustStaticLibraryDependencies(
  function MakePathRelative (line 2164) | def MakePathRelative(to_file, fro_file, item):
  function MergeLists (line 2201) | def MergeLists(to, fro, to_file, fro_file, is_paths=False, append=True):
  function MergeDicts (line 2272) | def MergeDicts(to, fro, to_file, fro_file):
  function MergeConfigWithInheritance (line 2386) | def MergeConfigWithInheritance(
  function SetUpConfigurations (line 2414) | def SetUpConfigurations(target, target_dict):
  function ProcessListFiltersInDict (line 2491) | def ProcessListFiltersInDict(name, the_dict):
  function ProcessListFiltersInList (line 2663) | def ProcessListFiltersInList(name, the_list):
  function ValidateTargetType (line 2671) | def ValidateTargetType(target, target_dict):
  function ValidateRulesInTarget (line 2705) | def ValidateRulesInTarget(target, target_dict, extra_sources_for_rules):
  function ValidateRunAsInTarget (line 2770) | def ValidateRunAsInTarget(target, target_dict, build_file):
  function ValidateActionsInTarget (line 2805) | def ValidateActionsInTarget(target, target_dict, build_file):
  function TurnIntIntoStrInDict (line 2824) | def TurnIntIntoStrInDict(the_dict):
  function TurnIntIntoStrInList (line 2842) | def TurnIntIntoStrInList(the_list):
  function PruneUnwantedTargets (line 2853) | def PruneUnwantedTargets(targets, flat_list, dependency_nodes, root_targ...
  function VerifyNoCollidingTargets (line 2887) | def VerifyNoCollidingTargets(targets):
  function SetGeneratorGlobals (line 2916) | def SetGeneratorGlobals(generator_input_info):
  function Load (line 2934) | def Load(

FILE: gyp/pylib/gyp/input_test.py
  class TestFindCycles (line 14) | class TestFindCycles(unittest.TestCase):
    method setUp (line 15) | def setUp(self):
    method _create_dependency (line 20) | def _create_dependency(self, dependent, dependency):
    method test_no_cycle_empty_graph (line 24) | def test_no_cycle_empty_graph(self):
    method test_no_cycle_line (line 28) | def test_no_cycle_line(self):
    method test_no_cycle_dag (line 36) | def test_no_cycle_dag(self):
    method test_cycle_self_reference (line 44) | def test_cycle_self_reference(self):
    method test_cycle_two_nodes (line 51) | def test_cycle_two_nodes(self):
    method test_two_cycles (line 64) | def test_two_cycles(self):
    method test_big_cycle (line 76) | def test_big_cycle(self):

FILE: gyp/pylib/gyp/mac_tool.py
  function main (line 25) | def main(args):
  class MacTool (line 31) | class MacTool:
    method Dispatch (line 35) | def Dispatch(self, args):
    method _CommandifyName (line 43) | def _CommandifyName(self, name_string):
    method ExecCopyBundleResource (line 47) | def ExecCopyBundleResource(self, source, dest, convert_to_binary):
    method _CopyXIBFile (line 72) | def _CopyXIBFile(self, source, dest):
    method _ConvertToBinary (line 129) | def _ConvertToBinary(self, dest):
    method _CopyStringsFile (line 134) | def _CopyStringsFile(self, source, dest):
    method _DetectInputEncoding (line 155) | def _DetectInputEncoding(self, file_name):
    method ExecCopyInfoPlist (line 170) | def ExecCopyInfoPlist(self, source, dest, convert_to_binary, *keys):
    method _WritePkgInfo (line 225) | def _WritePkgInfo(self, info_plist):
    method ExecFlock (line 247) | def ExecFlock(self, lockfile, *cmd_list):
    method ExecFilterLibtool (line 254) | def ExecFilterLibtool(self, *cmd_list):
    method ExecPackageIosFramework (line 285) | def ExecPackageIosFramework(self, framework):
    method ExecPackageFramework (line 303) | def ExecPackageFramework(self, framework, version):
    method _Relink (line 332) | def _Relink(self, dest, link):
    method ExecCompileIosFrameworkHeaderMap (line 339) | def ExecCompileIosFrameworkHeaderMap(self, out, framework, *all_headers):
    method ExecCopyIosFrameworkHeaders (line 349) | def ExecCopyIosFrameworkHeaders(self, framework, *copy_headers):
    method ExecCompileXcassets (line 356) | def ExecCompileXcassets(self, keys, *inputs):
    method ExecMergeInfoPlist (line 428) | def ExecMergeInfoPlist(self, output, *inputs):
    method ExecCodeSignBundle (line 436) | def ExecCodeSignBundle(self, key, entitlements, provisioning, path, pr...
    method _InstallProvisioningProfile (line 461) | def _InstallProvisioningProfile(self, profile, bundle_identifier):
    method _FindProvisioningProfile (line 486) | def _FindProvisioningProfile(self, profile, bundle_identifier):
    method _LoadProvisioningProfile (line 551) | def _LoadProvisioningProfile(self, profile_path):
    method _MergePlist (line 566) | def _MergePlist(self, merged_plist, plist):
    method _LoadPlistMaybeBinary (line 579) | def _LoadPlistMaybeBinary(self, plist_path):
    method _GetSubstitutions (line 604) | def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix):
    method _GetCFBundleIdentifier (line 619) | def _GetCFBundleIdentifier(self):
    method _InstallEntitlements (line 631) | def _InstallEntitlements(self, entitlements, substitutions, overrides):
    method _ExpandVariables (line 663) | def _ExpandVariables(self, data, substitutions):
  function NextGreaterPowerOf2 (line 686) | def NextGreaterPowerOf2(x):
  function WriteHmap (line 690) | def WriteHmap(output_name, filelist):

FILE: gyp/pylib/gyp/msvs_emulation.py
  function QuoteForRspFile (line 23) | def QuoteForRspFile(arg, quote_cmd=True):
  function EncodeRspFileList (line 63) | def EncodeRspFileList(args, quote_cmd):
  function _GenericRetrieve (line 80) | def _GenericRetrieve(root, default, path):
  function _AddPrefix (line 90) | def _AddPrefix(element, prefix):
  function _DoRemapping (line 101) | def _DoRemapping(element, map):
  function _AppendOrReturn (line 114) | def _AppendOrReturn(append, element):
  function _FindDirectXInstallation (line 127) | def _FindDirectXInstallation():
  function GetGlobalVSMacroEnv (line 150) | def GetGlobalVSMacroEnv(vs_version):
  function ExtractSharedMSVSSystemIncludes (line 171) | def ExtractSharedMSVSSystemIncludes(configs, generator_flags):
  class MsvsSettings (line 199) | class MsvsSettings:
    method __init__ (line 204) | def __init__(self, spec, generator_flags):
    method GetExtension (line 242) | def GetExtension(self):
    method GetVSMacroEnv (line 251) | def GetVSMacroEnv(self, base_to_build=None, config=None):
    method ConvertVSMacros (line 280) | def ConvertVSMacros(self, s, base_to_build=None, config=None):
    method AdjustLibraries (line 285) | def AdjustLibraries(self, libraries):
    method _GetAndMunge (line 295) | def _GetAndMunge(self, field, path, default, prefix, append, map):
    class _GetWrapper (line 305) | class _GetWrapper:
      method __init__ (line 306) | def __init__(self, parent, field, base_path, append=None):
      method __call__ (line 312) | def __call__(self, name, map=None, prefix="", default=None):
    method GetArch (line 322) | def GetArch(self, config):
    method _TargetConfig (line 332) | def _TargetConfig(self, config):
    method _Setting (line 350) | def _Setting(self, path, config, default=None, prefix="", append=None,...
    method _ConfigAttrib (line 356) | def _ConfigAttrib(
    method AdjustIncludeDirs (line 369) | def AdjustIncludeDirs(self, include_dirs, config):
    method AdjustMidlIncludeDirs (line 381) | def AdjustMidlIncludeDirs(self, midl_include_dirs, config):
    method GetComputedDefines (line 393) | def GetComputedDefines(self, config):
    method GetCompilerPdbName (line 409) | def GetCompilerPdbName(self, config, expand_special):
    method GetMapFileName (line 418) | def GetMapFileName(self, config, expand_special):
    method GetOutputName (line 427) | def GetOutputName(self, config, expand_special):
    method GetPDBName (line 441) | def GetPDBName(self, config, expand_special, default):
    method GetNoImportLibrary (line 457) | def GetNoImportLibrary(self, config):
    method GetAsmflags (line 464) | def GetAsmflags(self, config):
    method GetCflags (line 473) | def GetCflags(self, config):
    method _GetPchFlags (line 551) | def _GetPchFlags(self, config, extension):
    method GetCflagsC (line 565) | def GetCflagsC(self, config):
    method GetCflagsCC (line 570) | def GetCflagsCC(self, config):
    method _GetAdditionalLibraryDirectories (line 575) | def _GetAdditionalLibraryDirectories(self, root, config, gyp_to_build_...
    method GetLibFlags (line 588) | def GetLibFlags(self, config, gyp_to_build_path):
    method GetDefFile (line 609) | def GetDefFile(self, gyp_to_build_path):
    method _GetDefFileAsLdflags (line 622) | def _GetDefFileAsLdflags(self, ldflags, gyp_to_build_path):
    method GetPGDName (line 628) | def GetPGDName(self, config, expand_special):
    method GetLdflags (line 639) | def GetLdflags(
    method _GetLdManifestFlags (line 766) | def _GetLdManifestFlags(
    method _GetAdditionalManifestFiles (line 858) | def _GetAdditionalManifestFiles(self, config, gyp_to_build_path):
    method IsUseLibraryDependencyInputs (line 871) | def IsUseLibraryDependencyInputs(self, config):
    method IsEmbedManifest (line 878) | def IsEmbedManifest(self, config):
    method IsLinkIncremental (line 886) | def IsLinkIncremental(self, config):
    method GetRcflags (line 892) | def GetRcflags(self, config, gyp_to_ninja_path):
    method BuildCygwinBashCommandLine (line 907) | def BuildCygwinBashCommandLine(self, args, path_to_base):
    method GetRuleShellFlags (line 931) | def GetRuleShellFlags(self, rule):
    method _HasExplicitRuleForExtension (line 949) | def _HasExplicitRuleForExtension(self, spec, extension):
    method _HasExplicitIdlActions (line 953) | def _HasExplicitIdlActions(self, spec):
    method HasExplicitIdlRulesOrActions (line 959) | def HasExplicitIdlRulesOrActions(self, spec):
    method HasExplicitAsmRules (line 966) | def HasExplicitAsmRules(self, spec):
    method GetIdlBuildData (line 971) | def GetIdlBuildData(self, source, config):
  function _LanguageMatchesForPch (line 1004) | def _LanguageMatchesForPch(source_ext, pch_source_ext):
  class PrecompiledHeader (line 1012) | class PrecompiledHeader:
    method __init__ (line 1017) | def __init__(
    method _PchHeader (line 1027) | def _PchHeader(self):
    method GetObjDependencies (line 1032) | def GetObjDependencies(self, sources, objs, arch):
    method GetPchBuildCommands (line 1046) | def GetPchBuildCommands(self, arch):
    method GetFlagsModifications (line 1051) | def GetFlagsModifications(
  function GetVSVersion (line 1076) | def GetVSVersion(generator_flags):
  function _GetVsvarsSetupArgs (line 1085) | def _GetVsvarsSetupArgs(generator_flags, arch):
  function ExpandMacros (line 1090) | def ExpandMacros(string, expansions):
  function _ExtractImportantEnvironment (line 1100) | def _ExtractImportantEnvironment(output_of_set):
  function _FormatAsEnvironmentBlock (line 1139) | def _FormatAsEnvironmentBlock(envvar_dict):
  function _ExtractCLPath (line 1151) | def _ExtractCLPath(output_of_where):
  function GenerateEnvironmentFiles (line 1160) | def GenerateEnvironmentFiles(
  function VerifyMissingSources (line 1220) | def VerifyMissingSources(sources, build_dir, generator_flags, gyp_to_nin...
  function CalculateCommonVariables (line 1239) | def CalculateCommonVariables(default_variables, params):

FILE: gyp/pylib/gyp/ninja_syntax.py
  function escape_path (line 15) | def escape_path(word):
  class Writer (line 19) | class Writer:
    method __init__ (line 20) | def __init__(self, output, width=78):
    method newline (line 24) | def newline(self):
    method comment (line 27) | def comment(self, text):
    method variable (line 31) | def variable(self, key, value, indent=0):
    method pool (line 38) | def pool(self, name, depth):
    method rule (line 42) | def rule(
    method build (line 74) | def build(
    method include (line 106) | def include(self, path):
    method subninja (line 109) | def subninja(self, path):
    method default (line 112) | def default(self, paths):
    method _count_dollars_before_index (line 115) | def _count_dollars_before_index(self, s, i):
    method _line (line 124) | def _line(self, text, indent=0):
    method _as_list (line 161) | def _as_list(self, input):
  function escape (line 169) | def escape(string):

FILE: gyp/pylib/gyp/simple_copy.py
  class Error (line 11) | class Error(Exception):
  function deepcopy (line 18) | def deepcopy(x):
  function _deepcopy_atomic (line 35) | def _deepcopy_atomic(x):
  function _deepcopy_list (line 45) | def _deepcopy_list(x):
  function _deepcopy_dict (line 52) | def _deepcopy_dict(x):

FILE: gyp/pylib/gyp/win_tool.py
  function main (line 27) | def main(args):
  class WinTool (line 33) | class WinTool:
    method _UseSeparateMspdbsrv (line 37) | def _UseSeparateMspdbsrv(self, env, args):
    method Dispatch (line 65) | def Dispatch(self, args):
    method _CommandifyName (line 73) | def _CommandifyName(self, name_string):
    method _GetEnv (line 77) | def _GetEnv(self, arch):
    method ExecStamp (line 86) | def ExecStamp(self, path):
    method ExecRecursiveMirror (line 90) | def ExecRecursiveMirror(self, source, dest):
    method ExecLinkWrapper (line 114) | def ExecLinkWrapper(self, arch, use_separate_mspdbsrv, *args):
    method ExecLinkWithManifests (line 150) | def ExecLinkWithManifests(
    method ExecManifestWrapper (line 245) | def ExecManifestWrapper(self, arch, *args):
    method ExecManifestToRc (line 259) | def ExecManifestToRc(self, arch, *args):
    method ExecMidlWrapper (line 270) | def ExecMidlWrapper(self, arch, outdir, tlb, h, dlldata, iid, proxy, i...
    method ExecAsmWrapper (line 310) | def ExecAsmWrapper(self, arch, *args):
    method ExecRcWrapper (line 327) | def ExecRcWrapper(self, arch, *args):
    method ExecActionWrapper (line 344) | def ExecActionWrapper(self, arch, rspfile, *dir):
    method ExecClCompile (line 357) | def ExecClCompile(self, project_dir, selected_files):

FILE: gyp/pylib/gyp/xcode_emulation.py
  function XcodeArchsVariableMapping (line 31) | def XcodeArchsVariableMapping(archs, archs_including_64_bit=None):
  class XcodeArchsDefault (line 40) | class XcodeArchsDefault:
    method __init__ (line 50) | def __init__(self, default, mac, iphonesimulator, iphoneos):
    method _VariableMapping (line 54) | def _VariableMapping(self, sdkroot):
    method _ExpandArchs (line 64) | def _ExpandArchs(self, archs, sdkroot):
    method ActiveArchs (line 82) | def ActiveArchs(self, archs, valid_archs, sdkroot):
  function GetXcodeArchsDefault (line 96) | def GetXcodeArchsDefault():
  class XcodeSettings (line 148) | class XcodeSettings:
    method __init__ (line 165) | def __init__(self, spec):
    method _ConvertConditionalKeys (line 190) | def _ConvertConditionalKeys(self, configname):
    method _Settings (line 209) | def _Settings(self):
    method _Test (line 213) | def _Test(self, test_key, cond_key, default):
    method _Appendf (line 216) | def _Appendf(self, lst, test_key, format_str, default=None):
    method _WarnUnimplemented (line 222) | def _WarnUnimplemented(self, test_key):
    method IsBinaryOutputFormat (line 226) | def IsBinaryOutputFormat(self, configname):
    method IsIosFramework (line 231) | def IsIosFramework(self):
    method _IsBundle (line 234) | def _IsBundle(self):
    method _IsXCTest (line 241) | def _IsXCTest(self):
    method _IsXCUiTest (line 244) | def _IsXCUiTest(self):
    method _IsIosAppExtension (line 247) | def _IsIosAppExtension(self):
    method _IsIosWatchKitExtension (line 250) | def _IsIosWatchKitExtension(self):
    method _IsIosWatchApp (line 253) | def _IsIosWatchApp(self):
    method GetFrameworkVersion (line 256) | def GetFrameworkVersion(self):
    method GetWrapperExtension (line 262) | def GetWrapperExtension(self):
    method GetProductName (line 286) | def GetProductName(self):
    method GetFullProductName (line 290) | def GetFullProductName(self):
    method GetWrapperName (line 297) | def GetWrapperName(self):
    method GetBundleContentsFolderPath (line 303) | def GetBundleContentsFolderPath(self):
    method GetBundleResourceFolder (line 317) | def GetBundleResourceFolder(self):
    method GetBundleExecutableFolderPath (line 325) | def GetBundleExecutableFolderPath(self):
    method GetBundleJavaFolderPath (line 334) | def GetBundleJavaFolderPath(self):
    method GetBundleFrameworksFolderPath (line 340) | def GetBundleFrameworksFolderPath(self):
    method GetBundleSharedFrameworksFolderPath (line 346) | def GetBundleSharedFrameworksFolderPath(self):
    method GetBundleSharedSupportFolderPath (line 352) | def GetBundleSharedSupportFolderPath(self):
    method GetBundlePlugInsFolderPath (line 361) | def GetBundlePlugInsFolderPath(self):
    method GetBundleXPCServicesFolderPath (line 367) | def GetBundleXPCServicesFolderPath(self):
    method GetBundlePlistPath (line 373) | def GetBundlePlistPath(self):
    method GetProductType (line 387) | def GetProductType(self):
    method GetMachOType (line 427) | def GetMachOType(self):
    method _GetBundleBinaryPath (line 439) | def _GetBundleBinaryPath(self):
    method _GetStandaloneExecutableSuffix (line 447) | def _GetStandaloneExecutableSuffix(self):
    method _GetStandaloneExecutablePrefix (line 457) | def _GetStandaloneExecutablePrefix(self):
    method _GetStandaloneBinaryPath (line 470) | def _GetStandaloneBinaryPath(self):
    method GetExecutableName (line 490) | def GetExecutableName(self):
    method GetExecutablePath (line 498) | def GetExecutablePath(self):
    method GetActiveArchs (line 506) | def GetActiveArchs(self, configname):
    method _GetSdkVersionInfoItem (line 516) | def _GetSdkVersionInfoItem(self, sdk, infoitem):
    method _SdkRoot (line 526) | def _SdkRoot(self, configname):
    method _XcodePlatformPath (line 531) | def _XcodePlatformPath(self, configname=None):
    method _SdkPath (line 540) | def _SdkPath(self, configname=None):
    method _XcodeSdkPath (line 546) | def _XcodeSdkPath(self, sdk_root):
    method _AppendPlatformVersionMinFlags (line 554) | def _AppendPlatformVersionMinFlags(self, lst):
    method GetCflags (line 568) | def GetCflags(self, configname, arch=None):
    method GetCflagsC (line 696) | def GetCflagsC(self, configname):
    method GetCflagsCC (line 708) | def GetCflagsCC(self, configname):
    method _AddObjectiveCGarbageCollectionFlags (line 750) | def _AddObjectiveCGarbageCollectionFlags(self, flags):
    method _AddObjectiveCARCFlags (line 757) | def _AddObjectiveCARCFlags(self, flags):
    method _AddObjectiveCMissingPropertySynthesisFlags (line 761) | def _AddObjectiveCMissingPropertySynthesisFlags(self, flags):
    method GetCflagsObjC (line 767) | def GetCflagsObjC(self, configname):
    method GetCflagsObjCC (line 777) | def GetCflagsObjCC(self, configname):
    method GetInstallNameBase (line 789) | def GetInstallNameBase(self):
    method _StandardizePath (line 802) | def _StandardizePath(self, path):
    method GetInstallName (line 814) | def GetInstallName(self):
    method _MapLinkerFlagFilename (line 863) | def _MapLinkerFlagFilename(self, ldflag, gyp_to_build_path):
    method GetLdflags (line 894) | def GetLdflags(self, configname, product_dir, gyp_to_build_path, arch=...
    method GetLibtoolflags (line 1000) | def GetLibtoolflags(self, configname):
    method GetPerTargetSettings (line 1016) | def GetPerTargetSettings(self):
    method GetPerConfigSetting (line 1033) | def GetPerConfigSetting(self, setting, configname, default=None):
    method GetPerTargetSetting (line 1039) | def GetPerTargetSetting(self, setting, default=None):
    method _GetStripPostbuilds (line 1057) | def _GetStripPostbuilds(self, configname, output_binary, quiet):
    method _GetDebugInfoPostbuilds (line 1091) | def _GetDebugInfoPostbuilds(self, configname, output, output_binary, q...
    method _GetTargetPostbuilds (line 1113) | def _GetTargetPostbuilds(self, configname, output, output_binary, quie...
    method _GetIOSPostbuilds (line 1121) | def _GetIOSPostbuilds(self, configname, output_binary):
    method _GetIOSCodeSignIdentityKey (line 1218) | def _GetIOSCodeSignIdentityKey(self, settings):
    method AddImplicitPostbuilds (line 1236) | def AddImplicitPostbuilds(
    method _AdjustLibrary (line 1246) | def _AdjustLibrary(self, library, config_name=None):
    method AdjustLibraries (line 1274) | def AdjustLibraries(self, libraries, config_name=None):
    method _BuildMachineOSBuild (line 1281) | def _BuildMachineOSBuild(self):
    method _XcodeIOSDeviceFamily (line 1284) | def _XcodeIOSDeviceFamily(self, configname):
    method GetExtraPlistItems (line 1288) | def GetExtraPlistItems(self, configname=None):
    method _DefaultSdkRoot (line 1339) | def _DefaultSdkRoot(self):
  class MacPrefixHeader (line 1367) | class MacPrefixHeader:
    method __init__ (line 1390) | def __init__(
    method _CompiledHeader (line 1424) | def _CompiledHeader(self, lang, arch):
    method GetInclude (line 1431) | def GetInclude(self, lang, arch=None):
    method _Gch (line 1440) | def _Gch(self, lang, arch):
    method GetObjDependencies (line 1445) | def GetObjDependencies(self, sources, objs, arch=None):
    method GetPchBuildCommands (line 1468) | def GetPchBuildCommands(self, arch=None):
  function XcodeVersion (line 1482) | def XcodeVersion():
  function CLTVersion (line 1522) | def CLTVersion():
  function GetStdoutQuiet (line 1555) | def GetStdoutQuiet(cmdlist):
  function GetStdout (line 1566) | def GetStdout(cmdlist):
  function MergeGlobalXcodeSettingsToSpec (line 1577) | def MergeGlobalXcodeSettingsToSpec(global_dict, spec):
  function IsMacBundle (line 1593) | def IsMacBundle(flavor, spec):
  function GetMacBundleResources (line 1613) | def GetMacBundleResources(product_dir, xcode_settings, resources):
  function GetMacInfoPlist (line 1651) | def GetMacInfoPlist(product_dir, xcode_settings, gyp_path_to_build_path):
  function _GetXcodeEnv (line 1704) | def _GetXcodeEnv(
  function _NormalizeEnvVarReferences (line 1817) | def _NormalizeEnvVarReferences(str):
  function ExpandEnvVars (line 1834) | def ExpandEnvVars(string, expansions):
  function _TopologicallySortedEnvVarKeys (line 1846) | def _TopologicallySortedEnvVarKeys(env):
  function GetSortedXcodeEnv (line 1882) | def GetSortedXcodeEnv(
  function GetSpecPostbuildCommands (line 1891) | def GetSpecPostbuildCommands(spec, quiet=False):
  function _HasIOSTarget (line 1905) | def _HasIOSTarget(targets):
  function _AddIOSDeviceConfigurations (line 1915) | def _AddIOSDeviceConfigurations(targets):
  function CloneConfigurationForDeviceAndEmulator (line 1931) | def CloneConfigurationForDeviceAndEmulator(target_dicts):

FILE: gyp/pylib/gyp/xcode_emulation_test.py
  class TestXcodeSettings (line 11) | class TestXcodeSettings(unittest.TestCase):
    method setUp (line 12) | def setUp(self):
    method test_GetCflags (line 16) | def test_GetCflags(self):
    method GypToBuildPath (line 33) | def GypToBuildPath(self, path):
    method test_GetLdflags (line 36) | def test_GetLdflags(self):

FILE: gyp/pylib/gyp/xcode_ninja.py
  function _WriteWorkspace (line 23) | def _WriteWorkspace(main_gyp, sources_gyp, params):
  function _TargetFromSpec (line 59) | def _TargetFromSpec(old_spec, params):
  function IsValidTargetForWrapper (line 137) | def IsValidTargetForWrapper(target_extras, executable_target_pattern, sp...
  function CreateWrapper (line 165) | def CreateWrapper(target_list, target_dicts, data, params):

FILE: gyp/pylib/gyp/xcodeproj_file.py
  function cmp (line 151) | def cmp(x, y):
  function SourceTreeAndPathFromPath (line 176) | def SourceTreeAndPathFromPath(input_path):
  function ConvertVariablesToShellSyntax (line 196) | def ConvertVariablesToShellSyntax(input_string):
  class XCObject (line 200) | class XCObject:
    method __init__ (line 290) | def __init__(self, properties=None, id=None, parent=None):
    method __repr__ (line 298) | def __repr__(self):
    method Copy (line 305) | def Copy(self):
    method Name (line 359) | def Name(self):
    method Comment (line 377) | def Comment(self):
    method Hashables (line 389) | def Hashables(self):
    method HashablesForChild (line 399) | def HashablesForChild(self):
    method ComputeIDs (line 402) | def ComputeIDs(self, recursive=True, overwrite=True, seed_hash=None):
    method EnsureNoIDCollisions (line 466) | def EnsureNoIDCollisions(self):
    method Children (line 485) | def Children(self):
    method Descendants (line 498) | def Descendants(self):
    method PBXProjectAncestor (line 509) | def PBXProjectAncestor(self):
    method _EncodeComment (line 515) | def _EncodeComment(self, comment):
    method _EncodeTransform (line 528) | def _EncodeTransform(self, match):
    method _EncodeString (line 543) | def _EncodeString(self, value):
    method _XCPrint (line 582) | def _XCPrint(self, file, tabs, line):
    method _XCPrintableValue (line 585) | def _XCPrintableValue(self, tabs, value, flatten_list=False):
    method _XCKVPrint (line 657) | def _XCKVPrint(self, file, tabs, key, value):
    method Print (line 720) | def Print(self, file=sys.stdout):
    method UpdateProperties (line 758) | def UpdateProperties(self, properties, do_copy=False):
    method HasProperty (line 862) | def HasProperty(self, key):
    method GetProperty (line 865) | def GetProperty(self, key):
    method SetProperty (line 868) | def SetProperty(self, key, value):
    method DelProperty (line 871) | def DelProperty(self, key):
    method AppendProperty (line 875) | def AppendProperty(self, key, value):
    method VerifyHasRequiredProperties (line 908) | def VerifyHasRequiredProperties(self):
    method _SetDefaultsFromSchema (line 920) | def _SetDefaultsFromSchema(self):
  class XCHierarchicalElement (line 942) | class XCHierarchicalElement(XCObject):
    method __init__ (line 966) | def __init__(self, properties=None, id=None, parent=None):
    method Name (line 998) | def Name(self):
    method Hashables (line 1007) | def Hashables(self):
    method Compare (line 1061) | def Compare(self, other):
    method CompareRootGroup (line 1081) | def CompareRootGroup(self, other):
    method PathFromSourceTreeAndPath (line 1120) | def PathFromSourceTreeAndPath(self):
    method FullPath (line 1136) | def FullPath(self):
  class PBXGroup (line 1157) | class PBXGroup(XCHierarchicalElement):
    method __init__ (line 1175) | def __init__(self, properties=None, id=None, parent=None):
    method Hashables (line 1183) | def Hashables(self):
    method HashablesForChild (line 1198) | def HashablesForChild(self):
    method _AddChildToDicts (line 1203) | def _AddChildToDicts(self, child):
    method AppendChild (line 1224) | def AppendChild(self, child):
    method GetChildByName (line 1231) | def GetChildByName(self, name):
    method GetChildByPath (line 1249) | def GetChildByPath(self, path):
    method GetChildByRemoteObject (line 1258) | def GetChildByRemoteObject(self, remote_object):
    method AddOrGetFileByPath (line 1280) | def AddOrGetFileByPath(self, path, hierarchical):
    method AddOrGetVariantGroupByNameAndPath (line 1378) | def AddOrGetVariantGroupByNameAndPath(self, name, path):
    method TakeOverOnlyChild (line 1405) | def TakeOverOnlyChild(self, recurse=False):
    method SortGroup (line 1485) | def SortGroup(self):
  class XCFileLikeElement (line 1496) | class XCFileLikeElement(XCHierarchicalElement):
    method PathHashables (line 1500) | def PathHashables(self):
  class XCContainerPortal (line 1518) | class XCContainerPortal(XCObject):
  class XCRemoteObject (line 1524) | class XCRemoteObject(XCObject):
  class PBXFileReference (line 1530) | class PBXFileReference(XCFileLikeElement, XCContainerPortal, XCRemoteObj...
    method __init__ (line 1546) | def __init__(self, properties=None, id=None, parent=None):
  class PBXVariantGroup (line 1636) | class PBXVariantGroup(PBXGroup, XCFileLikeElement):
  class XCBuildConfiguration (line 1646) | class XCBuildConfiguration(XCObject):
    method HasBuildSetting (line 1656) | def HasBuildSetting(self, key):
    method GetBuildSetting (line 1659) | def GetBuildSetting(self, key):
    method SetBuildSetting (line 1662) | def SetBuildSetting(self, key, value):
    method AppendBuildSetting (line 1666) | def AppendBuildSetting(self, key, value):
    method DelBuildSetting (line 1671) | def DelBuildSetting(self, key):
    method SetBaseConfiguration (line 1675) | def SetBaseConfiguration(self, value):
  class XCConfigurationList (line 1679) | class XCConfigurationList(XCObject):
    method Name (line 1695) | def Name(self):
    method ConfigurationNamed (line 1704) | def ConfigurationNamed(self, name):
    method DefaultConfiguration (line 1712) | def DefaultConfiguration(self):
    method HasBuildSetting (line 1716) | def HasBuildSetting(self, key):
    method GetBuildSetting (line 1750) | def GetBuildSetting(self, key):
    method SetBuildSetting (line 1770) | def SetBuildSetting(self, key, value):
    method AppendBuildSetting (line 1778) | def AppendBuildSetting(self, key, value):
    method DelBuildSetting (line 1786) | def DelBuildSetting(self, key):
    method SetBaseConfiguration (line 1794) | def SetBaseConfiguration(self, value):
  class PBXBuildFile (line 1801) | class PBXBuildFile(XCObject):
    method Name (line 1814) | def Name(self):
    method Hashables (line 1818) | def Hashables(self):
  class XCBuildPhase (line 1833) | class XCBuildPhase(XCObject):
    method __init__ (line 1861) | def __init__(self, properties=None, id=None, parent=None):
    method FileGroup (line 1870) | def FileGroup(self, path):
    method _AddPathToDict (line 1878) | def _AddPathToDict(self, pbxbuildfile, path):
    method _AddBuildFileToDicts (line 1888) | def _AddBuildFileToDicts(self, pbxbuildfile, path=None):
    method AppendBuildFile (line 1946) | def AppendBuildFile(self, pbxbuildfile, path=None):
    method AddFile (line 1955) | def AddFile(self, path, settings=None):
  class PBXHeadersBuildPhase (line 1976) | class PBXHeadersBuildPhase(XCBuildPhase):
    method Name (line 1979) | def Name(self):
    method FileGroup (line 1982) | def FileGroup(self, path):
  class PBXResourcesBuildPhase (line 1986) | class PBXResourcesBuildPhase(XCBuildPhase):
    method Name (line 1989) | def Name(self):
    method FileGroup (line 1992) | def FileGroup(self, path):
  class PBXSourcesBuildPhase (line 1996) | class PBXSourcesBuildPhase(XCBuildPhase):
    method Name (line 1999) | def Name(self):
    method FileGroup (line 2002) | def FileGroup(self, path):
  class PBXFrameworksBuildPhase (line 2006) | class PBXFrameworksBuildPhase(XCBuildPhase):
    method Name (line 2009) | def Name(self):
    method FileGroup (line 2012) | def FileGroup(self, path):
  class PBXShellScriptBuildPhase (line 2025) | class PBXShellScriptBuildPhase(XCBuildPhase):
    method Name (line 2038) | def Name(self):
  class PBXCopyFilesBuildPhase (line 2045) | class PBXCopyFilesBuildPhase(XCBuildPhase):
    method Name (line 2091) | def Name(self):
    method FileGroup (line 2097) | def FileGroup(self, path):
    method SetDestination (line 2100) | def SetDestination(self, path):
  class PBXBuildRule (line 2185) | class PBXBuildRule(XCObject):
    method Name (line 2198) | def Name(self):
    method Hashables (line 2202) | def Hashables(self):
  class PBXContainerItemProxy (line 2213) | class PBXContainerItemProxy(XCObject):
    method __repr__ (line 2241) | def __repr__(self):
    method Name (line 2246) | def Name(self):
    method Hashables (line 2250) | def Hashables(self):
  class PBXTargetDependency (line 2260) | class PBXTargetDependency(XCObject):
    method __repr__ (line 2279) | def __repr__(self):
    method Name (line 2283) | def Name(self):
    method Hashables (line 2287) | def Hashables(self):
  class PBXReferenceProxy (line 2296) | class PBXReferenceProxy(XCFileLikeElement):
  class XCTarget (line 2307) | class XCTarget(XCRemoteObject):
    method __init__ (line 2332) | def __init__(
    method AddDependency (line 2359) | def AddDependency(self, other):
    method ConfigurationNamed (line 2394) | def ConfigurationNamed(self, name):
    method DefaultConfiguration (line 2397) | def DefaultConfiguration(self):
    method HasBuildSetting (line 2400) | def HasBuildSetting(self, key):
    method GetBuildSetting (line 2403) | def GetBuildSetting(self, key):
    method SetBuildSetting (line 2406) | def SetBuildSetting(self, key, value):
    method AppendBuildSetting (line 2409) | def AppendBuildSetting(self, key, value):
    method DelBuildSetting (line 2412) | def DelBuildSetting(self, key):
  class PBXNativeTarget (line 2421) | class PBXNativeTarget(XCTarget):
    method __init__ (line 2478) | def __init__(
    method GetBuildPhaseByType (line 2602) | def GetBuildPhaseByType(self, type):
    method HeadersPhase (line 2619) | def HeadersPhase(self):
    method ResourcesPhase (line 2644) | def ResourcesPhase(self):
    method SourcesPhase (line 2662) | def SourcesPhase(self):
    method FrameworksPhase (line 2670) | def FrameworksPhase(self):
    method AddDependency (line 2678) | def AddDependency(self, other):
  class PBXAggregateTarget (line 2719) | class PBXAggregateTarget(XCTarget):
  class PBXProject (line 2723) | class PBXProject(XCContainerPortal):
    method __init__ (line 2758) | def __init__(self, properties=None, id=None, parent=None, path=None):
    method Name (line 2764) | def Name(self):
    method Path (line 2770) | def Path(self):
    method Comment (line 2773) | def Comment(self):
    method Children (line 2776) | def Children(self):
    method PBXProjectAncestor (line 2790) | def PBXProjectAncestor(self):
    method _GroupByName (line 2793) | def _GroupByName(self, name):
    method SourceGroup (line 2807) | def SourceGroup(self):
    method ProductsGroup (line 2810) | def ProductsGroup(self):
    method IntermediatesGroup (line 2816) | def IntermediatesGroup(self):
    method FrameworksGroup (line 2821) | def FrameworksGroup(self):
    method ProjectsGroup (line 2824) | def ProjectsGroup(self):
    method RootGroupForPath (line 2827) | def RootGroupForPath(self, path):
    method AddOrGetFileInRootGroup (line 2864) | def AddOrGetFileInRootGroup(self, path):
    method RootGroupsTakeOverOnlyChildren (line 2875) | def RootGroupsTakeOverOnlyChildren(self, recurse=False):
    method SortGroups (line 2882) | def SortGroups(self):
    method AddOrGetProjectReference (line 2918) | def AddOrGetProjectReference(self, other_pbxproject):
    method _AllSymrootsUnique (line 3000) | def _AllSymrootsUnique(self, target, inherit_unique_symroot):
    method _DefinedSymroots (line 3013) | def _DefinedSymroots(self, target):
    method _IsUniqueSymrootForTarget (line 3031) | def _IsUniqueSymrootForTarget(self, symroot):
    method _SetUpProductReferences (line 3040) | def _SetUpProductReferences(self, other_pbxproject, product_group, pro...
    method SortRemoteProductReferences (line 3079) | def SortRemoteProductReferences(self):
  class XCProjectFile (line 3117) | class XCProjectFile(XCObject):
    method ComputeIDs (line 3128) | def ComputeIDs(self, recursive=True, overwrite=True, hash=None):
    method Print (line 3135) | def Print(self, file=sys.stdout):
    method _PrintObjects (line 3155) | def _PrintObjects(self, file):

FILE: gyp/pylib/gyp/xml_fix.py
  function _Replacement_write_data (line 15) | def _Replacement_write_data(writer, data, is_attrib=False):
  function _Replacement_writexml (line 24) | def _Replacement_writexml(self, writer, indent="", addindent="", newl=""):
  class XmlFix (line 46) | class XmlFix:
    method __init__ (line 49) | def __init__(self):
    method Cleanup (line 57) | def Cleanup(self):
    method __del__ (line 63) | def __del__(self):

FILE: gyp/pylib/packaging/_elffile.py
  class ELFInvalid (line 17) | class ELFInvalid(ValueError):
  class EIClass (line 21) | class EIClass(enum.IntEnum):
  class EIData (line 26) | class EIData(enum.IntEnum):
  class EMachine (line 31) | class EMachine(enum.IntEnum):
  class ELFFile (line 39) | class ELFFile:
    method __init__ (line 44) | def __init__(self, f: IO[bytes]) -> None:
    method _read (line 89) | def _read(self, fmt: str) -> Tuple[int, ...]:
    method interpreter (line 93) | def interpreter(self) -> Optional[str]:

FILE: gyp/pylib/packaging/_manylinux.py
  function _parse_elf (line 20) | def _parse_elf(path: str) -> Generator[Optional[ELFFile], None, None]:
  function _is_linux_armhf (line 28) | def _is_linux_armhf(executable: str) -> bool:
  function _is_linux_i686 (line 43) | def _is_linux_i686(executable: str) -> bool:
  function _have_compatible_abi (line 53) | def _have_compatible_abi(executable: str, archs: Sequence[str]) -> bool:
  class _GLibCVersion (line 70) | class _GLibCVersion(NamedTuple):
  function _glibc_version_string_confstr (line 75) | def _glibc_version_string_confstr() -> Optional[str]:
  function _glibc_version_string_ctypes (line 94) | def _glibc_version_string_ctypes() -> Optional[str]:
  function _glibc_version_string (line 138) | def _glibc_version_string() -> Optional[str]:
  function _parse_glibc_version (line 143) | def _parse_glibc_version(version_str: str) -> Tuple[int, int]:
  function _get_glibc_version (line 163) | def _get_glibc_version() -> Tuple[int, int]:
  function _is_compatible (line 171) | def _is_compatible(arch: str, version: _GLibCVersion) -> bool:
  function platform_tags (line 207) | def platform_tags(archs: Sequence[str]) -> Iterator[str]:

FILE: gyp/pylib/packaging/_musllinux.py
  class _MuslVersion (line 16) | class _MuslVersion(NamedTuple):
  function _parse_musl_version (line 21) | def _parse_musl_version(output: str) -> Optional[_MuslVersion]:
  function _get_musl_version (line 32) | def _get_musl_version(executable: str) -> Optional[_MuslVersion]:
  function platform_tags (line 54) | def platform_tags(archs: Sequence[str]) -> Iterator[str]:

FILE: gyp/pylib/packaging/_parser.py
  class Node (line 13) | class Node:
    method __init__ (line 14) | def __init__(self, value: str) -> None:
    method __str__ (line 17) | def __str__(self) -> str:
    method __repr__ (line 20) | def __repr__(self) -> str:
    method serialize (line 23) | def serialize(self) -> str:
  class Variable (line 27) | class Variable(Node):
    method serialize (line 28) | def serialize(self) -> str:
  class Value (line 32) | class Value(Node):
    method serialize (line 33) | def serialize(self) -> str:
  class Op (line 37) | class Op(Node):
    method serialize (line 38) | def serialize(self) -> str:
  class ParsedRequirement (line 52) | class ParsedRequirement(NamedTuple):
  function parse_requirement (line 63) | def parse_requirement(source: str) -> ParsedRequirement:
  function _parse_requirement (line 67) | def _parse_requirement(tokenizer: Tokenizer) -> ParsedRequirement:
  function _parse_requirement_details (line 88) | def _parse_requirement_details(
  function _parse_requirement_marker (line 139) | def _parse_requirement_marker(
  function _parse_extras (line 159) | def _parse_extras(tokenizer: Tokenizer) -> List[str]:
  function _parse_extras_list (line 178) | def _parse_extras_list(tokenizer: Tokenizer) -> List[str]:
  function _parse_specifier (line 205) | def _parse_specifier(tokenizer: Tokenizer) -> str:
  function _parse_version_many (line 222) | def _parse_version_many(tokenizer: Tokenizer) -> str:
  function parse_marker (line 254) | def parse_marker(source: str) -> MarkerList:
  function _parse_full_marker (line 258) | def _parse_full_marker(tokenizer: Tokenizer) -> MarkerList:
  function _parse_marker (line 264) | def _parse_marker(tokenizer: Tokenizer) -> MarkerList:
  function _parse_marker_atom (line 276) | def _parse_marker_atom(tokenizer: Tokenizer) -> MarkerAtom:
  function _parse_marker_item (line 298) | def _parse_marker_item(tokenizer: Tokenizer) -> MarkerItem:
  function _parse_marker_var (line 312) | def _parse_marker_var(tokenizer: Tokenizer) -> MarkerVar:
  function process_env_var (line 326) | def process_env_var(env_var: str) -> Variable:
  function process_python_str (line 336) | def process_python_str(python_str: str) -> Value:
  function _parse_marker_op (line 341) | def _parse_marker_op(tokenizer: Tokenizer) -> Op:

FILE: gyp/pylib/packaging/_structures.py
  class InfinityType (line 6) | class InfinityType:
    method __repr__ (line 7) | def __repr__(self) -> str:
    method __hash__ (line 10) | def __hash__(self) -> int:
    method __lt__ (line 13) | def __lt__(self, other: object) -> bool:
    method __le__ (line 16) | def __le__(self, other: object) -> bool:
    method __eq__ (line 19) | def __eq__(self, other: object) -> bool:
    method __gt__ (line 22) | def __gt__(self, other: object) -> bool:
    method __ge__ (line 25) | def __ge__(self, other: object) -> bool:
    method __neg__ (line 28) | def __neg__(self: object) -> "NegativeInfinityType":
  class NegativeInfinityType (line 35) | class NegativeInfinityType:
    method __repr__ (line 36) | def __repr__(self) -> str:
    method __hash__ (line 39) | def __hash__(self) -> int:
    method __lt__ (line 42) | def __lt__(self, other: object) -> bool:
    method __le__ (line 45) | def __le__(self, other: object) -> bool:
    method __eq__ (line 48) | def __eq__(self, other: object) -> bool:
    method __gt__ (line 51) | def __gt__(self, other: object) -> bool:
    method __ge__ (line 54) | def __ge__(self, other: object) -> bool:
    method __neg__ (line 57) | def __neg__(self: object) -> InfinityType:

FILE: gyp/pylib/packaging/_tokenizer.py
  class Token (line 10) | class Token:
  class ParserSyntaxError (line 16) | class ParserSyntaxError(Exception):
    method __init__ (line 19) | def __init__(
    method __str__ (line 32) | def __str__(self) -> str:
  class Tokenizer (line 88) | class Tokenizer:
    method __init__ (line 95) | def __init__(
    method consume (line 108) | def consume(self, name: str) -> None:
    method check (line 113) | def check(self, name: str, *, peek: bool = False) -> bool:
    method expect (line 134) | def expect(self, name: str, *, expected: str) -> Token:
    method read (line 143) | def read(self) -> Token:
    method raise_syntax_error (line 153) | def raise_syntax_error(
    method enclosing_tokens (line 172) | def enclosing_tokens(

FILE: gyp/pylib/packaging/markers.py
  class InvalidMarker (line 34) | class InvalidMarker(ValueError):
  class UndefinedComparison (line 40) | class UndefinedComparison(ValueError):
  class UndefinedEnvironmentName (line 46) | class UndefinedEnvironmentName(ValueError):
  function _normalize_extra_values (line 53) | def _normalize_extra_values(results: Any) -> Any:
  function _format_marker (line 69) | def _format_marker(
  function _eval_op (line 110) | def _eval_op(lhs: str, op: Op, rhs: str) -> bool:
  function _normalize (line 125) | def _normalize(*values: str, key: str) -> Tuple[str, ...]:
  function _evaluate_markers (line 137) | def _evaluate_markers(markers: MarkerList, environment: Dict[str, str]) ...
  function format_full_version (line 167) | def format_full_version(info: "sys._version_info") -> str:
  function default_environment (line 174) | def default_environment() -> Dict[str, str]:
  class Marker (line 192) | class Marker:
    method __init__ (line 193) | def __init__(self, marker: str) -> None:
    method __str__ (line 218) | def __str__(self) -> str:
    method __repr__ (line 221) | def __repr__(self) -> str:
    method __hash__ (line 224) | def __hash__(self) -> int:
    method __eq__ (line 227) | def __eq__(self, other: Any) -> bool:
    method evaluate (line 233) | def evaluate(self, environment: Optional[Dict[str, str]] = None) -> bool:

FILE: gyp/pylib/packaging/metadata.py
  class Literal (line 34) | class Literal:
    method __init_subclass__ (line 35) | def __init_subclass__(*_args, **_kwargs):
  class TypedDict (line 38) | class TypedDict:
    method __init_subclass__ (line 39) | def __init_subclass__(*_args, **_kwargs):
  class ExceptionGroup (line 47) | class ExceptionGroup(Exception):  # noqa: N818
    method __init__ (line 57) | def __init__(self, message: str, exceptions: List[Exception]) -> None:
    method __repr__ (line 61) | def __repr__(self) -> str:
  class InvalidMetadata (line 68) | class InvalidMetadata(ValueError):
    method __init__ (line 74) | def __init__(self, field: str, message: str) -> None:
  class RawMetadata (line 83) | class RawMetadata(TypedDict, total=False):
  function _parse_keywords (line 188) | def _parse_keywords(data: str) -> List[str]:
  function _parse_project_urls (line 193) | def _parse_project_urls(data: List[str]) -> Dict[str, str]:
  function _get_payload (line 233) | def _get_payload(msg: email.message.Message, source: Union[bytes, str]) ...
  function parse_email (line 295) | def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str,...
  class _Validator (line 481) | class _Validator(Generic[T]):
    method __init__ (line 495) | def __init__(
    method __set_name__ (line 502) | def __set_name__(self, _owner: "Metadata", name: str) -> None:
    method __get__ (line 506) | def __get__(self, instance: "Metadata", _owner: Type["Metadata"]) -> T:
    method _invalid_metadata (line 533) | def _invalid_metadata(
    method _process_metadata_version (line 542) | def _process_metadata_version(self, value: str) -> _MetadataVersion:
    method _process_name (line 548) | def _process_name(self, value: str) -> str:
    method _process_version (line 561) | def _process_version(self, value: str) -> version_module.Version:
    method _process_summary (line 571) | def _process_summary(self, value: str) -> str:
    method _process_description_content_type (line 577) | def _process_description_content_type(self, value: str) -> str:
    method _process_dynamic (line 608) | def _process_dynamic(self, value: List[str]) -> List[str]:
    method _process_provides_extra (line 618) | def _process_provides_extra(
    method _process_requires_python (line 633) | def _process_requires_python(self, value: str) -> specifiers.Specifier...
    method _process_requires_dist (line 641) | def _process_requires_dist(
  class Metadata (line 655) | class Metadata:
    method from_raw (line 667) | def from_raw(cls, data: RawMetadata, *, validate: bool = True) -> "Met...
    method from_email (line 724) | def from_email(

FILE: gyp/pylib/packaging/requirements.py
  class InvalidRequirement (line 14) | class InvalidRequirement(ValueError):
  class Requirement (line 20) | class Requirement:
    method __init__ (line 33) | def __init__(self, requirement_string: str) -> None:
    method _iter_parts (line 48) | def _iter_parts(self, name: str) -> Iterator[str]:
    method __str__ (line 66) | def __str__(self) -> str:
    method __repr__ (line 69) | def __repr__(self) -> str:
    method __hash__ (line 72) | def __hash__(self) -> int:
    method __eq__ (line 80) | def __eq__(self, other: Any) -> bool:

FILE: gyp/pylib/packaging/specifiers.py
  function _coerce_version (line 34) | def _coerce_version(version: UnparsedVersion) -> Version:
  class InvalidSpecifier (line 40) | class InvalidSpecifier(ValueError):
  class BaseSpecifier (line 52) | class BaseSpecifier(metaclass=abc.ABCMeta):
    method __str__ (line 54) | def __str__(self) -> str:
    method __hash__ (line 61) | def __hash__(self) -> int:
    method __eq__ (line 67) | def __eq__(self, other: object) -> bool:
    method prereleases (line 77) | def prereleases(self) -> Optional[bool]:
    method prereleases (line 85) | def prereleases(self, value: bool) -> None:
    method contains (line 92) | def contains(self, item: str, prereleases: Optional[bool] = None) -> b...
    method filter (line 98) | def filter(
  class Specifier (line 107) | class Specifier(BaseSpecifier):
    method __init__ (line 230) | def __init__(self, spec: str = "", prereleases: Optional[bool] = None)...
    method prereleases (line 257) | def prereleases(self) -> bool:
    method prereleases (line 281) | def prereleases(self, value: bool) -> None:
    method operator (line 285) | def operator(self) -> str:
    method version (line 294) | def version(self) -> str:
    method __repr__ (line 302) | def __repr__(self) -> str:
    method __str__ (line 320) | def __str__(self) -> str:
    method _canonical_spec (line 331) | def _canonical_spec(self) -> Tuple[str, str]:
    method __hash__ (line 338) | def __hash__(self) -> int:
    method __eq__ (line 341) | def __eq__(self, other: object) -> bool:
    method _get_operator (line 370) | def _get_operator(self, op: str) -> CallableOperator:
    method _compare_compatible (line 376) | def _compare_compatible(self, prospective: Version, spec: str) -> bool:
    method _compare_equal (line 397) | def _compare_equal(self, prospective: Version, spec: str) -> bool:
    method _compare_not_equal (line 438) | def _compare_not_equal(self, prospective: Version, spec: str) -> bool:
    method _compare_less_than_equal (line 441) | def _compare_less_than_equal(self, prospective: Version, spec: str) ->...
    method _compare_greater_than_equal (line 448) | def _compare_greater_than_equal(self, prospective: Version, spec: str)...
    method _compare_less_than (line 455) | def _compare_less_than(self, prospective: Version, spec_str: str) -> b...
    method _compare_greater_than (line 480) | def _compare_greater_than(self, prospective: Version, spec_str: str) -...
    method _compare_arbitrary (line 511) | def _compare_arbitrary(self, prospective: Version, spec: str) -> bool:
    method __contains__ (line 514) | def __contains__(self, item: Union[str, Version]) -> bool:
    method contains (line 535) | def contains(
    method filter (line 581) | def filter(
  function _version_split (line 646) | def _version_split(version: str) -> List[str]:
  function _version_join (line 668) | def _version_join(components: List[str]) -> str:
  function _is_not_suffix (line 679) | def _is_not_suffix(segment: str) -> bool:
  function _pad_version (line 685) | def _pad_version(left: List[str], right: List[str]) -> Tuple[List[str], ...
  class SpecifierSet (line 703) | class SpecifierSet(BaseSpecifier):
    method __init__ (line 710) | def __init__(
    method prereleases (line 746) | def prereleases(self) -> Optional[bool]:
    method prereleases (line 763) | def prereleases(self, value: bool) -> None:
    method __repr__ (line 766) | def __repr__(self) -> str:
    method __str__ (line 787) | def __str__(self) -> str:
    method __hash__ (line 800) | def __hash__(self) -> int:
    method __and__ (line 803) | def __and__(self, other: Union["SpecifierSet", str]) -> "SpecifierSet":
    method __eq__ (line 835) | def __eq__(self, other: object) -> bool:
    method __len__ (line 861) | def __len__(self) -> int:
    method __iter__ (line 865) | def __iter__(self) -> Iterator[Specifier]:
    method __contains__ (line 875) | def __contains__(self, item: UnparsedVersion) -> bool:
    method contains (line 896) | def contains(
    method filter (line 953) | def filter(

FILE: gyp/pylib/packaging/tags.py
  class Tag (line 44) | class Tag:
    method __init__ (line 54) | def __init__(self, interpreter: str, abi: str, platform: str) -> None:
    method interpreter (line 66) | def interpreter(self) -> str:
    method abi (line 70) | def abi(self) -> str:
    method platform (line 74) | def platform(self) -> str:
    method __eq__ (line 77) | def __eq__(self, other: object) -> bool:
    method __hash__ (line 88) | def __hash__(self) -> int:
    method __str__ (line 91) | def __str__(self) -> str:
    method __repr__ (line 94) | def __repr__(self) -> str:
  function parse_tag (line 98) | def parse_tag(tag: str) -> FrozenSet[Tag]:
  function _get_config_var (line 114) | def _get_config_var(name: str, warn: bool = False) -> Union[int, str, No...
  function _normalize_string (line 123) | def _normalize_string(string: str) -> str:
  function _abi3_applies (line 127) | def _abi3_applies(python_version: PythonVersion) -> bool:
  function _cpython_abis (line 136) | def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List...
  function cpython_tags (line 172) | def cpython_tags(
  function _generic_abi (line 229) | def _generic_abi() -> List[str]:
  function generic_tags (line 270) | def generic_tags(
  function _py_interpreter_range (line 301) | def _py_interpreter_range(py_version: PythonVersion) -> Iterator[str]:
  function compatible_tags (line 316) | def compatible_tags(
  function _mac_arch (line 341) | def _mac_arch(arch: str, is_32bit: bool = _32_BIT_INTERPRETER) -> str:
  function _mac_binary_formats (line 351) | def _mac_binary_formats(version: MacVersion, cpu_arch: str) -> List[str]:
  function mac_platforms (line 383) | def mac_platforms(
  function _linux_platforms (line 471) | def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[s...
  function _generic_platforms (line 490) | def _generic_platforms() -> Iterator[str]:
  function platform_tags (line 494) | def platform_tags() -> Iterator[str]:
  function interpreter_name (line 506) | def interpreter_name() -> str:
  function interpreter_version (line 517) | def interpreter_version(*, warn: bool = False) -> str:
  function _version_nodot (line 529) | def _version_nodot(version: PythonVersion) -> str:
  function sys_tags (line 533) | def sys_tags(*, warn: bool = False) -> Iterator[Tag]:

FILE: gyp/pylib/packaging/utils.py
  class InvalidName (line 15) | class InvalidName(ValueError):
  class InvalidWheelFilename (line 21) | class InvalidWheelFilename(ValueError):
  class InvalidSdistFilename (line 27) | class InvalidSdistFilename(ValueError):
  function canonicalize_name (line 43) | def canonicalize_name(name: str, *, validate: bool = False) -> Normalize...
  function is_normalized_name (line 51) | def is_normalized_name(name: str) -> bool:
  function canonicalize_version (line 55) | def canonicalize_version(
  function parse_wheel_filename (line 103) | def parse_wheel_filename(
  function parse_sdist_filename (line 146) | def parse_sdist_filename(filename: str) -> Tuple[NormalizedName, Version]:

FILE: gyp/pylib/packaging/version.py
  class _Version (line 36) | class _Version(NamedTuple):
  function parse (line 45) | def parse(version: str) -> "Version":
  class InvalidVersion (line 57) | class InvalidVersion(ValueError):
  class _BaseVersion (line 67) | class _BaseVersion:
    method __hash__ (line 70) | def __hash__(self) -> int:
    method __lt__ (line 76) | def __lt__(self, other: "_BaseVersion") -> bool:
    method __le__ (line 82) | def __le__(self, other: "_BaseVersion") -> bool:
    method __eq__ (line 88) | def __eq__(self, other: object) -> bool:
    method __ge__ (line 94) | def __ge__(self, other: "_BaseVersion") -> bool:
    method __gt__ (line 100) | def __gt__(self, other: "_BaseVersion") -> bool:
    method __ne__ (line 106) | def __ne__(self, other: object) -> bool:
  class Version (line 159) | class Version(_BaseVersion):
    method __init__ (line 186) | def __init__(self, version: str) -> None:
    method __repr__ (line 224) | def __repr__(self) -> str:
    method __str__ (line 232) | def __str__(self) -> str:
    method epoch (line 266) | def epoch(self) -> int:
    method release (line 277) | def release(self) -> Tuple[int, ...]:
    method pre (line 293) | def pre(self) -> Optional[Tuple[str, int]]:
    method post (line 308) | def post(self) -> Optional[int]:
    method dev (line 319) | def dev(self) -> Optional[int]:
    method local (line 330) | def local(self) -> Optional[str]:
    method public (line 344) | def public(self) -> str:
    method base_version (line 357) | def base_version(self) -> str:
    method is_prerelease (line 382) | def is_prerelease(self) -> bool:
    method is_postrelease (line 399) | def is_postrelease(self) -> bool:
    method is_devrelease (line 410) | def is_devrelease(self) -> bool:
    method major (line 421) | def major(self) -> int:
    method minor (line 430) | def minor(self) -> int:
    method micro (line 441) | def micro(self) -> int:
  function _parse_letter_version (line 452) | def _parse_letter_version(
  function _parse_local_version (line 491) | def _parse_local_version(local: Optional[str]) -> Optional[LocalType]:
  function _cmpkey (line 503) | def _cmpkey(

FILE: gyp/test_gyp.py
  function is_test_name (line 16) | def is_test_name(f):
  function find_all_gyptest_files (line 20) | def find_all_gyptest_files(directory):
  function main (line 28) | def main(argv=None):
  function print_configuration_info (line 146) | def print_configuration_info():
  class Runner (line 167) | class Runner:
    method __init__ (line 168) | def __init__(self, formats, tests, gyp_options, verbose):
    method run (line 181) | def run(self):
    method run_test (line 195) | def run_test(self, test, fmt, i):
    method print_ (line 228) | def print_(self, msg):
    method erase_current_line (line 237) | def erase_current_line(self):
    method print_results (line 242) | def print_results(self):

FILE: gyp/tools/graphviz.py
  function ParseTarget (line 16) | def ParseTarget(target):
  function LoadEdges (line 22) | def LoadEdges(filename, targets):
  function WriteGraph (line 43) | def WriteGraph(edges):
  function main (line 85) | def main():

FILE: gyp/tools/pretty_gyp.py
  function comment_replace (line 23) | def comment_replace(matchobj):
  function mask_comments (line 27) | def mask_comments(input):
  function quote_replace (line 33) | def quote_replace(matchobj):
  function mask_quotes (line 42) | def mask_quotes(input):
  function do_split (line 48) | def do_split(input, masked_input, search_re):
  function split_double_braces (line 63) | def split_double_braces(input):
  function count_braces (line 84) | def count_braces(line):
  function prettyprint_input (line 116) | def prettyprint_input(lines):
  function main (line 140) | def main():

FILE: gyp/tools/pretty_sln.py
  function BuildProject (line 24) | def BuildProject(project, built, projects, deps):
  function ParseSolution (line 35) | def ParseSolution(solution_file):
  function PrintDependencies (line 109) | def PrintDependencies(projects, deps):
  function PrintBuildOrder (line 126) | def PrintBuildOrder(projects, deps):
  function PrintVCProj (line 140) | def PrintVCProj(projects):
  function main (line 164) | def main():

FILE: gyp/tools/pretty_vcproj.py
  function cmp (line 24) | def cmp(x, y):
  class CmpTuple (line 28) | class CmpTuple:
    method __call__ (line 31) | def __call__(self, x, y):
  class CmpNode (line 35) | class CmpNode:
    method __call__ (line 38) | def __call__(self, x, y):
  function PrettyPrintNode (line 63) | def PrettyPrintNode(node, indent=0):
  function FlattenFilter (line 97) | def FlattenFilter(node):
  function FixFilenames (line 114) | def FixFilenames(filenames, current_directory):
  function AbsoluteNode (line 129) | def AbsoluteNode(node):
  function CleanupVcproj (line 149) | def CleanupVcproj(node):
  function GetConfigurationNodes (line 207) | def GetConfigurationNodes(vcproj):
  function GetChildrenVsprops (line 219) | def GetChildrenVsprops(filename):
  function SeekToNode (line 227) | def SeekToNode(node1, child2):
  function MergeAttributes (line 249) | def MergeAttributes(node1, node2):
  function MergeProperties (line 274) | def MergeProperties(node1, node2):
  function main (line 284) | def main(argv):

FILE: lib/Find-VisualStudio.cs
  type InstanceState (line 16) | [Flags]
  type IEnumSetupInstances (line 27) | [Guid("6380BCFF-41D3-4B2E-8B2E-BF8A6810C848")]
    method Next (line 33) | void Next([MarshalAs(UnmanagedType.U4), In] int celt,
    method Skip (line 37) | void Skip([MarshalAs(UnmanagedType.U4), In] int celt);
    method Reset (line 39) | void Reset();
    method Clone (line 41) | [return: MarshalAs(UnmanagedType.Interface)]
  type ISetupConfiguration (line 45) | [Guid("42843719-DB4C-46C2-8E7C-64F1816EFD5B")]
  type ISetupConfiguration2 (line 52) | [Guid("26AAB78C-4A60-49D6-AF3B-3C35BC93365D")]
    method EnumInstances (line 58) | [return: MarshalAs(UnmanagedType.Interface)]
    method GetInstanceForCurrentProcess (line 61) | [return: MarshalAs(UnmanagedType.Interface)]
    method GetInstanceForPath (line 64) | [return: MarshalAs(UnmanagedType.Interface)]
    method EnumAllInstances (line 67) | [return: MarshalAs(UnmanagedType.Interface)]
  type ISetupInstance (line 71) | [Guid("B41463C3-8866-43B5-BC33-2B0676F7F42E")]
  type ISetupInstance2 (line 78) | [Guid("89143C9A-05AF-49B0-B717-72E218A2185C")]
    method GetInstanceId (line 83) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetInstallDate (line 86) | [return: MarshalAs(UnmanagedType.Struct)]
    method GetInstallationName (line 89) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetInstallationPath (line 92) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetInstallationVersion (line 95) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetDisplayName (line 98) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetDescription (line 101) | [return: MarshalAs(UnmanagedType.BStr)]
    method ResolvePath (line 104) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetState (line 107) | [return: MarshalAs(UnmanagedType.U4)]
    method GetPackages (line 110) | [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum...
    method GetProduct (line 113) | ISetupPackageReference GetProduct();
    method GetProductPath (line 115) | [return: MarshalAs(UnmanagedType.BStr)]
    method IsLaunchable (line 118) | [return: MarshalAs(UnmanagedType.VariantBool)]
    method IsComplete (line 121) | [return: MarshalAs(UnmanagedType.VariantBool)]
    method GetProperties (line 124) | [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum...
    method GetEnginePath (line 127) | [return: MarshalAs(UnmanagedType.BStr)]
  type ISetupPackageReference (line 131) | [Guid("DA8D8A16-B2B6-4487-A2F1-594CCCCD6BF5")]
    method GetId (line 137) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetVersion (line 140) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetChip (line 143) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetLanguage (line 146) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetBranch (line 149) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetType (line 152) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetUniqueId (line 155) | [return: MarshalAs(UnmanagedType.BStr)]
    method GetIsExtension (line 158) | [return: MarshalAs(UnmanagedType.VariantBool)]
  type ISetupPropertyStore (line 162) | [Guid("c601c175-a3be-44bc-91f6-4568d230fc83")]
    method GetNames (line 168) | [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum...
    method GetValue (line 171) | object GetValue([MarshalAs(UnmanagedType.LPWStr), In] string pwszName);
  type SetupConfiguration (line 174) | [Guid("42843719-DB4C-46C2-8E7C-64F1816EFD5B")]
  class SetupConfigurationClass (line 181) | [Guid("177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D")]
  class Main (line 188) | public static class Main
    method PrintJson (line 190) | public static void PrintJson()
    method JsonString (line 219) | private static string JsonString(string s)
    method InstanceJson (line 224) | private static string InstanceJson(ISetupInstance2 setupInstance2)

FILE: lib/build.js
  function build (line 11) | async function build (gyp, argv) {

FILE: lib/clean.js
  function clean (line 6) | async function clean (gyp, argv) {

FILE: lib/configure.js
  function configure (line 20) | async function configure (gyp, argv) {

FILE: lib/create-config-gypi.js
  function parseConfigGypi (line 7) | function parseConfigGypi (config) {
  function getBaseConfigGypi (line 18) | async function getBaseConfigGypi ({ gyp, nodeDir }) {
  function getCurrentConfigGypi (line 38) | async function getCurrentConfigGypi ({ gyp, nodeDir, vsInfo, python }) {
  function createConfigGypi (line 121) | async function createConfigGypi ({ gyp, buildDir, nodeDir, vsInfo, pytho...

FILE: lib/download.js
  function download (line 5) | async function download (gyp, url) {
  function readCAFile (line 28) | async function readCAFile (filename) {

FILE: lib/find-node-directory.js
  function findNodeDirectory (line 6) | function findNodeDirectory (scriptLocation, processObj) {

FILE: lib/find-python.js
  function getOsUserInfo (line 8) | function getOsUserInfo () {
  class PythonFinder (line 40) | class PythonFinder {
    method constructor (line 55) | constructor (configPython) {
    method addLog (line 62) | addLog (message) {
    method findPython (line 69) | async findPython () {
    method checkCommand (line 166) | async checkCommand (command) {
    method checkPyLauncher (line 202) | async checkPyLauncher () {
    method checkExecPath (line 217) | async checkExecPath (execPath) {
    method run (line 252) | async run (exec, args, shell) {
    method succeed (line 272) | succeed (execPath, version) {
    method fail (line 277) | fail () {

FILE: lib/find-visualstudio.js
  class VisualStudioFinder (line 8) | class VisualStudioFinder {
    method constructor (line 15) | constructor (nodeSemver, configMsvsVersion) {
    method addLog (line 24) | addLog (message) {
    method findVisualStudio (line 29) | async findVisualStudio () {
    method succeed (line 77) | succeed (info) {
    method fail (line 84) | fail () {
    method findVisualStudio2019OrNewerFromSpecifiedLocation (line 121) | async findVisualStudio2019OrNewerFromSpecifiedLocation () {
    method findVisualStudio2017FromSpecifiedLocation (line 125) | async findVisualStudio2017FromSpecifiedLocation () {
    method findVSFromSpecifiedLocation (line 134) | async findVSFromSpecifiedLocation (supportedYears) {
    method findVisualStudio2019OrNewerUsingSetupModule (line 164) | async findVisualStudio2019OrNewerUsingSetupModule () {
    method findVisualStudio2017UsingSetupModule (line 168) | async findVisualStudio2017UsingSetupModule () {
    method findNewVSUsingSetupModule (line 177) | async findNewVSUsingSetupModule (supportedYears) {
    method findVisualStudio2019OrNewer (line 225) | async findVisualStudio2019OrNewer () {
    method findVisualStudio2017 (line 230) | async findVisualStudio2017 () {
    method findNewVS (line 241) | async findNewVS (supportedYears) {
    method parseData (line 263) | parseData (err, stdout, stderr, sanityCheckOptions) {
    method processData (line 303) | processData (vsInfo, supportedYears) {
    method getVersionInfo (line 368) | getVersionInfo (info) {
    method msBuildPathExists (line 400) | msBuildPathExists (path) {
    method getMSBuild (line 405) | getMSBuild (info, versionYear) {
    method getToolset (line 436) | getToolset (info, versionYear) {
    method getSDK (line 471) | getSDK (info) {
    method findVisualStudio2015 (line 506) | async findVisualStudio2015 () {
    method findVisualStudio2013 (line 522) | async findVisualStudio2013 () {
    method findOldVS (line 538) | async findOldVS (info) {
    method checkConfigVersion (line 579) | checkConfigVersion (versionYear, vsPath) {
    method execFile (line 601) | async execFile (exec, args) {

FILE: lib/install.js
  function install (line 17) | async function install (gyp, argv) {
  class ShaSum (line 392) | class ShaSum extends Transform {
    method constructor (line 393) | constructor (callback) {
    method _transform (line 399) | _transform (chunk, _, callback) {
    method _flush (line 404) | _flush (callback) {

FILE: lib/list.js
  function list (line 6) | async function list (gyp, args) {

FILE: lib/log.js
  constant COLORS (line 13) | const COLORS = {
  class Logger (line 41) | class Logger {
    method constructor (line 75) | constructor (stream) {
    method stream (line 83) | get stream () {
    method stream (line 87) | set stream (stream) {
    method level (line 91) | get level () {
    method level (line 95) | set level (level) {
    method isVisible (line 99) | isVisible (level) {
    method #onLog (line 103) | #onLog (...args) {
    method #color (line 126) | #color (str, { fg, bg, inverse }) {
    method #log (line 138) | #log (levelId, msgPrefix, ...args) {
  constant NULL_LOGGER (line 161) | const NULL_LOGGER = !!process.env.NODE_GYP_NULL_LOGGER

FILE: lib/node-gyp.js
  class Gyp (line 21) | class Gyp extends EventEmitter {
    method constructor (line 74) | constructor (...args) {
    method parseArgv (line 94) | parseArgv (argv) {
    method spawn (line 168) | spawn (command, args, opts) {
    method usage (line 184) | usage () {

FILE: lib/process-release.js
  function processRelease (line 16) | function processRelease (argv, gyp, defaultVersion, defaultRelease) {
  function normalizePath (line 122) | function normalizePath (p) {
  function resolveLibUrl (line 126) | function resolveLibUrl (name, defaultUrl, arch, versionMajor) {

FILE: lib/rebuild.js
  function rebuild (line 3) | async function rebuild (gyp, argv) {

FILE: lib/remove.js
  function remove (line 8) | async function remove (gyp, argv) {

FILE: lib/util.js
  function regGetValue (line 13) | async function regGetValue (key, value, addOpts) {
  function regSearchKeys (line 42) | async function regSearchKeys (keys, value, addOpts) {
  function findAccessibleSync (line 57) | function findAccessibleSync (logprefix, dir, candidates) {

FILE: src/win_delay_load_hook.cc
  function FARPROC (line 23) | static FARPROC WINAPI load_exe_hook(unsigned int event, DelayLoadInfo* i...

FILE: test/common.js
  function fail (line 7) | function fail () {

FILE: test/fixtures/test-charmap.py
  function main (line 10) | def main():

FILE: test/simple-proxy.js
  function handler (line 13) | function handler (req, res) {

FILE: test/test-addon.js
  function runHello (line 25) | function runHello (hostProcess = process.execPath) {
  function getEncoding (line 30) | function getEncoding () {
  function checkCharmapValid (line 35) | function checkCharmapValid () {

FILE: test/test-configure-nodedir.js
  function checkTargetPath (line 48) | function checkTargetPath (target, value) {

FILE: test/test-configure-python.js
  constant EXPECTED_PYPATH (line 23) | const EXPECTED_PYPATH = path.join(__dirname, '..', 'gyp', 'pylib')
  constant SEPARATOR (line 24) | const SEPARATOR = process.platform === 'win32' ? ';' : ':'

FILE: test/test-find-python.js
  class TestPythonFinder (line 14) | class TestPythonFinder extends PythonFinder {
    method constructor (line 15) | constructor (...args) {
    method findPython (line 20) | async findPython () {

FILE: test/test-find-visualstudio.js
  class TestVisualStudioFinder (line 14) | class TestVisualStudioFinder extends VisualStudioFinder {
    method findVisualStudio (line 15) | async findVisualStudio () {
  function verifyVSSetupData (line 624) | async function verifyVSSetupData (fixtureName, vsType, vsYear, sdkVersio...
  function setupExecFixture (line 664) | function setupExecFixture (finder, fixtureName) {
  function allVsVersions (line 676) | function allVsVersions (finder) {

FILE: test/test-install.js
  method stat (line 22) | stat (_) {

FILE: test/test-windows-make.js
  function runHello (line 28) | function runHello (hostProcess = process.execPath) {
  function executable (line 33) | function executable (name) {
  function getEnv (line 37) | function getEnv (target) {
  function quote (line 73) | function quote (path) {

FILE: update-gyp.py
  function is_within_directory (line 40) | def is_within_directory(directory, target):
  function safe_extract (line 48) | def safe_extract(tar, path=".", members=None, *, numeric_owner=False):
Condensed preview — 185 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,696K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 2095,
    "preview": "<!--\nThank you for reporting an issue!\n\nRemember, this issue tracker is for reporting issues ONLY with node-gyp.\n\nIf you"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 633,
    "preview": "<!--\nThank you for your pull request. Please review the below requirements.\n\nContributor guide: https://github.com/nodej"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 381,
    "preview": "# Keep GitHub Actions up to date with Dependabot...\n# https://docs.github.com/en/code-security/dependabot/working-with-d"
  },
  {
    "path": ".github/scripts/check-engines.js",
    "chars": 1244,
    "preview": "const { join } = require('path')\nconst semver = require('semver')\nconst Arborist = require('@npmcli/arborist')\n\nconst ru"
  },
  {
    "path": ".github/workflows/release-please.yml",
    "chars": 1511,
    "preview": "name: release-please\n\non:\n  push:\n    branches:\n      - main\n\npermissions:\n  id-token: write  # Required for OIDC\n  cont"
  },
  {
    "path": ".github/workflows/tests.yml",
    "chars": 5564,
    "preview": "# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardw"
  },
  {
    "path": ".github/workflows/update-gyp-next.yml",
    "chars": 1538,
    "preview": "name: Update gyp-next\n\non:\n  schedule:\n    # Run once a week at 12:00 AM UTC on Sunday.\n    - cron: 0 0 * * *\n  workflow"
  },
  {
    "path": ".github/workflows/visual-studio.yml",
    "chars": 1131,
    "preview": "# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardw"
  },
  {
    "path": ".gitignore",
    "chars": 93,
    "preview": ".ncu\n.nyc_output\n*.swp\ngyp/test\nnode_modules\nnode-gyp-*.tgz\npackage-lock.json\ntest/.node-gyp\n"
  },
  {
    "path": ".npmignore",
    "chars": 168,
    "preview": ".ncu\n.nyc_output\n*.swp\n/.github/\n/docs/\n/gyp/.github/\n/gyp/*.md\n/gyp/AUTHORS\n/gyp/test\n/gyp/tools/\n/node-gyp-*.tgz\n/test"
  },
  {
    "path": ".release-please-manifest.json",
    "chars": 22,
    "preview": "{\n    \".\": \"12.2.0\"\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 121153,
    "preview": "# Changelog\n\n## [12.2.0](https://github.com/nodejs/node-gyp/compare/v12.1.0...v12.2.0) (2026-01-26)\n\n\n### Features\n\n* in"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 207,
    "preview": "# Code of Conduct\n\n* [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md)\n* [Node.j"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1774,
    "preview": "# Contributing to node-gyp\n\n## Making changes to gyp-next\n\nChanges in the subfolder `gyp/` should be submitted to the\n[`"
  },
  {
    "path": "LICENSE",
    "chars": 1102,
    "preview": "(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>\n\nPermission is hereby granted, free of cha"
  },
  {
    "path": "README.md",
    "chars": 12285,
    "preview": "# `node-gyp` - Node.js native addon build tool\n\n[![Build Status](https://github.com/nodejs/node-gyp/workflows/Tests/badg"
  },
  {
    "path": "SECURITY.md",
    "chars": 151,
    "preview": "If you believe you have found a security issue in the software in this\nrepository, please consult https://github.com/nod"
  },
  {
    "path": "addon.gypi",
    "chars": 5952,
    "preview": "{\n  'variables' : {\n    'node_engine_include_dir%': 'deps/v8/include',\n    'node_host_binary%': 'node',\n    'node_with_l"
  },
  {
    "path": "bin/node-gyp.js",
    "chars": 3620,
    "preview": "#!/usr/bin/env node\n\n'use strict'\n\nprocess.title = 'node-gyp'\n\nconst envPaths = require('env-paths')\nconst gyp = require"
  },
  {
    "path": "docs/Error-pre-versions-of-node-cannot-be-installed.md",
    "chars": 3843,
    "preview": "When using `node-gyp` you might see an error like this when attempting to compile/install a node.js native addon:\n\n```\n$"
  },
  {
    "path": "docs/Force-npm-to-use-global-node-gyp.md",
    "chars": 2780,
    "preview": "# Force npm to use global installed node-gyp\n\n**Note: These instructions only work with npm 6 or older. For a solution t"
  },
  {
    "path": "docs/Home.md",
    "chars": 217,
    "preview": "Welcome to the node-gyp wiki!\n\n * [[\"binding.gyp\" files out in the wild]]\n * [[Linking to OpenSSL]]\n * [[Common Issues]]"
  },
  {
    "path": "docs/Linking-to-OpenSSL.md",
    "chars": 3855,
    "preview": "A handful of native addons require linking to OpenSSL in one way or another. This introduces a small challenge since nod"
  },
  {
    "path": "docs/README.md",
    "chars": 1513,
    "preview": "## Versions of `node-gyp` that are earlier than v11.x.x\n\nPlease look thru your error log for the string `gyp info using "
  },
  {
    "path": "docs/Updating-npm-bundled-node-gyp.md",
    "chars": 2575,
    "preview": "# Updating the npm-bundled version of node-gyp\n\n**Note: These instructions are (only) tested and known to work with npm "
  },
  {
    "path": "docs/binding.gyp-files-in-the-wild.md",
    "chars": 4829,
    "preview": "This page contains links to some examples of existing `binding.gyp` files that other node modules are using. Take a look"
  },
  {
    "path": "eslint.config.js",
    "chars": 58,
    "preview": "'use strict'\n\nmodule.exports = require('neostandard')({})\n"
  },
  {
    "path": "gyp/.github/dependabot.yml",
    "chars": 626,
    "preview": "# Keep GitHub Actions up to date with Dependabot...\n# https://docs.github.com/en/code-security/dependabot/working-with-d"
  },
  {
    "path": "gyp/.github/workflows/node-gyp.yml",
    "chars": 1863,
    "preview": "name: node-gyp integration\non:\n  push:\n  pull_request:\n  workflow_dispatch:\n\njobs:\n  node-gyp-integration:\n    strategy:"
  },
  {
    "path": "gyp/.github/workflows/nodejs.yml",
    "chars": 1478,
    "preview": "name: Node.js integration\non:\n  push:\n  pull_request:\n  workflow_dispatch:\n\njobs:\n  nodejs-integration:\n    strategy:\n  "
  },
  {
    "path": "gyp/.github/workflows/python_tests.yml",
    "chars": 1478,
    "preview": "# TODO: Enable os: windows-latest\n# TODO: Enable pytest --doctest-modules\n\nname: Python_tests\non:\n  push:\n  pull_request"
  },
  {
    "path": "gyp/.github/workflows/release-please.yml",
    "chars": 2666,
    "preview": "on:\n  push:\n    branches:\n      - main\n\nname: release-please\njobs:\n  release-please:\n    runs-on: ubuntu-latest\n    outp"
  },
  {
    "path": "gyp/.gitignore",
    "chars": 2168,
    "preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
  },
  {
    "path": "gyp/.release-please-manifest.json",
    "chars": 22,
    "preview": "{\n    \".\": \"0.21.1\"\n}\n"
  },
  {
    "path": "gyp/AUTHORS",
    "chars": 548,
    "preview": "# Names should be added to this file like so:\n# Name or Organization <email address>\n\nGoogle Inc. <*@google.com>\nBloombe"
  },
  {
    "path": "gyp/CHANGELOG.md",
    "chars": 19877,
    "preview": "# Changelog\n\n## [0.21.1](https://github.com/nodejs/gyp-next/compare/v0.21.0...v0.21.1) (2026-01-24)\n\n\n### Bug Fixes\n\n* r"
  },
  {
    "path": "gyp/CODE_OF_CONDUCT.md",
    "chars": 203,
    "preview": "# Code of Conduct\n\n* [Node.js Code of Conduct](https://github.com/nodejs/admin/blob/HEAD/CODE_OF_CONDUCT.md)\n* [Node.js "
  },
  {
    "path": "gyp/CONTRIBUTING.md",
    "chars": 1425,
    "preview": "# Contributing to gyp-next\n\n## Start contributing\n\nRead the docs at [`./docs/Hacking.md`](./docs/Hacking.md) to get star"
  },
  {
    "path": "gyp/LICENSE",
    "chars": 1537,
    "preview": "Copyright (c) 2020 Node.js contributors. All rights reserved.\nCopyright (c) 2009 Google Inc. All rights reserved.\n\nRedis"
  },
  {
    "path": "gyp/README.md",
    "chars": 1149,
    "preview": "GYP can Generate Your Projects.\n===================================\n\nDocuments are available at [`./docs`](./docs).\n\n__g"
  },
  {
    "path": "gyp/data/ninja/build.ninja",
    "chars": 56,
    "preview": "rule cc\n  command = cc $in $out\n\nbuild my.out: cc my.in\n"
  },
  {
    "path": "gyp/data/win/large-pdb-shim.cc",
    "chars": 653,
    "preview": "// Copyright (c) 2013 Google Inc. All rights reserved.\n// Use of this source code is governed by a BSD-style license tha"
  },
  {
    "path": "gyp/docs/GypVsCMake.md",
    "chars": 6291,
    "preview": "# vs. CMake\n\nGYP was originally created to generate native IDE project files (Visual Studio, Xcode) for building [Chromi"
  },
  {
    "path": "gyp/docs/Hacking.md",
    "chars": 1185,
    "preview": "# Hacking\n\n## Getting the sources\n\nGit is required to hack on anything, you can set up a git clone of GYP\nas follows:\n\n`"
  },
  {
    "path": "gyp/docs/InputFormatReference.md",
    "chars": 38885,
    "preview": "# Input Format Reference\n\n## Primitive Types\n\nThe following primitive types are found within input files:\n\n  * String va"
  },
  {
    "path": "gyp/docs/LanguageSpecification.md",
    "chars": 22149,
    "preview": "# Language Specification\n\n## Objective\n\nCreate a tool for the Chromium project that generates native Visual Studio,\nXcod"
  },
  {
    "path": "gyp/docs/README.md",
    "chars": 1143,
    "preview": "# Generate Your Projects (gyp-next)\n\nGYP is a Meta-Build system: a build system that generates other build systems.\n\n* ["
  },
  {
    "path": "gyp/docs/Testing.md",
    "chars": 11874,
    "preview": "# Testing\n\nNOTE: this document is outdated and needs to be updated. Read with your own discretion.\n\n## Introduction\n\nThi"
  },
  {
    "path": "gyp/docs/UserDocumentation.md",
    "chars": 25794,
    "preview": "# User Documentation\n\n## Introduction\n\nThis document is intended to provide a user-level guide to GYP.  The\nemphasis her"
  },
  {
    "path": "gyp/gyp",
    "chars": 240,
    "preview": "#!/bin/sh\n# Copyright 2013 The Chromium Authors. All rights reserved.\n# Use of this source code is governed by a BSD-sty"
  },
  {
    "path": "gyp/gyp.bat",
    "chars": 201,
    "preview": "@rem Copyright (c) 2009 Google Inc. All rights reserved.\r\n@rem Use of this source code is governed by a BSD-style licens"
  },
  {
    "path": "gyp/gyp_main.py",
    "chars": 1250,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2009 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/MSVSNew.py",
    "chars": 13202,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/MSVSProject.py",
    "chars": 6940,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/MSVSSettings.py",
    "chars": 45747,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/MSVSSettings_test.py",
    "chars": 74434,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/MSVSToolFile.py",
    "chars": 1830,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/MSVSUserFile.py",
    "chars": 5376,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/MSVSUtil.py",
    "chars": 10326,
    "preview": "# Copyright (c) 2013 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/MSVSVersion.py",
    "chars": 20442,
    "preview": "# Copyright (c) 2013 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/__init__.py",
    "chars": 24653,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/common.py",
    "chars": 25313,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/common_test.py",
    "chars": 6252,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/easy_xml.py",
    "chars": 5487,
    "preview": "# Copyright (c) 2011 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/easy_xml_test.py",
    "chars": 3941,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2011 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/flock_tool.py",
    "chars": 1886,
    "preview": "#!/usr/bin/env python3\n# Copyright (c) 2011 Google Inc. All rights reserved.\n# Use of this source code is governed by a "
  },
  {
    "path": "gyp/pylib/gyp/generator/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "gyp/pylib/gyp/generator/analyzer.py",
    "chars": 31639,
    "preview": "# Copyright (c) 2014 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/android.py",
    "chars": 49773,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/cmake.py",
    "chars": 49299,
    "preview": "# Copyright (c) 2013 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/compile_commands_json.py",
    "chars": 4851,
    "preview": "# Copyright (c) 2016 Ben Noordhuis <info@bnoordhuis.nl>. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/generator/dump_dependency_json.py",
    "chars": 3104,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/eclipse.py",
    "chars": 17519,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/gypd.py",
    "chars": 3505,
    "preview": "# Copyright (c) 2011 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/gypsh.py",
    "chars": 1692,
    "preview": "# Copyright (c) 2011 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/make.py",
    "chars": 111764,
    "preview": "# Copyright (c) 2013 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/msvs.py",
    "chars": 151277,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/msvs_test.py",
    "chars": 1261,
    "preview": "#!/usr/bin/env python3\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a "
  },
  {
    "path": "gyp/pylib/gyp/generator/ninja.py",
    "chars": 119463,
    "preview": "# Copyright (c) 2013 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/ninja_test.py",
    "chars": 2414,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/generator/xcode.py",
    "chars": 66005,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/generator/xcode_test.py",
    "chars": 667,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2013 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/input.py",
    "chars": 126437,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/input_test.py",
    "chars": 3426,
    "preview": "#!/usr/bin/env python3\n\n# Copyright 2013 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD"
  },
  {
    "path": "gyp/pylib/gyp/mac_tool.py",
    "chars": 30482,
    "preview": "#!/usr/bin/env python3\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a "
  },
  {
    "path": "gyp/pylib/gyp/msvs_emulation.py",
    "chars": 54021,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/ninja_syntax.py",
    "chars": 5640,
    "preview": "# This file comes from\n#   https://github.com/martine/ninja/blob/master/misc/ninja_syntax.py\n# Do not edit!  Edit the up"
  },
  {
    "path": "gyp/pylib/gyp/simple_copy.py",
    "chars": 1297,
    "preview": "# Copyright 2014 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that can "
  },
  {
    "path": "gyp/pylib/gyp/win_tool.py",
    "chars": 15178,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/pylib/gyp/xcode_emulation.py",
    "chars": 82454,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/xcode_emulation_test.py",
    "chars": 1489,
    "preview": "#!/usr/bin/env python3\n\n\"\"\"Unit tests for the xcode_emulation.py file.\"\"\"\n\nimport sys\nimport unittest\n\nfrom gyp.xcode_em"
  },
  {
    "path": "gyp/pylib/gyp/xcode_ninja.py",
    "chars": 12132,
    "preview": "# Copyright (c) 2014 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/xcodeproj_file.py",
    "chars": 136274,
    "preview": "# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/gyp/xml_fix.py",
    "chars": 2244,
    "preview": "# Copyright (c) 2011 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style license that "
  },
  {
    "path": "gyp/pylib/packaging/LICENSE",
    "chars": 197,
    "preview": "This software is made available under the terms of *either* of the licenses\nfound in LICENSE.APACHE or LICENSE.BSD. Cont"
  },
  {
    "path": "gyp/pylib/packaging/LICENSE.APACHE",
    "chars": 10174,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "gyp/pylib/packaging/LICENSE.BSD",
    "chars": 1344,
    "preview": "Copyright (c) Donald Stufft and individual contributors.\nAll rights reserved.\n\nRedistribution and use in source and bina"
  },
  {
    "path": "gyp/pylib/packaging/__init__.py",
    "chars": 501,
    "preview": "# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE "
  },
  {
    "path": "gyp/pylib/packaging/_elffile.py",
    "chars": 3255,
    "preview": "\"\"\"\nELF file parser.\n\nThis provides a class ``ELFFile`` that parses an ELF executable in a similar\ninterface to ``ZipFil"
  },
  {
    "path": "gyp/pylib/packaging/_manylinux.py",
    "chars": 9526,
    "preview": "import collections\nimport contextlib\nimport functools\nimport os\nimport re\nimport sys\nimport warnings\nfrom typing import "
  },
  {
    "path": "gyp/pylib/packaging/_musllinux.py",
    "chars": 2676,
    "preview": "\"\"\"PEP 656 support.\n\nThis module implements logic to detect if the currently running Python is\nlinked against musl, and "
  },
  {
    "path": "gyp/pylib/packaging/_parser.py",
    "chars": 10382,
    "preview": "\"\"\"Handwritten parser of dependency specifiers.\n\nThe docstring for each __parse_* function contains ENBF-inspired gramma"
  },
  {
    "path": "gyp/pylib/packaging/_structures.py",
    "chars": 1431,
    "preview": "# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE "
  },
  {
    "path": "gyp/pylib/packaging/_tokenizer.py",
    "chars": 5292,
    "preview": "import contextlib\nimport re\nfrom dataclasses import dataclass\nfrom typing import Dict, Iterator, NoReturn, Optional, Tup"
  },
  {
    "path": "gyp/pylib/packaging/markers.py",
    "chars": 8200,
    "preview": "# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE "
  },
  {
    "path": "gyp/pylib/packaging/metadata.py",
    "chars": 33017,
    "preview": "import email.feedparser\nimport email.header\nimport email.message\nimport email.parser\nimport email.policy\nimport sys\nimpo"
  },
  {
    "path": "gyp/pylib/packaging/py.typed",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "gyp/pylib/packaging/requirements.py",
    "chars": 2952,
    "preview": "# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE "
  },
  {
    "path": "gyp/pylib/packaging/specifiers.py",
    "chars": 39969,
    "preview": "# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE "
  },
  {
    "path": "gyp/pylib/packaging/tags.py",
    "chars": 18355,
    "preview": "# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE "
  },
  {
    "path": "gyp/pylib/packaging/utils.py",
    "chars": 5268,
    "preview": "# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE "
  },
  {
    "path": "gyp/pylib/packaging/version.py",
    "chars": 16236,
    "preview": "# This file is dual licensed under the terms of the Apache License, Version\n# 2.0, and the BSD License. See the LICENSE "
  },
  {
    "path": "gyp/pyproject.toml",
    "chars": 2888,
    "preview": "[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"gyp-next\"\nvers"
  },
  {
    "path": "gyp/release-please-config.json",
    "chars": 279,
    "preview": "{\n    \"last-release-sha\": \"78756421b0d7bb335992a9c7d26ba3cc8b619708\",\n    \"packages\": {\n        \".\": {\n          \"releas"
  },
  {
    "path": "gyp/test_gyp.py",
    "chars": 7724,
    "preview": "#!/usr/bin/env python3\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a "
  },
  {
    "path": "gyp/tools/README",
    "chars": 838,
    "preview": "pretty_vcproj:\n  Usage: pretty_vcproj.py \"c:\\path\\to\\vcproj.vcproj\" [key1=value1] [key2=value2]\n\n  They key/value pair a"
  },
  {
    "path": "gyp/tools/Xcode/README",
    "chars": 289,
    "preview": "Specifications contains syntax formatters for Xcode 3. These do not appear to be supported yet on Xcode 4. To use these "
  },
  {
    "path": "gyp/tools/Xcode/Specifications/gyp.pbfilespec",
    "chars": 701,
    "preview": "/*\n\tgyp.pbfilespec\n\tGYP source file spec for Xcode 3\n\n\tThere is not much documentation available regarding the format\n\to"
  },
  {
    "path": "gyp/tools/Xcode/Specifications/gyp.xclangspec",
    "chars": 5088,
    "preview": "/*\n\tCopyright (c) 2011 Google Inc. All rights reserved.\n\tUse of this source code is governed by a BSD-style license that"
  },
  {
    "path": "gyp/tools/emacs/README",
    "chars": 410,
    "preview": "How to install gyp-mode for emacs:\n\nAdd the following to your ~/.emacs (replace ... with the path to your gyp\ncheckout)."
  },
  {
    "path": "gyp/tools/emacs/gyp-tests.el",
    "chars": 2182,
    "preview": ";;; gyp-tests.el - unit tests for gyp-mode.\n\n;; Copyright (c) 2012 Google Inc. All rights reserved.\n;; Use of this sourc"
  },
  {
    "path": "gyp/tools/emacs/gyp.el",
    "chars": 12181,
    "preview": ";;; gyp.el - font-lock-mode support for gyp files.\n\n;; Copyright (c) 2012 Google Inc. All rights reserved.\n;; Use of thi"
  },
  {
    "path": "gyp/tools/emacs/run-unit-tests.sh",
    "chars": 306,
    "preview": "#!/bin/sh\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a BSD-style lic"
  },
  {
    "path": "gyp/tools/emacs/testdata/media.gyp",
    "chars": 37163,
    "preview": "# Copyright (c) 2012 The Chromium Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style lic"
  },
  {
    "path": "gyp/tools/emacs/testdata/media.gyp.fontified",
    "chars": 162854,
    "preview": "\n#(\"# Copyright (c) 2012 The Chromium Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style"
  },
  {
    "path": "gyp/tools/graphviz.py",
    "chars": 3039,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2011 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/tools/pretty_gyp.py",
    "chars": 5031,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/tools/pretty_sln.py",
    "chars": 5455,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "gyp/tools/pretty_vcproj.py",
    "chars": 10582,
    "preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2012 Google Inc. All rights reserved.\n# Use of this source code is governed by a"
  },
  {
    "path": "lib/Find-VisualStudio.cs",
    "chars": 7931,
    "preview": "// Copyright 2017 - Refael Ackermann\n// Distributed under MIT style license\n// See accompanying file LICENSE at https://"
  },
  {
    "path": "lib/build.js",
    "chars": 6724,
    "preview": "'use strict'\n\nconst gracefulFs = require('graceful-fs')\nconst fs = gracefulFs.promises\nconst path = require('path')\ncons"
  },
  {
    "path": "lib/clean.js",
    "chars": 414,
    "preview": "'use strict'\n\nconst fs = require('graceful-fs').promises\nconst log = require('./log')\n\nasync function clean (gyp, argv) "
  },
  {
    "path": "lib/configure.js",
    "chars": 11915,
    "preview": "'use strict'\n\nconst { promises: fs, readFileSync } = require('graceful-fs')\nconst path = require('path')\nconst log = req"
  },
  {
    "path": "lib/create-config-gypi.js",
    "chars": 4798,
    "preview": "'use strict'\n\nconst fs = require('graceful-fs').promises\nconst log = require('./log')\nconst path = require('path')\n\nfunc"
  },
  {
    "path": "lib/download.js",
    "chars": 976,
    "preview": "const fetch = require('make-fetch-happen')\nconst { promises: fs } = require('graceful-fs')\nconst log = require('./log')\n"
  },
  {
    "path": "lib/find-node-directory.js",
    "chars": 2378,
    "preview": "'use strict'\n\nconst path = require('path')\nconst log = require('./log')\n\nfunction findNodeDirectory (scriptLocation, pro"
  },
  {
    "path": "lib/find-python.js",
    "chars": 10700,
    "preview": "'use strict'\n\nconst log = require('./log')\nconst semver = require('semver')\nconst { execFile } = require('./util')\nconst"
  },
  {
    "path": "lib/find-visualstudio.js",
    "chars": 20382,
    "preview": "'use strict'\n\nconst log = require('./log')\nconst { existsSync } = require('fs')\nconst { win32: path } = require('path')\n"
  },
  {
    "path": "lib/install.js",
    "chars": 13975,
    "preview": "'use strict'\n\nconst { createWriteStream, promises: fs } = require('graceful-fs')\nconst os = require('os')\nconst { backOf"
  },
  {
    "path": "lib/list.js",
    "chars": 580,
    "preview": "'use strict'\n\nconst fs = require('graceful-fs').promises\nconst log = require('./log')\n\nasync function list (gyp, args) {"
  },
  {
    "path": "lib/log.js",
    "chars": 3462,
    "preview": "'use strict'\n\nconst { log } = require('proc-log')\nconst { format } = require('util')\n\n// helper to emit log messages wit"
  },
  {
    "path": "lib/node-gyp.js",
    "chars": 5651,
    "preview": "'use strict'\n\nconst path = require('path')\nconst nopt = require('nopt')\nconst log = require('./log')\nconst childProcess "
  },
  {
    "path": "lib/process-release.js",
    "chars": 5762,
    "preview": "'use strict'\n\nconst semver = require('semver')\nconst path = require('path')\nconst log = require('./log')\n\n// versions wh"
  },
  {
    "path": "lib/rebuild.js",
    "chars": 281,
    "preview": "'use strict'\n\nasync function rebuild (gyp, argv) {\n  gyp.todo.push(\n    { name: 'clean', args: [] }\n    , { name: 'confi"
  },
  {
    "path": "lib/remove.js",
    "chars": 1233,
    "preview": "'use strict'\n\nconst fs = require('graceful-fs').promises\nconst path = require('path')\nconst log = require('./log')\nconst"
  },
  {
    "path": "lib/util.js",
    "chars": 2228,
    "preview": "'use strict'\n\nconst cp = require('child_process')\nconst path = require('path')\nconst { openSync, closeSync } = require('"
  },
  {
    "path": "macOS_Catalina_acid_test.sh",
    "chars": 495,
    "preview": "#!/bin/bash\n\npkgs=(\n  \"com.apple.pkg.DeveloperToolsCLILeo\" # standalone\n  \"com.apple.pkg.DeveloperToolsCLI\"    # from XC"
  },
  {
    "path": "package.json",
    "chars": 1272,
    "preview": "{\n  \"name\": \"node-gyp\",\n  \"description\": \"Node.js native addon build tool\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"nat"
  },
  {
    "path": "release-please-config.json",
    "chars": 2405,
    "preview": "{\n    \"packages\": {\n        \".\": {\n            \"include-component-in-tag\": false,\n            \"release-type\": \"node\",\n  "
  },
  {
    "path": "src/win_delay_load_hook.cc",
    "chars": 1003,
    "preview": "/*\n * When this file is linked to a DLL, it sets up a delay-load hook that\n * intervenes when the DLL is trying to load "
  },
  {
    "path": "test/common.js",
    "chars": 909,
    "preview": "const envPaths = require('env-paths')\nconst semver = require('semver')\n\nmodule.exports.devDir = envPaths('node-gyp', { s"
  },
  {
    "path": "test/fixtures/VSSetup_VS_2019_Professional_workload.txt",
    "chars": 11990,
    "preview": "[\n    {\n        \"InstanceId\":  \"2619cf21\",\n        \"InstallationName\":  \"VisualStudio/16.11.33+34407.143\",\n        \"Inst"
  },
  {
    "path": "test/fixtures/VSSetup_VS_2022_VS2019_workload.txt",
    "chars": 18548,
    "preview": "[\n    {\n    \"InstanceId\":  \"621862c0\",\n    \"InstallationName\":  \"VisualStudio/17.8.3+34330.188\",\n    \"InstallationPath\":"
  },
  {
    "path": "test/fixtures/VSSetup_VS_2022_multiple_install.txt",
    "chars": 18424,
    "preview": "[\n    {\n        \"InstanceId\":  \"621862c0\",\n        \"InstallationName\":  \"VisualStudio/17.8.3+34330.188\",\n        \"Instal"
  },
  {
    "path": "test/fixtures/VSSetup_VS_2022_workload.txt",
    "chars": 6557,
    "preview": "{\n    \"InstanceId\":  \"621862c0\",\n    \"InstallationName\":  \"VisualStudio/17.8.3+34330.188\",\n    \"InstallationPath\":  \"C:\\"
  },
  {
    "path": "test/fixtures/VSSetup_VS_2022_workload_missing_sdk.txt",
    "chars": 6857,
    "preview": "{\n    \"InstanceId\":  \"621862c0\",\n    \"InstallationName\":  \"VisualStudio/17.8.3+34330.188\",\n    \"InstallationPath\":  \"C:\\"
  },
  {
    "path": "test/fixtures/VS_2017_BuildTools_minimal.txt",
    "chars": 9323,
    "preview": "[{\"path\":\"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2017\\\\BuildTools\",\"version\":\"15.9.28307.665\",\"packages\":[\"Mi"
  },
  {
    "path": "test/fixtures/VS_2017_Community_workload.txt",
    "chars": 18172,
    "preview": "[{\"path\":\"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2017\\\\Community\",\"version\":\"15.9.28307.665\",\"packages\":[\"Mic"
  },
  {
    "path": "test/fixtures/VS_2017_Express.txt",
    "chars": 16656,
    "preview": "[{\"path\":\"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2017\\\\WDExpress\",\"version\":\"15.9.28307.858\",\"packages\":[\"Mic"
  },
  {
    "path": "test/fixtures/VS_2017_Unusable.txt",
    "chars": 3941,
    "preview": "[{\"path\":\"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2017\\\\BuildToolsUnusable\",\"version\":\"15.9.28307.665\",\"packag"
  },
  {
    "path": "test/fixtures/VS_2019_BuildTools_minimal.txt",
    "chars": 10468,
    "preview": "[{\"path\":\"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2019\\\\BuildTools\",\"version\":\"16.1.28922.388\",\"packages\":[\"Mi"
  },
  {
    "path": "test/fixtures/VS_2019_Community_workload.txt",
    "chars": 16624,
    "preview": "[{\"path\":\"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2019\\\\Community\",\"version\":\"16.1.28922.388\",\"packages\":[\"Mic"
  },
  {
    "path": "test/fixtures/VS_2019_Preview.txt",
    "chars": 17914,
    "preview": "[{\"path\":\"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2019\\\\Preview\",\"version\":\"16.0.28608.199\",\"packages\":[\"Micro"
  },
  {
    "path": "test/fixtures/VS_2022_BuildTools_arm64_only.txt",
    "chars": 22574,
    "preview": "[\n  {\n    \"path\": \"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2022\\\\BuildTools\",\n    \"version\": \"17.11.35222.181\""
  },
  {
    "path": "test/fixtures/VS_2022_Community_workload.txt",
    "chars": 34193,
    "preview": "[\n    {\n        \"path\": \"C:\\\\Program Files\\\\Microsoft Visual Studio\\\\2022\\\\Community\",\n        \"version\": \"17.4.33213.30"
  },
  {
    "path": "test/fixtures/VS_2026_Community_workload.txt",
    "chars": 34132,
    "preview": "[\n    {\n        \"path\": \"C:\\\\Program Files\\\\Microsoft Visual Studio\\\\2026\\\\Community\",\n        \"version\": \"18.0.1000.100"
  },
  {
    "path": "test/fixtures/VS_2026_Insiders_workload.txt",
    "chars": 34130,
    "preview": "[\n    {\n        \"path\": \"C:\\\\Program Files\\\\Microsoft Visual Studio\\\\18\\\\Insiders\",\n        \"version\": \"18.3.11206.111\","
  },
  {
    "path": "test/fixtures/certs.js",
    "chars": 8451,
    "preview": "module.exports['ca.key'] = `\n-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAtTbG0k2UFUyCdZuip0TTEtXRHh57qosegrpHPBreSNT"
  },
  {
    "path": "test/fixtures/nodedir/include/node/config.gypi",
    "chars": 78,
    "preview": "# Test configuration\n{\n  'variables': {\n    'build_with_electron': true\n  }\n}\n"
  },
  {
    "path": "test/fixtures/test-charmap.py",
    "chars": 547,
    "preview": "import sys\nimport locale\n\ntry:\n    reload(sys)\nexcept NameError:  # Python 3\n    pass\n\n\ndef main():\n    encoding = local"
  },
  {
    "path": "test/simple-proxy.js",
    "chars": 643,
    "preview": "'use strict'\n\nconst http = require('http')\nconst https = require('https')\nconst server = http.createServer(handler)\ncons"
  },
  {
    "path": "test/test-addon.js",
    "chars": 4255,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst path = require('path')\nco"
  },
  {
    "path": "test/test-configure-nodedir.js",
    "chars": 3738,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst path = require('path')\nco"
  },
  {
    "path": "test/test-configure-python.js",
    "chars": 2366,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst path = require('path')\nco"
  },
  {
    "path": "test/test-create-config-gypi.js",
    "chars": 2156,
    "preview": "'use strict'\n\nconst path = require('path')\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nco"
  },
  {
    "path": "test/test-download.js",
    "chars": 6730,
    "preview": "'use strict'\n\nconst { describe, it, after } = require('mocha')\nconst assert = require('assert')\nconst fs = require('fs/p"
  },
  {
    "path": "test/test-find-accessible-sync.js",
    "chars": 2601,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst path = require('path')\nco"
  },
  {
    "path": "test/test-find-node-directory.js",
    "chars": 4514,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst path = require('path')\nco"
  },
  {
    "path": "test/test-find-python.js",
    "chars": 6397,
    "preview": "'use strict'\n\ndelete process.env.PYTHON\n\nconst { describe, it, after } = require('mocha')\nconst assert = require('assert"
  },
  {
    "path": "test/test-find-visualstudio.js",
    "chars": 35989,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst fs = require('fs')\nconst "
  },
  {
    "path": "test/test-install.js",
    "chars": 3136,
    "preview": "'use strict'\n\nconst { describe, it, afterEach, beforeEach } = require('mocha')\nconst { rm, mkdtemp } = require('fs/promi"
  },
  {
    "path": "test/test-options.js",
    "chars": 2656,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst gyp = require('../lib/nod"
  },
  {
    "path": "test/test-process-release.js",
    "chars": 18741,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst processRelease = require("
  },
  {
    "path": "test/test-windows-make.js",
    "chars": 3813,
    "preview": "'use strict'\n\nconst { describe, it } = require('mocha')\nconst assert = require('assert')\nconst path = require('path')\nco"
  },
  {
    "path": "update-gyp.py",
    "chars": 2491,
    "preview": "#!/usr/bin/env python3\n\nimport argparse\nimport os\nimport shutil\nimport subprocess\nimport tarfile\nimport tempfile\nimport "
  }
]

About this extraction

This page contains the full source code of the nodejs/node-gyp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 185 files (2.5 MB), approximately 653.0k tokens, and a symbol index with 1547 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!