SELinux: add .gitignore files for dynamic classes
[safe/jmp/linux-2.6] / scripts / config
index db6084b..608d7fd 100755 (executable)
@@ -9,8 +9,10 @@ config options command ...
 commands:
        --enable|-e option   Enable option
        --disable|-d option  Disable option
 commands:
        --enable|-e option   Enable option
        --disable|-d option  Disable option
-       --module|-m option      Turn option into a module
-       --state|-s option       Print state of option (n,y,m,undef)
+       --module|-m option   Turn option into a module
+       --set-str option value
+                            Set option to "value"
+       --state|-s option    Print state of option (n,y,m,undef)
 
        --enable-after|-E beforeopt option
                              Enable option directly after other option
 
        --enable-after|-E beforeopt option
                              Enable option directly after other option
@@ -26,8 +28,6 @@ options:
 
 config doesn't check the validity of the .config file. This is done at next
  make time.
 
 config doesn't check the validity of the .config file. This is done at next
  make time.
-The options need to be already in the file before they can be changed,
-but sometimes you can cheat with the --*-after options.
 EOL
        exit 1
 }
 EOL
        exit 1
 }
@@ -45,8 +45,18 @@ checkarg() {
        ARG="`echo $ARG | tr a-z A-Z`"
 }
 
        ARG="`echo $ARG | tr a-z A-Z`"
 }
 
-replace() {
-       sed -i -e "$@" $FN
+set_var() {
+       local name=$1 new=$2 before=$3
+
+       name_re="^($name=|# $name is not set)"
+       before_re="^($before=|# $before is not set)"
+       if test -n "$before" && grep -Eq "$before_re" "$FN"; then
+               sed -ri "/$before_re/a $new" "$FN"
+       elif grep -Eq "$name_re" "$FN"; then
+               sed -ri "s:$name_re.*:$new:" "$FN"
+       else
+               echo "$new" >>"$FN"
+       fi
 }
 
 if [ "$1" = "--file" ]; then
 }
 
 if [ "$1" = "--file" ]; then
@@ -54,8 +64,7 @@ if [ "$1" = "--file" ]; then
        if [ "$FN" = "" ] ; then
                usage
        fi
        if [ "$FN" = "" ] ; then
                usage
        fi
-       shift
-       shift
+       shift 2
 else
        FN=.config
 fi
 else
        FN=.config
 fi
@@ -68,27 +77,39 @@ while [ "$1" != "" ] ; do
        CMD="$1"
        shift
        case "$CMD" in
        CMD="$1"
        shift
        case "$CMD" in
-       --enable|-e)
+       --refresh)
+               ;;
+       --*-after)
+               checkarg "$1"
+               A=$ARG
+               checkarg "$2"
+               B=$ARG
+               shift 2
+               ;;
+       --*)
                checkarg "$1"
                checkarg "$1"
-               replace "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/"
                shift
                ;;
                shift
                ;;
+       esac
+       case "$CMD" in
+       --enable|-e)
+               set_var "CONFIG_$ARG" "CONFIG_$ARG=y"
+               ;;
 
        --disable|-d)
 
        --disable|-d)
-               checkarg "$1"
-               replace "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/"
-               shift
+               set_var "CONFIG_$ARG" "# CONFIG_$ARG is not set"
                ;;
 
        --module|-m)
                ;;
 
        --module|-m)
-               checkarg "$1"
-               replace "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \
-                       -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/"
+               set_var "CONFIG_$ARG" "CONFIG_$ARG=m"
+               ;;
+
+       --set-str)
+               set_var "CONFIG_$ARG" "CONFIG_$ARG=\"$1\""
                shift
                ;;
 
        --state|-s)
                shift
                ;;
 
        --state|-s)
-               checkarg "$1"
                if grep -q "# CONFIG_$ARG is not set" $FN ; then
                        echo n
                else
                if grep -q "# CONFIG_$ARG is not set" $FN ; then
                        echo n
                else
@@ -101,44 +122,18 @@ while [ "$1" != "" ] ; do
                                echo "$V"
                        fi
                fi
                                echo "$V"
                        fi
                fi
-               shift
                ;;
 
        --enable-after|-E)
                ;;
 
        --enable-after|-E)
-               checkarg "$1"
-               A=$ARG
-               checkarg "$2"
-               B=$ARG
-               replace "/CONFIG_$A=[my]/aCONFIG_$B=y" \
-                       -e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=y" \
-                       -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/"
-               shift
-               shift
+               set_var "CONFIG_$B" "CONFIG_$B=y" "CONFIG_$A"
                ;;
 
        --disable-after|-D)
                ;;
 
        --disable-after|-D)
-               checkarg "$1"
-               A=$ARG
-               checkarg "$2"
-               B=$ARG
-               replace "/CONFIG_$A=[my]/a# CONFIG_$B is not set" \
-               -e "/# CONFIG_$ARG is not set/a/# CONFIG_$ARG is not set" \
-               -e "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/"
-               shift
-               shift
+               set_var "CONFIG_$B" "# CONFIG_$B is not set" "CONFIG_$A"
                ;;
 
        --module-after|-M)
                ;;
 
        --module-after|-M)
-               checkarg "$1"
-               A=$ARG
-               checkarg "$2"
-               B=$ARG
-               replace "/CONFIG_$A=[my]/aCONFIG_$B=m" \
-                       -e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=m" \
-                       -e "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \
-                       -e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/"
-               shift
-               shift
+               set_var "CONFIG_$B" "CONFIG_$B=m" "CONFIG_$A"
                ;;
 
        # undocumented because it ignores --file (fixme)
                ;;
 
        # undocumented because it ignores --file (fixme)