Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1020)

Unified Diff: third_party/instrumented_libraries/download_build_install.py

Issue 723033006: Instrumented libraries: overhaul RPATH handling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/instrumented_libraries/fix_rpaths.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/instrumented_libraries/download_build_install.py
diff --git a/third_party/instrumented_libraries/download_build_install.py b/third_party/instrumented_libraries/download_build_install.py
index d6637a5feec4531a655c16ed869c264b9c5b8e36..73ba2d08d94666076d9e947a4778e3d7e9730f82 100755
--- a/third_party/instrumented_libraries/download_build_install.py
+++ b/third_party/instrumented_libraries/download_build_install.py
@@ -14,6 +14,8 @@ import shutil
import subprocess
import sys
+SCRIPT_ABSOLUTE_PATH = os.path.dirname(os.path.abspath(__file__))
+
class ScopedChangeDirectory(object):
"""Changes current working directory and restores it back automatically."""
@@ -29,11 +31,6 @@ class ScopedChangeDirectory(object):
def __exit__(self, exc_type, exc_value, traceback):
os.chdir(self.old_path)
-
-def get_script_absolute_path():
- return os.path.dirname(os.path.abspath(__file__))
-
-
def get_package_build_dependencies(package):
command = 'apt-get -s build-dep %s | grep Inst | cut -d " " -f 2' % package
command_result = subprocess.Popen(command, stdout=subprocess.PIPE,
@@ -86,6 +83,11 @@ def run_shell_commands(commands, verbose=False, environment=None):
shell_call(command, verbose, environment)
+def fix_rpaths(destdir):
+ # TODO(earthdok): reimplement fix_rpaths.sh in Python.
+ shell_call("%s/fix_rpaths.sh %s/lib" % (SCRIPT_ABSOLUTE_PATH, destdir))
+
+
def destdir_configure_make_install(parsed_arguments, environment,
install_prefix):
configure_command = './configure %s' % parsed_arguments.extra_configure_flags
@@ -95,17 +97,22 @@ def destdir_configure_make_install(parsed_arguments, environment,
destdir = '%s/debian/instrumented_build' % os.getcwd()
# Some makefiles use BUILDROOT instead of DESTDIR.
make_command = 'make DESTDIR=%s BUILDROOT=%s' % (destdir, destdir)
- run_shell_commands([
- configure_command,
- '%s -j%s' % (make_command, parsed_arguments.jobs),
- # Parallel install is flaky for some packages.
- '%s install -j1' % make_command,
- # Kill the .la files. They contain absolute paths, and will cause build
- # errors in dependent libraries.
- 'rm %s/lib/*.la -f' % destdir,
- # Now move the contents of the temporary destdir to their final place.
- 'cp %s/* %s/ -rdf' % (destdir, install_prefix)],
+ build_and_install_in_destdir = [
+ configure_command,
+ '%s -j%s' % (make_command, parsed_arguments.jobs),
+ # Parallel install is flaky for some packages.
+ '%s install -j1' % make_command,
+ # Kill the .la files. They contain absolute paths, and will cause build
+ # errors in dependent libraries.
+ 'rm %s/lib/*.la -f' % destdir
+ ]
+ run_shell_commands(build_and_install_in_destdir,
parsed_arguments.verbose, environment)
+ fix_rpaths(destdir)
+ shell_call(
+ # Now move the contents of the temporary destdir to their final place.
+ 'cp %s/* %s/ -rdf' % (destdir, install_prefix),
+ parsed_arguments.verbose, environment)
def nss_make_and_copy(parsed_arguments, environment, install_prefix):
@@ -136,6 +143,7 @@ def nss_make_and_copy(parsed_arguments, environment, install_prefix):
# -j is not supported
shell_call('make %s' % ' '.join(make_args), parsed_arguments.verbose,
environment)
+ fix_rpaths(os.getcwd())
# 'make install' is not supported. Copy the DSOs manually.
install_dir = '%s/lib/' % install_prefix
for (dirpath, dirnames, filenames) in os.walk('./lib/'):
@@ -154,8 +162,9 @@ def libcap2_make_install(parsed_arguments, environment, install_prefix):
for name in['CC', 'CXX', 'CFLAGS', 'CXXFLAGS', 'LDFLAGS']]
shell_call('make -j%s %s' % (parsed_arguments.jobs, ' '.join(make_args)),
parsed_arguments.verbose, environment)
+ destdir = '%s/debian/instrumented_build' % os.getcwd()
install_args = [
- 'DESTDIR=%s' % install_prefix,
+ 'DESTDIR=%s' % destdir,
# Do not install in lib64/.
'lib=lib',
# Skip a step that requires sudo.
@@ -164,6 +173,11 @@ def libcap2_make_install(parsed_arguments, environment, install_prefix):
shell_call('make -j%s install %s' %
(parsed_arguments.jobs, ' '.join(install_args)),
parsed_arguments.verbose, environment)
+ fix_rpaths(destdir)
+ shell_call([
+ # Now move the contents of the temporary destdir to their final place.
+ 'cp %s/* %s/ -rdf' % (destdir, install_prefix)],
+ parsed_arguments.verbose, environment)
def libpci3_make_install(parsed_arguments, environment, install_prefix):
@@ -203,6 +217,7 @@ def libpci3_make_install(parsed_arguments, environment, install_prefix):
parsed_arguments.jobs,
' '.join(install_args + paths))],
parsed_arguments.verbose, environment)
+ fix_rpaths(destdir)
# Now move the contents of the temporary destdir to their final place.
run_shell_commands([
'cp %s/* %s/ -rd' % (destdir, install_prefix),
@@ -245,7 +260,7 @@ def build_environment(parsed_arguments, product_directory, install_prefix):
cflags = unescape_flags(parsed_arguments.cflags)
if parsed_arguments.sanitizer_blacklist:
cflags += ' -fsanitize-blacklist=%s/%s' % (
- get_script_absolute_path(),
+ SCRIPT_ABSOLUTE_PATH,
parsed_arguments.sanitizer_blacklist)
environment['CFLAGS'] = cflags
environment['CXXFLAGS'] = cflags
@@ -268,7 +283,7 @@ def build_environment(parsed_arguments, product_directory, install_prefix):
def download_build_install(parsed_arguments):
product_directory = os.path.normpath('%s/%s' % (
- get_script_absolute_path(),
+ SCRIPT_ABSOLUTE_PATH,
parsed_arguments.product_directory))
install_prefix = '%s/instrumented_libraries/%s' % (
@@ -371,7 +386,7 @@ def main():
parsed_arguments = argument_parser.parse_args(
[arg for arg in sys.argv[1:] if len(arg) != 0])
# Ensure current working directory is this script directory.
- os.chdir(get_script_absolute_path())
+ os.chdir(SCRIPT_ABSOLUTE_PATH)
# Ensure all build dependencies are installed.
if parsed_arguments.check_build_deps:
check_package_build_dependencies(parsed_arguments.package)
« no previous file with comments | « no previous file | third_party/instrumented_libraries/fix_rpaths.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698