706 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			706 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#! /bin/sh
 | 
						|
#
 | 
						|
# This script is used to configure BusyBox.
 | 
						|
#
 | 
						|
# It was inspired by the challenge in the original Configure script
 | 
						|
# to ``do something better'', combined with the actual need to ``do
 | 
						|
# something better'' because the old configure script wasn't flexible
 | 
						|
# enough.
 | 
						|
#
 | 
						|
# Raymond Chen was the original author of Configure.
 | 
						|
# Michael Elizabeth Chastain (mec@shout.net) is the current maintainer.
 | 
						|
#
 | 
						|
# 050793 - use IFS='@' to get around a bug in a pre-version of bash-1.13
 | 
						|
# with an empty IFS.
 | 
						|
#
 | 
						|
# 030995 (storner@osiris.ping.dk) - added support for tri-state answers,
 | 
						|
# for selecting modules to compile.
 | 
						|
#
 | 
						|
# 180995 Bernhard Kaindl (bkaindl@ping.at) - added dummy functions for
 | 
						|
# use with a config.in modified for make menuconfig.
 | 
						|
#
 | 
						|
# 301195 (boldt@math.ucsb.edu) - added help text support
 | 
						|
#
 | 
						|
# 281295 Paul Gortmaker - make tri_state functions collapse to boolean
 | 
						|
# if module support is not enabled.
 | 
						|
#
 | 
						|
# 010296 Aaron Ucko (ucko@vax1.rockhurst.edu) - fix int and hex to accept
 | 
						|
# arbitrary ranges
 | 
						|
#
 | 
						|
# 150296 Dick Streefland (dicks@tasking.nl) - report new configuration
 | 
						|
# items and ask for a value even when doing a "make oldconfig"
 | 
						|
#
 | 
						|
# 200396 Tom Dyas (tdyas@eden.rutgers.edu) - when the module option is
 | 
						|
# chosen for an item, define the macro <option_name>_MODULE
 | 
						|
#
 | 
						|
# 090397 Axel Boldt (boldt@math.ucsb.edu) - avoid ? and + in regular 
 | 
						|
# expressions for GNU expr since version 1.15 and up use \? and \+.
 | 
						|
#
 | 
						|
# 300397 Phil Blundell (pjb27@cam.ac.uk) - added support for min/max 
 | 
						|
# arguments to "int", allow dep_tristate to take a list of dependencies
 | 
						|
# rather than just one.
 | 
						|
#
 | 
						|
# 090398 Axel Boldt (boldt@math.ucsb.edu) - allow for empty lines in help
 | 
						|
# texts.
 | 
						|
#
 | 
						|
# 102598 Michael Chastain (mec@shout.net) - put temporary files in
 | 
						|
# current directory, not in /tmp.
 | 
						|
#
 | 
						|
# 24 January 1999, Michael Elizabeth Chastain, <mec@shout.net>
 | 
						|
# - Improve the exit message (Jeff Ronne).
 | 
						|
#
 | 
						|
# 7 October 2000, Ghozlane Toumi, <gtoumi@messel.emse.fr>
 | 
						|
# added switches for "random" , "all yes" and "all modules"
 | 
						|
#
 | 
						|
 | 
						|
#
 | 
						|
# Make sure we're really running bash.
 | 
						|
#
 | 
						|
# I would really have preferred to write this script in a language with
 | 
						|
# better string handling, but alas, bash is the only scripting language
 | 
						|
# that I can be reasonable sure everybody has on their linux machine.
 | 
						|
#
 | 
						|
[ -z "$BASH" ] && { echo "Configure requires bash" 1>&2; exit 1; }
 | 
						|
 | 
						|
# Disable filename globbing once and for all.
 | 
						|
# Enable function cacheing.
 | 
						|
set -f -h
 | 
						|
 | 
						|
#
 | 
						|
# Dummy functions for use with a config.in modified for menuconf
 | 
						|
#
 | 
						|
function mainmenu_option () {
 | 
						|
	:
 | 
						|
}
 | 
						|
function mainmenu_name () {
 | 
						|
	:
 | 
						|
}
 | 
						|
