[LEDE-DEV] [RFCv2 2/3] include: properly update .install stamp files

Jo-Philipp Wich jo at mein.io
Tue Oct 25 02:52:30 PDT 2016

Right now the $(PKG_INSTALL_STAMP) files are only written if a package is
selected as <*> but never deleted or emptied if the corresponding package
is getting deselected.

For ordinary packages this usually is no problem as the package/install
recipe performs its own check for enabled packages when assembling the
list of install stamp files to consider, but this logic might fail under
certain circumstances for packages providing multiple build variants.

In case of a multi-variant package, the buildroot first checks if any
of the variants is enabled, then resolves all variants of the common
source package and finally processes the corresponding .install stamp
files of all variants, relying on the assumption that only the selected
.install stamp file exists.

When an initially selected variant is getting deselected or changed from
<*> to <m> and another variant is marked as <*> instead, the .install
stamp file of the deselected variant remains unchanged and a second
.install stamp file for the newly selected variant is getting created,
causing the package/install recipe to pick up two .install stamps with
conflicting variants, leading to opkg file clashes.

This issue happens for example if package "ip" is set to <m> and package
"ip-full" to <*> -  the install command will eventually fail with:

     * check_conflicts_for: The following packages conflict with ip:
     * check_conflicts_for: 	ip-full *
     * opkg_install_cmd: Cannot install package ip.

In order to fix the problem, always update the .install stamp files,
even for deselected packages but only write the package base name into
stamp files whose corresponding package is marked as builtin.

Signed-off-by: Jo-Philipp Wich <jo at mein.io>
 include/package-ipkg.mk | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk
index 2591f5e..5b080f5 100644
--- a/include/package-ipkg.mk
+++ b/include/package-ipkg.mk
@@ -103,21 +103,23 @@ ifeq ($(DUMP),)
         ifneq ($(ABI_VERSION),)
         compile: $(PKG_INFO_DIR)/$(1).version
-        ifeq ($(CONFIG_PACKAGE_$(1)),y)
-          .PHONY: $(PKG_INSTALL_STAMP).$(1)
-          compile: $(PKG_INSTALL_STAMP).$(1)
-          $(PKG_INSTALL_STAMP).$(1):
-			if [ -f $(PKG_INSTALL_STAMP).clean ]; then \
-				rm -f \
-					$(PKG_INSTALL_STAMP).clean; \
-			fi; \
-			echo "$(1)" >> $(PKG_INSTALL_STAMP)
-        endif
         $(if $(CONFIG_PACKAGE_$(1)),$$(info WARNING: skipping $(1) -- package not selected))
+      .PHONY: $(PKG_INSTALL_STAMP).$(1)
+      compile: $(PKG_INSTALL_STAMP).$(1)
+      $(PKG_INSTALL_STAMP).$(1):
+		if [ -f $(PKG_INSTALL_STAMP).clean ]; then \
+			rm -f \
+				$(PKG_INSTALL_STAMP).clean; \
+		fi
+      ifeq ($(CONFIG_PACKAGE_$(1)),y)
+		echo "$(1)" >> $(PKG_INSTALL_STAMP)
+      else
+		echo "" >> $(PKG_INSTALL_STAMP)
+      endif

More information about the Lede-dev mailing list