#!/bin/bash # Script to merge all configs and run 'make silentoldconfig' on it to wade out bad juju. # Then split the configs into distro-commmon and flavour-specific parts # We have to be in the top level kernel source directory if [ ! -f MAINTAINERS ] || [ ! -f Makefile ]; then echo "This does not appear to be the kernel source directory." 1>&2 exit 1 fi mode=${1:?"Usage: $0 [oldconfig|editconfig]"} case "$mode" in oldconfig) ;; # All is good editconfig) ;; # All is good genconfig) ;; # All is good *) echo "$0 called with invalid mode" 1>&2 exit 1 ;; esac kerneldir="`pwd`" confdir="$kerneldir/chromeos/config" archs="x86_64 i386 armel" family='chromeos' bindir="`pwd`/chromeos/scripts" common_conf="$confdir/config.common.$family" tmpdir=`mktemp -d` if [ "$mode" = "genconfig" ]; then keep=1 mode="oldconfig" test -d CONFIGS || mkdir CONFIGS fi test -d build || mkdir build for arch in $archs; do # Map debian archs to kernel archs case "$arch" in amd64) kernarch="x86_64" ;; lpia) kernarch="x86" ;; sparc) kernarch="sparc64" ;; armel) kernarch="arm" ;; *) kernarch="$arch" ;; esac echo "" echo "***************************************" echo "* Processing $arch ($kernarch) ... " archconfdir=$confdir/$arch flavourconfigs=$(cd $archconfdir && ls config.flavour.*[^~]) # Merge configs # We merge config.common.ubuntu + config.common. + # config.flavour. for config in $flavourconfigs; do fullconf="$tmpdir/$arch-$config-full" case $config in *) : >"$fullconf" if [ -f $common_conf ]; then cat $common_conf >> "$fullconf" fi if [ -f $archconfdir/config.common.$arch ]; then cat $archconfdir/config.common.$arch >> "$fullconf" fi cat "$archconfdir/$config" >>"$fullconf" ;; esac done for config in $flavourconfigs; do if [ -f $archconfdir/$config ]; then fullconf="$tmpdir/$arch-$config-full" cat "$fullconf" > build/.config # Call oldconfig or menuconfig case "$mode" in oldconfig) # Weed out incorrect config parameters echo "* Run silentoldconfig on $arch/$config ..." make O=`pwd`/build ARCH=$kernarch silentoldconfig ;; editconfig) # Interactively edit config parameters echo " * Run menuconfig on $arch/$config... Press a key." read make O=`pwd`/build ARCH=$kernarch menuconfig ;; *) # Bad! exit 1 ;; esac cat build/.config > $archconfdir/$config if [ "$keep" = "1" ]; then cat build/.config > CONFIGS/$arch-$config fi else echo "!! Config not found $archconfdir/$config..." fi done echo "Running splitconfig for $arch" echo # Can we make this more robust by avoiding $tmpdir completely? # This approach was used for now because I didn't want to change # splitconfig (cd $archconfdir; rm config.common.$arch; $bindir/splitconfig; \ mv config.common config.common.$arch; \ cp config.common.$arch $tmpdir) done rm -f $common_conf # Now run splitconfig on all the config.common. copied to # $tmpdir (cd $tmpdir; $bindir/splitconfig) ( cd $confdir; rm -f *-full grep -v 'is UNMERGABLE' <$tmpdir/config.common >$common_conf for arch in $archs; do grep -v 'is UNMERGABLE' <$tmpdir/config.common.$arch \ >$arch/config.common.$arch done )