|  | #!/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.<arch> + | 
|  | # config.flavour.<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.<arch> 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 | 
|  | ) |