function endmenu () {
 | 
						|
	:
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# returns a random number between 1 and $1
 | 
						|
#
 | 
						|
function rnd () {
 | 
						|
	rnd=$[ $RANDOM  %  $1 + 1 ]
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# randomly chose a number in a config list (LIST_CONFIG_NAME)
 | 
						|
# or in a range ( MIN_CONFIG_NAME MAX_CONFIG_NAME )
 | 
						|
# ONLY if there is no forced default (and we are in an "auto" mode)
 | 
						|
# we are limited by the range of values taken by  "$RANDOM"
 | 
						|
#
 | 
						|
#       rndval CONFIG_NAME
 | 
						|
#
 | 
						|
 | 
						|
function rndval () {
 | 
						|
	[ "$AUTO" != "yes" -o -n "$old" ] && return
 | 
						|
	def_list=$(eval echo "\${LIST_$1}")
 | 
						|
	def_min=$(eval echo "\${MIN_$1}")
 | 
						|
	def_max=$(eval echo "\${MAX_$1}")
 | 
						|
 | 
						|
	if [ -n "$def_list" ]; then
 | 
						|
	  set -- $(echo $def_list | sed 's/,/ /g')
 | 
						|
	  rnd $#
 | 
						|
	  while [ $rnd -le $# ] ; do
 | 
						|
	    def=$1
 | 
						|
	    shift
 | 
						|
	  done
 | 
						|
	  return
 | 
						|
	fi
 | 
						|
	if [ -n "$def_min" -a -n "$def_max" ]; then
 | 
						|
	  rnd $[ $def_max - $def_min ]
 | 
						|
	  def=$[ $def_min + $rnd ]
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# help prints the corresponding help text from Configure.help to stdout
 | 
						|
#
 | 
						|
#       help variable
 | 
						|
#
 | 
						|
function help () {
 | 
						|
  if [ -f docs/Configure.help ]
 | 
						|
  then
 | 
						|
     #first escape regexp special characters in the argument:
 | 
						|
     var=$(echo "$1"|sed 's/[][\/.^$*]/\\&/g')
 | 
						|
     #now pick out the right help text:
 | 
						|
     text=$(sed -n "/^$var[ 	]*\$/,\${
 | 
						|
			/^$var[ 	]*\$/c\\
 | 
						|
${var}:\\
 | 
						|
 | 
						|
			/^#/b
 | 
						|
			/^[^ 	]/q
 | 
						|
			/<file:\\([^>]*\\)>/s//\\1/g
 | 
						|
			p
 | 
						|
		    }" docs/Configure.help)
 | 
						|
     if [ -z "$text" ]
 | 
						|
     then
 | 
						|
	  echo; echo "  Sorry, no help available for this option yet.";echo
 | 
						|
     else
 | 
						|
	  (echo; echo "$text") | ${PAGER:-more}
 | 
						|
     fi
 | 
						|
  else
 | 
						|
     echo;
 | 
						|
     echo "  Can't access the file docs/Configure.help which"
 | 
						|
     echo "  should contain the help texts."
 | 
						|
     echo
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# readln reads a line into $ans.
 | 
						|
#
 | 
						|
#	readln prompt default oldval
 | 
						|
#
 | 
						|
function readln () {
 | 
						|
	if [ "$AUTO" = "yes" ]; then 
 | 
						|
		echo -n "$1"
 | 
						|
		ans=$2
 | 
						|
		echo $ans
 | 
						|
	elif [ "$DEFAULT" = "-d" -a -n "$3" ]; then
 | 
						|
		echo "$1"
 | 
						|
		ans=$2
 | 
						|
	else
 | 
						|
		echo -n "$1"
 | 
						|
		[ -z "$3" ] && echo -n "(NEW) "
 | 
						|
		IFS='@' read ans || exit 1
 | 
						|
		[ -z "$ans" ] && ans=$2
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# comment does some pretty-printing
 | 
						|
#
 | 
						|
#	comment 'xxx'
 | 
						|
# 
 | 
						|
function comment () {
 | 
						|
	echo "*"; echo "* $1" ; echo "*"
 | 
						|
	(echo "" ; echo "#"; echo "# $1" ; echo "#") >>$CONFIG
 | 
						|
	(echo "" ; echo "/*"; echo " * $1" ; echo " */") >>$CONFIG_H
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# define_bool sets the value of a boolean argument
 | 
						|
#
 | 
						|
#	define_bool define value
 | 
						|
#
 | 
						|
function define_bool () {
 | 
						|
	define_tristate $1 $2
 | 
						|
}
 | 
						|
 | 
						|
function define_tristate () {
 | 
						|
	case "$2" in
 | 
						|
	 "y")
 | 
						|
		echo "$1=y" >>$CONFIG
 | 
						|
		echo "#define $1 1" >>$CONFIG_H
 | 
						|
		;;
 | 
						|
 | 
						|
	 "m")
 | 
						|
		echo "$1=m" >>$CONFIG
 | 
						|
		echo "#undef  $1" >>$CONFIG_H
 | 
						|
		echo "#define $1_MODULE 1" >>$CONFIG_H
 | 
						|
		;;
 | 
						|
 | 
						|
	 "n")
 | 
						|
		echo "# $1 is not set" >>$CONFIG
 | 
						|
		echo "#undef  $1" >>$CONFIG_H
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
	eval "$1=$2"
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# bool processes a boolean argument
 | 
						|
#
 | 
						|
#	bool question define
 | 
						|
#
 | 
						|
function bool () {
 | 
						|
	old=$(eval echo "\${$2}")
 | 
						|
	def=${old:-'n'}
 | 
						|
	if [ "$AUTO" = "yes" -a -z "$old" ]; then
 | 
						|
	  if [ "$RND" = "-r" ]; then
 | 
						|
	    rnd 2
 | 
						|
	    case $rnd in
 | 
						|
	      "1") def="y" ;;
 | 
						|
	      "2") def="n" ;;
 | 
						|
	    esac
 | 
						|
	  else
 | 
						|
	    def=$DEF_ANS;
 | 
						|
	  fi
 | 
						|
	fi
 | 
						|
	case "$def" in
 | 
						|
	 "y" | "m") defprompt="Y/n/?"
 | 
						|
	      def="y"
 | 
						|
	      ;;
 | 
						|
	 "n") defprompt="N/y/?"
 | 
						|
	      ;;
 | 
						|
	esac
 | 
						|
	while :; do
 | 
						|
	  readln "$1 ($2) [$defprompt] " "$def" "$old"
 | 
						|
	  case "$ans" in
 | 
						|
	    [yY] | [yY]es ) define_bool "$2" "y"
 | 
						|
			    break;;
 | 
						|
	    [nN] | [nN]o )  define_bool "$2" "n"
 | 
						|
			    break;;
 | 
						|
	    * )             help "$2"
 | 
						|
			    ;;
 | 
						|
	  esac
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# tristate processes a tristate argument
 | 
						|
