uboot: add support for patch files and URLs
authorFrank Hunleth <fhunleth@troodon-software.com>
Sat, 18 Apr 2015 20:27:42 +0000 (16:27 -0400)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 19 Apr 2015 09:06:23 +0000 (11:06 +0200)
The existing u-boot patch option only allowed directories to be
specified. This adds support for URLs using similar code as found
in linux/linux.mk. Local files are also handled now.

This change is useful for Intel Edison support, so that Intel's u-boot
patch can be downloaded rather than stored in the Buildroot source tree.

Signed-off-by: Frank Hunleth <fhunleth@troodon-software.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
boot/uboot/Config.in
boot/uboot/uboot.mk

index 23d9c809986dd84ab1ac6df0f2e84f85680aacfe..87692964708c9dafef8a4e30cce45183a86f7f1b 100644 (file)
@@ -79,6 +79,16 @@ config BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR
 
          Most users may leave this empty
 
+config BR2_TARGET_UBOOT_PATCH
+       string "Custom U-Boot patches"
+       help
+         A space-separated list of patches to apply to U-Boot.
+         Each patch can be described as an URL, a local file path,
+         or a directory. In the case of a directory, all files
+         matching *.patch in the directory will be applied.
+
+         Most users may leave this empty
+
 choice
        prompt "U-Boot binary format"
        default BR2_TARGET_UBOOT_FORMAT_BIN
index 0272d9ee2e8558846bed6f3a17e2f06abcffde87..1526177b395e4a0af7e0b917b98ea0fda4cef2f4 100644 (file)
@@ -89,6 +89,8 @@ endef
 
 UBOOT_POST_EXTRACT_HOOKS += UBOOT_COPY_OLD_LICENSE_FILE
 
+# Prior to Buildroot 2015.05, only patch directories were supported. New
+# configurations use BR2_TARGET_UBOOT_PATCH instead.
 ifneq ($(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR)),)
 define UBOOT_APPLY_CUSTOM_PATCHES
        $(APPLY_PATCHES) $(@D) $(BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR) \*.patch
@@ -97,6 +99,24 @@ endef
 UBOOT_POST_PATCH_HOOKS += UBOOT_APPLY_CUSTOM_PATCHES
 endif
 
+# Analogous code exists in linux/linux.mk. Basically, the generic
+# package infrastructure handles downloading and applying remote
+# patches. Local patches are handled depending on whether they are
+# directories or files.
+UBOOT_PATCHES = $(call qstrip,$(BR2_TARGET_UBOOT_PATCH))
+UBOOT_PATCH = $(filter ftp://% http://% https://%,$(UBOOT_PATCHES))
+
+define UBOOT_APPLY_LOCAL_PATCHES
+       for p in $(filter-out ftp://% http://% https://%,$(UBOOT_PATCHES)) ; do \
+               if test -d $$p ; then \
+                       $(APPLY_PATCHES) $(@D) $$p \*.patch || exit 1 ; \
+               else \
+                       $(APPLY_PATCHES) $(@D) `dirname $$p` `basename $$p` || exit 1; \
+               fi \
+       done
+endef
+UBOOT_POST_PATCH_HOOKS += UBOOT_APPLY_LOCAL_PATCHES
+
 define UBOOT_CONFIGURE_CMDS
        $(TARGET_CONFIGURE_OPTS)        \
                $(MAKE) -C $(@D) $(UBOOT_MAKE_OPTS)             \