diff options
-rw-r--r-- | package/pkg-autotools.mk | 19 | ||||
-rw-r--r-- | package/pkg-generic.mk | 9 |
2 files changed, 23 insertions, 5 deletions
diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk index e27ec1f0d..852731427 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@. +# ifndef $(2)_INSTALL_STAGING_CMDS define $(2)_INSTALL_STAGING_CMDS $$(TARGET_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) $$($$(PKG)_INSTALL_STAGING_OPT) -C $$($$(PKG)_SRCDIR) 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; \ done endef endif diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk index 78fe1346c..54193d25a 100644 --- a/package/pkg-generic.mk +++ b/package/pkg-generic.mk @@ -201,9 +201,12 @@ $(BUILD_DIR)/%/.stamp_staging_installed: $(foreach hook,$($(PKG)_POST_INSTALL_STAGING_HOOKS),$(call $(hook))$(sep)) $(Q)if test -n "$($(PKG)_CONFIG_SCRIPTS)" ; then \ $(call MESSAGE,"Fixing package configuration files") ;\ - $(SED) "s,^\(exec_\)\?prefix=.*,\1prefix=$(STAGING_DIR)/usr,g" \ - -e "s,-I/usr/,-I$(STAGING_DIR)/usr/,g" \ - -e "s,-L/usr/,-L$(STAGING_DIR)/usr/,g" \ + $(SED) "s,$(BASE_DIR),@BASE_DIR@,g" \ + -e "s,^\(exec_\)\?prefix=.*,\1prefix=@STAGING_DIR@/usr,g" \ + -e "s,-I/usr/,-I@STAGING_DIR@/usr/,g" \ + -e "s,-L/usr/,-L@STAGING_DIR@/usr/,g" \ + -e "s,@STAGING_DIR@,$(STAGING_DIR),g" \ + -e "s,@BASE_DIR@,$(BASE_DIR),g" \ $(addprefix $(STAGING_DIR)/usr/bin/,$($(PKG)_CONFIG_SCRIPTS)) ;\ fi $(Q)touch $@ |