blob: 8b47ddd3b52955974fa64e2aaca5436fbac167b3 [file] [log] [blame]
#!/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."""
from __future__ import print_function
import argparse
import grp
import os
import pwd
import shutil
import subprocess
import sys
import tempfile
from urllib.request import urlopen
FILE_DIR = os.path.dirname(os.path.abspath(__file__))
INFRA_BOTS_DIR = os.path.realpath(os.path.join(FILE_DIR, os.pardir, os.pardir))
sys.path.insert(0, INFRA_BOTS_DIR)
import utils
VALGRIND = 'valgrind-3.15.0'
TARBALL = '%s.tar.bz2' % VALGRIND
DOWNLOAD_URL = 'ftp://sourceware.org/pub/valgrind/%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(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()