cryptocoinjs / secp256k1-node

Node.js binding for an Optimized C library for EC operations on curve secp256k1
Other
341 stars 120 forks source link

node-gyp failure when building with electron when used as a dependency #179

Open varunsrin opened 3 years ago

varunsrin commented 3 years ago

Environment:

OS: OS X Big Sur 11.3 Node: v14.17.0 NPM: 6.14.13 Yarn: 1.22.10 Electron: 12.2

Repro Steps:

  1. Set up an electron app with Webpack. You can clone Electron React Boilerplate to get started quickly.

  2. cd src/ && yarn add secp256k1 && yarn install - this installs cleanly.

  3. yarn add @opengsn/provider && yarn install - this fails with the following output:

$ node -r ../.erb/scripts/BabelRegister.js ../.erb/scripts/ElectronRebuild.js
⠇ Building modules: 0/4gyp info find Python using Python version 2.7.16 found at "/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python"
⠏ Building modules: 0/4gyp info find Python using Python version 2.7.16 found at "/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python"
gyp info find Python using Python version 2.7.16 found at "/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python"
gyp info spawn /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
gyp info spawn args [
gyp info spawn args   '/Users/varun/src/merkle-manufactory/reader/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   '/Users/varun/src/merkle-manufactory/reader/src/node_modules/keccak/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/varun/src/merkle-manufactory/reader/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/varun/.electron-gyp/12.0.2/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/varun/.electron-gyp/12.0.2',
gyp info spawn args   '-Dnode_gyp_dir=/Users/varun/src/merkle-manufactory/reader/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/varun/.electron-gyp/12.0.2/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/varun/src/merkle-manufactory/reader/src/node_modules/keytar',
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 info spawn /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
gyp info spawn args [
gyp info spawn args   '/Users/varun/src/merkle-manufactory/reader/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   '/Users/varun/src/merkle-manufactory/reader/src/node_modules/keccak/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/varun/src/merkle-manufactory/reader/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/varun/.electron-gyp/12.0.2/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/varun/.electron-gyp/12.0.2',
gyp info spawn args   '-Dnode_gyp_dir=/Users/varun/src/merkle-manufactory/reader/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/varun/.electron-gyp/12.0.2/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/varun/src/merkle-manufactory/reader/src/node_modules/keytar',
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 info spawn /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
gyp info spawn args [
gyp info spawn args   '/Users/varun/src/merkle-manufactory/reader/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   '/Users/varun/src/merkle-manufactory/reader/src/node_modules/keccak/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/varun/src/merkle-manufactory/reader/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/varun/.electron-gyp/12.0.2/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/varun/.electron-gyp/12.0.2',
gyp info spawn args   '-Dnode_gyp_dir=/Users/varun/src/merkle-manufactory/reader/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/varun/.electron-gyp/12.0.2/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/varun/src/merkle-manufactory/reader/src/node_modules/keytar',
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 info find Python using Python version 2.7.16 found at "/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python"
gyp info spawn /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
gyp info spawn args [
gyp info spawn args   '/Users/varun/src/merkle-manufactory/reader/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   '/Users/varun/src/merkle-manufactory/reader/src/node_modules/keytar/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/varun/src/merkle-manufactory/reader/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/varun/.electron-gyp/12.0.2/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/varun/.electron-gyp/12.0.2',
gyp info spawn args   '-Dnode_gyp_dir=/Users/varun/src/merkle-manufactory/reader/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/varun/.electron-gyp/12.0.2/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/varun/src/merkle-manufactory/reader/src/node_modules/keytar',
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 ]
⠦ Building modules: 0/4gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/keytar/src/async.o
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/keytar/src/async.o
  CXX(target) Release/obj.target/keytar/src/async.o
  CXX(target) Release/obj.target/keytar/src/async.o
⠼ Building modules: 0/4rm: rm: rm: ./Release/.deps/Release/obj.target/keytar/src/async.o.d.raw./Release/.deps/Release/obj.target/keytar/src/async.o.d.raw./Release/.deps/Release/obj.target/keytar/src/async.o.d.raw: : : No such file or directory
No such file or directory
No such file or directory
make: make: make: *** [Release/obj.target/keytar/src/async.o] Error 1*** [Release/obj.target/keytar/src/async.o] Error 1*** [Release/obj.target/keytar/src/async.o] Error 1

✖ Rebuild Failed
  CXX(target) Release/obj.target/keytar/src/main.o

An unhandled error occurred inside electron-rebuild
node-gyp failed to rebuild '/Users/varun/src/merkle-manufactory/reader/src/node_modules/secp256k1'.
Error: `make` failed with exit code: 2

Error: node-gyp failed to rebuild '/Users/varun/src/merkle-manufactory/reader/src/node_modules/secp256k1'.
Error: `make` failed with exit code: 2

    at ModuleRebuilder.rebuildNodeGypModule (/Users/varun/src/merkle-manufactory/reader/node_modules/electron-rebuild/lib/src/module-rebuilder.js:193:19)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async Rebuilder.rebuildModuleAt (/Users/varun/src/merkle-manufactory/reader/node_modules/electron-rebuild/lib/src/rebuild.js:190:9)
    at async Promise.all (index 289)
    at async Rebuilder.rebuild (/Users/varun/src/merkle-manufactory/reader/node_modules/electron-rebuild/lib/src/rebuild.js:148:13)
    at async /Users/varun/src/merkle-manufactory/reader/node_modules/electron-rebuild/lib/src/cli.js:146:9
child_process.js:679
    throw err;
    ^

Error: Command failed: ../node_modules/.bin/electron-rebuild --parallel --force --types prod,dev,optional --module-dir .
    at checkExecSyncError (child_process.js:640:11)
    at execSync (child_process.js:676:15)
    at Object.<anonymous> (/Users/varun/src/merkle-manufactory/reader/.erb/scripts/ElectronRebuild.js:18:3)
    at Module._compile (internal/modules/cjs/loader.js:1068:30)
    at Module._compile (/Users/varun/src/merkle-manufactory/reader/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
    at Object.newLoader [as .js] (/Users/varun/src/merkle-manufactory/reader/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:933:32)
    at Function.Module._load (internal/modules/cjs/loader.js:774:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
  status: 255,
  signal: null,
  output: [ null, null, null ],
  pid: 38119,
  stdout: null,
  stderr: null
}
error Command failed with exit code 1.

Attempted Fixes:

  1. Removing node_modules had no effect
  2. Changing to node version 15 had no effect.

This has very similar symptoms to a recent issue, but their solution does not seem to work. I've also cross-posted it to OpenGSN. However it seems slightly more probable that this is an issue here, since the yarn.lock file has identical declarations whether I add secp256k1 directly or whether I include is via @opengsn/provider.

secp256k1@^4.0.1:
  version "4.0.2"
  resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1"
  integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==
  dependencies:
    elliptic "^6.5.2"
    node-addon-api "^2.0.0"
    node-gyp-build "^4.2.0"
nhandelsmann commented 1 year ago

If this is a mac machine (OSX) here is what you can do

use terminal

xcode-select --print-path then remove installed version

sudo rm -r -f /Library/Developer/CommandLineTools and reinstall

xcode-select --install

Then use node v14.21.3.

This works in my setup.