#
 | 
						|
#	tristate question define
 | 
						|
#
 | 
						|
function tristate () {
 | 
						|
	if [ "$CONFIG_MODULES" != "y" ]; then
 | 
						|
	  bool "$1" "$2"
 | 
						|
	else 
 | 
						|
	  old=$(eval echo "\${$2}")
 | 
						|
	  def=${old:-'n'}
 | 
						|
	  if [ "$AUTO" = "yes" -a -z "$old" ]; then
 | 
						|
	     if [ "$RND" = "-r" ]; then 
 | 
						|
	      rnd 3
 | 
						|
	      case $rnd in
 | 
						|
	        "1") def="y" ;;
 | 
						|
	        "2") def="n" ;;
 | 
						|
	        "3") def="m" ;;
 | 
						|
	      esac
 | 
						|
	    else
 | 
						|
	      def=$DEF_ANS
 | 
						|
	    fi
 | 
						|
	  fi
 | 
						|
	  case "$def" in
 | 
						|
	   "y") defprompt="Y/m/n/?"
 | 
						|
		;;
 | 
						|
	   "m") defprompt="M/n/y/?"
 | 
						|
		;;
 | 
						|
	   "n") defprompt="N/y/m/?"
 | 
						|
		;;
 | 
						|
	  esac
 | 
						|
	  while :; do
 | 
						|
	    readln "$1 ($2) [$defprompt] " "$def" "$old"
 | 
						|
	    case "$ans" in
 | 
						|
	      [yY] | [yY]es ) define_tristate "$2" "y"
 | 
						|
			      break ;;
 | 
						|
	      [nN] | [nN]o )  define_tristate "$2" "n"
 | 
						|
			      break ;;
 | 
						|
	      [mM] )          define_tristate "$2" "m"
 | 
						|
			      break ;;
 | 
						|
	      * )             help "$2"
 | 
						|
			      ;;
 | 
						|
	    esac
 | 
						|
	  done
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# dep_tristate processes a tristate argument that depends upon
 | 
						|
