Config 
1999 ǯ 10  18 
Michael Elizabeth Chastain, <mailto:mec@shout.net>

    ܸJF ץ
      ԡ굮ɧ <takahiko@hakubi.co.jp>



=== Ϥ

Config  'bash' ǤϤޤ

ΥɥȤϡLinux ͥǤ Config ˤĤ
ҤΤǤconfig.in ե Config.in եϡθ
񤫤Ƥޤ

Config  'sh' Υ֥åȤΤ褦˸̾ϤΤ褦ư
ޤ¤줿ʸȰۤʤ륻ޥƥåäƤޤ

 Config ץߥ󥰤δܻؿˤ򼨤ޤϡ¸
Config.in ե¸ߤץߥ󥰡ǥΤߤѤ
ȡǤץޤˤȤäƹŪ˻פ륤ǥ夲
褦Ȥơץߥ󥰷иѤƤޤͤ빽ޤ
Config Ǥϡϲ鷺˼ԤƤޤޤ

Config  'bash' ǤϤʤΤǤ



=== 󥿥ץ꥿

4 Ĥΰۤʤץब Config ᤷޤ:

    scripts/Configure   make config, make oldconfig
    scripts/Menuconfig  make menuconfig
    scripts/tkparse     make xconfig
    mconfig             ftp.kernel.org/pub/linux/kernel/people/hch/mconfig/

'Configure' ϡsource 뤳Ȥˤä Config.in ե᤹ bash
ץȤǤĤ Config 쥳ޥɤϡͥƥ֤ bash ޥ
ǤĤΥޥɤϡץ bash ؿǼƤޤ

'Menuconfig' ϡ⤦Ĥ bash ץȤǤMenuconfig ϡ awk
ץȤϥե򥹥󤷡ƥ˥塼Ѥ˥ؿꡢ
äؿ source 줫顢桼ư֤ǥؿ
¹ԤޤMenuconfig ϡºݤΥ꡼ϤԤˡ 'lxdialog'
ȤХåɡ桼ƥƥץѤޤ'lxdialog' ϡ
curses Ѥ C ץǤ

'scripts/tkparse' ϡConfig 쥹ץȤ礭 Tcl/Tk ץ
Ѵ̤ʥѡ C ץǤ'make xconfig' ϡ
Tcl/Tk ץ 'wish' Ϥwish ¹Ԥޤ

'mconfig' ϡ Config 쥤󥿥ץ꥿Ǥmconfig ϡConfig 
ץȤʸڤѴιʸڤ桼󥿡եե
ɤΤɤ줫ĤϤ bison ѡ C ץǤ



=== ʸ

Config 쥹ץȤϡʸΥꥹȤǤǤƤޤ22 Υץʸ
'if' ʸ˥塼֥å'source' ʸޤ

 '\' ϡԤ³Ȥ򼨤ޤ

'#' ˤ̾Ȥ³ޤޤǤȤˤʤޤ
'# ... is not set' ȤιԤϡȤȤϤʤޤ󡣤ϡ
ޥƥåŪͭդǤꡢ4 Ƥ config 󥿥ץ꥿
̣դƤޤ

ԤϽפǤԤΤ˥ߥȤȤϤǤޤ'if' ʸˤϡ
սߥĤ꤬ޤξǤϡ˲Ԥ
ȤȤǤޤ

ˡŪʸˡǤ󤲤ޤ

    /ץץ/ ϡ󥰥륯Ȥޤϥ֥륯ȤƤʸǤ
    ֥륯ȤƤϡ$ ִޤǤƤϤޤ

    // ϡȤƤʤñθ졢󥰥륯ȤƤʸ
    ޤϥ֥륯ȤƤʸǤɤȤƤʤ硢
    ⤷ϥ֥륯ȤƤϡΥɤФ $ ִ¹Ԥ
    ޤ

    /ܥ/ ϡȤƤʤñθǤܥϡCONFIG_* Ȥ
    ̾äƤʤФʤޤscripts/mkdep.c ϡġ CONFIG_*
    ܥΰ¸ط뤿ᡢ include/linux/autoconf.h ˰Ĥε
    ¸ط뤫ˡ̾դδƤˤƤޤ

    /¸/ ϡ¸طǤʸŪˤϡ// Ǥ¹Իˤϡ/¸/ 
    "y", "m", "n", ⤷ "", ɾʤФʤޤ

    // ϡ黻 '=', '!=', '-a', '-o', '!' Ѥ bash 饤ʼǤ


