blob: 8f63d36e2e860e2a2e89bf07e89e0ec47fe23728 [file] [log] [blame]
developer6a1998b2022-12-08 18:09:45 +08001--- a/Makefile
2+++ b/Makefile
3@@ -5,7 +5,7 @@
4 ifeq ($(KERNELRELEASE),)
5
6 MAKEFLAGS += --no-print-directory
7-SHELL := /bin/bash
8+SHELL := /usr/bin/env bash
9 BACKPORT_DIR := $(shell pwd)
10
11 KMODDIR ?= updates
12@@ -19,6 +19,7 @@ KLIB_BUILD ?= $(KLIB)/build/
13 KERNEL_CONFIG := $(KLIB_BUILD)/.config
14 KERNEL_MAKEFILE := $(KLIB_BUILD)/Makefile
15 CONFIG_MD5 := $(shell md5sum $(KERNEL_CONFIG) 2>/dev/null | sed 's/\s.*//')
16+STAMP_KERNEL_CONFIG := .kernel_config_md5_$(CONFIG_MD5)
17
18 export KLIB KLIB_BUILD BACKPORT_DIR KMODDIR KMODPATH_ARG
19
20@@ -36,7 +37,8 @@ mrproper:
21 @rm -f .kernel_config_md5 Kconfig.versions Kconfig.kernel
22 @rm -f backport-include/backport/autoconf.h
23
24-.DEFAULT:
25+.SILENT: $(STAMP_KERNEL_CONFIG)
26+$(STAMP_KERNEL_CONFIG):
27 @set -e ; test -f local-symbols || ( \
28 echo "/--------------" ;\
29 echo "| You shouldn't run make in the backports tree, but only in" ;\
30@@ -60,58 +62,62 @@ mrproper:
31 echo "| (that isn't currently running.)" ;\
32 echo "\\--" ;\
33 false)
34- @set -e ; if [ "$$(cat .kernel_config_md5 2>/dev/null)" != "$(CONFIG_MD5)" ] ;\
35- then \
36- echo -n "Generating local configuration database from kernel ..." ;\
37- grep -v -f local-symbols $(KERNEL_CONFIG) | grep = | ( \
38- while read l ; do \
39- if [ "$${l:0:7}" != "CONFIG_" ] ; then \
40- continue ;\
41- fi ;\
42- l=$${l:7} ;\
43- n=$${l%%=*} ;\
44- v=$${l#*=} ;\
45- if [ "$$v" = "m" ] ; then \
46- echo config $$n ;\
47- echo ' tristate' ;\
48- elif [ "$$v" = "y" ] ; then \
49- echo config $$n ;\
50- echo ' bool' ;\
51- else \
52- continue ;\
53- fi ;\
54- echo " default $$v" ;\
55- echo "" ;\
56- done \
57- ) > Kconfig.kernel ;\
58- kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) M=$(BACKPORT_DIR) \
59- kernelversion | sed 's/^\(\([3-5]\|2\.6\)\.[0-9]\+\).*/\1/;t;d');\
60- test "$$kver" != "" || echo "Kernel version parse failed!" ;\
61- test "$$kver" != "" ;\
62- kvers="$$(seq 14 39 | sed 's/^/2.6./')" ;\
63- kvers="$$kvers $$(seq 0 19 | sed 's/^/3./')" ;\
64- kvers="$$kvers $$(seq 0 20 | sed 's/^/4./')" ;\
65- kvers="$$kvers $$(seq 0 99 | sed 's/^/5./')" ;\
66- print=0 ;\
67- for v in $$kvers ; do \
68- if [ "$$print" = "1" ] ; then \
69- echo config KERNEL_$$(echo $$v | tr . _) ;\
70- echo " def_bool y" ;\
71- fi ;\
72- if [ "$$v" = "$$kver" ] ; then print=1 ; fi ;\
73- done > Kconfig.versions ;\
74- # RHEL as well, sadly we need to grep for it ;\
75- RHEL_MAJOR=$$(grep '^RHEL_MAJOR' $(KERNEL_MAKEFILE) | \
76- sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\
77- RHEL_MINOR=$$(grep '^RHEL_MINOR' $(KERNEL_MAKEFILE) | \
78- sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\
79- for v in $$(seq 0 $$RHEL_MINOR) ; do \
80- echo config BACKPORT_RHEL_KERNEL_$${RHEL_MAJOR}_$$v ;\
81- echo " def_bool y" ;\
82- done >> Kconfig.versions ;\
83- echo " done." ;\
84- fi ;\
85- echo "$(CONFIG_MD5)" > .kernel_config_md5
86+ @rm -f .kernel_config_md5_*
87+ @touch $@
88+
89+Kconfig.kernel: $(STAMP_KERNEL_CONFIG) local-symbols
90+ @printf "Generating local configuration database from kernel ..."
91+ @grep -v -f local-symbols $(KERNEL_CONFIG) | grep = | ( \
92+ while read l ; do \
93+ if [ "$${l:0:7}" != "CONFIG_" ] ; then \
94+ continue ;\
95+ fi ;\
96+ l=$${l:7} ;\
97+ n=$${l%%=*} ;\
98+ v=$${l#*=} ;\
99+ if [ "$$v" = "m" ] ; then \
100+ echo config $$n ;\
101+ echo ' tristate' ;\
102+ elif [ "$$v" = "y" ] ; then \
103+ echo config $$n ;\
104+ echo ' bool' ;\
105+ else \
106+ continue ;\
107+ fi ;\
108+ echo " default $$v" ;\
109+ echo "" ;\
110+ done \
111+ ) > $@
112+ @echo " done."
113+
114+Kconfig.versions: Kconfig.kernel
115+ @kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) M=$(BACKPORT_DIR) \
116+ kernelversion | sed 's/^\(\([3-5]\|2\.6\)\.[0-9]\+\).*/\1/;t;d');\
117+ test "$$kver" != "" || echo "Kernel version parse failed!" ;\
118+ test "$$kver" != "" ;\
119+ kvers="$$(seq 14 39 | sed 's/^/2.6./')" ;\
120+ kvers="$$kvers $$(seq 0 19 | sed 's/^/3./')" ;\
121+ kvers="$$kvers $$(seq 0 20 | sed 's/^/4./')" ;\
122+ kvers="$$kvers $$(seq 0 99 | sed 's/^/5./')" ;\
123+ print=0 ;\
124+ for v in $$kvers ; do \
125+ if [ "$$print" = "1" ] ; then \
126+ echo config KERNEL_$$(echo $$v | tr . _) ;\
127+ echo " def_bool y" ;\
128+ fi ;\
129+ if [ "$$v" = "$$kver" ] ; then print=1 ; fi ;\
130+ done > $@
131+ @RHEL_MAJOR=$$(grep '^RHEL_MAJOR' $(KERNEL_MAKEFILE) | \
132+ sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\
133+ RHEL_MINOR=$$(grep '^RHEL_MINOR' $(KERNEL_MAKEFILE) | \
134+ sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\
135+ for v in $$(seq 0 $$RHEL_MINOR) ; do \
136+ echo config BACKPORT_RHEL_KERNEL_$${RHEL_MAJOR}_$$v ;\
137+ echo " def_bool y" ;\
138+ done >> $@
139+
140+.DEFAULT:
141+ @$(MAKE) Kconfig.versions
142 @$(MAKE) -f Makefile.real "$@"
143
144 .PHONY: defconfig-help
145--- a/Makefile.real
146+++ b/Makefile.real
147@@ -59,7 +59,7 @@ defconfig-%::
148
149 backport-include/backport/autoconf.h: .config Kconfig.versions Kconfig.kernel
150 @$(MAKE) oldconfig
151- @echo -n "Building backport-include/backport/autoconf.h ..."
152+ @printf "Building backport-include/backport/autoconf.h ..."
153 @grep -f local-symbols .config | ( \
154 echo "#ifndef COMPAT_AUTOCONF_INCLUDED" ;\
155 echo "#define COMPAT_AUTOCONF_INCLUDED" ;\
156@@ -80,7 +80,12 @@ backport-include/backport/autoconf.h: .c
157 esac ;\
158 done ;\
159 echo "#endif /* COMPAT_AUTOCONF_INCLUDED */" ;\
160- ) > backport-include/backport/autoconf.h
161+ ) > $@.new
162+ @if cmp -s $@ $@.new; then \
163+ rm -f $@.new; \
164+ else \
165+ mv $@.new $@; \
166+ fi
167 @echo " done."
168
169 .PHONY: modules