OpenWrt – Rev 4

Subversion Repositories:
Rev:
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@
 ifeq ($(KERNELRELEASE),)
 
 MAKEFLAGS += --no-print-directory
-SHELL := /bin/bash
+SHELL := /usr/bin/env bash
 BACKPORT_DIR := $(shell pwd)
 
 KMODDIR ?= updates
@@ -19,6 +19,7 @@ KLIB_BUILD ?= $(KLIB)/build/
 KERNEL_CONFIG := $(KLIB_BUILD)/.config
 KERNEL_MAKEFILE := $(KLIB_BUILD)/Makefile
 CONFIG_MD5 := $(shell md5sum $(KERNEL_CONFIG) 2>/dev/null | sed 's/\s.*//')
+STAMP_KERNEL_CONFIG := .kernel_config_md5_$(CONFIG_MD5)
 
 export KLIB KLIB_BUILD BACKPORT_DIR KMODDIR KMODPATH_ARG
 
@@ -36,7 +37,8 @@ mrproper:
        @rm -f .kernel_config_md5 Kconfig.versions Kconfig.kernel
        @rm -f backport-include/backport/autoconf.h
 
-.DEFAULT:
+.SILENT: $(STAMP_KERNEL_CONFIG)
+$(STAMP_KERNEL_CONFIG):
        @set -e ; test -f local-symbols || (                                            \
        echo "/--------------"                                                          ;\
        echo "| You shouldn't run make in the backports tree, but only in"              ;\
@@ -60,57 +62,61 @@ mrproper:
        echo "| (that isn't currently running.)"                                        ;\
        echo "\\--"                                                                     ;\
        false)
