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

Amit Kucheria amit.kucheria at canonical.com
Thu Jun 11 16:28:58 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>

This patch fixes both editconfigs and updateconfigs.
Get rid of debian/scripts/misc/doconfig since it basically differs from
oldconfig in only one line: make menuconfig vs. make silentoldconfig

Signed-off-by: Amit Kucheria <amit.kucheria at canonical.com>
---
 debian/rules.d/1-maintainer.mk     |   12 +---
 debian/scripts/misc/doconfig       |   66 -----------------
 debian/scripts/misc/oldconfig      |  140 ++++++++++++++++++++++++------------
 debian/scripts/misc/splitconfig.pl |    2 +-
 4 files changed, 97 insertions(+), 123 deletions(-)
 delete mode 100755 debian/scripts/misc/doconfig

diff --git a/debian/rules.d/1-maintainer.mk b/debian/rules.d/1-maintainer.mk
index bf795cb..889bd12 100644
--- a/debian/rules.d/1-maintainer.mk
+++ b/debian/rules.d/1-maintainer.mk
@@ -30,20 +30,14 @@ help:
 	@echo "                  : Use -jX for kernel compile"
 	@echo "  PRINTSHAS       : Include SHAs for commits in changelog"
 
-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 oldconfig
 	rm -rf build
 
 editconfigs:
 	dh_testdir
-	@for arch in $(ARCH_CONFIGS); do	\
-		$(SHELL) debian/scripts/misc/doconfig $$arch;		\
-	done
+	$(SHELL) debian/scripts/misc/oldconfig editconfig
 	rm -rf build
 
 printenv:
diff --git a/debian/scripts/misc/doconfig b/debian/scripts/misc/doconfig
deleted file mode 100755
index 2809834..0000000
--- a/debian/scripts/misc/doconfig
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/bin/bash
-
-# 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"
-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
-
-test -d build || mkdir build
-cd build
-for config in $configs; do
-
-	cat $confdir/$config > .config
-
-	echo About to configure $arch $config
-	read 
-	make -C ../ O=`pwd` ARCH=$kernarch menuconfig
-
-	cat .config > $confdir/$config
-done
-cd ..
-
-echo "Running splitconfig.pl ... "
-echo
-
-(cd $confdir ; $bindir/splitconfig.pl)
diff --git a/debian/scripts/misc/oldconfig b/debian/scripts/misc/oldconfig
index a8d26c8..68237fe 100755
--- a/debian/scripts/misc/oldconfig
+++ b/debian/scripts/misc/oldconfig
@@ -1,65 +1,111 @@
 #!/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"	;;
+mode=${1:?"Usage: $0 [oldconfig|editconfig]"}
+case "$mode" in
+    oldconfig)  ;; # All is good
+    editconfig) ;; # All is good
+    *) echo "$0 called with invalid mode" 1>&2
+       exit 1 ;;
 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 "***************************************"
+	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>
+	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
+
+	for config in $flavourconfigs; do
+		if [ -f $archconfdir/$config ]; then
+			cat $archconfdir/$config > 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
+		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