aboutsummaryrefslogtreecommitdiffstats
path: root/include/download.mk
diff options
context:
space:
mode:
authorEneas U de Queiroz <cotequeiroz@gmail.com>2021-08-19 18:14:22 -0300
committerFelix Fietkau <nbd@nbd.name>2021-11-01 20:18:55 +0100
commit8cf4d4df5560f6771f74c3124870e8a23094aff3 (patch)
tree571f2ef10dc6defc6680684be130cfe84386748a /include/download.mk
parent9ae5f09dc8718d51f8dad1f0e59032ee48d2e2e4 (diff)
downloadupstream-8cf4d4df5560f6771f74c3124870e8a23094aff3.tar.gz
upstream-8cf4d4df5560f6771f74c3124870e8a23094aff3.tar.bz2
upstream-8cf4d4df5560f6771f74c3124870e8a23094aff3.zip
download: improve handling of invalid local files
4e19cbc5533: [download: handle possibly invalid local tarballs] added a FORCE rule to downloaded files, so that they will be always checked by download.pl. As a side-effect, check-compile will fail, forcing unnecessary package rebuilds. The check-compile.txt log shows (for libxml2 for example): Considering target file '.../dl/libxml2-2.9.12.tar.gz'. ... prerequisite 'FORCE' of target '.../dl/libxml2-2.9.12.tar.gz' does not exist. Must remake target '.../dl/libxml2-2.9.12.tar.gz'. ... Giving up on target file '...libxml2-2.9.12/.prepared_...'. Giving up on target file '...libxml2-2.9.12/.configured_...'. Giving up on target file '...libxml2-2.9.12/.built'. Giving up on target file '...stamp/.libxml2_installed'. Giving up on target file '.compile'. Then the package is rebuilt even if it is not otherwise needed. To fix this, instead of always forcing the download target to be remade, check its hash first: if it matches, then the FORCE is not added. Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
Diffstat (limited to 'include/download.mk')
-rw-r--r--include/download.mk17
1 files changed, 15 insertions, 2 deletions
diff --git a/include/download.mk b/include/download.mk
index 609956b004..76bd374cf7 100644
--- a/include/download.mk
+++ b/include/download.mk
@@ -59,6 +59,21 @@ define dl_tar_pack
$$$${TAR_TIMESTAMP:+--mtime="$$$$TAR_TIMESTAMP"} -c $(2) | $(call dl_pack,$(1))
endef
+gen_sha256sum = $(shell $(MKHASH) sha256 $(DL_DIR)/$(1))
+
+# Used in Build/CoreTargets and HostBuild/Core as an integrity check for
+# downloaded files. It will add a FORCE rule if the sha256 hash does not
+# match, so that the download can be more thoroughly handled by download.pl.
+define check_download_integrity
+ expected_hash:=$(strip $(if $(filter-out x,$(HASH)),$(HASH),$(MIRROR_HASH)))
+ $$(if $$(and $(FILE),$$(wildcard $(DL_DIR)/$(FILE)), \
+ $$(filter undefined,$$(flavor DownloadChecked/$(FILE)))), \
+ $$(eval DownloadChecked/$(FILE):=1) \
+ $$(if $$(filter-out $$(call gen_sha256sum,$(FILE)),$$(expected_hash)), \
+ $(DL_DIR)/$(FILE): FORCE) \
+ )
+endef
+
ifdef CHECK
check_escape=$(subst ','\'',$(1))
#')
@@ -74,8 +89,6 @@ else
check_warn = $(if $(filter-out undefined,$(origin F_$(1))),$(filter ,$(shell $(call F_$(1),$(2),$(3),$(4)) >&2)),$(check_warn_nofix))
endif
-gen_sha256sum = $(shell $(MKHASH) sha256 $(DL_DIR)/$(1))
-
ifdef FIXUP
F_hash_deprecated = $(SCRIPT_DIR)/fixup-makefile.pl $(CURDIR)/Makefile fix-hash $(3) $(call gen_sha256sum,$(1)) $(2)
F_hash_mismatch = $(F_hash_deprecated)