Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27800
  • 博文数量: 22
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-24 12:40
文章分类

全部博文(22)

文章存档

2012年(22)

我的朋友
最近访客

分类:

2012-09-24 12:44:53

bool函数的实现在scrīpts/Configure内,从arch/config.in中摘出bool 函数的典型用法:
bool '    Support OS Switching' CONFIG_S3C2400_GAMEPARK_OSSWITCH

第一个参数为选项说明:'    Support OS Switching'
第二个参数为选项名称:
CONFIG_S3C2400_GAMEPARK_OSSWITCH
下面以该例说明bool的实现,
#
# bool processes a boolean argument
#
#       bool question define
#
#bool '    Support OS Switching' CONFIG_S3C2400_GAMEPARK_OSSWITCH

function bool () {
        #将$CONFIG_S3C2400_GAMEPARK_OSSWITCH的值赋给old
        #eval:再次执行命令行处理,相当于执行两次eval
        #如a=1
        #A1=666
        #echo \$A$a
        #$A1
        #eval echo \$A$a
        #666
        ōld=$(eval echo "\${$2}")
        #如果old有值,则采用old的值,否则为n
        def=${old:-'n'}
        case "$def" in
         "y" | "m") defprompt="Y/n/?"
              def="y"
              ;;
         "n") defprompt="N/y/?"
              ;;
        esac
        while :; do
#"    Support OS Switching ($CONFIG_S3C2400_GAMEPARK_OSSWITCH) [Y/n/?]" "y" "y"
#"    Support OS Switching ($CONFIG_S3C2400_GAMEPARK_OSSWITCH) [N/y/?]" "n" "n"
#"    Support OS Switching ($CONFIG_S3C2400_GAMEPARK_OSSWITCH) [N/y/?]" "n"
         
          readln "$1 ($2) [$defprompt] " "$def" "$old"
          #根据ans进行赋值
          case "$ans" in
            [yY] | [yY]es ) define_bool "$2" "y"
                            break;;
            [nN] | [nN]o )  define_bool "$2" "n"
                            break;;
            * )             help "$2"
                            ;;
          esac
        done
}




bool的实现分为3部分:
1 def赋值
def的默认值是n,但如果通过前面的 . .config-is-not.$$执行,给CONFIG_S3C2400_GAMEPARK_OSSWITCH赋了值,那么def就会取该值,具体
实现看上面代码,其中注意eval的用法。
2 ans赋值
通过
readln "$1 ($2) [$defprompt] " "$def" "$old"实现。
参数一为
"$1 ($2) [$defprompt] "
参数二为"$def"
参数三为"$old"
如果是"make config",则函数会提示用户输入配置。
如果是"make oldconfig", 且
CONFIG_S3C2400_GAMEPARK_OSSWITCH没有配置,函数
会提示用户输入配置。如果已经配置了,就会按照$def"进行赋值
3 将CONFIG_S3C2400_GAMEPARK_OSSWITCH的值写入.tmpconfig和.tmpconfig.h
这主要是
通过define_bool函数实现的。

bool的代码如上图所示,readln和define_bool的实现在后面贴出
阅读(331) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~