Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: telemetry/third_party/cv2/roll_cv2

Issue 2892313002: Telemetry/Windows: add numpy and cv2 binary dependencies (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2017 The Chromium Authors. All rights reserved. 2 # Copyright 2017 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 # 5 #
6 # Script to download, package, update, and upload OpenCV (cv2). 6 # Script to download, package, update, and upload OpenCV (cv2).
7 #
8 # Note: This has not been tested on Windows. The Windows cv2 binary in
9 # Cloud Storage was created manually by the following process:
10 # * Download
11 # https://github.com/opencv/opencv/releases/download/2.4.13.2/opencv-2.4.13.2- vc14.exe
12 # * Open using 7-Zip (or just run the exe)
13 # * Extract opencv/build/python/2.7/x64/cv2.pyd
14 # * Create a zip file containing only cv2.pyd
15 # * Rename cv2.zip to cv2_$(sha1sum cv2.zip)
16 # * Upload to cloud storage at chromium-telemetry/binary_dependencies
17 # * Add entry including hash and version number to cv2 win_AMD64 entry
18 # in binary_dependencies.json
7 19
8 DESCRIPTION = '''\ 20 DESCRIPTION = '''\
9 Downloads + builds OpenCV (cv2), packages it as a zip, and updates \ 21 Downloads + builds OpenCV (cv2), packages it as a zip, and updates \
10 binary_dependencies.json and Cloud Storage with the result.''' 22 binary_dependencies.json and Cloud Storage with the result. (NOTE: \
23 Not tested on Windows. See comments for details.)'''
11 24
12 import argparse 25 import argparse
13 import contextlib 26 import contextlib
14 import glob 27 import glob
15 import multiprocessing 28 import multiprocessing
16 import os 29 import os
17 import shutil 30 import shutil
18 import sys 31 import sys
19 import tarfile 32 import tarfile
20 import urllib 33 import urllib
(...skipping 15 matching lines...) Expand all
36 NUMPY_PATH = glob.glob(NUMPY_GLOB) 49 NUMPY_PATH = glob.glob(NUMPY_GLOB)
37 if len(NUMPY_PATH) != 1: 50 if len(NUMPY_PATH) != 1:
38 raise ImportError("telemetry/third_party/numpy/lib/numpy_* is required. " 51 raise ImportError("telemetry/third_party/numpy/lib/numpy_* is required. "
39 "Ensure this by running fetch_telemetry_binary_dependencies. " 52 "Ensure this by running fetch_telemetry_binary_dependencies. "
40 "If a binary dependency for numpy is not available on this platform, " 53 "If a binary dependency for numpy is not available on this platform, "
41 "it must be configured before building cv2.") 54 "it must be configured before building cv2.")
42 NUMPY_PATH = NUMPY_PATH[0] 55 NUMPY_PATH = NUMPY_PATH[0]
43 # insert rather than append to make sure we don't get system numpy. 56 # insert rather than append to make sure we don't get system numpy.
44 sys.path.insert(1, NUMPY_PATH) 57 sys.path.insert(1, NUMPY_PATH)
45 58
59 class RollError(Exception):
60 pass
61
46 # Dependency update helper 62 # Dependency update helper
47 def update_dependency(dependency, path, version): 63 def update_dependency(dependency, path, version):
48 config = os.path.join(CATAPULT_ROOT, 'telemetry', 'telemetry', 'internal', 64 config = os.path.join(CATAPULT_ROOT, 'telemetry', 'telemetry', 'internal',
49 'binary_dependencies.json') 65 'binary_dependencies.json')
50 66
51 os_name = platform_module.GetHostPlatform().GetOSName() 67 os_name = platform_module.GetHostPlatform().GetOSName()
52 arch_name = platform_module.GetHostPlatform().GetArchName() 68 arch_name = platform_module.GetHostPlatform().GetArchName()
53 platform = "{}_{}".format(os_name, arch_name) 69 platform = "{}_{}".format(os_name, arch_name)
54 70
55 c = base_config.BaseConfig(config, writable=True) 71 c = base_config.BaseConfig(config, writable=True)
56 c.AddCloudStorageDependencyUpdateJob( 72 try:
57 dependency, platform, path, version=version, execute_job=True) 73 old_version = c.GetVersion(dependency, platform)
74 print 'Updating from version: {}'.format(old_version)
75 except ValueError:
76 raise RollError(
77 ('binary_dependencies.json entry for {} missing or invalid; please add '
78 'it first! (need download_path and path_within_archive)')
79 .format(platform))
80
81 if path:
82 c.AddCloudStorageDependencyUpdateJob(
83 dependency, platform, path, version=version, execute_job=True)
84
85 def verify_dependency_entry(dependency):
86 update_dependency(dependency, None, None)
58 87
59 # Main 88 # Main
60 def main(version): 89 def main(version):
90 verify_dependency_entry('cv2')
91
61 outdir = os.path.join(SCRIPT_DIR, 'lib') 92 outdir = os.path.join(SCRIPT_DIR, 'lib')
62 if os.path.exists(outdir): 93 if os.path.exists(outdir):
63 shutil.rmtree(outdir) 94 shutil.rmtree(outdir)
64 os.mkdir(outdir) 95 os.mkdir(outdir)
65 96
66 tarball_url = \ 97 tarball_url = \
67 'https://codeload.github.com/opencv/opencv/tar.gz/{}'.format(version) 98 'https://codeload.github.com/opencv/opencv/tar.gz/{}'.format(version)
68 99
69 zip_full_base = os.path.join(outdir, 'cv2') 100 zip_full_base = os.path.join(outdir, 'cv2')
70 zip_result = None 101 zip_result = None
(...skipping 17 matching lines...) Expand all
88 '-DCMAKE_INSTALL_PREFIX={}'.format(os.path.join('..', 'install')), 119 '-DCMAKE_INSTALL_PREFIX={}'.format(os.path.join('..', 'install')),
89 PYTHONPATH=NUMPY_PATH) 120 PYTHONPATH=NUMPY_PATH)
90 sh.CallProgram(['make'], 121 sh.CallProgram(['make'],
91 '-j{}'.format(multiprocessing.cpu_count()), 122 '-j{}'.format(multiprocessing.cpu_count()),
92 'install', 123 'install',
93 PYTHONPATH=NUMPY_PATH) 124 PYTHONPATH=NUMPY_PATH)
94 with sh.ScopedChangeDir('install'): 125 with sh.ScopedChangeDir('install'):
95 print 'Zipping result...' 126 print 'Zipping result...'
96 root_dir = glob.glob(os.path.join('lib', 'python2.*', '*-packages')) 127 root_dir = glob.glob(os.path.join('lib', 'python2.*', '*-packages'))
97 if len(root_dir) != 1: 128 if len(root_dir) != 1:
98 raise Exception( 129 raise RollError(
99 'Expected one glob match, found {}'.format(len(root_dir))) 130 'Expected one glob match, found {}'.format(len(root_dir)))
100 root_dir = root_dir[0] 131 root_dir = root_dir[0]
101 zip_result = shutil.make_archive( 132 zip_result = shutil.make_archive(
102 base_name=zip_full_base, 133 base_name=zip_full_base,
103 format='zip', 134 format='zip',
104 root_dir=root_dir, 135 root_dir=root_dir,
105 base_dir='.') # '.' gives us everything in the root_dir 136 base_dir='.') # '.' gives us everything in the root_dir
106 print 'Uploading zip...' 137 print 'Uploading zip...'
107 update_dependency('cv2', zip_result, version) 138 update_dependency('cv2', zip_result, version)
108 139
109 print '''\ 140 print '''\
110 Don't forget to run: 141 Don't forget to run:
111 $ GYP_DEFINES=fetch_telemetry_dependencies=1 \ 142 $ GYP_DEFINES=fetch_telemetry_dependencies=1 \
112 bin/fetch_telemetry_binary_dependencies 143 bin/fetch_telemetry_binary_dependencies
113 if you want to use the new dependency version locally!''' 144 if you want to use the new dependency version locally!'''
114 145
115 if __name__ == '__main__': 146 if __name__ == '__main__':
116 VERSION_HELP = '''\ 147 VERSION_HELP = '''\
117 OpenCV package version, e.g. 2.4.13.2. For a release list, see \ 148 OpenCV package version, e.g. 2.4.13.2. For a release list, see \
118 <https://github.com/opencv/opencv/releases>. \ 149 <https://github.com/opencv/opencv/releases>. \
119 For version support, see \ 150 For version support, see \
120 `telemetry/telemetry/internal/util/external_modules.py`.''' 151 `telemetry/telemetry/internal/util/external_modules.py`.'''
121 152
122 try: 153 try:
123 parser = argparse.ArgumentParser(description=DESCRIPTION) 154 parser = argparse.ArgumentParser(description=DESCRIPTION)
124 parser.add_argument('version', help=VERSION_HELP) 155 parser.add_argument('version', help=VERSION_HELP)
125 args = parser.parse_args() 156 args = parser.parse_args()
126 157
127 os.chdir(SCRIPT_DIR) 158 os.chdir(SCRIPT_DIR)
128 main(args.version) 159 main(args.version)
129 except Exception as e: 160 except RollError as e:
130 print '{}: {}'.format(type(e).__name__, e.message) 161 print '{}: {}'.format(type(e).__name__, e.message)
131 sys.exit(1) 162 sys.exit(1)
OLDNEW
« no previous file with comments | « telemetry/telemetry/internal/binary_dependencies.json ('k') | telemetry/third_party/numpy/roll_numpy » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698