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