-       @set -e ; if [ "$$(cat .kernel_config_md5 2>/dev/null)" != "$(CONFIG_MD5)" ]    ;\
-       then                                                                            \
-               echo -n "Generating local configuration database from kernel ..."       ;\
-               grep -v -f local-symbols $(KERNEL_CONFIG) | grep = | (                  \
-                       while read l ; do                                               \
-                               if [ "$${l:0:7}" != "CONFIG_" ] ; then                  \
-                                       continue                                        ;\
-                               fi                                                      ;\
-                               l=$${l:7}                                               ;\
-                               n=$${l%%=*}                                             ;\
-                               v=$${l#*=}                                              ;\
-                               if [ "$$v" = "m" ] ; then                               \
-                                       echo config $$n                                 ;\
-                                       echo '    tristate'                             ;\
-                               elif [ "$$v" = "y" ] ; then                             \
-                                       echo config $$n                                 ;\
-                                       echo '    bool'                                 ;\
-                               else                                                    \
-                                       continue                                        ;\
-                               fi                                                      ;\
-                               echo "    default $$v"                                  ;\
-                               echo ""                                                 ;\
-                       done                                                            \
-               ) > Kconfig.kernel                                                      ;\
-               kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) kernelversion |   \
-                       sed 's/^\(\([3-4]\|2\.6\)\.[0-9]\+\).*/\1/;t;d')                ;\
-               test "$$kver" != "" || echo "Kernel version parse failed!"              ;\
-               test "$$kver" != ""                                                     ;\
-               kvers="$$(seq 14 39 | sed 's/^/2.6./')"                                 ;\
-               kvers="$$kvers $$(seq 0 19 | sed 's/^/3./')"                            ;\
-               kvers="$$kvers $$(seq 0 99 | sed 's/^/4./')"                            ;\
-               print=0                                                                 ;\
-               for v in $$kvers ; do                                                   \
-                       if [ "$$print" = "1" ] ; then                                   \
-                               echo config KERNEL_$$(echo $$v | tr . _)        ;\
-                               echo "    def_bool y"                                   ;\
-                       fi                                                              ;\
-                       if [ "$$v" = "$$kver" ] ; then print=1 ; fi                     ;\
-               done > Kconfig.versions                                                 ;\
-               # RHEL as well, sadly we need to grep for it                            ;\
-               RHEL_MAJOR=$$(grep '^RHEL_MAJOR' $(KERNEL_MAKEFILE) |                   \
-                                       sed 's/.*=\s*\([0-9]*\)/\1/;t;d')               ;\
-               RHEL_MINOR=$$(grep '^RHEL_MINOR' $(KERNEL_MAKEFILE) |                   \
-                                       sed 's/.*=\s*\([0-9]*\)/\1/;t;d')               ;\
-               for v in $$(seq 0 $$RHEL_MINOR) ; do                                    \
-                       echo config BACKPORT_RHEL_KERNEL_$${RHEL_MAJOR}_$$v             ;\
-                       echo "    def_bool y"                                           ;\
-               done >> Kconfig.versions                                                ;\
-               echo " done."                                                           ;\
-       fi                                                                              ;\
-       echo "$(CONFIG_MD5)" > .kernel_config_md5
+       @rm -f .kernel_config_md5_*
+       @touch $@
+
+Kconfig.kernel: $(STAMP_KERNEL_CONFIG) local-symbols
+       @printf "Generating local configuration database from kernel ..."
+       @grep -v -f local-symbols $(KERNEL_CONFIG) | grep = | (                 \
+               while read l ; do                                               \
+                       if [ "$${l:0:7}" != "CONFIG_" ] ; then                  \
+                               continue                                        ;\
+                       fi                                                      ;\
+                       l=$${l:7}                                               ;\
+                       n=$${l%%=*}                                             ;\
+                       v=$${l#*=}                                              ;\
+                       if [ "$$v" = "m" ] ; then                               \
+                               echo config $$n                                 ;\
+                               echo '    tristate'                             ;\
+                       elif [ "$$v" = "y" ] ; then                             \
+                               echo config $$n                                 ;\
+                               echo '    bool'                                 ;\
+                       else                                                    \
+                               continue                                        ;\
+                       fi                                                      ;\
+                       echo "    default $$v"                                  ;\
+                       echo ""                                                 ;\
+               done                                                            \
+       ) > $@
+       @echo " done."
+
+Kconfig.versions: Kconfig.kernel
+       @kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) kernelversion |  \
+               sed 's/^\(\([3-4]\|2\.6\)\.[0-9]\+\).*/\1/;t;d')                ;\
+       test "$$kver" != "" || echo "Kernel version parse failed!"              ;\
+       test "$$kver" != ""                                                     ;\
+       kvers="$$(seq 14 39 | sed 's/^/2.6./')"                                 ;\
+       kvers="$$kvers $$(seq 0 19 | sed 's/^/3./')"                            ;\
+       kvers="$$kvers $$(seq 0 99 | sed 's/^/4./')"                            ;\
+       print=0                                                                 ;\
+       for v in $$kvers ; do                                                   \
+               if [ "$$print" = "1" ] ; then                                   \
+                       echo config KERNEL_$$(echo $$v | tr . _)        ;\
+                       echo "    def_bool y"                                   ;\
+               fi                                                              ;\
+               if [ "$$v" = "$$kver" ] ; then print=1 ; fi                     ;\
+       done > $@
+       @RHEL_MAJOR=$$(grep '^RHEL_MAJOR' $(KERNEL_MAKEFILE) |                  \
+                               sed 's/.*=\s*\([0-9]*\)/\1/;t;d')               ;\
+       RHEL_MINOR=$$(grep '^RHEL_MINOR' $(KERNEL_MAKEFILE) |                   \
+                               sed 's/.*=\s*\([0-9]*\)/\1/;t;d')               ;\
+       for v in $$(seq 0 $$RHEL_MINOR) ; do                                    \
+               echo config BACKPORT_RHEL_KERNEL_$${RHEL_MAJOR}_$$v             ;\
+               echo "    def_bool y"                                           ;\
+       done >> $@
+
+.DEFAULT:
+       @$(MAKE) Kconfig.versions
        @$(MAKE) -f Makefile.real "$@"
 
 .PHONY: defconfig-help
--- a/Makefile.real
+++ b/Makefile.real
@@ -59,7 +59,7 @@ defconfig-%::
 
 backport-include/backport/autoconf.h: .config Kconfig.versions Kconfig.kernel
        @$(MAKE) oldconfig
-       @echo -n "Building backport-include/backport/autoconf.h ..."
+       @printf "Building backport-include/backport/autoconf.h ..."
        @grep -f local-symbols .config | (                              \
                echo "#ifndef COMPAT_AUTOCONF_INCLUDED"                 ;\
                echo "#define COMPAT_AUTOCONF_INCLUDED"                 ;\
@@ -80,7 +80,12 @@ backport-include/backport/autoconf.h: .c
                        esac                                            ;\
                done                                                    ;\
                echo "#endif /* COMPAT_AUTOCONF_INCLUDED */"            ;\
-       ) > backport-include/backport/autoconf.h
+       ) > $@.new
+       @if cmp -s $@ $@.new; then \
+               rm -f $@.new; \
+       else \
+               mv $@.new $@; \
+       fi
        @echo " done."
 
 .PHONY: modules