--- 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) M=$(BACKPORT_DIR) \ - kernelversion | sed 's/^\(\([3-6]\|2\.6\)\.[0-9]\+\).*/\1/;t;d');\ - test "$$kver" != "" || echo "Kernel version parse failed!" ;\ - test "$$kver" != "" ;\ - kvers="$$kvers $$(seq 0 20 | sed 's/^/4./')" ;\ - kvers="$$kvers $$(seq 0 19 | sed 's/^/5./')" ;\ - kvers="$$kvers $$(seq 0 20 | sed 's/^/6./')" ;\ - 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) M=$(BACKPORT_DIR) \ + kernelversion | sed 's/^\(\([3-6]\|2\.6\)\.[0-9]\+\).*/\1/;t;d');\ + test "$$kver" != "" || echo "Kernel version parse failed!" ;\ + test "$$kver" != "" ;\ + kvers="$$kvers $$(seq 0 20 | sed 's/^/4./')" ;\ + kvers="$$kvers $$(seq 0 19 | sed 's/^/5./')" ;\ + kvers="$$kvers $$(seq 0 20 | sed 's/^/6./')" ;\ + 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