diff --git a/Makefile b/Makefile index 4038a9e3fd..4449c1bfbf 100644 --- a/Makefile +++ b/Makefile @@ -807,6 +807,16 @@ endif # merged /usr touch $(TARGET_DIR)/usr +# AFTER ALL FILE-CHANGING ACTIONS: +# Update timestamps in internal file list to fix attribution of files +# to packages on subsequent builds + $(call step_pkg_size_file_list,$(TARGET_DIR)) + $(call step_pkg_size_finalize) + $(call step_pkg_size_file_list,$(STAGING_DIR),-staging) + $(call step_pkg_size_finalize,-staging) + $(call step_pkg_size_file_list,$(HOST_DIR),-host) + $(call step_pkg_size_finalize,-host) + .PHONY: target-post-image target-post-image: $(TARGETS_ROOTFS) target-finalize staging-finalize @rm -f $(ROOTFS_COMMON_TAR) diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk index 1ac7f7877e..8ba1747d07 100644 --- a/package/pkg-generic.mk +++ b/package/pkg-generic.mk @@ -57,6 +57,23 @@ GLOBAL_INSTRUMENTATION_HOOKS += step_time # Hooks to collect statistics about installed files +# Helper function to create the file list -- also used from target-finalize +# $(1): base directory to search in +# $(2): suffix of file (optional) +define step_pkg_size_file_list + cd $(1); \ + LC_ALL=C find . \( -type f -o -type l \) -printf '%T@:%i:%#m:%y:%s,%p\n' \ + | LC_ALL=C sort > $(BUILD_DIR)/.files-list$(2).new +endef + +# Helper function to mark the latest file list as the reference for next +# iteration -- also used from target-finalize +# $(1): suffix of file (optional) +define step_pkg_size_finalize + mv $(BUILD_DIR)/.files-list$(1).new \ + $(BUILD_DIR)/.files-list$(1).stat +endef + # The suffix is typically empty for the target variant, for legacy backward # compatibility. # $(1): package name @@ -66,9 +83,7 @@ define step_pkg_size_inner @touch $(BUILD_DIR)/.files-list$(3).stat @touch $(BUILD_DIR)/packages-file-list$(3).txt $(SED) '/^$(1),/d' $(BUILD_DIR)/packages-file-list$(3).txt - cd $(2); \ - LC_ALL=C find . \( -type f -o -type l \) -printf '%T@:%i:%#m:%y:%s,%p\n' \ - | LC_ALL=C sort > $(BUILD_DIR)/.files-list$(3).new + $(call step_pkg_size_file_list,$(2),$(3)) LC_ALL=C comm -13 \ $(BUILD_DIR)/.files-list$(3).stat \ $(BUILD_DIR)/.files-list$(3).new \ @@ -76,8 +91,7 @@ define step_pkg_size_inner sed -r -e 's/^[^,]+/$(1)/' \ $($(PKG)_BUILDDIR)/.files-list$(3).txt \ >> $(BUILD_DIR)/packages-file-list$(3).txt - mv $(BUILD_DIR)/.files-list$(3).new \ - $(BUILD_DIR)/.files-list$(3).stat + $(call step_pkg_size_finalize,$(3)) endef define step_pkg_size