# another option or options.  If any of the options we depend upon is a
 | 
						|
# module, then the only allowable options are M or N.  If all are Y, then
 | 
						|
# this is a normal tristate.  This is used in cases where modules
 | 
						|
# are nested, and one module requires the presence of something
 | 
						|
# else in the kernel.
 | 
						|
#
 | 
						|
#	dep_tristate question define default ...
 | 
						|
#
 | 
						|
function dep_tristate () {
 | 
						|
	old=$(eval echo "\${$2}")
 | 
						|
	def=${old:-'n'}
 | 
						|
	ques=$1
 | 
						|
	var=$2
 | 
						|
	need_module=0
 | 
						|
	shift 2
 | 
						|
	while [ $# -gt 0 ]; do
 | 
						|
	  case "$1" in
 | 
						|
 	    n)
 | 
						|
	      define_tristate "$var" "n"
 | 
						|
	      return
 | 
						|
	      ;;
 | 
						|
	    m)
 | 
						|
	      need_module=1
 | 
						|
	      ;;
 | 
						|
	  esac
 | 
						|
	  shift
 | 
						|
	done
 | 
						|
 | 
						|
	if [ $need_module = 1 ]; then
 | 
						|
	   if [ "$CONFIG_MODULES" = "y" ]; then
 | 
						|
		if [ "$AUTO" = "yes" -a -z "$old" ]; then
 | 
						|
		   if [ "$RND" = "-r" ]; then
 | 
						|
		      rnd 2
 | 
						|
		      case $rnd in
 | 
						|
			"1") def="m" ;;
 | 
						|
			"2") def="n" ;;
 | 
						|
		      esac
 | 
						|
		   else
 | 
						|
		      def=$DEF_ANS
 | 
						|
		   fi
 | 
						|
		fi
 | 
						|
		case "$def" in
 | 
						|
		 "y" | "m") defprompt="M/n/?"
 | 
						|
		      def="m"
 | 
						|
		      ;;
 | 
						|
		 "n") defprompt="N/m/?"
 | 
						|
		      ;;
 | 
						|
		esac
 | 
						|
		while :; do
 | 
						|
		  readln "$ques ($var) [$defprompt] " "$def" "$old"
 | 
						|
		  case "$ans" in
 | 
						|
		      [nN] | [nN]o )  define_tristate "$var" "n"
 | 
						|
				      break ;;
 | 
						|
		      [mM] )          define_tristate "$var" "m"
 | 
						|
				      break ;;
 | 
						|
		      [yY] | [yY]es ) echo 
 | 
						|
   echo "  This answer is not allowed, because it is not consistent with"
 | 
						|
   echo "  your other choices."
 | 
						|
   echo "  This driver depends on another one which you chose to compile"
 | 
						|
   echo "  as a module. This means that you can either compile this one"
 | 
						|
   echo "  as a module as well (with M) or leave it out altogether (N)."
 | 
						|
				      echo
 | 
						|
				      ;;
 | 
						|
		      * )             help "$var"
 | 
						|
				      ;;
 | 
						|
		  esac
 | 
						|
		done
 | 
						|
	   fi
 | 
						|
	else
 | 
						|
	   tristate "$ques" "$var"
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
function dep_bool () {
 | 
						|
	ques=$1
 | 
						|
	var=$2
 | 
						|
	shift 2
 | 
						|
	while [ $# -gt 0 ]; do
 | 
						|
	  case "$1" in
 | 
						|
	    m | n)
 | 
						|
	      define_bool "$var" "n"
 | 
						|
	      return
 | 
						|
	      ;;
 | 
						|
	  esac
 | 
						|
	  shift
 | 
						|
	done
 | 
						|
 | 
						|
	bool "$ques" "$var"
 | 
						|
}
 | 
						|
 | 
						|
