Skip to content

Commit

Permalink
deps: node-gyp@8.4.0
Browse files Browse the repository at this point in the history
 * feat: support vs2022
 * feat: build with config.gypi from node headers
  • Loading branch information
wraithgar committed Nov 15, 2021
1 parent 201df17 commit f473591
Show file tree
Hide file tree
Showing 10 changed files with 117 additions and 37 deletions.
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 @@ -5174,9 +5174,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 @@ -13814,9 +13814,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

0 comments on commit f473591

Please sign in to comment.