From 4c790b8864364568fdf1a14c81276c51f2bffe4e Mon Sep 17 00:00:00 2001 From: Arnout Vandecappelle Date: Tue, 4 Jul 2017 16:03:52 +0200 Subject: Move $(HOST_DIR)/usr/lib to $(HOST_DIR)/lib This is a step towards eliminating $(HOST_DIR)/usr. It allows us to convert all packages installing things into $(HOST_DIR)/usr/lib without affecting the rest. To allow compatibility with packages that still use $(HOST_DIR)/usr as the prefix, create a symlink from usr/lib to ../lib. Note that the symlink creation will break when $(HOST_DIR)/usr/lib already exists as a directory, i.e. when rebuilding in an existing output directory. This is necessary: if we don't break it now, the following commits (which remove the usr part from various variables) _will_ break it. At the same time as creating this symlink, we also have to update the check-host-rpath script to accept both $(HOST_DIR)/usr/lib and $(HOST_DIR)/lib, because depending on how the package derives the path, it may be different. Since there are some dependency chains that involve $(STAGING_DIR), $(STAGING_DIR) may in fact be created before $(HOST_DIR). Since $(STAGING_DIR) is a subdirectory of $(HOST_DIR), it is possible that the newly added rule for $(HOST_DIR) never triggers. To make sure that the rule does trigger, add an order-only dependency from $(STAGING_DIR) to $(HOST_DIR). Signed-off-by: Arnout Vandecappelle (Essensium/Mind) Reviewed-by: Romain Naour Signed-off-by: Thomas Petazzoni --- support/scripts/check-host-rpath | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'support/scripts/check-host-rpath') diff --git a/support/scripts/check-host-rpath b/support/scripts/check-host-rpath index 020c12379f..adabfdf53f 100755 --- a/support/scripts/check-host-rpath +++ b/support/scripts/check-host-rpath @@ -1,7 +1,7 @@ #!/usr/bin/env bash -# This script scans $(HOST_DIR)/{bin,sbin} for all ELF files, and checks -# they have an RPATH to $(HOST_DIR)/usr/lib if they need libraries from +# This script scans $(HOST_DIR)/{,usr/}{bin,sbin} for all ELF files, and checks +# they have an RPATH to $(HOST_DIR)/{,usr/}lib if they need libraries from # there. # Override the user's locale so we are sure we can parse the output of @@ -40,7 +40,7 @@ elf_needs_rpath() { local lib while read lib; do - [ -e "${hostdir}/usr/lib/${lib}" ] && return 0 + [ -e "${hostdir}/lib/${lib}" ] && return 0 done < <( readelf -d "${file}" \ |sed -r -e '/^.* \(NEEDED\) .*Shared library: \[(.+)\]$/!d;' \ -e 's//\1/;' \ @@ -58,6 +58,8 @@ check_elf_has_rpath() { for dir in ${rpath//:/ }; do # Remove duplicate and trailing '/' for proper match dir="$( sed -r -e 's:/+:/:g; s:/$::;' <<<"${dir}" )" + [ "${dir}" = "${hostdir}/lib" -o "${dir}" = "\$ORIGIN/../lib" ] && return 0 + # For the time being, the rpath is allowed with both usr/lib and lib [ "${dir}" = "${hostdir}/usr/lib" -o "${dir}" = "\$ORIGIN/../../usr/lib" ] && return 0 done done < <( readelf -d "${file}" \ -- cgit v1.2.3