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
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
14 mode
=${1:?"Usage: $0 [oldconfig|editconfig]"}
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
26 confdir
="$kerneldir/${DEBIAN}/config"
29 .
$DEBIAN/etc
/kernelconfig
31 bindir
="`pwd`/${DROOT}/scripts/misc"
32 common_conf
="$confdir/config.common.$family"
34 mkdir
"$tmpdir/CONFIGS"
36 if [ "$mode" = "genconfigs" ]; then
39 test -d CONFIGS || mkdir CONFIGS
42 for arch
in $archs; do
46 # Map debian archs to kernel archs
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" ;;
57 archconfdir
=$confdir/$arch
58 flavourconfigs
=$
(cd $archconfdir && ls config.flavour.
*)
61 # We merge config.common.ubuntu + config.common.<arch> +
62 # config.flavour.<flavour>
64 for config
in $flavourconfigs; do
65 fullconf
="$tmpdir/$arch-$config-full"
69 if [ -f $common_conf ]; then
70 cat $common_conf >> "$fullconf"
72 if [ -f $archconfdir/config.common.
$arch ]; then
73 cat $archconfdir/config.common.
$arch >> "$fullconf"
75 cat "$archconfdir/$config" >>"$fullconf"
76 if [ -f $confdir/OVERRIDES
]; then
77 cat $confdir/OVERRIDES
>> "$fullconf"
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
90 # Interactively edit config parameters
92 echo -n "Do you want to edit config: $arch/$config? [Y/n] "
97 make O
=`pwd`/build ARCH
=$kernarch menuconfig
100 # 'silentoldconfig' prevents
101 # errors for '-' options set
102 # in common config fragments
103 make O
=`pwd`/build ARCH
=$kernarch silentoldconfig
106 echo "Entry not valid"
111 echo "* Run $mode (yes=$yes) on $arch/$config ..."
112 if [ "$yes" -eq 1 ]; then
113 yes "" |
make O
=`pwd`/build ARCH
=$kernarch "$mode"
115 make O
=`pwd`/build ARCH
=$kernarch "$mode"
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
124 echo "!! Config not found $archconfdir/$config..."
128 echo "Running splitconfig.pl for $arch"
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
134 (cd $archconfdir; $bindir/splitconfig.pl config.flavour.
*; mv config.common \
135 config.common.
$arch; cp config.common.
$arch $tmpdir)
140 # Now run splitconfig.pl on all the config.common.<arch> copied to
142 (cd $tmpdir; $bindir/splitconfig.pl
*)
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
154 echo "Running config-check for all configurations ..."
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"
169 if [ "$fail" != 0 ]; then
171 echo "*** ERROR: $fail config-check failures detected"