From: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v3 02/14] Move $(HOST_DIR)/usr/lib to $(HOST_DIR)/lib
Date: Tue, 4 Jul 2017 16:03:52 +0200 [thread overview]
Message-ID: <20170704140404.4098-3-arnout@mind.be> (raw)
In-Reply-To: <20170704140404.4098-1-arnout@mind.be>
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 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) <arnout@mind.be>
---
v2: rebase on modifications of check-host-rpath with $ORIGIN.
---
Makefile | 10 +++++++---
support/scripts/check-host-rpath | 8 +++++---
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index a0f9f62771..ac349a79e8 100644
--- a/Makefile
+++ b/Makefile
@@ -237,7 +237,7 @@ LEGAL_REPORT = $(LEGAL_INFO_DIR)/README
# dependencies anywhere else
#
################################################################################
-$(BUILD_DIR) $(TARGET_DIR) $(HOST_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST):
+$(BUILD_DIR) $(TARGET_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST):
@mkdir -p $@
BR2_CONFIG = $(CONFIG_DIR)/.config
@@ -552,11 +552,15 @@ prepare: $(BUILD_DIR)/buildroot-config/auto.conf
.PHONY: world
world: target-post-image
+# When creating HOST_DIR, also symlink usr/lib -> ../lib
+$(HOST_DIR):
+ @mkdir -p $@/usr $@/lib
+ @ln -snf ../lib $@/usr/lib
+
# Populating the staging with the base directories is handled by the skeleton package
-$(STAGING_DIR):
+$(STAGING_DIR): | $(HOST_DIR)
@mkdir -p $(STAGING_DIR)
@ln -snf $(STAGING_DIR) $(BASE_DIR)/staging
- @mkdir -p $(HOST_DIR)/usr
@ln -snf ../$(GNU_TARGET_NAME) $(HOST_DIR)/usr/$(GNU_TARGET_NAME)
RSYNC_VCS_EXCLUSIONS = \
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}" \
--
2.13.2
next prev parent reply other threads:[~2017-07-04 14:03 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-04 14:03 [Buildroot] [PATCH v3 00/14] Remove /usr component from HOST_DIR Arnout Vandecappelle
2017-07-04 14:03 ` [Buildroot] [PATCH v3 01/14] Move $(HOST_DIR)/usr/$(GNU_TARGET_NAME) one level up Arnout Vandecappelle
2017-07-04 14:52 ` Romain Naour
2017-07-04 14:03 ` Arnout Vandecappelle [this message]
2017-07-04 14:55 ` [Buildroot] [PATCH v3 02/14] Move $(HOST_DIR)/usr/lib to $(HOST_DIR)/lib Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 03/14] Eliminate $(HOST_DIR)/usr Arnout Vandecappelle
2017-07-04 15:01 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 04/14] check-host-rpath: no longer check $(HOST_DIR)/usr/{bin, sbin} Arnout Vandecappelle
2017-07-04 15:02 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 05/14] Makefile: remove $(HOST_DIR)/usr from BR_PATH Arnout Vandecappelle
2017-07-04 15:03 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 06/14] package/Makefile.in: remove $(HOST_DIR)/usr part from HOST_LDFLAGS Arnout Vandecappelle
2017-07-04 15:04 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 07/14] gdb: Remove /usr part from installation path of gdbserver Arnout Vandecappelle
2017-07-04 15:08 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 08/14] gcc-final: things are no longer installed in $(HOST_DIR)/usr Arnout Vandecappelle
2017-07-04 15:12 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 09/14] pkg-autotools: use $(HOST_DIR) instead of $(HOST_DIR)/usr as prefix Arnout Vandecappelle
2017-07-04 15:12 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 10/14] pkg-cmake: " Arnout Vandecappelle
2017-07-04 15:13 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 11/14] pkg-cmake: move configuration files out of $(HOST_DIR)/usr Arnout Vandecappelle
2017-07-04 15:14 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 12/14] pkg-cmake: programs are now installed in $(HOST_DIR)/bin Arnout Vandecappelle
2017-07-04 15:15 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 13/14] pkg-python: use $(HOST_DIR) instead of $(HOST_DIR)/usr as prefix Arnout Vandecappelle
2017-07-04 15:16 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 14/14] pkg-rebar: " Arnout Vandecappelle
2017-07-04 15:19 ` Romain Naour
2017-07-05 9:57 ` [Buildroot] [PATCH v3 00/14] Remove /usr component from HOST_DIR Thomas Petazzoni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170704140404.4098-3-arnout@mind.be \
--to=arnout@mind.be \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox