105 lines
2.7 KiB
Python
105 lines
2.7 KiB
Python
|
#!/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()
|