fix: generate valid config.gypi (#31404)
This commit is contained in:
parent
e883beadff
commit
d1e0b6324a
3 changed files with 77 additions and 42 deletions
65
script/generate-config-gypi.py
Executable file
65
script/generate-config-gypi.py
Executable file
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
import ast
|
||||
import os
|
||||
import pprint
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
ELECTRON_DIR = os.path.abspath(os.path.join(__file__, '..', '..'))
|
||||
NODE_DIR = os.path.join(ELECTRON_DIR, '..', 'third_party', 'electron_node')
|
||||
|
||||
def run_node_configure(target_cpu):
|
||||
configure = os.path.join(NODE_DIR, 'configure.py')
|
||||
args = ['--dest-cpu', target_cpu]
|
||||
# Enabled in Chromium's V8.
|
||||
if target_cpu == 'arm64' or target_cpu == 'x64':
|
||||
args += ['--experimental-enable-pointer-compression']
|
||||
# Work around "No acceptable ASM compiler found" error on some Windows
|
||||
# machines, it breaks nothing since Electron does not use OpenSSL.
|
||||
if sys.platform == 'win32':
|
||||
args += ['--openssl-no-asm']
|
||||
subprocess.check_call([sys.executable, configure] + args)
|
||||
|
||||
def read_node_config_gypi():
|
||||
config_gypi = os.path.join(NODE_DIR, 'config.gypi')
|
||||
with open(config_gypi, 'r') as f:
|
||||
content = f.read()
|
||||
return ast.literal_eval(content)
|
||||
|
||||
def read_electron_args():
|
||||
all_gn = os.path.join(ELECTRON_DIR, 'build', 'args', 'all.gn')
|
||||
args = {}
|
||||
with open(all_gn, 'r') as f:
|
||||
for line in f:
|
||||
if line.startswith('#'):
|
||||
continue
|
||||
m = re.match('([\w_]+) = (.+)', line)
|
||||
if m == None:
|
||||
continue
|
||||
args[m.group(1)] = m.group(2)
|
||||
return args
|
||||
|
||||
def main(target_file, target_cpu):
|
||||
run_node_configure(target_cpu)
|
||||
config = read_node_config_gypi()
|
||||
args = read_electron_args()
|
||||
|
||||
# Remove the generated config.gypi to make the parallel/test-process-config
|
||||
# test pass.
|
||||
os.remove(os.path.join(NODE_DIR, 'config.gypi'))
|
||||
|
||||
v = config['variables']
|
||||
# Electron specific variables:
|
||||
v['built_with_electron'] = 1
|
||||
v['node_module_version'] = int(args['node_module_version'])
|
||||
# Used by certain versions of node-gyp.
|
||||
v['build_v8_with_gn'] = 'false'
|
||||
|
||||
with open(target_file, 'w+') as f:
|
||||
f.write(pprint.pformat(config, indent=2))
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(*sys.argv[1:]))
|
Loading…
Add table
Add a link
Reference in a new issue