1288 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			1288 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#! /bin/sh
 | 
						||
#
 | 
						||
# This script is used to configure BusyBox.
 | 
						||
#
 | 
						||
# It was inspired by a desire to not have to hit <enter> 9 million times
 | 
						||
# or startup the X server just to change a single kernel parameter.  
 | 
						||
#
 | 
						||
# This script attempts to parse the configuration files, which are
 | 
						||
# scattered throughout the kernel source tree, and creates a temporary
 | 
						||
# set of mini scripts which are in turn used to create nested menus and
 | 
						||
# radiolists.
 | 
						||
#
 | 
						||
# It uses a very modified/mutilated version of the "dialog" utility
 | 
						||
# written by Savio Lam (lam836@cs.cuhk.hk). Savio is not responsible
 | 
						||
# for this script or the version of dialog used by this script.
 | 
						||
# Please do not contact him with questions. The official version of 
 | 
						||
# dialog is available at sunsite.unc.edu or a sunsite mirror.
 | 
						||
#
 | 
						||
# Portions of this script were borrowed from the original Configure
 | 
						||
# script.
 | 
						||
#
 | 
						||
# William Roadcap was the original author of Menuconfig.
 | 
						||
# Michael Elizabeth Chastain (mec@shout.net) is the current maintainer.
 | 
						||
#
 | 
						||
# 070497 Bernhard Kaindl (bkaindl@netway.at) - get default values for
 | 
						||
# new bool, tristate and dep_tristate parameters from the defconfig file.
 | 
						||
# new configuration parameters are marked with '(NEW)' as in make config.
 | 
						||
#
 | 
						||
# 180697 Bernhard Kaindl (bkaindl@netway.at) - added the needed support
 | 
						||
# for string options. They are handled like the int and hex options.
 | 
						||
#
 | 
						||
# 081297 Pavel Machek (pavel@atrey.karlin.mff.cuni.cz) - better error 
 | 
						||
# handling
 | 
						||
#
 | 
						||
# 131197 Michael Chastain (mec@shout.net) - output all lines for a
 | 
						||
# choice list, not just the selected one.  This makes the output
 | 
						||
# the same as Configure output, which is important for smart config
 | 
						||
# dependencies.
 | 
						||
#
 | 
						||
# 101297 Michael Chastain (mec@shout.net) - remove sound driver cruft.
 | 
						||
#
 | 
						||
# 221297 Michael Chastain (mec@shout.net) - make define_bool actually
 | 
						||
# define its arguments so that later tests on them work right.
 | 
						||
#
 | 
						||
# 160198 Michael Chastain (mec@shout.net) - fix bug with 'c' command
 | 
						||
# (complement existing value) when used on virgin uninitialized variables.
 | 
						||
#
 | 
						||
# 090398 Axel Boldt (boldt@math.ucsb.edu) - allow for empty lines in help
 | 
						||
# texts.
 | 
						||
#
 | 
						||
# 12 Dec 1998, Michael Elizabeth Chastain (mec@shout.net)
 | 
						||
# Remove a /tmp security hole in get_def (also makes it faster).
 | 
						||
# Give uninitialized variables canonical values rather than null value.
 | 
						||
# Change a lot of places to call set_x_info uniformly.
 | 
						||
# Take out message about preparing version (old sound driver cruft).
 | 
						||
#
 | 
						||
# 13 Dec 1998, Riley H Williams <rhw@memalpha.cx>
 | 
						||
# When an error occurs, actually display the error message as well as
 | 
						||
# our comments thereon.
 | 
						||
#
 | 
						||
# 31 Dec 1998, Michael Elizabeth Chastain (mec@shout.net)
 | 
						||
# Fix mod_bool to honor $CONFIG_MODULES.
 | 
						||
# Fix dep_tristate to call define_bool when dependency is "n".
 | 
						||
#
 | 
						||
# 02 January 1999, Michael Elizabeth Chastain (mec@shout.net)
 | 
						||
# Blow away lxdialog.scrltmp on entry to activate_menu.  This protects
 | 
						||
# against people who use commands like ' ' to select menus.
 | 
						||
#
 | 
						||
# 24 January 1999, Michael Elizabeth Chastain, <mec@shout.net>
 | 
						||
# - Improve the exit message (Jeff Ronne).
 | 
						||
#
 | 
						||
# 06 July 1999, Andrzej M. Krzysztofowicz, <ankry@mif.pg.gda.pl>
 | 
						||
# - Support for multiple conditions in dep_tristate().
 | 
						||
# - Implemented new functions: define_tristate(), define_int(), define_hex(),
 | 
						||
#   define_string(), dep_bool().
 | 
						||
# 
 | 
						||
# 22 October 2001, Erik Andersen <andersee@debian.org>
 | 
						||
# - Adjusted for busybox (modified hard coded kernel specific paths, 
 | 
						||
#   and everything to do with modules (tristates, modbools, etc).
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# Change this to TRUE if you prefer all options listed
 | 
						||
# in a single menu rather than the standard menu hierarchy.
 | 
						||
#
 | 
						||
single_menu_mode=
 | 
						||
 | 
						||
#
 | 
						||
# Make sure we're really running bash.
 | 
						||
#
 | 
						||
[ -z "$BASH" ] && { echo "Menuconfig requires bash" 1>&2; exit 1; }
 | 
						||
 | 
						||
#
 | 
						||
# Cache function definitions, turn off posix compliance
 | 
						||
#
 | 
						||
set -h +o posix
 | 
						||
 | 
						||
 | 
						||
 | 
						||
# Given a configuration variable, set the global variable $x to its value,
 | 
						||
# and the global variable $info to the string " (NEW)" if this is a new
 | 
						||
# variable.
 | 
						||
#
 | 
						||
# This function looks for: (1) the current value, or (2) the default value
 | 
						||
# from the arch-dependent defconfig file, or (3) a default passed by the caller.
 | 
						||
 | 
						||
