Skip to content

Commit c19c14d

Browse files
committed
Build spec modules against locally generated node headers tarball
1 parent c6c9321 commit c19c14d

File tree

4 files changed

+117
-80
lines changed

4 files changed

+117
-80
lines changed

script/bootstrap.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def main():
6363
create_chrome_version_h()
6464
touch_config_gypi()
6565
run_update(defines, args.msvs)
66+
create_node_headers()
6667
update_electron_modules('spec', args.target_arch)
6768

6869

@@ -184,9 +185,11 @@ def update_node_modules(dirname, env=None):
184185

185186
def update_electron_modules(dirname, target_arch):
186187
env = os.environ.copy()
188+
version = get_electron_version()
187189
env['npm_config_arch'] = target_arch
188-
env['npm_config_target'] = get_electron_version()
189-
env['npm_config_disturl'] = 'https://atom.io/download/electron'
190+
env['npm_config_target'] = version
191+
env['npm_config_tarball'] = os.path.join(SOURCE_ROOT, 'dist',
192+
'node-{0}.tar.gz'.format(version))
190193
update_node_modules(dirname, env)
191194

192195

@@ -260,5 +263,11 @@ def run_update(defines, msvs):
260263
execute_stdout(args)
261264

262265

266+
def create_node_headers():
267+
execute_stdout([sys.executable,
268+
os.path.join(SOURCE_ROOT, 'script', 'create-node-headers.py'),
269+
'--version', get_electron_version()])
270+
271+
263272
if __name__ == '__main__':
264273
sys.exit(main())

script/create-node-headers.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#!/usr/bin/env python
2+
3+
import argparse
4+
import os
5+
import shutil
6+
import sys
7+
import tarfile
8+
9+
from lib.util import safe_mkdir, scoped_cwd
10+
11+
12+
SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
13+
DIST_DIR = os.path.join(SOURCE_ROOT, 'dist')
14+
NODE_DIR = os.path.join(SOURCE_ROOT, 'vendor', 'node')
15+
OUT_DIR = os.path.join(SOURCE_ROOT, 'out', 'R')
16+
17+
HEADERS_SUFFIX = [
18+
'.h',
19+
'.gypi',
20+
]
21+
HEADERS_DIRS = [
22+
'src',
23+
'deps/http_parser',
24+
'deps/zlib',
25+
'deps/uv',
26+
'deps/npm',
27+
'deps/mdb_v8',
28+
]
29+
HEADERS_FILES = [
30+
'common.gypi',
31+
'config.gypi',
32+
]
33+
34+
35+
def main():
36+
safe_mkdir(DIST_DIR)
37+
38+
args = parse_args()
39+
node_headers_dir = os.path.join(DIST_DIR, 'node-{0}'.format(args.version))
40+
iojs_headers_dir = os.path.join(DIST_DIR, 'iojs-{0}'.format(args.version))
41+
iojs2_headers_dir = os.path.join(DIST_DIR,
42+
'iojs-{0}-headers'.format(args.version))
43+
44+
copy_headers(node_headers_dir)
45+
create_header_tarball(node_headers_dir)
46+
copy_headers(iojs_headers_dir)
47+
create_header_tarball(iojs_headers_dir)
48+
copy_headers(iojs2_headers_dir)
49+
create_header_tarball(iojs2_headers_dir)
50+
51+
52+
def parse_args():
53+
parser = argparse.ArgumentParser(description='create node header tarballs')
54+
parser.add_argument('-v', '--version', help='Specify the version',
55+
required=True)
56+
return parser.parse_args()
57+
58+
59+
def copy_headers(dist_headers_dir):
60+
safe_mkdir(dist_headers_dir)
61+
62+
# Copy standard node headers from node. repository.
63+
for include_path in HEADERS_DIRS:
64+
abs_path = os.path.join(NODE_DIR, include_path)
65+
for dirpath, _, filenames in os.walk(abs_path):
66+
for filename in filenames:
67+
extension = os.path.splitext(filename)[1]
68+
if extension not in HEADERS_SUFFIX:
69+
continue
70+
copy_source_file(os.path.join(dirpath, filename), NODE_DIR,
71+
dist_headers_dir)
72+
for other_file in HEADERS_FILES:
73+
copy_source_file(os.path.join(NODE_DIR, other_file), NODE_DIR,
74+
dist_headers_dir)
75+
76+
# Copy V8 headers from chromium's repository.
77+
src = os.path.join(SOURCE_ROOT, 'vendor', 'brightray', 'vendor', 'download',
78+
'libchromiumcontent', 'src')
79+
for dirpath, _, filenames in os.walk(os.path.join(src, 'v8')):
80+
for filename in filenames:
81+
extension = os.path.splitext(filename)[1]
82+
if extension not in HEADERS_SUFFIX:
83+
continue
84+
copy_source_file(os.path.join(dirpath, filename), src,
85+
os.path.join(dist_headers_dir, 'deps'))
86+
87+
88+
def create_header_tarball(dist_headers_dir):
89+
target = dist_headers_dir + '.tar.gz'
90+
with scoped_cwd(DIST_DIR):
91+
tarball = tarfile.open(name=target, mode='w:gz')
92+
tarball.add(os.path.relpath(dist_headers_dir))
93+
tarball.close()
94+
95+
96+
def copy_source_file(source, start, destination):
97+
relative = os.path.relpath(source, start=start)
98+
final_destination = os.path.join(destination, relative)
99+
safe_mkdir(os.path.dirname(final_destination))
100+
shutil.copy2(source, final_destination)
101+
102+
103+
if __name__ == '__main__':
104+
sys.exit(main())

