[PATCH 3/4] UBUNTU: [Config] Splitconfig rework

Amit Kucheria amit.kucheria at canonical.com
Tue Jun 9 07:38:24 UTC 2009


We now split the kernel configuration into 3 parts instead of 2 -
Ubuntu-wide common config, Arch-wide common and flavour-specific config.

The new config naming scheme works like this:

debian/
  `--config/
       `-- config.common.ubuntu (Options common across all archs)
       |-- i386
       |    `-- config.common.i386
       |    |-- config.flavour.flavour1
       |    |-- config.flavour.flavour2
       |    `-- config.flavour.flavourN
       |-- <archX>
       |-- <archY>
       |-- <archZ>

So you need to combine three configs to get the final config -
config.common.ubuntu + config.common.<arch> + config.flavour.<flavour>

Signed-off-by: Amit Kucheria <amit.kucheria at canonical.com>
---
 debian/rules.d/1-maintainer.mk     |    6 +-
 debian/scripts/misc/oldconfig      |  125 ++++++++++++++++++++++--------------
 debian/scripts/misc/splitconfig.pl |    2 +-
 3 files changed, 80 insertions(+), 53 deletions(-)

diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
index bf795cb..ecfe2a8 100644
--- a/debian/rules.d/1-maintainer.mk
+++ b/debian/rules.d/1-maintainer.mk
@@ -33,10 +33,8 @@ help:
 ARCH_CONFIGS=i386 amd64 armel lpia
 
 updateconfigs:
-	dh_testdir
-	@for arch in $(ARCH_CONFIGS); do	\
-		$(SHELL) debian/scripts/misc/oldconfig $$arch;		\
-	done
+	dh_testdir;
+	$(SHELL) debian/scripts/misc/oldconfig
 	rm -rf build
 
 editconfigs:
diff --git a/debian/scripts/misc/oldconfig b/debian/scripts/misc/oldconfig
index a8d26c8..da947fd 100755
--- a/debian/scripts/misc/oldconfig
+++ b/debian/scripts/misc/oldconfig
@@ -1,65 +1,94 @@
 #!/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
 
-
-# One arg, and that's it. Just pass an architecture
-if [ $# -ne 1 ]; then
-	echo "Usage: $0 <arch>" 1>&2
-	exit 1
-fi
-
-arch="$1"
-
-case "$arch" in
-	amd64)	kernarch="x86_64"	;;
-	armel)	kernarch="arm"		;;
-	lpia)	kernarch="i386"		;;
-	*)	kernarch="$arch"	;;
-esac
-
-confdir="`pwd`/debian/config/$arch"
+kerneldir="`pwd`"
+confdir="debian/config"
+archs=$(find $confdir -mindepth 1 -type d | cut -d'/' -f3)
 bindir="`pwd`/debian/scripts/misc"
-
-# Make sure the architecture exists
-if [ ! -d $confdir ]; then
-	echo "Could not find config directory for $arch" 1>&2
-	exit 1
-fi
-
-echo "Processing $arch ($kernarch) ... "
-
-configs=$(cd $confdir && ls config.*)
-
-if [ -f $confdir/config ]; then
-	for config in $configs; do
-		case $config in
-			*)
-				cat $confdir/config >> $confdir/$config
-				;;
-		esac
-	done
-	rm -f $confdir/config
-fi
+common_conf="$confdir/config.common.ubuntu"
+tmpdir=`mktemp -d`
 
 test -d build || mkdir build
-cd build
-for config in $configs; do
-	echo "Running silentoldconfig for $config ... "
 
-	cat $confdir/$config > .config
+for arch in $archs; do
+	# Map debian archs to kernel archs
+	case "$arch" in
+		amd64)	kernarch="x86_64"	;;
+		armel)	kernarch="arm"	;;
+		lpia)   kernarch="x86" ;;
+		*)	kernarch="$arch"	;;
+	esac
+
+	echo "**************"
+	echo "* Processing $arch ($kernarch) ... "
+	echo "**************"
+	archconfdir=$confdir/$arch
+	flavourconfigs=$(cd $archconfdir && ls config.flavour.*)
+
+	# Merge configs
+	# We merge config.common.ubuntu + config.common.<arch> +
+	# config.flavour.<flavour>
+	if [ -f $common_conf ]; then
+		for config in $flavourconfigs; do
+			case $config in
+			    *)
+			    cat $common_conf >> $archconfdir/$config
+			    ;;
+			esac
+		done
+	fi
+	if [ -f $archconfdir/config.common.$arch ]; then
+		for config in $flavourconfigs; do
+			case $config in
+			    *)
+			    cat $archconfdir/config.common.$arch >> $archconfdir/$config
+			    ;;
+			esac
+		done
+	fi
+
+	rm -f $archconfdir/config.common.$arch
+
+	# Weed out incorrect config parameters
+	for config in $flavourconfigs; do
+		echo "* Running silentoldconfig for $config ..."
+
+		if [ -f $archconfdir/$config ]; then
+			cat $archconfdir/$config > build/.config
+			make O=`pwd`/build ARCH=$kernarch silentoldconfig
+			cat build/.config > $archconfdir/$config
+		else
+			echo "!! Config not found $archconfdir/$config..."
+		fi
+	done
 
-	make -C ../ O=`pwd` silentoldconfig ARCH=$kernarch
+	echo "Running splitconfig.pl for $arch"
+	echo
 
-	cat .config > $confdir/$config
+	# Can we make this more robust by avoiding $tmpdir completely?
+	# This approach was used for now because I didn't want to change
+	# splitconfig.pl
+	(cd $archconfdir; $bindir/splitconfig.pl; mv config.common \
+	 config.common.$arch; cp config.common.$arch $tmpdir)
 done
-cd ..
 
-echo "Running splitconfig.pl ... "
-echo
+rm -f $common_conf
+
+# Now run splitconfig.pl on all the config.common.<arch> copied to
+# $tmpdir
+(cd $tmpdir; $bindir/splitconfig.pl)
+(cd $kerneldir/$confdir; mv $tmpdir/config.common \
+	$kerneldir/$confdir/config.common.ubuntu; \
+for arch in $archs; do \
+	mv $tmpdir/config.common.$arch $arch/config.common.$arch; \
+done; \
+)
 
-(cd $confdir ; $bindir/splitconfig.pl)
diff --git a/debian/scripts/misc/splitconfig.pl b/debian/scripts/misc/splitconfig.pl
index 44025ba..8c189dc 100755
--- a/debian/scripts/misc/splitconfig.pl
+++ b/debian/scripts/misc/splitconfig.pl
@@ -68,7 +68,7 @@ print "\n";
 
 print "Creating common config ... ";
 
-open(COMMON, "> config");
+open(COMMON, "> config.common");
 print COMMON "#\n# Common config options automatically generated by splitconfig.pl\n#\n";
 
 for $key (sort(keys(%common))) {
-- 
1.6.3.1





More information about the kernel-team mailing list