]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - debian/scripts/misc/kernelconfig
UBUNTU: Ubuntu-4.14.0-11.13
[mirror_ubuntu-bionic-kernel.git] / debian / scripts / misc / kernelconfig
1 #!/bin/bash
2
3 . debian/debian.env
4
5 # Script to merge all configs and run 'make silentoldconfig' on it to wade out bad juju.
6 # Then split the configs into distro-commmon and flavour-specific parts
7
8 # We have to be in the top level kernel source directory
9 if [ ! -f MAINTAINERS ] || [ ! -f Makefile ]; then
10 echo "This does not appear to be the kernel source directory." 1>&2
11 exit 1
12 fi
13
14 mode=${1:?"Usage: $0 [oldconfig|editconfig]"}
15 yes=0
16 case "$mode" in
17 update*configs) mode='silentoldconfig' ;;
18 default*configs) mode='oldconfig'; yes=1 ;;
19 edit*configs) ;; # All is good
20 gen*configs) mode='genconfigs' ;; # All is good
21 dump*configs) mode='config'; yes=1 ;;
22 *) echo "$0 called with invalid mode" 1>&2
23 exit 1 ;;
24 esac
25 kerneldir="`pwd`"
26 confdir="$kerneldir/${DEBIAN}/config"
27 variant="$2"
28
29 . $DEBIAN/etc/kernelconfig
30
31 bindir="`pwd`/${DROOT}/scripts/misc"
32 common_conf="$confdir/config.common.$family"
33 tmpdir=`mktemp -d`
34 mkdir "$tmpdir/CONFIGS"
35
36 if [ "$mode" = "genconfigs" ]; then
37 keep=1
38 mode="oldconfig"
39 test -d CONFIGS || mkdir CONFIGS
40 fi
41
42 for arch in $archs; do
43 rm -rf build
44 mkdir build
45
46 # Map debian archs to kernel archs
47 case "$arch" in
48 ppc64|ppc64el) kernarch="powerpc" ;;
49 amd64) kernarch="x86_64" ;;
50 lpia) kernarch="x86" ;;
51 sparc) kernarch="sparc64" ;;
52 armel|armhf) kernarch="arm" ;;
53 s390x) kernarch="s390" ;;
54 *) kernarch="$arch" ;;
55 esac
56
57 archconfdir=$confdir/$arch
58 flavourconfigs=$(cd $archconfdir && ls config.flavour.*)
59
60 # Merge configs
61 # We merge config.common.ubuntu + config.common.<arch> +
62 # config.flavour.<flavour>
63
64 for config in $flavourconfigs; do
65 fullconf="$tmpdir/$arch-$config-full"
66 case $config in
67 *)
68 : >"$fullconf"
69 if [ -f $common_conf ]; then
70 cat $common_conf >> "$fullconf"
71 fi
72 if [ -f $archconfdir/config.common.$arch ]; then
73 cat $archconfdir/config.common.$arch >> "$fullconf"
74 fi
75 cat "$archconfdir/$config" >>"$fullconf"
76 if [ -f $confdir/OVERRIDES ]; then
77 cat $confdir/OVERRIDES >> "$fullconf"
78 fi
79 ;;
80 esac
81 done
82
83 for config in $flavourconfigs; do
84 if [ -f $archconfdir/$config ]; then
85 fullconf="$tmpdir/$arch-$config-full"
86 cat "$fullconf" > build/.config
87 # Call oldconfig or menuconfig
88 case "$mode" in
89 editconfigs)
90 # Interactively edit config parameters
91 while : ; do
92 echo -n "Do you want to edit config: $arch/$config? [Y/n] "
93 read choice
94
95 case "$choice" in
96 y* | Y* | "" )
97 make O=`pwd`/build ARCH=$kernarch menuconfig
98 break ;;
99 n* | N* )
100 # 'silentoldconfig' prevents
101 # errors for '-' options set
102 # in common config fragments
103 make O=`pwd`/build ARCH=$kernarch silentoldconfig
104 break ;;
105 *)
106 echo "Entry not valid"
107 esac
108 done
109 ;;
110 *)
111 echo "* Run $mode (yes=$yes) on $arch/$config ..."
112 if [ "$yes" -eq 1 ]; then
113 yes "" | make O=`pwd`/build ARCH=$kernarch "$mode"
114 else
115 make O=`pwd`/build ARCH=$kernarch "$mode"
116 fi ;;
117 esac
118 cat build/.config > $archconfdir/$config
119 cat build/.config > "$tmpdir/CONFIGS/$arch-$config"
120 if [ "$keep" = "1" ]; then
121 cat build/.config > CONFIGS/$arch-$config
122 fi
123 else
124 echo "!! Config not found $archconfdir/$config..."
125 fi
126 done
127
128 echo "Running splitconfig.pl for $arch"
129 echo
130
131 # Can we make this more robust by avoiding $tmpdir completely?
132 # This approach was used for now because I didn't want to change
133 # splitconfig.pl
134 (cd $archconfdir; $bindir/splitconfig.pl config.flavour.*; mv config.common \
135 config.common.$arch; cp config.common.$arch $tmpdir)
136 done
137
138 rm -f $common_conf
139
140 # Now run splitconfig.pl on all the config.common.<arch> copied to
141 # $tmpdir
142 (cd $tmpdir; $bindir/splitconfig.pl *)
143 (
144 cd $confdir;
145 rm -f *-full
146 grep -v 'is UNMERGABLE' <$tmpdir/config.common >$common_conf
147 for arch in $archs; do
148 grep -v 'is UNMERGABLE' <$tmpdir/config.common.$arch \
149 >$arch/config.common.$arch
150 done
151 )
152
153 echo ""
154 echo "Running config-check for all configurations ..."
155 echo ""
156 fail=0
157 for arch in $archs; do
158 archconfdir=$confdir/$arch
159 flavourconfigs=$(cd $archconfdir && ls config.flavour.*)
160 for config in $flavourconfigs; do
161 flavour="${config##*.}"
162 if [ -f $archconfdir/$config ]; then
163 fullconf="$tmpdir/CONFIGS/$arch-$config"
164 "$bindir/../config-check" "$fullconf" "$arch" "$flavour" "$confdir" "0" || let "fail=$fail+1"
165 fi
166 done
167 done
168
169 if [ "$fail" != 0 ]; then
170 echo ""
171 echo "*** ERROR: $fail config-check failures detected"
172 echo ""
173 fi
174
175 rm -rf build
176