[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