function dep_mbool () {
 | 
						|
	ques=$1
 | 
						|
	var=$2
 | 
						|
	shift 2
 | 
						|
	while [ $# -gt 0 ]; do
 | 
						|
	  case "$1" in
 | 
						|
	    n)
 | 
						|
	      define_bool "$var" "n"
 | 
						|
	      return
 | 
						|
	      ;;
 | 
						|
	  esac
 | 
						|
	  shift
 | 
						|
	done
 | 
						|
 | 
						|
	bool "$ques" "$var"
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# define_int sets the value of a integer argument
 | 
						|
#
 | 
						|
#	define_int define value
 | 
						|
#
 | 
						|
function define_int () {
 | 
						|
	echo "$1=$2" >>$CONFIG
 | 
						|
	echo "#define $1 ($2)" >>$CONFIG_H
 | 
						|
	eval "$1=$2"
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# int processes an integer argument with optional limits
 | 
						|
#
 | 
						|
#	int question define default [min max]
 | 
						|
#
 | 
						|
function int () {
 | 
						|
	old=$(eval echo "\${$2}")
 | 
						|
	def=${old:-$3}
 | 
						|
	if [ $# -gt 3 ]; then
 | 
						|
	  min=$4
 | 
						|
	else
 | 
						|
	  min=-10000000    # !!
 | 
						|
	fi
 | 
						|
	if [ $# -gt 4 ]; then
 | 
						|
	  max=$5
 | 
						|
	else
 | 
						|
	  max=10000000     # !!
 | 
						|
	fi
 | 
						|
	rndval $2
 | 
						|
	while :; do
 | 
						|
	  readln "$1 ($2) [$def] " "$def" "$old"
 | 
						|
	  if expr \( \( $ans + 0 \) \>= $min \) \& \( $ans \<= $max \) >/dev/null 2>&1 ; then
 | 
						|
            define_int "$2" "$ans"
 | 
						|
	    break
 | 
						|
          else
 | 
						|
	    help "$2"
 | 
						|
          fi
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# define_hex sets the value of a hexadecimal argument
 | 
						|
#
 | 
						|
#	define_hex define value
 | 
						|
#
 | 
						|
function define_hex () {
 | 
						|
	echo "$1=$2" >>$CONFIG
 | 
						|
	echo "#define $1 0x${2#*[x,X]}" >>$CONFIG_H
 | 
						|
	eval "$1=$2"
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# hex processes an hexadecimal argument
 | 
						|
#
 | 
						|
#	hex question define default
 | 
						|
#
 | 
						|
function hex () {
 | 
						|
	old=$(eval echo "\${$2}")
 | 
						|
	def=${old:-$3}
 | 
						|
	def=${def#*[x,X]}
 | 
						|
	rndval $2
 | 
						|
	while :; do
 | 
						|
	  readln "$1 ($2) [$def] " "$def" "$old"
 | 
						|
	  ans=${ans#*[x,X]}
 | 
						|
	  if expr "$ans" : '[0-9a-fA-F][0-9a-fA-F]*$' > /dev/null; then
 | 
						|
	    define_hex "$2" "$ans"
 | 
						|
	    break
 | 
						|
	  else
 | 
						|
	    help "$2"
 | 
						|
	  fi
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# define_string sets the value of a string argument
 | 
						|
#
 | 
						|
#	define_string define value
 | 
						|
#
 | 
						|
function define_string () {
 | 
						|
	echo "$1=\"$2\"" >>$CONFIG
 | 
						|
	echo "#define $1 \"$2\"" >>$CONFIG_H
 | 
						|
	eval "$1=\"$2\""
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# string processes a string argument
 | 
						|
#
 | 
						|
#	string question define default
 | 
						|
#
 | 
						|
function string () {
 | 
						|
	old=$(eval echo "\${$2}")
 | 
						|
	def=${old:-$3}
 | 
						|
	while :; do
 | 
						|
          if [ "$old" = "?" ]; then
 | 
						|
             readln "$1 ($2) [$def] " "$def" ""
 | 
						|
          else
 | 
						|
	     readln "$1 ($2) [$def] " "$def" "$old"
 | 
						|
          fi
 | 
						|
	  if [ "$ans" = "?" ]; then
 | 
						|
	    help "$2"
 | 
						|
	  else
 | 
						|
	    break
 | 
						|
	  fi
 | 
						|
	done
 | 
						|
	define_string "$2" "$ans"
 | 
						|
}
 | 
						|
#
 | 
						|
# choice processes a choice list (1-out-of-n)
 | 
						|
#
 | 
						|
#	choice question choice-list default
 | 
						|
#
 | 
						|
# The choice list has a syntax of:
 | 
						|
#	NAME WHITESPACE VALUE { WHITESPACE NAME WHITESPACE VALUE }
 | 
						|
# The user may enter any unique prefix of one of the NAMEs and
 | 
						|
# choice will define VALUE as if it were a boolean option.
 | 
						|
# VALUE must be in all uppercase.  Normally, VALUE is of the
 | 
						|
# form CONFIG_<something>.  Thus, if the user selects <something>,
 | 
						|
# the CPP symbol CONFIG_<something> will be defined and the
 | 
						|
# shell variable CONFIG_<something> will be set to "y".
 | 
						|
#
 | 
						|
function choice () {
 | 
						|
	question="$1"
 | 
						|
	choices="$2"
 | 
						|
	old=
 | 
						|
	def=$3
 | 
						|
 | 
						|
	# determine default answer:
 | 
						|
	names=""
 | 
						|
	set -- $choices
 | 
						|
	firstvar=$2
 | 
						|
	while [ -n "$2" ]; do
 | 
						|
		if [ -n "$names" ]; then
 | 
						|
			names="$names, $1"
 | 
						|
		else
 | 
						|
			names="$1"
 | 
						|
		fi
 | 
						|
		if [ "$(eval echo \"\${$2}\")" = "y" ]; then
 | 
						|
			old=$1
 | 
						|
			def=$1
 | 
						|
		fi
 | 
						|
		shift; shift
 | 
						|
	done
 | 
						|
 | 
						|
	if [ "$RND" = "-r" -a -z "$old" ] ; then 
 | 
						|
	  set -- $choices
 | 
						|
	  rnd $#
 | 
						|
	  while [ $rnd -le $# ] ; do 
 | 
						|
	    def=$1
 | 
						|
	    shift ; shift
 | 
						|
	  done
 | 
						|
	fi
 | 
						|
 | 
						|
	val=""
 | 
						|
	while [ -z "$val" ]; do
 | 
						|
		ambg=n
 | 
						|
		readln "$question ($names) [$def] " "$def" "$old"
 | 
						|
		ans=$(echo $ans | tr a-z A-Z)
 | 
						|
		set -- $choices
 | 
						|
		while [ -n "$1" ]; do
 | 
						|
			name=$(echo $1 | tr a-z A-Z)
 | 
						|
			case "$name" in
 | 
						|
				"$ans"* | */"$ans"* )
 | 
						|
					case "$name" in
 | 
						|
						"$ans" | */"$ans"/* | \
 | 
						|
						"$ans"/* | */"$ans" )
 | 
						|
							val="$2"
 | 
						|
							break # exact match
 | 
						|
						;;
 | 
						|
					esac
 | 
						|
					if [ -n "$val" ]; then
 | 
						|
						echo;echo \
 | 
						|
		"  Sorry, \"$ans\" is ambiguous; please enter a longer string."
 | 
						|
						echo
 | 
						|
						val=""
 | 
						|
						ambg=y
 | 
						|
						break
 | 
						|
					else
 | 
						|
						val="$2"
 | 
						|
					fi;;
 | 
						|
			esac
 | 
						|
			shift; shift
 | 
						|
		done
 | 
						|
		if [ "$val" = "" -a "$ambg" = "n" ]; then
 | 
						|
			help "$firstvar"
 | 
						|
		fi
 | 
						|
	done
 | 
						|
	set -- $choices
 | 
						|
	while [ -n "$2" ]; do
 | 
						|
		if [ "$2" = "$val" ]; then
 | 
						|
			echo "  defined $val"
 | 
						|
			define_bool "$2" "y"
 | 
						|
		else
 | 
						|
			define_bool "$2" "n"
 | 
						|
		fi
 | 
						|
		shift; shift
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
CONFIG=.tmpconfig
 | 
						|
CONFIG_H=.tmpconfig.h
 | 
						|
FORCE_DEFAULT=.force_default
 | 
						|
trap "rm -f $CONFIG $CONFIG_H ; exit 1" 1 2
 | 
						|
 | 
						|
#
 | 
						|
# Make sure we start out with a clean slate.
 | 
						|
#
 | 
						|
echo "#" > $CONFIG
 | 
						|
echo "# Automatically generated make config: don't edit" >> $CONFIG
 | 
						|
echo "#" >> $CONFIG
 | 
						|
 | 
						|
echo "/*" > $CONFIG_H
 | 
						|
echo " * Automatically generated C config: don't edit" >> $CONFIG_H
 | 
						|
echo " */" >> $CONFIG_H
 | 
						|
echo "#define AUTOCONF_INCLUDED" >> $CONFIG_H
 | 
						|
 | 
						|
DEFAULT=""
 | 
						|
if [ "$1" = "-d" ] ; then
 | 
						|
	DEFAULT="-d"
 | 
						|
	shift
 | 
						|
fi
 | 
						|
 | 
						|
RND=""
 | 
						|
DEF_ANS=""
 | 
						|
AUTO=""
 | 
						|
case "$1" in 
 | 
						|
	-r) RND="-r" ; AUTO="yes" ; shift ;;
 | 
						|
	-y) DEF_ANS="y" ; AUTO="yes" ; shift ;;
 | 
						|
	-m) DEF_ANS="m" ; AUTO="yes" ; shift ;;
 | 
						|
	-n) DEF_ANS="n" ; AUTO="yes" ; shift ;;
 | 
						|
esac
 | 
						|
 | 
						|
CONFIG_IN=./config.in
 | 
						|
if [ "$1" != "" ] ; then
 | 
						|
	CONFIG_IN=$1
 | 
						|
fi
 | 
						|
 | 
						|
DEFAULTS=sysdeps/$TARGET_OS/defconfig
 | 
						|
if [ -f .config ]; then
 | 
						|
  DEFAULTS=.config
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$AUTO" != "yes" ]; then
 | 
						|
  if [ -f $DEFAULTS ]; then
 | 
						|
    echo "#"
 | 
						|
    echo "# Using defaults found in" $DEFAULTS
 | 
						|
    echo "#"
 | 
						|
    . $DEFAULTS
 | 
						|
    sed -e 's/# \(CONFIG_[^ ]*\) is not.*/\1=n/' <$DEFAULTS >.config-is-not.$$
 | 
						|
    . .config-is-not.$$
 | 
						|
    rm .config-is-not.$$
 | 
						|
  else
 | 
						|
    echo "#"
 | 
						|
    echo "# No defaults found"
 | 
						|
    echo "#"
 | 
						|
  fi
 | 
						|
else
 | 
						|
  if [ -f $FORCE_DEFAULT ]; then
 | 
						|
    echo "#"
 | 
						|
    echo "# Forcing defaults found in $FORCE_DEFAULT"
 | 
						|
    echo "#"
 | 
						|
    sed -e '
 | 
						|
s/# \(CONFIG_[^ ]*\) is not.*/\1=n/;
 | 
						|
s/# range \(CONFIG_[^ ]*\) \([^ ][^ ]*\) \([^ ][^ ]*\)/MIN_\1=\2; MAX_\1=\3/;
 | 
						|
s/# list \(CONFIG_[^ ]*\) \([^ ][^ ]*\)/LIST_\1=\2/
 | 
						|
' <$FORCE_DEFAULT >.default_val.$$
 | 
						|
    . .default_val.$$
 | 
						|
    rm .default_val.$$
 | 
						|
  else
 | 
						|
    echo "#"
 | 
						|
    echo "# No defaults found"
 | 
						|
    echo "#"
 | 
						|
  fi 
 | 
						|
fi
 | 
						|
 | 
						|
. $CONFIG_IN
 | 
						|
 | 
						|
rm -f .config.old
 | 
						|
if [ -f .config ]; then
 | 
						|
	mv .config .config.old
 | 
						|
fi
 | 
						|
mv .tmpconfig .config
 | 
						|
mv .tmpconfig.h include/config.h
 | 
						|
 | 
						|
echo
 | 
						|
echo "*** End of BusyBox configuration."
 | 
						|
echo "*** Check the top-level Makefile for additional configuration."
 | 
						|
if [ ! -f .hdepend -o "$CONFIG_MODVERSIONS" = "y" ] ; then
 | 
						|
    echo "*** Next, you must run 'make dep'."
 | 
						|
else
 | 
						|
    echo "*** Next, you may run 'make', or 'make install'."
 | 
						|
fi
 | 
						|
echo
 | 
						|
 | 
						|
exit 0
 |