#!/bin/bash #Copyright 2003 William Stearns #Released under the GPL #Many thanks to all the Netfilter team for their great work. #Version 0.1 if [ -z "$1" ]; then echo 'Usage:' echo -e "\t$0 pompatch1.patch [pompatch2.patch]..." echo echo This converts the associated .config.in and echo .configure.help files over to pom patches for echo the 2.6 kernel\'s Kconfig files. The results echo may need a bit of manual tweaking. echo Assume this program will wipe out and replace any echo .patch.Kconfig files in the current directory. echo Exiting. exit 1 fi debug () { : #echo "$*" >&2 } DropFirstLine () { read ALine while read ALine ; do echo "$ALine" done } ParseCILine () { #echo Y${*}Y #The first object on the line is the option type. case "$1" in dep_tristate) Type="tristate" ;; tristate) Type="tristate" ;; bool) Type="bool" ;; *) echo "Unknown config.in line type: X${1}X" #echo Exiting #exit 1 ;; esac shift #Now, we keep grabbing words until we get to CONFIG_ or $CONFIG_ #(which are the option names and dependencies) DescString='' OptionName='' Depends='' while [ -n "$1" ]; do case "$1" in CONFIG_*|\$CONFIG_*) if [ -z "$OptionName" ]; then OptionName="`echo $1 | sed -e 's/^CONFIG_//' -e 's/^$CONFIG_//'`" else if [ -z "$Depends" ]; then Depends="`echo $1 | sed -e 's/^CONFIG_//' -e 's/^$CONFIG_//'`" else Depends="$Depends && `echo $1 | sed -e 's/^CONFIG_//' -e 's/^$CONFIG_//'`" fi fi ;; *) DescString="$DescString $1" ;; esac shift done #echo -e "Type $Type\tOptionName $OptionName\tDepends $Depends\tDesc $DescString" echo "config $OptionName" echo -e "\t$Type $DescString" if [ -n "$Depends" ]; then echo -e "\tdepends on $Depends" fi } for OnePatch in $* ; do if [ -f "$OnePatch.config.in" ]; then debug "$OnePatch has config.in, good" rm -f $OnePatch.Kconfig #Patch-o-matic likes to look for an existing line in a #file, and places the new stuff after that line. The #line that's least likely to move and screw up future #patches is the dependency line for #IP{,v6}: Netfilter Configuration #Feel free to chance this if you need to place the #new modules lower. case "$OnePatch" in *.patch.ipv6) TopLine=" depends on INET && IPV6!=n && NETFILTER" ;; *.patch) TopLine=" depends on INET && NETFILTER" ;; *) echo "Umm, what type of file is $OnePatch ? Exiting" exit 1 ;; esac echo "$TopLine" >>$OnePatch.Kconfig #Not sure if an additional blank line is correct or not for pom. echo >>$OnePatch.Kconfig #Grab each of the tristate/bool lines from the 2.4 .config.in #files and convert them over to Kconfig blocks. for OneCI in $OnePatch.config.in* ; do if [ "`cat $OneCI | DropFirstLine | egrep '(^\W*if|^\W*fi|^\W*define_tristate|^\W*else|^\W*#)' | wc -l`" -gt 0 ]; then echo "Warning: $OneCI has other lines, please merge these by hand" >&2 cat $OneCI | DropFirstLine | egrep '(^\W*if|^\W*fi|^\W*define_tristate|^\W*else|^\W*#)' | sed -e 's/^/ /' >&2 fi cat $OneCI | \ DropFirstLine | \ grep -v '^\W*if ' | \ grep -v '^\W*fi' | \ grep -v '^\W*define_tristate' | \ grep -v '^\W*else' | \ sed -e 's/#.*//' | \ grep -v '^\W*$' | \ ( while read ALine ; do ParseCILine $ALine done ) >>$OnePatch.Kconfig done #If help text is available, append it to the Kconfig block. if [ -f "$OnePatch.configure.help" ]; then debug has configure.help, good echo -e "\thelp" >>$OnePatch.Kconfig cat "$OnePatch.configure.help" | DropFirstLine | sed -e 's/^/ /' >>$OnePatch.Kconfig else debug "$OnePatch has no configure.help, no problem" fi echo >>$OnePatch.Kconfig echo >>$OnePatch.Kconfig else if [ -f "$OnePatch.configure.help" ]; then echo "$OnePatch has no config.in, but it has a configure.help. What do I do? Skipping" >&2 else debug "$OnePatch has no config.in or configure.help, skipping" fi fi done