From 930467503af7c4a72750e226e9a15a0e23e2e541 Mon Sep 17 00:00:00 2001 From: He Chunhui Date: Wed, 13 Apr 2016 04:20:32 +0000 Subject: [PATCH] gcc: apply patches stored in global patches directories When building host gcc, patches stored in global patches directories are skipped. This patch fixes the unexpected behavior. Signed-off-by: Chunhui He Reviewed-by: Arnout Vandecappelle (Essensium/Mind) [Thomas: - rename the loop variable from 'D' to 'patchdir' - add some additional comments - remove final ; at end of loop when applying the patches, since it's not needed] Signed-off-by: Thomas Petazzoni --- package/gcc/gcc.mk | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk index a796f473ad..b6a3ac9ad1 100644 --- a/package/gcc/gcc.mk +++ b/package/gcc/gcc.mk @@ -41,10 +41,18 @@ endef endif endif +# gcc is a special package, not named gcc, but gcc-initial and +# gcc-final, but patches are nonetheless stored in package/gcc in the +# tree, and potentially in BR2_GLOBAL_PATCH_DIR directories as well. define HOST_GCC_APPLY_PATCHES - if test -d package/gcc/$(GCC_VERSION); then \ - $(APPLY_PATCHES) $(@D) package/gcc/$(GCC_VERSION) \*.patch ; \ - fi; + for patchdir in \ + package/gcc/$(GCC_VERSION) \ + $(addsuffix /gcc/$(GCC_VERSION),$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \ + $(addsuffix /gcc,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) ; do \ + if test -d $${patchdir}; then \ + $(APPLY_PATCHES) $(@D) $${patchdir} \*.patch || exit 1; \ + fi; \ + done $(HOST_GCC_APPLY_POWERPC_PATCH) endef @@ -233,13 +241,19 @@ HOST_GCC_COMMON_MAKE_OPTS = \ ifeq ($(BR2_CCACHE),y) HOST_GCC_COMMON_CCACHE_HASH_FILES += $(DL_DIR)/$(GCC_SOURCE) -# Cfr. PATCH_BASE_DIRS in .stamp_patched, but we catch both versioned and -# unversioned patches unconditionally + +# Cfr. PATCH_BASE_DIRS in .stamp_patched, but we catch both versioned +# and unversioned patches unconditionally. Moreover, to facilitate the +# addition of gcc patches in BR2_GLOBAL_PATCH_DIR, we allow them to be +# stored in a sub-directory called 'gcc' even if it's not technically +# the name of the package. HOST_GCC_COMMON_CCACHE_HASH_FILES += \ $(sort $(wildcard \ package/gcc/$(GCC_VERSION)/*.patch \ $(addsuffix /$((PKG)_RAWNAME)/$(GCC_VERSION)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \ - $(addsuffix /$((PKG)_RAWNAME)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))))) + $(addsuffix /$((PKG)_RAWNAME)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \ + $(addsuffix /gcc/$(GCC_VERSION)/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))) \ + $(addsuffix /gcc/*.patch,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR))))) ifeq ($(BR2_xtensa),y) HOST_GCC_COMMON_CCACHE_HASH_FILES += $(HOST_GCC_XTENSA_OVERLAY_TAR) endif -- 2.30.2