function set_x_info () {
 | 
						||
    eval x=\$$1
 | 
						||
    if [ -z "$x" ]; then
 | 
						||
	eval `sed -n -e 's/# \(.*\) is not set.*/\1=n/' -e "/^$1=/p" sysdeps/$TARGET_OS/defconfig`
 | 
						||
	eval x=\${$1:-"$2"}
 | 
						||
	eval $1=$x
 | 
						||
	eval INFO_$1="' (NEW)'"
 | 
						||
    fi
 | 
						||
    eval info="\$INFO_$1"
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Load the functions used by the config.in files.
 | 
						||
#
 | 
						||
# I do this because these functions must be redefined depending
 | 
						||
# on whether they are being called for interactive use or for
 | 
						||
# saving a configuration to a file.
 | 
						||
#
 | 
						||
# Thank the heavens bash supports nesting function definitions.
 | 
						||
#
 | 
						||
load_functions () {
 | 
						||
 | 
						||
#
 | 
						||
# Additional comments
 | 
						||
#
 | 
						||
function comment () {
 | 
						||
	comment_ctr=$[ comment_ctr + 1 ]
 | 
						||
	echo -ne "': $comment_ctr' '--- $1' " >>MCmenu
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Define a boolean to a specific value.
 | 
						||
#
 | 
						||
function define_bool () {
 | 
						||
	eval $1=$2
 | 
						||
}
 | 
						||
 | 
						||
function define_hex () {
 | 
						||
	eval $1=$2
 | 
						||
}
 | 
						||
 | 
						||
function define_int () {
 | 
						||
	eval $1=$2
 | 
						||
}
 | 
						||
 | 
						||
function define_string () {
 | 
						||
	eval $1="$2"
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Create a boolean (Yes/No) function for our current menu
 | 
						||
# which calls our local bool function.
 | 
						||
#
 | 
						||
function bool () {
 | 
						||
	set_x_info "$2" "n"
 | 
						||
 | 
						||
	case $x in
 | 
						||
	y|m)	flag="*" ;;
 | 
						||
	n)	flag=" " ;;
 | 
						||
	esac
 | 
						||
 | 
						||
	echo -ne "'$2' '[$flag] $1$info' " >>MCmenu
 | 
						||
 | 
						||
	echo -e "function $2 () { l_bool '$2' \"\$1\" ;}\n" >>MCradiolists
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
#   Same as above, but now only Y and N are allowed as dependency
 | 
						||
#   (i.e. third and next arguments).
 | 
						||
#
 | 
						||
function dep_bool () {
 | 
						||
	ques="$1"
 | 
						||
	var="$2"
 | 
						||
	dep=y
 | 
						||
	shift 2
 | 
						||
	while [ $# -gt 0 ]; do
 | 
						||
		if [ "$1" = y ]; then
 | 
						||
			shift
 | 
						||
		else
 | 
						||
			dep=n
 | 
						||
			shift $#
 | 
						||
		fi
 | 
						||
	done
 | 
						||
	if [ "$dep" = y ]; then
 | 
						||
	    bool "$ques" "$var"
 | 
						||
	else 
 | 
						||
	    define_bool "$var" n
 | 
						||
	fi
 | 
						||
}
 | 
						||
 | 
						||
function dep_mbool () {
 | 
						||
	ques="$1"
 | 
						||
	var="$2"
 | 
						||
	dep=y
 | 
						||
	shift 2
 | 
						||
	while [ $# -gt 0 ]; do
 | 
						||
		if [ "$1" = y -o "$1" = m ]; then
 | 
						||
			shift
 | 
						||
		else
 | 
						||
			dep=n
 | 
						||
			shift $#
 | 
						||
		fi
 | 
						||
	done
 | 
						||
	if [ "$dep" = y ]; then
 | 
						||
	    bool "$ques" "$var"
 | 
						||
	else 
 | 
						||
	    define_bool "$var" n
 | 
						||
	fi
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Add a menu item which will call our local int function.
 | 
						||
# 
 | 
						||
function int () {
 | 
						||
	set_x_info "$2" "$3"
 | 
						||
 | 
						||
	echo -ne "'$2' '($x) $1$info' " >>MCmenu
 | 
						||
 | 
						||
	echo -e "function $2 () { l_int '$1' '$2' '$3' '$x' ;}" >>MCradiolists
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Add a menu item which will call our local hex function.
 | 
						||
# 
 | 
						||
function hex () {
 | 
						||
	set_x_info "$2" "$3"
 | 
						||
	x=${x##*[x,X]}
 | 
						||
 | 
						||
	echo -ne "'$2' '($x) $1$info' " >>MCmenu
 | 
						||
 | 
						||
	echo -e "function $2 () { l_hex '$1' '$2' '$3' '$x' ;}" >>MCradiolists
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Add a menu item which will call our local string function.
 | 
						||
# 
 | 
						||
function string () {
 | 
						||
	set_x_info "$2" "$3"
 | 
						||
 | 
						||
	echo -ne "'$2' '     $1: \"$x\"$info' " >>MCmenu
 | 
						||
 | 
						||
	echo -e "function $2 () { l_string '$1' '$2' '$3' '$x' ;}" >>MCradiolists
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Add a menu item which will call our local One-of-Many choice list.
 | 
						||
#
 | 
						||
function choice () {
 | 
						||
	#
 | 
						||
	# Need to remember params cause they're gonna get reset.
 | 
						||
	#
 | 
						||
	title=$1
 | 
						||
	choices=$2
 | 
						||
	default=$3
 | 
						||
	current=
 | 
						||
 | 
						||
	#
 | 
						||
	# Find out if one of the choices is already set.
 | 
						||
	# If it's not then make it the default.
 | 
						||
	#
 | 
						||
	set -- $choices
 | 
						||
	firstchoice=$2
 | 
						||
 | 
						||
	while [ -n "$2" ]
 | 
						||
	do
 | 
						||
		if eval [ "_\$$2" = "_y" ]
 | 
						||
		then
 | 
						||
			current=$1
 | 
						||
			break
 | 
						||
		fi
 | 
						||
		shift ; shift
 | 
						||
	done
 | 
						||
 | 
						||
	: ${current:=$default}
 | 
						||
 | 
						||
	echo -ne "'$firstchoice' '($current) $title' " >>MCmenu
 | 
						||
 | 
						||
	echo -e "
 | 
						||
	function $firstchoice () \
 | 
						||
		{ l_choice '$title' \"$choices\" \"$current\" ;}" >>MCradiolists
 | 
						||
}
 | 
						||
 | 
						||
} # END load_functions()
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# Extract available help for an option from Configure.help
 | 
						||
# and send it to standard output.
 | 
						||
#
 | 
						||
# Most of this function was borrowed from the original kernel
 | 
						||
# Configure script.
 | 
						||
#
 | 
						||
function extract_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
 | 
						||
                        s/^  //
 | 
						||
			/<file:\\([^>]*\\)>/s//\\1/g
 | 
						||
                        p
 | 
						||
		    }" docs/Configure.help)
 | 
						||
 | 
						||
     if [ -z "$text" ]
 | 
						||
     then
 | 
						||
          echo "There is no help available for this option."
 | 
						||
	  return 1
 | 
						||
     else
 | 
						||
	  echo "$text"
 | 
						||
     fi
 | 
						||
  else
 | 
						||
	 echo "There is no help available for this option."
 | 
						||
         return 1
 | 
						||
  fi
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Activate a help dialog.
 | 
						||
#
 | 
						||
function help () {
 | 
						||
	if extract_help $1 >help.out
 | 
						||
	then
 | 
						||
		$DIALOG	--backtitle "$backtitle" --title "$2"\
 | 
						||
			--textbox help.out $ROWS $COLS
 | 
						||
	else
 | 
						||
		$DIALOG	--backtitle "$backtitle" \
 | 
						||
			--textbox help.out $ROWS $COLS
 | 
						||
	fi
 | 
						||
	rm -f help.out
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Show the README file.
 | 
						||
#
 | 
						||
function show_readme () {
 | 
						||
	$DIALOG --backtitle "$backtitle" \
 | 
						||
		--textbox scripts/README.Menuconfig $ROWS $COLS
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Begin building the dialog menu command and Initialize the 
 | 
						||
# Radiolist function file.
 | 
						||
#
 | 
						||
function menu_name () {
 | 
						||
	echo -ne "$DIALOG --title '$1'\
 | 
						||
			--backtitle '$backtitle' \
 | 
						||
			--menu '$menu_instructions' \
 | 
						||
			$ROWS $COLS $((ROWS-10)) \
 | 
						||
			'$default' " >MCmenu
 | 
						||
	>MCradiolists
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Add a submenu option to the menu currently under construction.
 | 
						||
#
 | 
						||
function submenu () {
 | 
						||
	echo -ne "'activate_menu $2' '$1  --->' " >>MCmenu
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Handle a boolean (Yes/No) option.
 | 
						||
#
 | 
						||
function l_bool () {
 | 
						||
	if [ -n "$2" ]
 | 
						||
	then
 | 
						||
		case "$2" in
 | 
						||
		y|m)	eval $1=y ;;
 | 
						||
		c)	eval x=\$$1
 | 
						||
		   	case $x in
 | 
						||
		   	y) eval $1=n ;;
 | 
						||
		   	n) eval $1=y ;;
 | 
						||
			*) eval $1=y ;;
 | 
						||
		   	esac ;;
 | 
						||
		*)	eval $1=n ;;
 | 
						||
		esac
 | 
						||
	else
 | 
						||
		echo -ne "\007"
 | 
						||
	fi
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Create a dialog for entering an integer into a option.
 | 
						||
#
 | 
						||
function l_int () {
 | 
						||
	while true
 | 
						||
	do
 | 
						||
		if $DIALOG --title "$1" \
 | 
						||
			--backtitle "$backtitle" \
 | 
						||
			--inputbox "$inputbox_instructions_int" \
 | 
						||
			10 75 "$4" 2>MCdialog.out
 | 
						||
		then
 | 
						||
			answer="`cat MCdialog.out`"
 | 
						||
			answer="${answer:-$3}"
 | 
						||
 | 
						||
			# Semantics of + and ? in GNU expr changed, so
 | 
						||
			# we avoid them:
 | 
						||
			if expr "$answer" : '0$' '|' "$answer" : '[1-9][0-9]*$' '|' "$answer" : '-[1-9][0-9]*$' >/dev/null
 | 
						||
			then
 | 
						||
				eval $2="$answer"
 | 
						||
			else
 | 
						||
				eval $2="$3"
 | 
						||
				echo -en "\007"
 | 
						||
				${DIALOG} --backtitle "$backtitle" \
 | 
						||
					--infobox "You have made an invalid entry." 3 43
 | 
						||
				sleep 2
 | 
						||
			fi
 | 
						||
 | 
						||
			break
 | 
						||
		fi
 | 
						||
 | 
						||
		help "$2" "$1"
 | 
						||
	done
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Create a dialog for entering a hexadecimal into an option.
 | 
						||
#
 | 
						||
function l_hex () {
 | 
						||
	while true
 | 
						||
	do
 | 
						||
		if $DIALOG --title "$1" \
 | 
						||
			--backtitle "$backtitle" \
 | 
						||
			--inputbox "$inputbox_instructions_hex" \
 | 
						||
			10 75 "$4" 2>MCdialog.out
 | 
						||
		then
 | 
						||
			answer="`cat MCdialog.out`"
 | 
						||
			answer="${answer:-$3}"
 | 
						||
			answer="${answer##*[x,X]}"
 | 
						||
 | 
						||
			if expr "$answer" : '[0-9a-fA-F][0-9a-fA-F]*$' >/dev/null
 | 
						||
			then
 | 
						||
				eval $2="$answer"
 | 
						||
			else
 | 
						||
				eval $2="$3"
 | 
						||
				echo -en "\007"
 | 
						||
				${DIALOG} --backtitle "$backtitle" \
 | 
						||
					--infobox "You have made an invalid entry." 3 43
 | 
						||
				sleep 2
 | 
						||
			fi
 | 
						||
 | 
						||
			break
 | 
						||
		fi
 | 
						||
 | 
						||
		help "$2" "$1"
 | 
						||
	done
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Create a dialog for entering a string into an option.
 | 
						||
#
 | 
						||
function l_string () {
 | 
						||
	while true
 | 
						||
	do
 | 
						||
		if $DIALOG --title "$1" \
 | 
						||
			--backtitle "$backtitle" \
 | 
						||
			--inputbox "$inputbox_instructions_string" \
 | 
						||
			10 75 "$4" 2>MCdialog.out
 | 
						||
		then
 | 
						||
			answer="`cat MCdialog.out`"
 | 
						||
			answer="${answer:-$3}"
 | 
						||
 | 
						||
			#
 | 
						||
			# Someone may add a nice check for the entered
 | 
						||
			# string here...
 | 
						||
			#
 | 
						||
			eval $2=\"$answer\"
 | 
						||
 | 
						||
			break
 | 
						||
		fi
 | 
						||
 | 
						||
		help "$2" "$1"
 | 
						||
	done
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# Handle a one-of-many choice list.
 | 
						||
#
 | 
						||
function l_choice () {
 | 
						||
	#
 | 
						||
	# Need to remember params cause they're gonna get reset.
 | 
						||
	#
 | 
						||
	title="$1"
 | 
						||
	choices="$2"
 | 
						||
	current="$3"
 | 
						||
        chosen=
 | 
						||
 | 
						||
	#
 | 
						||
	# Scan current value of choices and set radiolist switches.
 | 
						||
	#
 | 
						||
	list=
 | 
						||
	set -- $choices
 | 
						||
	firstchoice=$2
 | 
						||
	while [ -n "$2" ]
 | 
						||
	do
 | 
						||
		case "$1" in
 | 
						||
		"$current"*)	if [ -z "$chosen" ]; then
 | 
						||
					list="$list $2 $1 ON "
 | 
						||
					chosen=1
 | 
						||
				else
 | 
						||
					list="$list $2 $1 OFF "
 | 
						||
				fi  ;;
 | 
						||
		*)		list="$list $2 $1 OFF " ;;
 | 
						||
		esac
 | 
						||
			
 | 
						||
		shift ; shift
 | 
						||
	done
 | 
						||
 | 
						||
	while true
 | 
						||
	do
 | 
						||
		if $DIALOG --title "$title" \
 | 
						||
			--backtitle "$backtitle" \
 | 
						||
			--radiolist "$radiolist_instructions" \
 | 
						||
			15 70 6 $list 2>MCdialog.out
 | 
						||
		then
 | 
						||
			choice=`cat MCdialog.out`
 | 
						||
			break
 | 
						||
		fi
 | 
						||
 | 
						||
		help "$firstchoice" "$title"
 | 
						||
	done
 | 
						||
 | 
						||
	#
 | 
						||
	# Now set the boolean value of each option based on
 | 
						||
	# the selection made from the radiolist.
 | 
						||
	#
 | 
						||
	set -- $choices
 | 
						||
	while [ -n "$2" ]
 | 
						||
	do
 | 
						||
		if [ "$2" = "$choice" ]
 | 
						||
		then
 | 
						||
			eval $2="y"
 | 
						||
		else
 | 
						||
			eval $2="n"
 | 
						||
		fi
 | 
						||
		
 | 
						||
		shift ; shift
 | 
						||
	done
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Call awk, and watch for error codes, etc.
 | 
						||
#
 | 
						||
function callawk () {
 | 
						||
awk "$1" || echo "Awk died with error code $?. Giving up." || exit 1
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# A faster awk based recursive parser. (I hope)
 | 
						||
#
 | 
						||
function parser1 () {
 | 
						||
callawk '
 | 
						||
BEGIN {
 | 
						||
	menu_no = 0
 | 
						||
	comment_is_option = 0
 | 
						||
	parser("'$CONFIG_IN'","MCmenu0")
 | 
						||
}
 | 
						||
 | 
						||
function parser(ifile,menu) {
 | 
						||
 | 
						||
	while (getline <ifile) {
 | 
						||
		if ($1 == "mainmenu_option") {
 | 
						||
			comment_is_option = "1"
 | 
						||
		}
 | 
						||
		else if ($1 == "comment" && comment_is_option == "1") {
 | 
						||
			comment_is_option= "0"
 | 
						||
			sub($1,"",$0)
 | 
						||
			++menu_no
 | 
						||
 | 
						||
			printf("submenu %s MCmenu%s\n", $0, menu_no) >>menu
 | 
						||
 | 
						||
			newmenu = sprintf("MCmenu%d", menu_no);
 | 
						||
			printf( "function MCmenu%s () {\n"\
 | 
						||
				"default=$1\n"\
 | 
						||
				"menu_name %s\n",\
 | 
						||
				 menu_no, $0) >newmenu
 | 
						||
 | 
						||
			parser(ifile, newmenu)
 | 
						||
		}
 | 
						||
		else if ($0 ~ /^#|\$MAKE|mainmenu_name/) {
 | 
						||
			printf("") >>menu
 | 
						||
		}
 | 
						||
		else if ($1 ~ "endmenu") {
 | 
						||
			printf("}\n") >>menu
 | 
						||
			return
 | 
						||
		} 
 | 
						||
		else if ($1 == "source") {
 | 
						||
			parser($2,menu)
 | 
						||
		}
 | 
						||
		else {
 | 
						||
			print >>menu
 | 
						||
		}
 | 
						||
	}
 | 
						||
}'
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Secondary parser for single menu mode.
 | 
						||
#
 | 
						||
function parser2 () {
 | 
						||
callawk '
 | 
						||
BEGIN {
 | 
						||
	parser("'$CONFIG_IN'","MCmenu0")
 | 
						||
}
 | 
						||
 | 
						||
function parser(ifile,menu) {
 | 
						||
 | 
						||
	while (getline <ifile) {
 | 
						||
		if ($0 ~ /^#|$MAKE|mainmenu_name/) {
 | 
						||
			printf("") >>menu
 | 
						||
		}
 | 
						||
		else if ($1 ~ /mainmenu_option|endmenu/) {
 | 
						||
			printf("") >>menu
 | 
						||
		} 
 | 
						||
		else if ($1 == "source") {
 | 
						||
			parser($2,menu)
 | 
						||
		}
 | 
						||
		else {
 | 
						||
			print >>menu
 | 
						||
		}
 | 
						||
	}
 | 
						||
}'
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Parse all the config.in files into mini scripts.
 | 
						||
#
 | 
						||
function parse_config_files () {
 | 
						||
	rm -f MCmenu*
 | 
						||
 | 
						||
	echo "function MCmenu0 () {" >MCmenu0
 | 
						||
	echo 'default=$1' >>MCmenu0
 | 
						||
	echo "menu_name 'Main Menu'" >>MCmenu0
 | 
						||
 | 
						||
	if [ "_$single_menu_mode" = "_TRUE" ]
 | 
						||
	then
 | 
						||
		parser2
 | 
						||
	else
 | 
						||
		parser1
 | 
						||
	fi
 | 
						||
 | 
						||
	echo "comment ''"	>>MCmenu0
 | 
						||
	echo "g_alt_config" 	>>MCmenu0
 | 
						||
	echo "s_alt_config" 	>>MCmenu0
 | 
						||
 | 
						||
	echo "}" >>MCmenu0
 | 
						||
 | 
						||
	#
 | 
						||
	# These mini scripts must be sourced into the current
 | 
						||
	# environment in order for all of this to work.  Leaving
 | 
						||
	# them on the disk as executables screws up the recursion
 | 
						||
	# in activate_menu(), among other things.  Once they are
 | 
						||
	# sourced we can discard them.
 | 
						||
	#
 | 
						||
	for i in MCmenu*
 | 
						||
	do
 | 
						||
		echo -n "."
 | 
						||
		source ./$i
 | 
						||
	done
 | 
						||
	rm -f MCmenu*
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# This is the menu tree's bootstrap.
 | 
						||
#
 | 
						||
# Executes the parsed menus on demand and creates a set of functions,
 | 
						||
# one per configuration option.  These functions will in turn execute
 | 
						||
# dialog commands or recursively call other menus.
 | 
						||
#
 | 
						||
function activate_menu () {
 | 
						||
	rm -f lxdialog.scrltmp
 | 
						||
	while true
 | 
						||
	do
 | 
						||
		comment_ctr=0		#So comment lines get unique tags
 | 
						||
 | 
						||
		$1 "$default" 2> MCerror #Create the lxdialog menu & functions
 | 
						||
 | 
						||
		if [ "$?" != "0" ]
 | 
						||
		then
 | 
						||
			clear
 | 
						||
			cat <<EOM
 | 
						||
 | 
						||
Menuconfig has encountered a possible error in one of BusyBox's
 | 
						||
configuration files and is unable to continue.  Here is the error
 | 
						||
report:
 | 
						||
 | 
						||
EOM
 | 
						||
			sed 's/^/ Q> /' MCerror
 | 
						||
			cat <<EOM
 | 
						||
 | 
						||
Please report this to the maintainer <mec@shout.net>.  You may also
 | 
						||
send a problem report to <busybox@busybox.net>.
 | 
						||
 | 
						||
Please indicate the BusyBox version you are trying to configure and
 | 
						||
which menu you were trying to enter when this error occurred.
 | 
						||
 | 
						||
EOM
 | 
						||
			cleanup
 | 
						||
			exit 1
 | 
						||
		fi
 | 
						||
		rm -f MCerror
 | 
						||
 | 
						||
		. ./MCradiolists		#Source the menu's functions
 | 
						||
 | 
						||
		. ./MCmenu 2>MCdialog.out	#Activate the lxdialog menu
 | 
						||
		ret=$?
 | 
						||
 | 
						||
		read selection <MCdialog.out
 | 
						||
 | 
						||
		case "$ret" in
 | 
						||
		0|3|4|5|6)
 | 
						||
			defaults="$selection$defaults"  #pseudo stack
 | 
						||
			case "$ret" in
 | 
						||
			0) eval $selection   ;;
 | 
						||
			3) eval $selection y ;;
 | 
						||
			4) eval $selection n ;;
 | 
						||
			5) eval $selection m ;;
 | 
						||
			6) eval $selection c ;;
 | 
						||
			esac
 | 
						||
			default="${defaults%%*}" defaults="${defaults#*}"
 | 
						||
			;;
 | 
						||
		2)	
 | 
						||
			default="${selection%%\ *}"
 | 
						||
 | 
						||
			case "$selection" in
 | 
						||
			*"-->"*|*"alt_config"*)
 | 
						||
				show_readme ;;
 | 
						||
			*)
 | 
						||
				eval help $selection ;;
 | 
						||
			esac
 | 
						||
			;;
 | 
						||
		255|1)
 | 
						||
			break
 | 
						||
			;;
 | 
						||
		139)
 | 
						||
			stty sane
 | 
						||
			clear
 | 
						||
			cat <<EOM
 | 
						||
 | 
						||
There seems to be a problem with the lxdialog companion utility which is
 | 
						||
built prior to running Menuconfig.  Usually this is an indicator that you
 | 
						||
have upgraded/downgraded your ncurses libraries and did not remove the 
 | 
						||
old ncurses header file(s) in /usr/include or /usr/include/ncurses.
 | 
						||
 | 
						||
It is VERY important that you have only one set of ncurses header files
 | 
						||
and that those files are properly version matched to the ncurses libraries 
 | 
						||
installed on your machine.
 | 
						||
 | 
						||
You may also need to rebuild lxdialog.  This can be done by moving to
 | 
						||
the /usr/src/linux/scripts/lxdialog directory and issuing the 
 | 
						||
"make clean all" command.
 | 
						||
 | 
						||
If you have verified that your ncurses install is correct, you may email
 | 
						||
the maintainer <andersen@codepoet.org> or post a message to
 | 
						||
<busybox@busybox.net> for additional assistance. 
 | 
						||
 | 
						||
EOM
 | 
						||
			cleanup
 | 
						||
			exit 139
 | 
						||
			;;
 | 
						||
		esac
 | 
						||
	done
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Create a menu item to load an alternate configuration file.
 | 
						||
#
 | 
						||
g_alt_config () {
 | 
						||
	echo -n "get_alt_config 'Load an Alternate Configuration File' "\
 | 
						||
		>>MCmenu
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Get alternate config file name and load the 
 | 
						||
# configuration from it.
 | 
						||
#
 | 
						||
get_alt_config () {
 | 
						||
	set -f ## Switch file expansion OFF
 | 
						||
 | 
						||
	while true
 | 
						||
	do
 | 
						||
		ALT_CONFIG="${ALT_CONFIG:-$DEFAULTS}"
 | 
						||
 | 
						||
		$DIALOG --backtitle "$backtitle" \
 | 
						||
			--inputbox "\
 | 
						||
Enter the name of the configuration file you wish to load.  \
 | 
						||
Accept the name shown to restore the configuration you \
 | 
						||
last retrieved.  Leave blank to abort."\
 | 
						||
			11 55 "$ALT_CONFIG" 2>MCdialog.out
 | 
						||
 | 
						||
		if [ "$?" = "0" ]
 | 
						||
		then
 | 
						||
			ALT_CONFIG=`cat MCdialog.out`
 | 
						||
 | 
						||
			[ "_" = "_$ALT_CONFIG" ] && break
 | 
						||
 | 
						||
			if eval [ -r "$ALT_CONFIG" ]
 | 
						||
			then
 | 
						||
				eval load_config_file "$ALT_CONFIG"
 | 
						||
				break
 | 
						||
			else
 | 
						||
				echo -ne "\007"
 | 
						||
				$DIALOG	--backtitle "$backtitle" \
 | 
						||
					--infobox "File does not exist!"  3 38
 | 
						||
				sleep 2
 | 
						||
			fi
 | 
						||
		else
 | 
						||
			cat <<EOM >help.out
 | 
						||
 | 
						||
For various reasons, one may wish to keep several different BusyBox
 | 
						||
configurations available on a single machine.  
 | 
						||
 | 
						||
If you have saved a previous configuration in a file other than the
 | 
						||
busybox default, entering the name of the file here will allow you
 | 
						||
to modify that configuration.
 | 
						||
 | 
						||
If you are uncertain, then you have probably never used alternate 
 | 
						||
configuration files.  You should therefor leave this blank to abort.
 | 
						||
 | 
						||
EOM
 | 
						||
			$DIALOG	--backtitle "$backtitle"\
 | 
						||
				--title "Load Alternate Configuration"\
 | 
						||
				--textbox help.out $ROWS $COLS
 | 
						||
		fi
 | 
						||
	done
 | 
						||
 | 
						||
	set +f ## Switch file expansion ON
 | 
						||
	rm -f help.out MCdialog.out
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Create a menu item to store an alternate config file.
 | 
						||
#
 | 
						||
s_alt_config () {
 | 
						||
	echo -n "save_alt_config 'Save Configuration to an Alternate File' "\
 | 
						||
		 >>MCmenu
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Get an alternate config file name and save the current
 | 
						||
# configuration to it.
 | 
						||
#
 | 
						||
save_alt_config () {
 | 
						||
	set -f  ## Switch file expansion OFF
 | 
						||
			
 | 
						||
	while true
 | 
						||
	do
 | 
						||
		$DIALOG --backtitle "$backtitle" \
 | 
						||
			--inputbox "\
 | 
						||
Enter a filename to which this configuration should be saved \
 | 
						||
as an alternate.  Leave blank to abort."\
 | 
						||
			10 55 "$ALT_CONFIG" 2>MCdialog.out
 | 
						||
 | 
						||
		if [ "$?" = "0" ]
 | 
						||
		then
 | 
						||
			ALT_CONFIG=`cat MCdialog.out`
 | 
						||
 | 
						||
			[ "_" = "_$ALT_CONFIG" ] && break
 | 
						||
 | 
						||
			if eval touch $ALT_CONFIG 2>/dev/null
 | 
						||
			then
 | 
						||
				eval save_configuration $ALT_CONFIG
 | 
						||
				load_functions  ## RELOAD
 | 
						||
				break
 | 
						||
			else
 | 
						||
				echo -ne "\007"
 | 
						||
				$DIALOG	--backtitle "$backtitle" \
 | 
						||
					--infobox "Can't create file!  Probably a nonexistent directory." 3 60
 | 
						||
				sleep 2
 | 
						||
			fi
 | 
						||
		else
 | 
						||
			cat <<EOM >help.out
 | 
						||
 | 
						||
For various reasons, one may wish to keep different BusyBox
 | 
						||
configurations available on a single machine.  
 | 
						||
 | 
						||
Entering a file name here will allow you to later retrieve, modify
 | 
						||
and use the current configuration as an alternate to whatever 
 | 
						||
configuration options you have selected at that time.
 | 
						||
 | 
						||
If you are uncertain what all this means then you should probably
 | 
						||
leave this blank.
 | 
						||
EOM
 | 
						||
			$DIALOG	--backtitle "$backtitle"\
 | 
						||
				--title "Save Alternate Configuration"\
 | 
						||
				--textbox help.out $ROWS $COLS
 | 
						||
		fi
 | 
						||
	done
 | 
						||
 | 
						||
	set +f  ## Switch file expansion ON
 | 
						||
	rm -f help.out MCdialog.out
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Load config options from a file.
 | 
						||
# Converts all "# OPTION is not set" lines to "OPTION=n" lines
 | 
						||
#
 | 
						||
function load_config_file () {
 | 
						||
	awk '
 | 
						||
	  /# .* is not set.*/ { printf("%s=n\n", $2) }
 | 
						||
	! /# .* is not set.*/ { print }
 | 
						||
	' $1 >.tmpconfig
 | 
						||
 | 
						||
	source ./.tmpconfig
 | 
						||
	rm -f .tmpconfig
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Just what it says.
 | 
						||
#
 | 
						||
save_configuration () {
 | 
						||
        echo
 | 
						||
	echo -n "Saving your BusyBox configuration."
 | 
						||
 | 
						||
	#
 | 
						||
	# Now, let's redefine the configuration functions for final
 | 
						||
	# output to the config files.
 | 
						||
	#
 | 
						||
	# Nested function definitions, YIPEE!
 | 
						||
	#
 | 
						||
	function bool () {
 | 
						||
		set_x_info "$2" "n"
 | 
						||
		eval define_bool "$2" "$x"
 | 
						||
	}
 | 
						||
 | 
						||
	function dep_bool () {
 | 
						||
		set_x_info "$2" "n"
 | 
						||
		var="$2"
 | 
						||
		shift 2
 | 
						||
		while [ $# -gt 0 ]; do
 | 
						||
			if   [ "$1" = y ]; then
 | 
						||
				shift
 | 
						||
			else 
 | 
						||
				x=n; shift $#
 | 
						||
			fi
 | 
						||
		done
 | 
						||
		define_bool "$var" "$x"
 | 
						||
	}
 | 
						||
 | 
						||
	function int () {
 | 
						||
		set_x_info "$2" "$3"
 | 
						||
		echo "$2=$x" 		>>$CONFIG
 | 
						||
		echo "#define $2 ($x)"	>>$CONFIG_H
 | 
						||
	}
 | 
						||
 | 
						||
	function hex () {
 | 
						||
		set_x_info "$2" "$3"
 | 
						||
		echo "$2=$x" 			 >>$CONFIG
 | 
						||
		echo "#define $2 0x${x##*[x,X]}" >>$CONFIG_H
 | 
						||
	}
 | 
						||
 | 
						||
	function string () {
 | 
						||
		set_x_info "$2" "$3"
 | 
						||
		echo "$2=\"$x\"" 			 >>$CONFIG
 | 
						||
		echo "#define $2 \"$x\""	>>$CONFIG_H
 | 
						||
	}
 | 
						||
 | 
						||
	function define_hex () {
 | 
						||
		eval $1="$2"
 | 
						||
               	echo "$1=$2"			>>$CONFIG
 | 
						||
		echo "#define $1 0x${2##*[x,X]}"	>>$CONFIG_H
 | 
						||
	}
 | 
						||
 | 
						||
	function define_int () {
 | 
						||
		eval $1="$2"
 | 
						||
		echo "$1=$2" 			>>$CONFIG
 | 
						||
		echo "#define $1 ($2)"		>>$CONFIG_H
 | 
						||
	}
 | 
						||
 | 
						||
	function define_string () {
 | 
						||
		eval $1="$2"
 | 
						||
		echo "$1=\"$2\""		>>$CONFIG
 | 
						||
		echo "#define $1 \"$2\""	>>$CONFIG_H
 | 
						||
	}
 | 
						||
 | 
						||
	function define_bool () {
 | 
						||
		define_tristate "$1" "$2"
 | 
						||
	}
 | 
						||
 | 
						||
	function define_tristate () {
 | 
						||
		eval $1="$2"
 | 
						||
 | 
						||
   		case "$2" in
 | 
						||
         	y)
 | 
						||
                	echo "$1=y" 		>>$CONFIG
 | 
						||
                	echo "#define $1 1"	>>$CONFIG_H
 | 
						||
                	;;
 | 
						||
 | 
						||
         	n)
 | 
						||
			echo "# $1 is not set"	>>$CONFIG
 | 
						||
                	echo "#undef  $1"	>>$CONFIG_H
 | 
						||
                	;;
 | 
						||
        	esac
 | 
						||
	}
 | 
						||
 | 
						||
	function choice () {
 | 
						||
		#
 | 
						||
		# Find the first choice that's already set to 'y'
 | 
						||
		#
 | 
						||
		choices="$2"
 | 
						||
		default="$3"
 | 
						||
		current=
 | 
						||
		chosen=
 | 
						||
 | 
						||
		set -- $choices
 | 
						||
		while [ -n "$2" ]
 | 
						||
		do
 | 
						||
			if eval [ "_\$$2" = "_y" ]
 | 
						||
			then
 | 
						||
				current=$1
 | 
						||
				break
 | 
						||
			fi
 | 
						||
			shift ; shift
 | 
						||
		done
 | 
						||
 | 
						||
		#
 | 
						||
		# Use the default if none were set.  
 | 
						||
		#
 | 
						||
		: ${current:=$default}
 | 
						||
 | 
						||
		#
 | 
						||
		# Output all choices (to be compatible with other configs).
 | 
						||
		#
 | 
						||
		set -- $choices
 | 
						||
		while [ -n "$2" ]
 | 
						||
		do
 | 
						||
			case "$1" in
 | 
						||
			"$current"*)	if [ -z "$chosen" ]; then
 | 
						||
						define_bool "$2" "y"
 | 
						||
						chosen=1
 | 
						||
					else
 | 
						||
						define_bool "$2" "n"
 | 
						||
					fi ;;
 | 
						||
			*)		define_bool "$2" "n" ;;
 | 
						||
			esac
 | 
						||
			shift ; shift
 | 
						||
		done
 | 
						||
	}
 | 
						||
 | 
						||
	function mainmenu_name () {
 | 
						||
		:
 | 
						||
	}
 | 
						||
 | 
						||
	function mainmenu_option () {
 | 
						||
		comment_is_option=TRUE
 | 
						||
	}
 | 
						||
 | 
						||
	function endmenu () {
 | 
						||
		:
 | 
						||
	}
 | 
						||
 | 
						||
	function comment () {
 | 
						||
		if [ "$comment_is_option" ]
 | 
						||
		then
 | 
						||
			comment_is_option=
 | 
						||
			echo        >>$CONFIG
 | 
						||
			echo "#"    >>$CONFIG
 | 
						||
			echo "# $1" >>$CONFIG
 | 
						||
			echo "#"    >>$CONFIG
 | 
						||
 | 
						||
			echo         >>$CONFIG_H
 | 
						||
			echo "/*"    >>$CONFIG_H
 | 
						||
			echo " * $1" >>$CONFIG_H
 | 
						||
			echo " */"   >>$CONFIG_H
 | 
						||
		fi
 | 
						||
	}
 | 
						||
 | 
						||
	echo -n "."
 | 
						||
 | 
						||
	DEF_CONFIG="${1:-.config}"
 | 
						||
	DEF_CONFIG_H="include/config.h"
 | 
						||
 | 
						||
	CONFIG=.tmpconfig
 | 
						||
	CONFIG_H=.tmpconfig.h
 | 
						||
 | 
						||
	echo "#" >$CONFIG
 | 
						||
	echo "# Automatically generated by make menuconfig: don't edit" >>$CONFIG
 | 
						||
	echo "#" >>$CONFIG
 | 
						||
 | 
						||
	echo "/*" >$CONFIG_H
 | 
						||
	echo " * Automatically generated by make menuconfig: don't edit" >>$CONFIG_H
 | 
						||
	echo " */" >>$CONFIG_H
 | 
						||
	echo "#define AUTOCONF_INCLUDED" >> $CONFIG_H
 | 
						||
 | 
						||
	echo -n "."
 | 
						||
	if . $CONFIG_IN >>.menuconfig.log 2>&1
 | 
						||
	then
 | 
						||
		if [ "$DEF_CONFIG" = ".config" ]
 | 
						||
		then
 | 
						||
			mv $CONFIG_H $DEF_CONFIG_H
 | 
						||
		fi
 | 
						||
 | 
						||
		if [ -f "$DEF_CONFIG" ]
 | 
						||
		then
 | 
						||
			rm -f ${DEF_CONFIG}.old
 | 
						||
			mv $DEF_CONFIG ${DEF_CONFIG}.old
 | 
						||
		fi
 | 
						||
 | 
						||
		mv $CONFIG $DEF_CONFIG
 | 
						||
			
 | 
						||
		return 0
 | 
						||
	else
 | 
						||
		return 1
 | 
						||
	fi
 | 
						||
}
 | 
						||
 | 
						||
#
 | 
						||
# Remove temporary files
 | 
						||
#
 | 
						||
cleanup () {
 | 
						||
	cleanup1
 | 
						||
	cleanup2
 | 
						||
}
 | 
						||
 | 
						||
cleanup1 () {
 | 
						||
	rm -f MCmenu* MCradiolists MCdialog.out help.out
 | 
						||
}
 | 
						||
 | 
						||
cleanup2 () {
 | 
						||
	rm -f .tmpconfig .tmpconfig.h
 | 
						||
}
 | 
						||
 | 
						||
set_geometry () {
 | 
						||
	# Some distributions export these with incorrect values
 | 
						||
	# which can really screw up some ncurses programs.
 | 
						||
	LINES=  COLUMNS=
 | 
						||
 | 
						||
	ROWS=${1:-24}  COLS=${2:-80} 
 | 
						||
 | 
						||
	# Just in case the nasty rlogin bug returns.
 | 
						||
	#
 | 
						||
	[ $ROWS = 0 ] && ROWS=24
 | 
						||
	[ $COLS = 0 ] && COLS=80
 | 
						||
 | 
						||
	if [ $ROWS -lt 19 -o $COLS -lt 80 ]
 | 
						||
	then
 | 
						||
		echo -e "\n\007Your display is too small to run Menuconfig!"
 | 
						||
		echo "It must be at least 19 lines by 80 columns."
 | 
						||
		exit 1
 | 
						||
	fi 
 | 
						||
 | 
						||
	ROWS=$((ROWS-4))  COLS=$((COLS-5))
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
set_geometry `stty size 2>/dev/null`
 | 
						||
 | 
						||
menu_instructions="\
 | 
						||
Enabling options will increase the size of busybox.  \
 | 
						||
Arrow keys navigate the menu.  \
 | 
						||
Pressing <Enter> selects submenus --->.  \
 | 
						||
Highlighted letters are hotkeys.  \
 | 
						||
Pressing <Y> includes, and <N> excludes.  \
 | 
						||
Press <Esc><Esc> to exit, <?> for Help.  \
 | 
						||
Legend: [*] built-in  [ ] excluded"
 | 
						||
 | 
						||
 | 
						||
radiolist_instructions="\
 | 
						||
Use the arrow keys to navigate this window or \
 | 
						||
press the hotkey of the item you wish to select \
 | 
						||
followed by the <SPACE BAR>.
 | 
						||
Press <?> for additional information about this option."
 | 
						||
 | 
						||
inputbox_instructions_int="\
 | 
						||
Please enter a decimal value. \
 | 
						||
Fractions will not be accepted.  \
 | 
						||
Use the <TAB> key to move from the input field to the buttons below it."
 | 
						||
 | 
						||
inputbox_instructions_hex="\
 | 
						||
Please enter a hexadecimal value. \
 | 
						||
Use the <TAB> key to move from the input field to the buttons below it."
 | 
						||
 | 
						||
inputbox_instructions_string="\
 | 
						||
Please enter a string value. \
 | 
						||
Use the <TAB> key to move from the input field to the buttons below it."
 | 
						||
 | 
						||
DIALOG="./scripts/lxdialog/lxdialog"
 | 
						||
 | 
						||
bb_version="${VERSION}"
 | 
						||
backtitle="BusyBox v$bb_version Configuration"
 | 
						||
 | 
						||
trap "cleanup ; exit 1" 1 2 15
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# Locate default files.
 | 
						||
#
 | 
						||
CONFIG_IN=./config.in
 | 
						||
if [ "$1" != "" ] ; then
 | 
						||
	CONFIG_IN=$1
 | 
						||
fi
 | 
						||
 | 
						||
DEFAULTS=sysdeps/$TARGET_OS/defconfig
 | 
						||
if [ -f .config ]; then
 | 
						||
  DEFAULTS=.config
 | 
						||
fi
 | 
						||
 | 
						||
if [ -f $DEFAULTS ]
 | 
						||
then
 | 
						||
  echo "Using defaults found in" $DEFAULTS
 | 
						||
  load_config_file $DEFAULTS
 | 
						||
else
 | 
						||
  echo "No defaults found"
 | 
						||
fi
 | 
						||
 | 
						||
 | 
						||
# Fresh new log.
 | 
						||
>.menuconfig.log
 | 
						||
 | 
						||
# Load the functions used by the config.in files.
 | 
						||
echo -n "Preparing scripts: functions" 
 | 
						||
load_functions
 | 
						||
 | 
						||
if [ ! -e $CONFIG_IN ]
 | 
						||
then
 | 
						||
	echo "Your main config.in file ($CONFIG_IN) does not exist"
 | 
						||
	exit 1
 | 
						||
fi
 | 
						||
 | 
						||
if [ ! -x $DIALOG ]
 | 
						||
then
 | 
						||
	echo "Your lxdialog utility does not exist"
 | 
						||
	exit 1
 | 
						||
fi
 | 
						||
 | 
						||
#
 | 
						||
# Read config.in files and parse them into one shell function per menu.
 | 
						||
#
 | 
						||
echo -n ", parsing"
 | 
						||
parse_config_files $CONFIG_IN
 | 
						||
 | 
						||
echo "done."
 | 
						||
#
 | 
						||
# Start the ball rolling from the top.
 | 
						||
#
 | 
						||
activate_menu MCmenu0
 | 
						||
 | 
						||
#
 | 
						||
# All done!
 | 
						||
#
 | 
						||
cleanup1
 | 
						||
 | 
						||
#
 | 
						||
# Confirm and Save
 | 
						||
#
 | 
						||
if $DIALOG --backtitle "$backtitle" \
 | 
						||
	   --yesno "Do you wish to save your new BusyBox configuration?" 5 60
 | 
						||
then
 | 
						||
	save_configuration
 | 
						||
	echo
 | 
						||
	echo
 | 
						||
	echo "*** End of BusyBox configuration."
 | 
						||
	echo "*** Check the top-level Makefile for additional configuration."
 | 
						||
	if [ ! -f .hdepend ] ; then
 | 
						||
	    echo "*** Next, you must run 'make dep'."
 | 
						||
	else
 | 
						||
	    echo "*** Next, you should run 'make' or 'make install'."
 | 
						||
	fi
 | 
						||
	echo
 | 
						||
else
 | 
						||
	echo
 | 
						||
    	echo 
 | 
						||
	echo Your BusyBox configuration changes were NOT saved.
 | 
						||
	echo
 | 
						||
fi
 | 
						||
 | 
						||
# Remove log if empty.
 | 
						||
if [ ! -s .menuconfig.log ] ; then
 | 
						||
	rm -f .menuconfig.log
 | 
						||
fi
 | 
						||
 | 
						||
exit 0
 |