Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

deps: node-gyp@8.4.0 #4045

Merged
merged 1 commit into from Nov 18, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 5 additions & 7 deletions node_modules/node-gyp/lib/configure.js
Expand Up @@ -97,17 +97,15 @@ function configure (gyp, argv, callback) {
process.env.GYP_MSVS_VERSION = Math.min(vsInfo.versionYear, 2015)
process.env.GYP_MSVS_OVERRIDE_PATH = vsInfo.path
}
createConfigGypi({ gyp, buildDir, nodeDir, vsInfo }, (err, configPath) => {
createConfigGypi({ gyp, buildDir, nodeDir, vsInfo }).then(configPath => {
configs.push(configPath)
findConfigs(err)
findConfigs()
}).catch(err => {
callback(err)
})
}

function findConfigs (err) {
if (err) {
return callback(err)
}

function findConfigs () {
var name = configNames.shift()
if (!name) {
return runGyp()
Expand Down
49 changes: 38 additions & 11 deletions node_modules/node-gyp/lib/create-config-gypi.js
Expand Up @@ -4,19 +4,45 @@ const fs = require('graceful-fs')
const log = require('npmlog')
const path = require('path')

function getBaseConfigGypi () {
const config = JSON.parse(JSON.stringify(process.config))
function parseConfigGypi (config) {
// translated from tools/js2c.py of Node.js
// 1. string comments
config = config.replace(/#.*/g, '')
// 2. join multiline strings
config = config.replace(/'$\s+'/mg, '')
// 3. normalize string literals from ' into "
config = config.replace(/'/g, '"')
return JSON.parse(config)
}

async function getBaseConfigGypi ({ gyp, nodeDir }) {
// try reading $nodeDir/include/node/config.gypi first when:
// 1. --dist-url or --nodedir is specified
// 2. and --force-process-config is not specified
const shouldReadConfigGypi = (gyp.opts.nodedir || gyp.opts['dist-url']) && !gyp.opts['force-process-config']
if (shouldReadConfigGypi && nodeDir) {
try {
const baseConfigGypiPath = path.resolve(nodeDir, 'include/node/config.gypi')
const baseConfigGypi = await fs.promises.readFile(baseConfigGypiPath)
return parseConfigGypi(baseConfigGypi.toString())
} catch (err) {
log.warn('read config.gypi', err.message)
}
}

// fallback to process.config if it is invalid
return JSON.parse(JSON.stringify(process.config))
}

async function getCurrentConfigGypi ({ gyp, nodeDir, vsInfo }) {
const config = await getBaseConfigGypi({ gyp, nodeDir })
if (!config.target_defaults) {
config.target_defaults = {}
}
if (!config.variables) {
config.variables = {}
}
return config
}

function getCurrentConfigGypi ({ gyp, nodeDir, vsInfo }) {
const config = getBaseConfigGypi()
const defaults = config.target_defaults
const variables = config.variables

Expand Down Expand Up @@ -85,13 +111,13 @@ function getCurrentConfigGypi ({ gyp, nodeDir, vsInfo }) {
return config
}

function createConfigGypi ({ gyp, buildDir, nodeDir, vsInfo }, callback) {
async function createConfigGypi ({ gyp, buildDir, nodeDir, vsInfo }) {
const configFilename = 'config.gypi'
const configPath = path.resolve(buildDir, configFilename)

log.verbose('build/' + configFilename, 'creating config file')

const config = getCurrentConfigGypi({ gyp, nodeDir, vsInfo })
const config = await getCurrentConfigGypi({ gyp, nodeDir, vsInfo })

// ensures that any boolean values in config.gypi get stringified
function boolsToString (k, v) {
Expand All @@ -108,12 +134,13 @@ function createConfigGypi ({ gyp, buildDir, nodeDir, vsInfo }, callback) {

const json = JSON.stringify(config, boolsToString, 2)
log.verbose('build/' + configFilename, 'writing out config file: %s', configPath)
fs.writeFile(configPath, [prefix, json, ''].join('\n'), (err) => {
callback(err, configPath)
})
await fs.promises.writeFile(configPath, [prefix, json, ''].join('\n'))

return configPath
}

module.exports = createConfigGypi
module.exports.test = {
parseConfigGypi: parseConfigGypi,
getCurrentConfigGypi: getCurrentConfigGypi
}
14 changes: 13 additions & 1 deletion node_modules/node-gyp/lib/find-visualstudio.js
Expand Up @@ -2,6 +2,7 @@

const log = require('npmlog')
const execFile = require('child_process').execFile
const fs = require('fs')
const path = require('path').win32
const logWithPrefix = require('./util').logWithPrefix
const regSearchKeys = require('./util').regSearchKeys
Expand Down Expand Up @@ -257,22 +258,31 @@ VisualStudioFinder.prototype = {
ret.versionYear = 2019
return ret
}
if (ret.versionMajor === 17) {
ret.versionYear = 2022
return ret
}
this.log.silly('- unsupported version:', ret.versionMajor)
return {}
},

// Helper - process MSBuild information
getMSBuild: function getMSBuild (info, versionYear) {
const pkg = 'Microsoft.VisualStudio.VC.MSBuild.Base'
const msbuildPath = path.join(info.path, 'MSBuild', 'Current', 'Bin', 'MSBuild.exe')
if (info.packages.indexOf(pkg) !== -1) {
this.log.silly('- found VC.MSBuild.Base')
if (versionYear === 2017) {
return path.join(info.path, 'MSBuild', '15.0', 'Bin', 'MSBuild.exe')
}
if (versionYear === 2019) {
return path.join(info.path, 'MSBuild', 'Current', 'Bin', 'MSBuild.exe')
return msbuildPath
}
}
// visual studio 2022 don't has msbuild pkg
if (fs.existsSync(msbuildPath)) {
return msbuildPath
}
return null
},

Expand All @@ -293,6 +303,8 @@ VisualStudioFinder.prototype = {
return 'v141'
} else if (versionYear === 2019) {
return 'v142'
} else if (versionYear === 2022) {
return 'v143'
}
this.log.silly('- invalid versionYear:', versionYear)
return null
Expand Down
3 changes: 2 additions & 1 deletion node_modules/node-gyp/lib/node-gyp.js
Expand Up @@ -75,7 +75,8 @@ proto.configDefs = {
'dist-url': String, // 'install'
tarball: String, // 'install'
jobs: String, // 'build'
thin: String // 'configure'
thin: String, // 'configure'
'force-process-config': Boolean // 'configure'
}

/**
Expand Down
2 changes: 1 addition & 1 deletion node_modules/node-gyp/package.json
Expand Up @@ -11,7 +11,7 @@
"bindings",
"gyp"
],
"version": "8.3.0",
"version": "8.4.0",
"installVersion": 9,
"author": "Nathan Rajlich <nathan@tootallnate.net> (http://tootallnate.net)",
"repository": {
Expand Down
@@ -0,0 +1,6 @@
# Test configuration
{
'variables': {
'build_with_electron': true
}
}
5 changes: 4 additions & 1 deletion node_modules/node-gyp/test/test-configure-python.js
Expand Up @@ -11,7 +11,10 @@ const configure = requireInject('../lib/configure', {
closeSync: function () { },
writeFile: function (file, data, cb) { cb() },
stat: function (file, cb) { cb(null, {}) },
mkdir: function (dir, options, cb) { cb() }
mkdir: function (dir, options, cb) { cb() },
promises: {
writeFile: function (file, data) { return Promise.resolve(null) }
}
}
})

Expand Down
47 changes: 40 additions & 7 deletions node_modules/node-gyp/test/test-create-config-gypi.js
@@ -1,37 +1,70 @@
'use strict'

const path = require('path')
const { test } = require('tap')
const gyp = require('../lib/node-gyp')
const createConfigGypi = require('../lib/create-config-gypi')
const { getCurrentConfigGypi } = createConfigGypi.test
const { parseConfigGypi, getCurrentConfigGypi } = createConfigGypi.test

test('config.gypi with no options', function (t) {
test('config.gypi with no options', async function (t) {
t.plan(2)

const prog = gyp()
prog.parseArgv([])

const config = getCurrentConfigGypi({ gyp: prog, vsInfo: {} })
const config = await getCurrentConfigGypi({ gyp: prog, vsInfo: {} })
t.equal(config.target_defaults.default_configuration, 'Release')
t.equal(config.variables.target_arch, process.arch)
})

test('config.gypi with --debug', function (t) {
test('config.gypi with --debug', async function (t) {
t.plan(1)

const prog = gyp()
prog.parseArgv(['_', '_', '--debug'])

const config = getCurrentConfigGypi({ gyp: prog, vsInfo: {} })
const config = await getCurrentConfigGypi({ gyp: prog, vsInfo: {} })
t.equal(config.target_defaults.default_configuration, 'Debug')
})

test('config.gypi with custom options', function (t) {
test('config.gypi with custom options', async function (t) {
t.plan(1)

const prog = gyp()
prog.parseArgv(['_', '_', '--shared-libxml2'])

const config = getCurrentConfigGypi({ gyp: prog, vsInfo: {} })
const config = await getCurrentConfigGypi({ gyp: prog, vsInfo: {} })
t.equal(config.variables.shared_libxml2, true)
})

test('config.gypi with nodedir', async function (t) {
t.plan(1)

const nodeDir = path.join(__dirname, 'fixtures', 'nodedir')

const prog = gyp()
prog.parseArgv(['_', '_', `--nodedir=${nodeDir}`])

const config = await getCurrentConfigGypi({ gyp: prog, nodeDir, vsInfo: {} })
t.equal(config.variables.build_with_electron, true)
})

test('config.gypi with --force-process-config', async function (t) {
t.plan(1)

const nodeDir = path.join(__dirname, 'fixtures', 'nodedir')

const prog = gyp()
prog.parseArgv(['_', '_', '--force-process-config', `--nodedir=${nodeDir}`])

const config = await getCurrentConfigGypi({ gyp: prog, nodeDir, vsInfo: {} })
t.equal(config.variables.build_with_electron, undefined)
})

test('config.gypi parsing', function (t) {
t.plan(1)

const str = "# Some comments\n{'variables': {'multiline': 'A'\n'B'}}"
const config = parseConfigGypi(str)
t.deepEqual(config, { variables: { multiline: 'AB' } })
})
14 changes: 7 additions & 7 deletions package-lock.json
Expand Up @@ -127,7 +127,7 @@
"mkdirp": "^1.0.4",
"mkdirp-infer-owner": "^2.0.0",
"ms": "^2.1.2",
"node-gyp": "^8.3.0",
"node-gyp": "^8.4.0",
"nopt": "^5.0.0",
"npm-audit-report": "^2.1.5",
"npm-install-checks": "^4.0.0",
Expand Down Expand Up @@ -5255,9 +5255,9 @@
"dev": true
},
"node_modules/node-gyp": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.3.0.tgz",
"integrity": "sha512-e+vmKyTiybKgrmvs4M2REFKCnOd+NcrAAnn99Yko6NQA+zZdMlRvbIUHojfsHrSQ1CddLgZnHicnEVgDHziJzA==",
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.0.tgz",
"integrity": "sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q==",
"inBundle": true,
"dependencies": {
"env-paths": "^2.2.0",
Expand Down Expand Up @@ -13968,9 +13968,9 @@
"dev": true
},
"node-gyp": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.3.0.tgz",
"integrity": "sha512-e+vmKyTiybKgrmvs4M2REFKCnOd+NcrAAnn99Yko6NQA+zZdMlRvbIUHojfsHrSQ1CddLgZnHicnEVgDHziJzA==",
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.0.tgz",
"integrity": "sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q==",
"requires": {
"env-paths": "^2.2.0",
"glob": "^7.1.4",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -96,7 +96,7 @@
"mkdirp": "^1.0.4",
"mkdirp-infer-owner": "^2.0.0",
"ms": "^2.1.2",
"node-gyp": "^8.3.0",
"node-gyp": "^8.4.0",
"nopt": "^5.0.0",
"npm-audit-report": "^2.1.5",
"npm-install-checks": "^4.0.0",
Expand Down