On 2013-10-16, Qais Yousef <qais.you...@imgtec.com> wrote: >> This seems to work but I would still like to try and find a way to >> generate the .config file I want without having to run menuconfig at >> all. I think what I would really like is something like: > > You'll only have to run menuconfig manually once. > > Once you have a good set of config files it should be easy to > manipulate them to produce other variants you like. I can't see how > you can avoid the first manual menuconfig step personally.
Manipulating .config files programmatically is pretty easy. The shell script I use to build a buildroot-based system doesn't require any use of menuconfig. The one thing you have to remember when manipulating a .config file is that changing a config value often has side effects. For example: when you want to enable and configure a previously disabled subsystem, you have to do it in stages: 1) Enable the subsystem 2) Run "make oldconfig" to make the subsystem's configuration items appear in the .config file with default values. 3) Enable/Disable/Set the subsystem's configuration items. Depending on how the configuration items are defined, you can end up with this process nesting several levels deep. To that end, here are 3 bash functions I use: set -o nounset set -o errexit # low level functions used to manipulate linux kernel-style .config # files. function SyncConfig() { yes '' | $Make oldconfig >/dev/null } # By default, UnsetValue and SetValue will, after modifying the # .config file, do a "make oldconfig" to re-normalize the .config # file. Use the -n option to prevent that. function UnsetValue() { dosync=y test "$1" = '-n' && { dosync=n; shift; } Variable="$1" echo "UnsetValue $Variable" sed -i "s/^${Variable}=.*/# ${Variable} is not set/g" .config test $dosync = y && SyncConfig return 0 } function SetValue() { dosync=y test "$1" = '-n' && { dosync=n; shift; } Variable="$1" # default value is 'y' Value="${2-y}" echo "SetValue $Variable $Value" # if value isn't 'y', then put it in double quotes test "$Value" != y && Value="\"$Value\"" # escape any slashes Value=${Value//\//\\\/} sed -i "s/^${Variable}=.*/${Variable}=${Value}/g" .config sed -i "s/^# ${Variable} is not set.*/${Variable}=${Value}/g" .config test $dosync = y && SyncConfig return 0 } Then you can make function calls like this in a build script: TPath=/path/to/my/toolchain SetValue BR2_TOOLCHAIN_EXTERNAL_PATH "$TPath" -- Grant Edwards grant.b.edwards Yow! Now that I have my at "APPLE", I comprehend COST gmail.com ACCOUNTING!! _______________________________________________ uClibc mailing list uClibc@uclibc.org http://lists.busybox.net/mailman/listinfo/uclibc