| #!/usr/bin/env python |
| # |
| # Copyright 2017 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| |
| """Create the asset.""" |
| |
| |
| import argparse |
| import common |
| import grp |
| import os |
| import pwd |
| import shutil |
| import subprocess |
| import sys |
| import tempfile |
| import urllib2 |
| import utils |
| |
| |
| VALGRIND = 'valgrind-3.12.0' |
| TARBALL = '%s.tar.bz2' % VALGRIND |
| DOWNLOAD_URL = 'http://valgrind.org/downloads/%s' % TARBALL |
| TEMP_DIR = os.path.join(tempfile.gettempdir(), 'skia-%s' % VALGRIND) |
| INSTALL_DIR = os.path.join(TEMP_DIR, 'valgrind_install') |
| |
| |
| def download_tarball(): |
| with utils.chdir(TEMP_DIR): |
| if os.path.isfile(TARBALL): |
| return |
| with open(TARBALL, 'wb') as f: |
| f.write(urllib2.urlopen(DOWNLOAD_URL).read()) |
| |
| |
| def unzip_tarball(): |
| with utils.chdir(TEMP_DIR): |
| if os.path.isdir(VALGRIND): |
| return |
| subprocess.check_call(['tar', 'xvjf', TARBALL]) |
| |
| |
| def create_install_dir(): |
| if os.path.isdir(INSTALL_DIR): |
| return |
| os.makedirs(INSTALL_DIR) |
| |
| |
| def build_valgrind(): |
| if os.path.isfile(os.path.join(INSTALL_DIR, 'bin', 'valgrind')): |
| return |
| with utils.chdir(os.path.join(TEMP_DIR, VALGRIND)): |
| subprocess.check_call(['./configure', '--prefix=%s' % INSTALL_DIR]) |
| subprocess.check_call(['make']) |
| subprocess.check_call(['make', 'install']) |
| |
| |
| def copy_files(target_dir): |
| with utils.chdir(os.path.join(TEMP_DIR, VALGRIND)): |
| os.mkdir(os.path.join(target_dir, 'bin')) |
| shutil.copy(os.path.join(INSTALL_DIR, 'bin', 'valgrind'), |
| os.path.join(target_dir, 'bin', 'valgrind')) |
| os.mkdir(os.path.join(target_dir, 'lib')) |
| os.mkdir(os.path.join(target_dir, 'lib', 'valgrind')) |
| for lib in ['memcheck-amd64-linux']: |
| shutil.copy(os.path.join(INSTALL_DIR, 'lib', 'valgrind', lib), |
| os.path.join(target_dir, 'lib', 'valgrind', lib)) |
| for lib in ['core', 'memcheck']: |
| libname = 'vgpreload_%s-amd64-linux.so' % lib |
| shutil.copy(os.path.join(INSTALL_DIR, 'lib', 'valgrind', libname), |
| os.path.join(target_dir, 'lib', 'valgrind', libname)) |
| |
| shutil.copy('default.supp', |
| os.path.join(target_dir, 'lib', 'valgrind', 'default.supp')) |
| |
| |
| def create_asset(target_dir): |
| """Create the asset.""" |
| if os.name == 'nt': |
| print 'This script does not run on Windows.' |
| sys.exit(1) |
| |
| create_install_dir() |
| if not os.path.isdir(TEMP_DIR): |
| os.makedirs(TEMP_DIR) |
| download_tarball() |
| unzip_tarball() |
| build_valgrind() |
| copy_files(target_dir) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--target_dir', '-t', required=True) |
| args = parser.parse_args() |
| create_asset(args.target_dir) |
| |
| |
| if __name__ == '__main__': |
| main() |