package/pkg-download: use _DL_SUBDIR as root dir of generated archives
Currently, when we generate archives, e.g. for git, svn, cargo or go, we use the package _BASENAME_RAW as the root directory of the generated archive. For example, for package foo at version 1.2.3, that would generate an archive rooted at foo-1.2.3/. This is usually what we want, except in one specific condition: when the package shares its download with another package *and* it is a generated archive. In that case, the root directory will be different for each of the two packages, which is incorrect, but was so far benign: we never had any hash for such generated archives, and they were only generated in two cases: - linux and linux-headers - barebox and barebox-aux As we skip one directory depth when extracting the archives, we did not care what the root directory was; whether it was that of one package or the other was of no consequence. But now that we can have hashes for archives generated from custom versions, this breaks the usual case where the headers used for the toolchains are those of the kernel to build for the target. In this case, we may end up downloading the linux-headers package before we download the linux package, so we'd get the hash for an archive rooted at linux-headers-XXX/, but the one for the linux package the archive would be rooted at linux-XXX/, or we may end up (e.g. with parallel builds) downloading the linux package first and linux-headers next. That would cause conflicts in hashes, as demonstrated by the only defconfig we have in that situation, olimex_stmp157_olinuxino_lime_defconfig. _BASENAME_RAW is a construct that is expanded to include the RAWNAME followed by a dash and the version, if there is a version, or with just the RAWNAME when there is no version. We tweak the download macro to use _DL_SUBDIR followed by the version. This is only used by VCS backends (cvs, git, svn...) and so there will always be a version string, so no need to duplicate the case without a version like is done for _BASENAME_RAW _DL_SUBDIR defaults to _RAWNAME, so this is a noop by default, unless the package declares it shares its download with another one, in which case the generated archive will now be rooted as for the shared package. This was triggered by: https://patchwork.ozlabs.org/project/buildroot/patch/20240602070634.597337-1-francois.perrad@gadz.org/ Reported-by: Peter Korsgaard <peter@korsgaard.com> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr> Cc: Francois Perrad <francois.perrad@gadz.org> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
parent
f3b2f0f985
commit
ebe238f2b5
@ -117,7 +117,7 @@ define DOWNLOAD
|
||||
-D '$(DL_DIR)' \
|
||||
-f '$(notdir $(1))' \
|
||||
$(foreach f,$($(2)_HASH_FILES),-H '$(f)') \
|
||||
-n '$($(2)_BASENAME_RAW)' \
|
||||
-n '$($(2)_DL_SUBDIR)-$($(2)_VERSION)' \
|
||||
-N '$($(2)_RAWNAME)' \
|
||||
-o '$($(2)_DL_DIR)/$(notdir $(1))' \
|
||||
$(if $(filter YES,$($(2)_SVN_EXTERNALS)),-r) \
|
||||
|
Loading…
Reference in New Issue
Block a user