1*c8dee2aaSAndroid Build Coastguard Worker#!/usr/bin/env python 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2017 Google Inc. 4*c8dee2aaSAndroid Build Coastguard Worker# 5*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 6*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker"""Create the asset.""" 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Workerfrom __future__ import print_function 13*c8dee2aaSAndroid Build Coastguard Workerimport argparse 14*c8dee2aaSAndroid Build Coastguard Workerimport grp 15*c8dee2aaSAndroid Build Coastguard Workerimport os 16*c8dee2aaSAndroid Build Coastguard Workerimport pwd 17*c8dee2aaSAndroid Build Coastguard Workerimport shutil 18*c8dee2aaSAndroid Build Coastguard Workerimport subprocess 19*c8dee2aaSAndroid Build Coastguard Workerimport sys 20*c8dee2aaSAndroid Build Coastguard Workerimport tempfile 21*c8dee2aaSAndroid Build Coastguard Workerfrom urllib.request import urlopen 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard WorkerFILE_DIR = os.path.dirname(os.path.abspath(__file__)) 24*c8dee2aaSAndroid Build Coastguard WorkerINFRA_BOTS_DIR = os.path.realpath(os.path.join(FILE_DIR, os.pardir, os.pardir)) 25*c8dee2aaSAndroid Build Coastguard Workersys.path.insert(0, INFRA_BOTS_DIR) 26*c8dee2aaSAndroid Build Coastguard Workerimport utils 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard WorkerVALGRIND = 'valgrind-3.15.0' 30*c8dee2aaSAndroid Build Coastguard WorkerTARBALL = '%s.tar.bz2' % VALGRIND 31*c8dee2aaSAndroid Build Coastguard WorkerDOWNLOAD_URL = 'ftp://sourceware.org/pub/valgrind/%s' % TARBALL 32*c8dee2aaSAndroid Build Coastguard WorkerTEMP_DIR = os.path.join(tempfile.gettempdir(), 'skia-%s' % VALGRIND) 33*c8dee2aaSAndroid Build Coastguard WorkerINSTALL_DIR = os.path.join(TEMP_DIR, 'valgrind_install') 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Workerdef download_tarball(): 37*c8dee2aaSAndroid Build Coastguard Worker with utils.chdir(TEMP_DIR): 38*c8dee2aaSAndroid Build Coastguard Worker if os.path.isfile(TARBALL): 39*c8dee2aaSAndroid Build Coastguard Worker return 40*c8dee2aaSAndroid Build Coastguard Worker with open(TARBALL, 'wb') as f: 41*c8dee2aaSAndroid Build Coastguard Worker f.write(urlopen(DOWNLOAD_URL).read()) 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Workerdef unzip_tarball(): 45*c8dee2aaSAndroid Build Coastguard Worker with utils.chdir(TEMP_DIR): 46*c8dee2aaSAndroid Build Coastguard Worker if os.path.isdir(VALGRIND): 47*c8dee2aaSAndroid Build Coastguard Worker return 48*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['tar', 'xvjf', TARBALL]) 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Workerdef create_install_dir(): 52*c8dee2aaSAndroid Build Coastguard Worker if os.path.isdir(INSTALL_DIR): 53*c8dee2aaSAndroid Build Coastguard Worker return 54*c8dee2aaSAndroid Build Coastguard Worker os.makedirs(INSTALL_DIR) 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Workerdef build_valgrind(): 58*c8dee2aaSAndroid Build Coastguard Worker if os.path.isfile(os.path.join(INSTALL_DIR, 'bin', 'valgrind')): 59*c8dee2aaSAndroid Build Coastguard Worker return 60*c8dee2aaSAndroid Build Coastguard Worker with utils.chdir(os.path.join(TEMP_DIR, VALGRIND)): 61*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['./configure', '--prefix=%s' % INSTALL_DIR]) 62*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['make']) 63*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['make', 'install']) 64*c8dee2aaSAndroid Build Coastguard Worker 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Workerdef copy_files(target_dir): 67*c8dee2aaSAndroid Build Coastguard Worker with utils.chdir(os.path.join(TEMP_DIR, VALGRIND)): 68*c8dee2aaSAndroid Build Coastguard Worker os.mkdir(os.path.join(target_dir, 'bin')) 69*c8dee2aaSAndroid Build Coastguard Worker shutil.copy(os.path.join(INSTALL_DIR, 'bin', 'valgrind'), 70*c8dee2aaSAndroid Build Coastguard Worker os.path.join(target_dir, 'bin', 'valgrind')) 71*c8dee2aaSAndroid Build Coastguard Worker os.mkdir(os.path.join(target_dir, 'lib')) 72*c8dee2aaSAndroid Build Coastguard Worker os.mkdir(os.path.join(target_dir, 'lib', 'valgrind')) 73*c8dee2aaSAndroid Build Coastguard Worker for lib in ['memcheck-amd64-linux']: 74*c8dee2aaSAndroid Build Coastguard Worker shutil.copy(os.path.join(INSTALL_DIR, 'lib', 'valgrind', lib), 75*c8dee2aaSAndroid Build Coastguard Worker os.path.join(target_dir, 'lib', 'valgrind', lib)) 76*c8dee2aaSAndroid Build Coastguard Worker for lib in ['core', 'memcheck']: 77*c8dee2aaSAndroid Build Coastguard Worker libname = 'vgpreload_%s-amd64-linux.so' % lib 78*c8dee2aaSAndroid Build Coastguard Worker shutil.copy(os.path.join(INSTALL_DIR, 'lib', 'valgrind', libname), 79*c8dee2aaSAndroid Build Coastguard Worker os.path.join(target_dir, 'lib', 'valgrind', libname)) 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Worker shutil.copy('default.supp', 82*c8dee2aaSAndroid Build Coastguard Worker os.path.join(target_dir, 'lib', 'valgrind', 'default.supp')) 83*c8dee2aaSAndroid Build Coastguard Worker 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Workerdef create_asset(target_dir): 86*c8dee2aaSAndroid Build Coastguard Worker """Create the asset.""" 87*c8dee2aaSAndroid Build Coastguard Worker if os.name == 'nt': 88*c8dee2aaSAndroid Build Coastguard Worker print('This script does not run on Windows.') 89*c8dee2aaSAndroid Build Coastguard Worker sys.exit(1) 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker create_install_dir() 92*c8dee2aaSAndroid Build Coastguard Worker if not os.path.isdir(TEMP_DIR): 93*c8dee2aaSAndroid Build Coastguard Worker os.makedirs(TEMP_DIR) 94*c8dee2aaSAndroid Build Coastguard Worker download_tarball() 95*c8dee2aaSAndroid Build Coastguard Worker unzip_tarball() 96*c8dee2aaSAndroid Build Coastguard Worker build_valgrind() 97*c8dee2aaSAndroid Build Coastguard Worker copy_files(target_dir) 98*c8dee2aaSAndroid Build Coastguard Worker 99*c8dee2aaSAndroid Build Coastguard Worker 100*c8dee2aaSAndroid Build Coastguard Workerdef main(): 101*c8dee2aaSAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 102*c8dee2aaSAndroid Build Coastguard Worker parser.add_argument('--target_dir', '-t', required=True) 103*c8dee2aaSAndroid Build Coastguard Worker args = parser.parse_args() 104*c8dee2aaSAndroid Build Coastguard Worker create_asset(args.target_dir) 105*c8dee2aaSAndroid Build Coastguard Worker 106*c8dee2aaSAndroid Build Coastguard Worker 107*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__': 108*c8dee2aaSAndroid Build Coastguard Worker main() 109