|
|
1.1 ! root 1: #! /bin/sh ! 2: # ! 3: # This script is used to configure dmsdos compile-time options. ! 4: # It has been shamelessly stolen from the linux kernel. For a list ! 5: # of credits see there (linux/scripts/Configure). ! 6: # ! 7: ! 8: # ! 9: # Make sure we're really running bash. ! 10: # ! 11: # I would really have preferred to write this script in a language with ! 12: # better string handling, but alas, bash is the only scripting language ! 13: # that I can be reasonable sure everybody has on their linux machine. ! 14: # ! 15: [ -z "$BASH" ] && { echo "Configure requires bash" 1>&2; exit 1; } ! 16: ! 17: # Disable filename globbing once and for all. ! 18: # Enable function cacheing. ! 19: set -f -h ! 20: ! 21: # ! 22: # Dummy functions for use with a config.in modified for menuconf ! 23: # ! 24: function mainmenu_option () { ! 25: : ! 26: } ! 27: function mainmenu_name () { ! 28: : ! 29: } ! 30: function endmenu () { ! 31: : ! 32: } ! 33: ! 34: # ! 35: # help prints the corresponding help text from Configure.help to stdout ! 36: # ! 37: # help variable ! 38: # ! 39: function help () { ! 40: if [ -f Configure.help ] ! 41: then ! 42: #first escape regexp special characters in the argument: ! 43: var=$(echo "$1"|sed 's/[][\/.^$*]/\\&/g') ! 44: #now pick out the right help text: ! 45: text=$(sed -n "/^$var[ ]*\$/,\${ ! 46: /^$var[ ]*\$/b ! 47: /^#.*/b ! 48: /^[ ]*\$/q ! 49: p ! 50: }" Configure.help) ! 51: if [ -z "$text" ] ! 52: then ! 53: echo; echo " Sorry, no help available for this option yet.";echo ! 54: else ! 55: (echo; echo "$text"; echo) | ${PAGER:-more} ! 56: fi ! 57: else ! 58: echo; ! 59: echo " Can't access the file Configure.help which" ! 60: echo " should contain the help texts." ! 61: echo ! 62: fi ! 63: } ! 64: ! 65: ! 66: # ! 67: # readln reads a line into $ans. ! 68: # ! 69: # readln prompt default oldval ! 70: # ! 71: function readln () { ! 72: if [ "$DEFAULT" = "-d" -a -n "$3" ]; then ! 73: echo "$1" ! 74: ans=$2 ! 75: else ! 76: echo -n "$1" ! 77: [ -z "$3" ] && echo -n "(NEW) " ! 78: IFS='@' read ans </dev/tty || exit 1 ! 79: [ -z "$ans" ] && ans=$2 ! 80: fi ! 81: } ! 82: ! 83: # ! 84: # comment does some pretty-printing ! 85: # ! 86: # comment 'xxx' ! 87: # ! 88: function comment () { ! 89: echo "*"; echo "* $1" ; echo "*" ! 90: (echo "" ; echo "#"; echo "# $1" ; echo "#") >>$CONFIG ! 91: (echo "" ; echo "/*"; echo " * $1" ; echo " */") >>$CONFIG_H ! 92: } ! 93: ! 94: # ! 95: # define_bool sets the value of a boolean argument ! 96: # ! 97: # define_bool define value ! 98: # ! 99: function define_bool () { ! 100: case "$2" in ! 101: "y") ! 102: echo "$1=y" >>$CONFIG ! 103: echo "#define $1 1" >>$CONFIG_H ! 104: ;; ! 105: ! 106: "m") ! 107: echo "$1=m" >>$CONFIG ! 108: echo "#undef $1" >>$CONFIG_H ! 109: echo "#define $1_MODULE 1" >>$CONFIG_H ! 110: ;; ! 111: ! 112: "n") ! 113: echo "# $1 is not set" >>$CONFIG ! 114: echo "#undef $1" >>$CONFIG_H ! 115: ;; ! 116: esac ! 117: eval "$1=$2" ! 118: } ! 119: ! 120: # ! 121: # bool processes a boolean argument ! 122: # ! 123: # bool question define ! 124: # ! 125: function bool () { ! 126: old=$(eval echo "\${$2}") ! 127: def=${old:-'n'} ! 128: case "$def" in ! 129: "y" | "m") defprompt="Y/n/?" ! 130: def="y" ! 131: ;; ! 132: "n") defprompt="N/y/?" ! 133: ;; ! 134: esac ! 135: while :; do ! 136: readln "$1 ($2) [$defprompt] " "$def" "$old" ! 137: case "$ans" in ! 138: [yY] | [yY]es ) define_bool "$2" "y" ! 139: break;; ! 140: [nN] | [nN]o ) define_bool "$2" "n" ! 141: break;; ! 142: * ) help "$2" ! 143: ;; ! 144: esac ! 145: done ! 146: } ! 147: ! 148: # ! 149: # tristate processes a tristate argument ! 150: # ! 151: # tristate question define ! 152: # ! 153: function tristate () { ! 154: if [ "$CONFIG_MODULES" != "y" ]; then ! 155: bool "$1" "$2" ! 156: else ! 157: old=$(eval echo "\${$2}") ! 158: def=${old:-'n'} ! 159: case "$def" in ! 160: "y") defprompt="Y/m/n/?" ! 161: ;; ! 162: "m") defprompt="M/n/y/?" ! 163: ;; ! 164: "n") defprompt="N/y/m/?" ! 165: ;; ! 166: esac ! 167: while :; do ! 168: readln "$1 ($2) [$defprompt] " "$def" "$old" ! 169: case "$ans" in ! 170: [yY] | [yY]es ) define_bool "$2" "y" ! 171: break ;; ! 172: [nN] | [nN]o ) define_bool "$2" "n" ! 173: break ;; ! 174: [mM] ) define_bool "$2" "m" ! 175: break ;; ! 176: * ) help "$2" ! 177: ;; ! 178: esac ! 179: done ! 180: fi ! 181: } ! 182: ! 183: # ! 184: # dep_tristate processes a tristate argument that depends upon ! 185: # another option. If the option we depend upon is a module, ! 186: # then the only allowable options are M or N. If Y, then ! 187: # this is a normal tristate. This is used in cases where modules ! 188: # are nested, and one module requires the presence of something ! 189: # else in the kernel. ! 190: # ! 191: # tristate question define default ! 192: # ! 193: function dep_tristate () { ! 194: old=$(eval echo "\${$2}") ! 195: def=${old:-'n'} ! 196: if [ "$3" = "n" ]; then ! 197: define_bool "$2" "n" ! 198: elif [ "$3" = "y" ]; then ! 199: tristate "$1" "$2" ! 200: else ! 201: if [ "$CONFIG_MODULES" = "y" ]; then ! 202: case "$def" in ! 203: "y" | "m") defprompt="M/n/?" ! 204: def="m" ! 205: ;; ! 206: "n") defprompt="N/m/?" ! 207: ;; ! 208: esac ! 209: while :; do ! 210: readln "$1 ($2) [$defprompt] " "$def" "$old" ! 211: case "$ans" in ! 212: [nN] | [nN]o ) define_bool "$2" "n" ! 213: break ;; ! 214: [mM] ) define_bool "$2" "m" ! 215: break ;; ! 216: [yY] | [yY]es ) echo ! 217: echo " This answer is not allowed, because it is not consistent with" ! 218: echo " your other choices." ! 219: echo " This driver depends on another one which you chose to compile" ! 220: echo " as a module. This means that you can either compile this one" ! 221: echo " as a module as well (with M) or leave it out altogether (N)." ! 222: echo ! 223: ;; ! 224: * ) help "$2" ! 225: ;; ! 226: esac ! 227: done ! 228: fi ! 229: fi ! 230: } ! 231: ! 232: # ! 233: # define_int sets the value of a integer argument ! 234: # ! 235: # define_int define value ! 236: # ! 237: function define_int () { ! 238: echo "$1=$2" >>$CONFIG ! 239: echo "#define $1 ($2)" >>$CONFIG_H ! 240: eval "$1=$2" ! 241: } ! 242: ! 243: # ! 244: # int processes an integer argument ! 245: # ! 246: # int question define default ! 247: # GNU expr changed handling of ?. In older versions you need ?, ! 248: # in newer you need \? ! 249: OLD_EXPR=`expr "0" : '0\?'` ! 250: if [ $OLD_EXPR -eq 1 ]; then ! 251: INT_EXPR='0$\|-\?[1-9][0-9]*$' ! 252: else ! 253: INT_EXPR='0$\|-?[1-9][0-9]*$' ! 254: fi ! 255: function int () { ! 256: old=$(eval echo "\${$2}") ! 257: def=${old:-$3} ! 258: while :; do ! 259: readln "$1 ($2) [$def] " "$def" "$old" ! 260: if expr "$ans" : $INT_EXPR > /dev/null; then ! 261: define_int "$2" "$ans" ! 262: break ! 263: else ! 264: help "$2" ! 265: fi ! 266: done ! 267: } ! 268: # ! 269: # define_hex sets the value of a hexadecimal argument ! 270: # ! 271: # define_hex define value ! 272: # ! 273: function define_hex () { ! 274: echo "$1=$2" >>$CONFIG ! 275: echo "#define $1 0x${2#*[x,X]}" >>$CONFIG_H ! 276: eval "$1=$2" ! 277: } ! 278: ! 279: # ! 280: # hex processes an hexadecimal argument ! 281: # ! 282: # hex question define default ! 283: # ! 284: function hex () { ! 285: old=$(eval echo "\${$2}") ! 286: def=${old:-$3} ! 287: def=${def#*[x,X]} ! 288: while :; do ! 289: readln "$1 ($2) [$def] " "$def" "$old" ! 290: ans=${ans#*[x,X]} ! 291: if expr "$ans" : '[0-9a-fA-F][0-9a-fA-F]*$' > /dev/null; then ! 292: define_hex "$2" "$ans" ! 293: break ! 294: else ! 295: help "$2" ! 296: fi ! 297: done ! 298: } ! 299: ! 300: # ! 301: # choice processes a choice list (1-out-of-n) ! 302: # ! 303: # choice question choice-list default ! 304: # ! 305: # The choice list has a syntax of: ! 306: # NAME WHITESPACE VALUE { WHITESPACE NAME WHITESPACE VALUE } ! 307: # The user may enter any unique prefix of one of the NAMEs and ! 308: # choice will define VALUE as if it were a boolean option. ! 309: # VALUE must be in all uppercase. Normally, VALUE is of the ! 310: # form CONFIG_<something>. Thus, if the user selects <something>, ! 311: # the CPP symbol CONFIG_<something> will be defined and the ! 312: # shell variable CONFIG_<something> will be set to "y". ! 313: # ! 314: function choice () { ! 315: question="$1" ! 316: choices="$2" ! 317: old= ! 318: def=$3 ! 319: ! 320: # determine default answer: ! 321: names="" ! 322: set -- $choices ! 323: firstvar=$2 ! 324: while [ -n "$2" ]; do ! 325: if [ -n "$names" ]; then ! 326: names="$names, $1" ! 327: else ! 328: names="$1" ! 329: fi ! 330: if [ "$(eval echo \"\${$2}\")" = "y" ]; then ! 331: old=$1 ! 332: def=$1 ! 333: fi ! 334: shift; shift ! 335: done ! 336: ! 337: val="" ! 338: while [ -z "$val" ]; do ! 339: ambg=n ! 340: readln "$question ($names) [$def] " "$def" "$old" ! 341: ans=$(echo $ans | tr a-z A-Z) ! 342: set -- $choices ! 343: while [ -n "$1" ]; do ! 344: name=$(echo $1 | tr a-z A-Z) ! 345: case "$name" in ! 346: "$ans"* ) ! 347: if [ "$name" = "$ans" ]; then ! 348: val="$2" ! 349: break # stop on exact match ! 350: fi ! 351: if [ -n "$val" ]; then ! 352: echo;echo \ ! 353: " Sorry, \"$ans\" is ambiguous; please enter a longer string." ! 354: echo ! 355: val="" ! 356: ambg=y ! 357: break ! 358: else ! 359: val="$2" ! 360: fi;; ! 361: esac ! 362: shift; shift ! 363: done ! 364: if [ "$val" = "" -a "$ambg" = "n" ]; then ! 365: help "$firstvar" ! 366: fi ! 367: done ! 368: set -- $choices ! 369: while [ -n "$2" ]; do ! 370: if [ "$2" = "$val" ]; then ! 371: echo " defined $val" ! 372: define_bool "$2" "y" ! 373: else ! 374: define_bool "$2" "n" ! 375: fi ! 376: shift; shift ! 377: done ! 378: } ! 379: ! 380: CONFIG=.tmpconfig ! 381: CONFIG_H=.tmpconfig.h ! 382: trap "rm -f $CONFIG $CONFIG_H ; exit 1" 1 2 ! 383: ! 384: # ! 385: # Make sure we start out with a clean slate. ! 386: # ! 387: echo "#" > $CONFIG ! 388: echo "# Automatically generated make config: don't edit" >> $CONFIG ! 389: echo "#" >> $CONFIG ! 390: ! 391: echo "/*" > $CONFIG_H ! 392: echo " * Automatically generated C config: don't edit" >> $CONFIG_H ! 393: echo " * Run Configure instead" >> $CONFIG_H ! 394: echo " */" >> $CONFIG_H ! 395: ! 396: DEFAULT="" ! 397: if [ "$1" = "-d" ] ; then ! 398: DEFAULT="-d" ! 399: shift ! 400: fi ! 401: ! 402: CONFIG_IN=./config.in ! 403: if [ "$1" != "" ] ; then ! 404: CONFIG_IN=$1 ! 405: fi ! 406: ! 407: DEFAULTS=dmsdos-config.default ! 408: if [ -f .config ]; then ! 409: DEFAULTS=.config ! 410: fi ! 411: ! 412: if [ -f $DEFAULTS ]; then ! 413: echo "#" ! 414: echo "# Using defaults found in" $DEFAULTS ! 415: echo "#" ! 416: . $DEFAULTS ! 417: sed -e 's/# \(.*\) is not.*/\1=n/' < $DEFAULTS > /tmp/conf.$$ ! 418: . /tmp/conf.$$ ! 419: rm /tmp/conf.$$ ! 420: else ! 421: echo "#" ! 422: echo "# No defaults found" ! 423: echo "#" ! 424: fi ! 425: ! 426: . $CONFIG_IN ! 427: ! 428: rm -f .config.old ! 429: if [ -f .config ]; then ! 430: mv .config .config.old ! 431: fi ! 432: mv .tmpconfig .config ! 433: mv .tmpconfig.h dmsdos-config.h ! 434: ! 435: echo ! 436: echo "Dmsdos is now configured. Do a 'make clean; make' to (re)compile." ! 437: ! 438: exit 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.