script/upload-node-headers.py

Lines changed: 1 addition & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -5,50 +5,17 @@
55
import os
66
import shutil
77
import sys
8-
import tarfile
98

109
from lib.config import PLATFORM, get_target_arch, s3_config
11-
from lib.util import execute, safe_mkdir, scoped_cwd, s3put
10+
from lib.util import safe_mkdir, scoped_cwd, s3put
1211

1312

1413
SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
1514
DIST_DIR = os.path.join(SOURCE_ROOT, 'dist')
16-
NODE_DIR = os.path.join(SOURCE_ROOT, 'vendor', 'node')
1715
OUT_DIR = os.path.join(SOURCE_ROOT, 'out', 'R')
1816

19-
HEADERS_SUFFIX = [
20-
'.h',
21-
'.gypi',
22-
]
23-
HEADERS_DIRS = [
24-
'src',
25-
'deps/http_parser',
26-
'deps/zlib',
27-
'deps/uv',
28-
'deps/npm',
29-
'deps/mdb_v8',
30-
]
31-
HEADERS_FILES = [
32-
'common.gypi',
33-
'config.gypi',
34-
]
35-
36-
3717
def main():
38-
safe_mkdir(DIST_DIR)
39-
4018
args = parse_args()
41-
node_headers_dir = os.path.join(DIST_DIR, 'node-{0}'.format(args.version))
42-
iojs_headers_dir = os.path.join(DIST_DIR, 'iojs-{0}'.format(args.version))
43-
iojs2_headers_dir = os.path.join(DIST_DIR,
44-
'iojs-{0}-headers'.format(args.version))
45-
46-
copy_headers(node_headers_dir)
47-
create_header_tarball(node_headers_dir)
48-
copy_headers(iojs_headers_dir)
49-
create_header_tarball(iojs_headers_dir)
50-
copy_headers(iojs2_headers_dir)
51-
create_header_tarball(iojs2_headers_dir)
5219

5320
# Upload node's headers to S3.
5421
bucket, access_key, secret_key = s3_config()
@@ -62,50 +29,6 @@ def parse_args():
6229
return parser.parse_args()
6330

6431

65-
def copy_headers(dist_headers_dir):
66-
safe_mkdir(dist_headers_dir)
67-
68-
# Copy standard node headers from node. repository.
69-
for include_path in HEADERS_DIRS:
70-
abs_path = os.path.join(NODE_DIR, include_path)
71-
for dirpath, _, filenames in os.walk(abs_path):
72-
for filename in filenames:
73-
extension = os.path.splitext(filename)[1]
74-
if extension not in HEADERS_SUFFIX:
75-
continue
76-
copy_source_file(os.path.join(dirpath, filename), NODE_DIR,
77-
dist_headers_dir)
78-
for other_file in HEADERS_FILES:
79-
copy_source_file(os.path.join(NODE_DIR, other_file), NODE_DIR,
80-
dist_headers_dir)
81-
82-
# Copy V8 headers from chromium's repository.
83-
src = os.path.join(SOURCE_ROOT, 'vendor', 'brightray', 'vendor', 'download',
84-
'libchromiumcontent', 'src')
85-
for dirpath, _, filenames in os.walk(os.path.join(src, 'v8')):
86-
for filename in filenames:
87-
extension = os.path.splitext(filename)[1]
88-
if extension not in HEADERS_SUFFIX:
89-
continue
90-
copy_source_file(os.path.join(dirpath, filename), src,
91-
os.path.join(dist_headers_dir, 'deps'))
92-
93-
94-
def create_header_tarball(dist_headers_dir):
95-
target = dist_headers_dir + '.tar.gz'
96-
with scoped_cwd(DIST_DIR):
97-
tarball = tarfile.open(name=target, mode='w:gz')
98-
tarball.add(os.path.relpath(dist_headers_dir))
99-
tarball.close()
100-
101-
102-
def copy_source_file(source, start, destination):
103-
relative = os.path.relpath(source, start=start)
104-
final_destination = os.path.join(destination, relative)
105-
safe_mkdir(os.path.dirname(final_destination))
106-
shutil.copy2(source, final_destination)
107-
108-
10932
def upload_node(bucket, access_key, secret_key, version):
11033
with scoped_cwd(DIST_DIR):
11134
s3put(bucket, access_key, secret_key, DIST_DIR,

script/upload.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ def main():
101101
run_python_script('upload-windows-pdb.py')
102102

103103
# Upload node headers.
104+
run_python_script('create-node-headers.py', '-v', args.version)
104105
run_python_script('upload-node-headers.py', '-v', args.version)
105106

106107

0 commit comments

Comments
 (0)