linux: support a space-separated list of patches
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 5 Dec 2010 20:53:18 +0000 (21:53 +0100)
committerPeter Korsgaard <jacmet@sunsite.dk>
Thu, 16 Dec 2010 21:30:18 +0000 (22:30 +0100)
The kernel being a component that often needs a fairly important set
of changes to be adapted to a particular hardware platform, having
maximum flexibility on the patching process is a nice
thing. Therefore, as per the discussions from the Buildroot Developer
Day, we add a mechanism to apply a list of patches (that could come
either from URLs, local files or local directories).

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
linux/Config.in
linux/linux.mk

index 7b781a422abbabd2a0b7c7aabb4a569c4d77d544..4ded38bb75f05cd51c37c2381c76db661cee45b8 100644 (file)
@@ -70,11 +70,12 @@ config BR2_LINUX_KERNEL_VERSION
 #
 
 config BR2_LINUX_KERNEL_PATCH
-       string "Custom kernel patch"
+       string "Custom kernel patches"
        help
-         The location can be an URL, a file path, or a directory. In
-         the case of a directory, all files matching linux-*.patch
-         will be applied.
+         A space-separated list of patches to apply to the
+         kernel. Each patch can be described as an URL, a local file
+         path, or a directory. In the case of a directory, all files
+         matching linux-*.patch in the directory will be applied.
 
 #
 # Configuration selection
index 639e4cee96bf31530fb8bf18f7fb8ce7d764b0a0..40109acb9bdea1efbb434b549964c0c78c04d512 100644 (file)
@@ -51,9 +51,8 @@ endif
 $(LINUX26_DIR)/.stamp_downloaded:
        @$(call MESSAGE,"Downloading kernel")
        $(call DOWNLOAD,$(LINUX26_SITE),$(LINUX26_SOURCE))
-ifneq ($(filter ftp://% http://%,$(LINUX26_PATCH)),)
-       $(call DOWNLOAD,$(dir $(LINUX26_PATCH)),$(notdir $(LINUX26_PATCH)))
-endif
+       $(foreach patch,$(filter ftp://% http://%,$(LINUX26_PATCH)),\
+               $(call DOWNLOAD,$(dir $(patch)),$(notdir $(patch)))$(sep))
        mkdir -p $(@D)
        touch $@
 
@@ -68,15 +67,15 @@ $(LINUX26_DIR)/.stamp_extracted: $(LINUX26_DIR)/.stamp_downloaded
 # Patch
 $(LINUX26_DIR)/.stamp_patched: $(LINUX26_DIR)/.stamp_extracted
        @$(call MESSAGE,"Patching kernel")
-ifneq ($(LINUX26_PATCH),)
-ifneq ($(filter ftp://% http://%,$(LINUX26_PATCH)),)
-       toolchain/patch-kernel.sh $(@D) $(DL_DIR) $(notdir $(LINUX26_PATCH))
-else ifeq ($(shell test -d $(LINUX26_PATCH) && echo "dir"),dir)
-       toolchain/patch-kernel.sh $(@D) $(LINUX26_PATCH) linux-\*.patch
-else
-       toolchain/patch-kernel.sh $(@D) $(dir $(LINUX26_PATCH)) $(notdir $(LINUX26_PATCH))
-endif
-endif
+       for p in $(LINUX26_PATCH) ; do \
+               if echo $$p | grep -q -E "^ftp://|^http://" ; then \
+                       toolchain/patch-kernel.sh $(@D) $(DL_DIR) `basename $$p` ; \
+               elif test -d $$p ; then \
+                       toolchain/patch-kernel.sh $(@D) $$p linux-\*.patch ; \
+               else \
+                       toolchain/patch-kernel.sh $(@D) `dirname $$p` `basename $$p` ; \
+               fi \
+       done
        $(Q)touch $@