[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