UBUNTU: Add armhf to Debian -> Linux arch map
[linux-flexiantxendom0-natty.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 sharedconfdir="$kerneldir/debian.master/config"
28 variant="$2"
29
30 . $DEBIAN/etc/kernelconfig
31
32 bindir="`pwd`/${DROOT}/scripts/misc"
33 common_conf="$confdir/config.common.$family"
34 tmpdir=`mktemp -d`
35 mkdir "$tmpdir/CONFIGS"
36
37 if [ "$mode" = "genconfigs" ]; then
38         keep=1
39         mode="oldconfig"
40         test -d CONFIGS || mkdir CONFIGS
41 fi
42
43 for arch in $archs; do
44         rm -rf build
45         mkdir build
46
47         # Map debian archs to kernel archs
48         case "$arch" in
49                 ppc64)          kernarch="powerpc"      ;;
50                 amd64)          kernarch="x86_64"       ;;
51                 lpia)           kernarch="x86"          ;;
52                 sparc)          kernarch="sparc64"      ;;
53                 armel|armhf)    kernarch="arm"          ;;
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                                                 break ;;
101                                         *)
102                                                 echo "Entry not valid"
103                                         esac
104                                 done
105                                 ;;
106                             *)
107                                 echo "* Run $mode (yes=$yes) on $arch/$config ..."
108                                 if [ "$yes" -eq 1 ]; then
109                                         yes "" | make O=`pwd`/build ARCH=$kernarch "$mode"
110                                 else
111                                         make O=`pwd`/build ARCH=$kernarch "$mode"
112                                 fi ;;
113                         esac
114                         cat build/.config > $archconfdir/$config
115                         cat build/.config > "$tmpdir/CONFIGS/$arch-$config"
116                         if [ "$keep" = "1" ]; then
117                                 cat build/.config > CONFIGS/$arch-$config
118                         fi
119                 else
120                         echo "!! Config not found $archconfdir/$config..."
121                 fi
122         done
123
124         echo "Running splitconfig.pl for $arch"
125         echo
126
127         # Can we make this more robust by avoiding $tmpdir completely?
128         # This approach was used for now because I didn't want to change
129         # splitconfig.pl
130         (cd $archconfdir; $bindir/splitconfig.pl; mv config.common \
131          config.common.$arch; cp config.common.$arch $tmpdir)
132 done
133
134 rm -f $common_conf
135
136 # Now run splitconfig.pl on all the config.common.<arch> copied to
137 # $tmpdir
138 (cd $tmpdir; $bindir/splitconfig.pl)
139 (
140         cd $confdir;
141         rm -f *-full
142         grep -v 'is UNMERGABLE' <$tmpdir/config.common >$common_conf
143         for arch in $archs; do
144                 grep -v 'is UNMERGABLE' <$tmpdir/config.common.$arch \
145                         >$arch/config.common.$arch
146         done
147 )
148
149 echo ""
150 echo "Running config-check for all configurations ..."
151 echo ""
152 fail=0
153 for arch in $archs; do
154         archconfdir=$confdir/$arch
155         flavourconfigs=$(cd $archconfdir && ls config.flavour.*)
156         for config in $flavourconfigs; do
157                 flavour="${config##*.}"
158                 if [ -f $archconfdir/$config ]; then
159                         fullconf="$tmpdir/CONFIGS/$arch-$config"
160                         "$bindir/../config-check" "$fullconf" "$arch" "$flavour" "$sharedconfdir" "0" || let "fail=$fail+1"
161                 fi
162         done
163 done
164
165 if [ "$fail" != 0 ]; then
166         echo ""
167         echo "*** ERROR: $fail config-check failures detected"
168         echo ""
169 fi
170
171 rm -rf build
172