node-gyp: default variable ignored for `openssl_fips`
I can’t build element-desktop with node18 due to the error message:
gyp: name 'openssl_fips' is not defined while evaluating condition 'openssl_fips != ""' in binding.gyp while trying to load binding.gyp
openssl_fips
used in /tmp/portage/net-im/element-desktop-1.11.10/homedir/.electron-gyp/20.1.4/include/node/common.gypi
,
which is fetched from https://electronjs.org/headers/v20.1.4/node-v20.1.4-headers.tar.gz and put in npm_config_devdir
, i.e. ~/.electron-gyp
.
include/node/common.gypi
looks like this:
{
'variables': {
...,
'openssl_fips%': '',
'openssl_no_asm%': 0,
'conditions': [
...,
['openssl_fips != ""', {
'openssl_product': '<(STATIC_LIB_PREFIX)openssl<(STATIC_LIB_SUFFIX)',
}, {
'openssl_product': '<(STATIC_LIB_PREFIX)openssl<(STATIC_LIB_SUFFIX)',
}],
...
]
}
The definition of openssl_fips% = ''
is also in the file, so according to https://gyp.gsrc.io/docs/InputFormatReference.md variables ending with % should be used as default value if not set previously.
But that mechanism doesn’t seem to kick in:
- first, to be able to debug and see a backtrace, edit
node-gyp/gyp/pylib/gyp/__init__.py
sodef main(args):
only doesreturn gyp_main(args)
without swallowing the very useful backtrace. - when inspecting the variables dictionary in
node_modules/node-gyp/gyp/pylib/gyp/input.py
’sEvalSingleCondition
just before the crash'openssl_fips%': ''
, butopenssl_fips
is unset. The condition expression from the node-headers then can’t be evaluated since the variable is not available whenEvalSingleCondition
runseval(ast_code, ..., variables)
.
-> either, the condition has to lookup the variable with a %
appended, or it needs to be in the variables dict without a %
. I guess the latter should be the case.
I haven’t found yet where exactly the bug is, or if it even is a bug in node-gyp. But maybe you already have some idea 😃
- Node Version: node v18.10.0 and npm 8.19.2
- Platform: Linux 5.19.8-JJ
- Compiler: gcc version 12.2.0
- Module: keytar, for element-desktop
Verbose output (from npm or node-gyp):
yarn run hak
neon info generating native/index.node
hak build: keytar
Running yarn with env {
[... many env variables],
npm_config_init_version: '1.0.0',
npm_config_arch: 'x64',
npm_config_target_arch: 'x64',
npm_config_disturl: 'https://electronjs.org/headers',
npm_config_runtime: 'electron',
npm_config_target: '20.1.4',
npm_config_build_from_source: true,
npm_config_devdir: '/tmp/portage/net-im/element-desktop-1.11.10/homedir/.electron-gyp'
}
gyp info it worked if it ends with ok
gyp info using node-gyp@8.4.1
gyp info using node@18.10.0 | linux | x64
gyp info find Python using Python version 3.10.7 found at "/usr/lib/python-exec/python3.10/python3"
gyp http GET https://electronjs.org/headers/v20.1.4/node-v20.1.4-headers.tar.gz
gyp http 200 https://artifacts.electronjs.org/headers/dist/v20.1.4/node-v20.1.4-headers.tar.gz
gyp http GET https://electronjs.org/headers/v20.1.4/SHASUMS256.txt
gyp http 200 https://artifacts.electronjs.org/headers/dist/v20.1.4/SHASUMS256.txt
gyp info spawn /usr/lib/python-exec/python3.10/python3
gyp info spawn args [
gyp info spawn args '/tmp/portage/net-im/element-desktop-1.11.10/work/element-desktop-1.11.10/.hak/keytar/x86_64-unknown-linux-gnu/build/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'make',
gyp info spawn args '-I',
gyp info spawn args '/tmp/portage/net-im/element-desktop-1.11.10/work/element-desktop-1.11.10/.hak/keytar/x86_64-unknown-linux-gnu/build/build/config.gypi',
gyp info spawn args '-I',
gyp info spawn args '/tmp/portage/net-im/element-desktop-1.11.10/work/element-desktop-1.11.10/.hak/keytar/x86_64-unknown-linux-gnu/build/node_modules/node-gyp/addon.gypi',
gyp info spawn args '-I',
gyp info spawn args '/tmp/portage/net-im/element-desktop-1.11.10/homedir/.electron-gyp/20.1.4/include/node/common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=/tmp/portage/net-im/element-desktop-1.11.10/homedir/.electron-gyp/20.1.4',
gyp info spawn args '-Dnode_gyp_dir=/tmp/portage/net-im/element-desktop-1.11.10/work/element-desktop-1.11.10/.hak/keytar/x86_64-unknown-linux-gnu/build/node_modules/node-gyp',
gyp info spawn args '-Dnode_lib_file=/tmp/portage/net-im/element-desktop-1.11.10/homedir/.electron-gyp/20.1.4/<(target_arch)/node.lib',
gyp info spawn args '-Dmodule_root_dir=/tmp/portage/net-im/element-desktop-1.11.10/work/element-desktop-1.11.10/.hak/keytar/x86_64-unknown-linux-gnu/build',
gyp info spawn args '-Dnode_engine=v8',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'build',
gyp info spawn args '-Goutput_dir=.'
gyp info spawn args ]
gyp: name 'openssl_fips' is not defined while evaluating condition 'openssl_fips != ""' in binding.gyp while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/tmp/portage/net-im/element-desktop-1.11.10/work/element-desktop-1.11.10/.hak/keytar/x86_64-unknown-linux-gnu/build/node_modules/node-gyp/lib/configure.js:259:16)
gyp ERR! stack at ChildProcess.emit (node:events:513:28)
gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Linux 5.19.8-JJ
gyp ERR! command "/usr/bin/node" "/tmp/portage/net-im/element-desktop-1.11.10/work/element-desktop-1.11.10/.hak/keytar/x86_64-unknown-linux-gnu/build/node_modules/.bin/node-gyp" "rebuild"
gyp ERR! cwd /tmp/portage/net-im/element-desktop-1.11.10/work/element-desktop-1.11.10/.hak/keytar/x86_64-unknown-linux-gnu/build
gyp ERR! node -v v18.10.0
gyp ERR! node-gyp -v v8.4.1
gyp ERR! not ok
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 19 (9 by maintainers)
Commits related to this issue
- build: remove redundant condition from common.gypi Both paths for the condition being removed result in the same value being assigned to `openssl_product`. This condition was also problematic as it w... — committed to richardlau/node-1 by richardlau 2 years ago
- build: remove redundant condition from common.gypi Both paths for the condition being removed result in the same value being assigned to `openssl_product`. This condition was also problematic as it w... — committed to noslate-project/node by richardlau 2 years ago
- build: remove redundant condition from common.gypi Both paths for the condition being removed result in the same value being assigned to `openssl_product`. This condition was also problematic as it w... — committed to noslate-project/node by richardlau 2 years ago
- Fix for https://github.com/nodejs/node-gyp/issues/2750 Without this workaround node18 fails to generate prebuilds for node versions < 18 with: gyp: name 'openssl_fips' is not defined while evaluating... — committed to DataDog/action-prebuildify by nsavoire a year ago
- Fix for https://github.com/nodejs/node-gyp/issues/2750 (#23) Without this workaround node18 fails to generate prebuilds for node versions < 18 with: gyp: name 'openssl_fips' is not defined while eva... — committed to DataDog/action-prebuildify by nsavoire a year ago
Any idea how we can properly resolve this issue? Thanks! Wait until electron depends on
>=node-gyp-9.0
or no longer includes theopenssl_fips
-using config file?