Ƥʸ󤲤ޤ:

    ƥʸ:

        mainmenu_name   /ץץ/
        comment         /ץץ/
        text            /ץץ/

    ʸ:

        bool            /ץץ/ /ܥ/
        hex             /ץץ/ /ܥ/ //
        int             /ץץ/ /ܥ/ //
        string          /ץץ/ /ܥ/ //
        tristate        /ץץ/ /ܥ/

    ʸ:

        define_bool     /ܥ/ //
        define_hex      /ܥ/ //
        define_int      /ܥ/ //
        define_string   /ܥ/ //
        define_tristate /ܥ/ //

    ¸ʸ:

        dep_bool        /ץץ/ /ܥ/ /¸/ ...
        dep_mbool       /ץץ/ /ܥ/ /¸/ ...
        dep_hex         /ץץ/ /ܥ/ // /¸/ ...
        dep_int         /ץץ/ /ܥ/ // /¸/ ...
        dep_string      /ץץ/ /ܥ/ // /¸/ ...
        dep_tristate    /ץץ/ /ܥ/ /¸/ ...

    ʸ:

        unset /ܥ/ ...

    ʸ:

        choice          /ץץ/ // //
        nchoice         /ץץ/ /ܥ/ /ץץ/ /ܥ/ ...

    If ʸ:

        if [ // ] ; then
	  /ʸ/
	  ...
        fi

        if [ // ] ; then
	  /ʸ/
	  ...
        else
	  /ʸ/
	  ...
        fi

    ˥塼֥å:

        mainmenu_option next_comment
        comment /ץץ/
          /ʸ/
	  ...
        endmenu

    Source ʸ:

        source //



=== mainmenu_name /ץץ/

ưϡܤϤϤ뤫˽٤㤤Ǥmainmenu_name ϡ
Config եΥȥåץ٥̾ꤷޤ

Configure:  ιԤ̵뤷ޤ
Menuconfig: ιԤ̵뤷ޤ
Xconfig:    ٥륦ɥѤ /ץץ/ Ѥޤ
mconfig:    ιԤ̵뤷ޤ (mconfig Ϥ줬̵Ƥ⡢ɤŻ򤷤ޤ)

:

    # arch/sparc/config.in
    mainmenu_name "Linux/SPARC Kernel Configuration"



=== comment /ץץ/

ưϡץ˥桼ФƥץץȤɽޤ
ϥե˥ץץȤ񤭽ФޤƤΥץץȤƱ͡ץץȤ
ɥ̵ִȤ줿ʸǤ뤳ȤդƤ

ư 'comment' ϡConfig ΥȤǤϤޤcomment ϡ桼
󥿡ե˥ƥȤɽ褦ˤޤϥե˽Ф
Ԥ褦ˤ⤷ޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # drivers/net/Config.in
    comment 'CCP compressors for PPP are only built as modules.'



=== text /ץץ/

ưϡ桼Фơڤν̵ǥץץȤɽޤ
ϥեˤϥץץȤ񤭽Фޤmconfig ϡإ׵ǽѤ
ưǻѤƤޤ

Configure:  Ƥʤ
Menuconfig: Ƥʤ
Xconfig:    Ƥʤ
mconfig:    Ƥ

:

    # mconfig internal help text
    text 'Here are all the mconfig command line options.'



=== bool /ץץ/ /ܥ/

ưϡ桼 /ץץ/ ɽ桼ͤꡢ
ͤ /ܥ/ ꤷޤͭͤϡ"n"  "y" Ǥ

ư bool ǥեͤäƤʤȤդƤ bool Ф
ǥեͤͿ Config 쥹ץȤ񤳤ȡߤʤߤޤ
¸Ƥθ쥤󥿥ץ꥿ɲäͤΤƤƤޤޤĥȤƤ
ȤͤǤ顢ޥ󥿥ץ꥿ѥåθ linux-kbuild
ޤäƤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # arch/i386/config.in
    bool 'Symmetric multi-processing support' CONFIG_SMP



=== hex /ץץ/ /ܥ/ //

ưϡ桼 /ץץ/ ɽ桼ͤꡢ
ͤ /ܥ/ ꤷޤ16 ʿʤСɤΤ褦ͤǤ
ͭϤȤʤޤ// ϥǥեͤǤ

ư hex ϡϰϥѥ᡼դޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # drivers/sound/Config.in
    hex 'I/O base for SB Check from manual of the card' CONFIG_SB_BASE 220



=== int /ץץ/ /ܥ/ //

ưϡ桼 /ץץ/ ɽ桼ͤꡢ
ͤ /ܥ/ ꤷޤ// ϥǥեͤǤ10
ʿʤСɤΤ褦ͤǤͭϤȤʤޤ

ư int ϡϰϥѥ᡼դޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # drivers/char/Config.in
    int 'Maximum number of Unix98 PTYs in use (0-2048)' \
        CONFIG_UNIX98_PTY_COUNT 256



=== string /ץץ/ /ܥ/ //

ưϡ桼 /ץץ/ ɽ桼ͤꡢ
ͤ /ܥ/ ꤷޤ// ϥǥեͤǤʸ
'"'  '\\' ɤΤ褦 ASCII ʸͭͤȤʤޤ
Configure ϡإפɽ뤿ᡢʸ "?" ªޤ

ǥեͤɬܤǤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # drivers/sound/Config.in
    string '  Full pathname of DSPxxx.LD firmware file' \
        CONFIG_PSS_BOOT_FILE /etc/sound/dsp001.ld



=== tristate /ץץ/ /ܥ/

ưϡ桼 /ץץ/ ɽ桼ͤꡢ
ͤ /ܥ/ ꤷޤͭͤϡ"n", "m", ޤ "y" Ǥ

 "m" ϡ"module" ̣/ܥ/ ͥ⥸塼Ȥ
ۤ٤Ǥ뤳Ȥ򼨤ޤ "m" ϡλǥܥ
CONFIG_MODULES ͤ "y" ǤΤͭǤ

ư tristate ϡǥեͤޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # fs/Config.in
    tristate 'NFS filesystem support' CONFIG_NFS_FS



=== define_bool /ܥ/ //

ưϡ// ͤ /ܥ/ ꤷޤͭͤϡ"n"
⤷ "y" Ǥ

ߴͳˤꡢ "m" ͭǤȤΤ⡢define_tristate 
ƤθĽǼޤǤˤФ餯֤뤫Ǥ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # arch/alpha/config.in
    if [ "$CONFIG_ALPHA_GENERIC" = "y" ]
    then
            define_bool CONFIG_PCI y
            define_bool CONFIG_ALPHA_NEED_ROUNDING_EMULATION y
    fi



=== define_hex /ܥ/ //

ưϡ// ͤ /ܥ/ ꤷޤ16 ʿʤС
ɤΤ褦ͤǤͭǤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # Not from the corpus
    bool 'Specify custom serial port' CONFIG_SERIAL_PORT_CUSTOM
    if [ "$CONFIG_SERIAL_PORT_CUSTOM" = "y" ]; then
	hex 'Serial port number' CONFIG_SERIAL_PORT
    else
	define_hex CONFIG_SERIAL_PORT 0x3F8
    fi



=== define_int /ܥ/ //

ưϡ// ͤ /ܥ/ ꤷޤ10 ʿʤ
ɤΤ褦ͤǤͭǤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # drivers/char/ftape/Config.in
    define_int CONFIG_FT_ALPHA_CLOCK 0



=== define_string /ܥ/ //

ưϡ// ͤ /ܥ/ ꤷޤʸ '"' 
'\\' ɤΤ褦 ASCII ʸͭͤȤʤޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # Not from the corpus
    define_string CONFIG_VERSION "2.2.0"



=== define_tristate /ܥ/ //

ưϡ// ͤ /ܥ/ ꤷޤͭͤϡ
"n", "m", "y" Ǥ

ƤΥ󥿥ץ꥿Ǥư줬줿顢Ǥᤤˡ
ͤȤ define_bool Τ define_tristate 
Ѥ褦ˤƤϡŪʷå򤪤ʤȤ
ɸȤƤޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # drivers/video/Config.in
    if [ "$CONFIG_FB_AMIGA" = "y" ]; then
       define_tristate CONFIG_FBCON_AFB y
       define_tristate CONFIG_FBCON_ILBM y
    else
       if [ "$CONFIG_FB_AMIGA" = "m" ]; then
          define_tristate CONFIG_FBCON_AFB m
          define_tristate CONFIG_FBCON_ILBM m
       fi
    fi



=== dep_bool /ץץ/ /ܥ/ /¸/ ...

ưϡ¸طꥹƤΰ¸طɾޤ "y" 
Ĥɤΰ¸طϰϤ¤ޤͤǤ¸ط
̵뤵ޤ "n", ޤϤ¾ ("m" ʤ) İ¸طơ
ϰϤ "n" ¤ޤ¸ط򥯥Ȥ뤳ȤǧƤ
󡣶ͤ褦ʰ¸طѤ뤳Ȥϡ侩ޤ
 dep_mbool ⻲ȤƤ

⤷ϰϤĤ "n" ¤ƤʤСdep_bool ϲ
鷺 "n"  /ܥ/ ꤷޤϰϤİʾ褬
ϡdep_bool  /ץץ/ 桼ɽ桼ͤꡢ
ͤ /ܥ/ ꤷޤ

Configure:  Ƥ
Menuconfig: Ƥ
XConfig:    Ƥ
mconfig:    Ƥ

:

    # drivers/net/Config.in
    dep_bool 'Aironet 4500/4800 PCI support 'CONFIG_AIRONET4500_PCI $CONFIG_PCI

ΤΥХ:
- ޥɤ¸طˤ̵ˤƤ硢Xconfig  "# foo is not set" 
  .config ˽񤭹ߤޤ (Ʊͤ "#undef foo"  autoconf.h ˽񤭹ߤޤ) 



=== dep_mbool /ץץ/ /ܥ/ /¸/ ...

ưϡ¸طꥹƤΰ¸طɾޤ "y" ޤ "m" 
Ĥɤΰ¸طϰϤ¤ޤͤǤ¸ط̵뤵ޤ
 "n", ޤϤ¾ͤİ¸طơϰϤ "n" ¤ޤ¸
ط򥯥Ȥ뤳ȤǧƤޤ󡣶ͤ褦ʰ¸ط
뤳Ȥϡ侩ޤ

⤷ϰϤĤ "n" ¤ƤʤСdep_mbool ϲ
鷺 "n"  /ܥ/ ꤷޤϰϤİʾ褬
ϡdep_mbool  /ץץ/ 桼ɽ桼ͤꡢ
ͤ /ܥ/ ꤷޤ

dep_bool  dep_mbool ͣΰ㤤ϡ "m" ¸طȤưˡ
ȤȤդƤ

Configure:  Ƥ
Menuconfig: Ƥ
XConfig:    Ƥ
mconfig:    Ƥ

:

    # Not from the corpus
    dep_mbool 'Packet socket: mmapped IO' CONFIG_PACKET_MMAP $CONFIG_PACKET

ΤΥХ:
- ޥɤ¸طˤ̵ˤƤ硢Xconfig  "# foo is not set" 
  .config ˽񤭹ߤޤ (Ʊͤ "#undef foo"  autoconf.h ˽񤭹ߤޤ) 



=== dep_hex /ץץ/ /ܥ/ // /¸/ ...
=== dep_int /ץץ/ /ܥ/ // /¸/ ...
=== dep_string /ץץ/ /ܥ/ // /¸/ ...

ưΥޥƥåˤĤƤϡ߸ƤǤ

Configure:  Ƥʤ
Menuconfig: Ƥʤ
XConfig:    Ƥʤ
mconfig:    Ƥʤ



=== dep_tristate /ץץ/ /ܥ/ /¸/ ...

ưϡ¸طꥹƤΰ¸طɾޤ "y" 
Ĥɤΰ¸طϰϤ¤ޤ "m" İ¸ط
ϰϤ "m" ⤷ "n" ¤ޤͤǤ¸ط
̵뤵ޤ "n", ޤϤ¾ͤİ¸طϰϤ
"n" ¤ޤ¸ط򥯥Ȥ뤳ȤǧƤޤ󡣶
ͤ褦ʰ¸طѤ뤳Ȥϡ侩ޤ

⤷ϰϤĤ "n" ¤ƤʤСdep_tristate 
鷺 "n"  /ܥ/ ꤷޤϰϤİʾ褬
ϡdep_tristate  /ץץ/ 桼ɽ桼ͤ
ꡢͤ /ܥ/ ꤷޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # drivers/char/Config.in
    dep_tristate 'Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT

ΤΥХ:
- ޥɤ¸طˤ̵ˤƤ硢Xconfig  "# foo is not set" 
  .config ˽񤭹ߤޤ (Ʊͤ "#undef foo"  autoconf.h ˽񤭹ߤޤ) 



=== unset /ܥ/ ...

ưϡ ""  /ܥ/ ꤷޤ/ܥ/ Ϸ
ˤϴޤޤ󡣤ư¸ߤϡõ椹ͤޤˤꡢѲ
륻ޥƥå¹ԸͿ졢꿼꤬
褦ˤʤޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ (Х)
mconfig:    Ƥ

:

    # arch/mips/config.in
    unset CONFIG_PCI
    unset CONFIG_MIPS_JAZZ
    unset CONFIG_VIDEO_G364



=== choice /ץץ/ // //

ưϡꥹȡ "饸ܥꥹ" ޤ
choice ϡ /ץץ/ 򡢤Ʊͤˡб륷ܥĥ
ץץȤΥ롼פ򡢥桼ɽޤ

桼ͤ򤹤ȡư choice б륷ܥ "y" ˥åȤ
ꥹ¾Υܥ "n" ˥åȤޤ

ܤΰϡ֥ץץȤȥܥ̾Ȥ󤷤󥰥륯
ޤϥ֥륯Ȥ줿ɤǤ󥿥ץ꥿ϤΥɤ򥹥ڡ
ǥ֥ɤΥꥹȤʬޤܤΥ֥ɤϰܤΥץץȤˡ
ܤΥ֥ɤϰܤΥܥˤʤޤܤΥ֥ɤܤ
ץץȤˡܤΥ֥ɤܤΥܥˤʤޤƤΥ
ɤФơʲƱͤǤ

ܤΥɤϥƥǤͤϡɤ줫ĤΥץץȤФ
̩˰абդʾάǤʤФʤޤ󡣤ΥץץȤ
б륷ܥϡǥեȤǥ֥͡ˤ륷ܥǤ

ư choice ιʸͳˤꡢ֥ץץȤ˥ڡޤ뤳Ȥ
ǤʤȤȤդƤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ

:

    # arch/i386/config.in
    choice '  PCI access mode' \
        "BIOS           CONFIG_PCI_GOBIOS       \
         Direct         CONFIG_PCI_GODIRECT     \
         Any            CONFIG_PCI_GOANY"       Any



=== nchoice /ץץ/ /ܥ/ /ץץ/ /ܥ/ ...

ưϡchoice ƱޥƥåޤʸϤä
Ƥޤ

ǽ /ץץ/ ϡꥹѤΥޥץץȤǤ

ǽ /ܥ/ ϡ֥͡ˤǥեȤΥܥǤ
(ϥܥǤꡢդʥץץȤξάǤϤޤ) 

Ȥ³ /ץץ/  /ܥ/ ȤϡꥹȤΥץץȤ
ܥǤ

Configure:  Ƥʤ
Menuconfig: Ƥʤ
XConfig:    Ƥʤ
mconfig:    Ƥ



=== if [ // ] ; then

ϾʸǡץȤ 'else' դ뤳ȤǤޤ
˾ߤʤ顢ߥΤ˲ԤȤäƤ⤫ޤޤ

// ˤϡΥȥȱ黻Ҥޤ뤳ȤǤޤȤϰۤʤꡢ
ƤΥȥϥ֥륯ȤɬפȤȤդƤ

    /ȥ/:
        "..."                   ƥ
        "$..."                  ѿ

    //:
        /ȥ/  = /ȥ/    ξΥȥबƱͤäƤС
        /ȥ/ != /ȥ/    ξΥȥबۤʤͤäƤС

    //:
        // -o //            ɤ餫μʤС
        // -a //            ξμʤС
        ! //                  ʤС

 /ȥ/ ͭ // ǤϤʤȤȤդƤ
⤷⼡Τ褦˻ȤȤȡ

    # Do not do this.
    if [ "$CONFIG_EXPERIMENTAL" ]; then
	bool 'Bogus experimental feature' CONFIG_BOGUS
    fi

... äȤˤʤޤȤΤϡCONFIG_EXPERIMENTAL Ϸ褷ƶʸ
ȤͤĤȤϤʤǤ ͤϾ "y" ⤷ "n" Ǥꡢ bash
١Υ󥿥ץ꥿Ǥ Configure  Menuconfig ǤϡξȤ
 (ǤϤʤ) ȤưƤޤޤ

Configure:  Ƥ
Menuconfig: Ƥ
XConfig:    Ƥ뤬Х
mconfig:    Ƥ

Xconfig ˤϴΤΥХꡢޤ餯̤ΤΥХĤޤ:

-  "" ĥƥϡŬڤ˰ޤ



=== mainmenu_option next_comment

ưϡ˥塼򳫻Ϥޤʸϡư comment Ǥʤ
ʤޤư comment  /ץץ/ ϡ˥塼Υȥˤʤޤ
(ʤ߷׼Ԥư 'menu ...' ʤäΤʬޤ) 

ɤΥ˥塼ϰϤϤʸϡŪ¸ߤȥåץ˥塼
֤ޤȥåץ˥塼ΥȥФˤϤꡢϥ
ץ꥿˰¸ޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ



=== endmenu

ưϡ˥塼ϰϤĤޤ

Configure:  Ƥ
Menuconfig: Ƥ
Xconfig:    Ƥ
mconfig:    Ƥ



=== source //

ưϡƥ // ե̾ȤƲᤷΥե
ƤޤɤϡȤƤʤñƥǤʤ
ʤޤ

ư¹Ի˲᤹륤󥿥ץ꥿⤢Сѡ˲᤹
󥿥ץ꥿⤢ޤ

ϡC ץץå #include եƥΤ褦ˡҤ줿Ȥ
¹Ԥޤsource ϡ֥˥塼䲿餫Υ֥åͥƥ󥰤ż
ΤǤϤޤ

Configure:  Ƥ (¹Ի)
Menuconfig: Ƥ (ѡ)
Xconfig:    Ƥ (ѡ)
mconfig:    Ƥ (ѡ)
