path: root/package/pkg-autotools.mk
diff options
authorGravatar Thomas De Schampheleire <patrickdepinguin@gmail.com>2014-06-21 17:01:47 +0200
committerGravatar Thomas Petazzoni <thomas.petazzoni@free-electrons.com>2014-06-29 12:38:17 +0200
commit7701fc53d19be7cab8bddba72046a39e8421fd9e (patch)
tree2208fec6c1f239d47bd3c09d2c1182be213ed37d /package/pkg-autotools.mk
parent2bdc3d6113dd87108dd0d73e3f2689c001fba13f (diff)
infra: support buildroot being located in /usr
pkg-generic and pkg-autotools both perform sed replacements of /usr to $(STAGING_DIR)/usr, in .pc and .la files respectively. However, if buildroot itself is located in /usr, then STAGING_DIR also starts with /usr, and naive replacements of '/usr' can result in paths of the form: /usr/buildroot/.../sysroot/usr/buildroot/.../sysroot/... This patch makes the replacements more careful, by first replacing the known paths BASE_DIR and STAGING_DIR to tokens, then performing the actual replacement, and finally replacing the tokens with the corresponding paths. Additionally it removes the unnecessary making of a backup copy in pkg-autotools. Partially fixes bug #5750 (https://bugs.busybox.net/show_bug.cgi?id=5750) [Thomas: improve pkg-autotools.mk by including the explanation comment proposed by Arnout.] Partially-based-on-a-patch-from: Ben Stoltz <benstoltz@gmail.com> Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com> Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Diffstat (limited to 'package/pkg-autotools.mk')
1 files changed, 17 insertions, 2 deletions
diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk
index e27ec1f0df..8527314276 100644
--- a/package/pkg-autotools.mk
+++ b/package/pkg-autotools.mk
@@ -264,12 +264,27 @@ endif
# Staging installation step. Only define it if not already defined by
# the package .mk file.
+# Most autotools packages install libtool .la files alongside any
+# installed libraries. These .la files sometimes refer to paths
+# relative to the sysroot, which libtool will interpret as absolute
+# paths to host libraries instead of the target libraries. Since we
+# configure with --prefix=/usr, such absolute paths start with
+# /usr. So we add $(STAGING_DIR) in front of any path that starts with
+# /usr.
+# To protect against the case that the output directory itself is
+# under /usr, we first substitute away any occurences of the output
+# directory to @BASE_DIR@.
for i in $$$$(find $$(STAGING_DIR)/usr/lib* -name "*.la"); do \
- cp -f $$$$i $$$$i~; \
- $$(SED) "s:\(['= ]\)/usr:\\1$$(STAGING_DIR)/usr:g" $$$$i; \
+ $$(SED) "s:$$(BASE_DIR):@BASE_DIR@:g" \
+ -e "s:\(['= ]\)/usr:\\1@STAGING_DIR@/usr:g" \
+ -e "s:@STAGING_DIR@:$$(STAGING_DIR):g" \
+ -e "s:@BASE_DIR@:$$(BASE_DIR):g" \
+ $$$$i; \