The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/scripts/config

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #!/bin/bash
    2 # Manipulate options in a .config file from the command line
    3 
    4 # If no prefix forced, use the default CONFIG_
    5 CONFIG_="${CONFIG_-CONFIG_}"
    6 
    7 usage() {
    8         cat >&2 <<EOL
    9 Manipulate options in a .config file from the command line.
   10 Usage:
   11 config options command ...
   12 commands:
   13         --enable|-e option   Enable option
   14         --disable|-d option  Disable option
   15         --module|-m option   Turn option into a module
   16         --set-str option string
   17                              Set option to "string"
   18         --set-val option value
   19                              Set option to value
   20         --undefine|-u option Undefine option
   21         --state|-s option    Print state of option (n,y,m,undef)
   22 
   23         --enable-after|-E beforeopt option
   24                              Enable option directly after other option
   25         --disable-after|-D beforeopt option
   26                              Disable option directly after other option
   27         --module-after|-M beforeopt option
   28                              Turn option into module directly after other option
   29 
   30         commands can be repeated multiple times
   31 
   32 options:
   33         --file config-file   .config file to change (default .config)
   34         --keep-case|-k       Keep next symbols' case (dont' upper-case it)
   35 
   36 config doesn't check the validity of the .config file. This is done at next
   37 make time.
   38 
   39 By default, config will upper-case the given symbol. Use --keep-case to keep
   40 the case of all following symbols unchanged.
   41 
   42 config uses 'CONFIG_' as the default symbol prefix. Set the environment
   43 variable CONFIG_ to the prefix to use. Eg.: CONFIG_="FOO_" config ...
   44 EOL
   45         exit 1
   46 }
   47 
   48 checkarg() {
   49         ARG="$1"
   50         if [ "$ARG" = "" ] ; then
   51                 usage
   52         fi
   53         case "$ARG" in
   54         ${CONFIG_}*)
   55                 ARG="${ARG/${CONFIG_}/}"
   56                 ;;
   57         esac
   58         if [ "$MUNGE_CASE" = "yes" ] ; then
   59                 ARG="`echo $ARG | tr a-z A-Z`"
   60         fi
   61 }
   62 
   63 set_var() {
   64         local name=$1 new=$2 before=$3
   65 
   66         name_re="^($name=|# $name is not set)"
   67         before_re="^($before=|# $before is not set)"
   68         if test -n "$before" && grep -Eq "$before_re" "$FN"; then
   69                 sed -ri "/$before_re/a $new" "$FN"
   70         elif grep -Eq "$name_re" "$FN"; then
   71                 sed -ri "s:$name_re.*:$new:" "$FN"
   72         else
   73                 echo "$new" >>"$FN"
   74         fi
   75 }
   76 
   77 undef_var() {
   78         local name=$1
   79 
   80         sed -ri "/^($name=|# $name is not set)/d" "$FN"
   81 }
   82 
   83 if [ "$1" = "--file" ]; then
   84         FN="$2"
   85         if [ "$FN" = "" ] ; then
   86                 usage
   87         fi
   88         shift 2
   89 else
   90         FN=.config
   91 fi
   92 
   93 if [ "$1" = "" ] ; then
   94         usage
   95 fi
   96 
   97 MUNGE_CASE=yes
   98 while [ "$1" != "" ] ; do
   99         CMD="$1"
  100         shift
  101         case "$CMD" in
  102         --keep-case|-k)
  103                 MUNGE_CASE=no
  104                 continue
  105                 ;;
  106         --refresh)
  107                 ;;
  108         --*-after)
  109                 checkarg "$1"
  110                 A=$ARG
  111                 checkarg "$2"
  112                 B=$ARG
  113                 shift 2
  114                 ;;
  115         -*)
  116                 checkarg "$1"
  117                 shift
  118                 ;;
  119         esac
  120         case "$CMD" in
  121         --enable|-e)
  122                 set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=y"
  123                 ;;
  124 
  125         --disable|-d)
  126                 set_var "${CONFIG_}$ARG" "# ${CONFIG_}$ARG is not set"
  127                 ;;
  128 
  129         --module|-m)
  130                 set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=m"
  131                 ;;
  132 
  133         --set-str)
  134                 # sed swallows one level of escaping, so we need double-escaping
  135                 set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=\"${1//\"/\\\\\"}\""
  136                 shift
  137                 ;;
  138 
  139         --set-val)
  140                 set_var "${CONFIG_}$ARG" "${CONFIG_}$ARG=$1"
  141                 shift
  142                 ;;
  143         --undefine|-u)
  144                 undef_var "${CONFIG_}$ARG"
  145                 ;;
  146 
  147         --state|-s)
  148                 if grep -q "# ${CONFIG_}$ARG is not set" $FN ; then
  149                         echo n
  150                 else
  151                         V="$(grep "^${CONFIG_}$ARG=" $FN)"
  152                         if [ $? != 0 ] ; then
  153                                 echo undef
  154                         else
  155                                 V="${V/#${CONFIG_}$ARG=/}"
  156                                 V="${V/#\"/}"
  157                                 V="${V/%\"/}"
  158                                 V="${V//\\\"/\"}"
  159                                 echo "${V}"
  160                         fi
  161                 fi
  162                 ;;
  163 
  164         --enable-after|-E)
  165                 set_var "${CONFIG_}$B" "${CONFIG_}$B=y" "${CONFIG_}$A"
  166                 ;;
  167 
  168         --disable-after|-D)
  169                 set_var "${CONFIG_}$B" "# ${CONFIG_}$B is not set" "${CONFIG_}$A"
  170                 ;;
  171 
  172         --module-after|-M)
  173                 set_var "${CONFIG_}$B" "${CONFIG_}$B=m" "${CONFIG_}$A"
  174                 ;;
  175 
  176         # undocumented because it ignores --file (fixme)
  177         --refresh)
  178                 yes "" | make oldconfig
  179                 ;;
  180 
  181         *)
  182                 usage
  183                 ;;
  184         esac
  185 done
  186 

Cache object: a202a0242bfbfe56acbe3d69160c109b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.