#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

mainmenu "BusyBox Configuration"

config HAVE_DOT_CONFIG
	bool
	default y

menu "General Configuration"

choice
	prompt "Buffer allocation policy"
	default "Allocate with Malloc"
	help
	  There are 3 ways BusyBox can handle buffer allocations:
	  - Use malloc. This costs code size for the call to xmalloc.
	  - Put them on stack. For some very small machines with limited stack
	    space, this can be deadly.  For most folks, this works just fine.
	  - Put them in BSS. This works beautifully for computers with a real
	    MMU (and OS support), but wastes runtime RAM for uCLinux. This
	    behavior was the only one available for BusyBox versions 0.48 and
	    earlier.

config CONFIG_FEATURE_BUFFERS_USE_MALLOC
	bool "Allocate with Malloc"

config CONFIG_FEATURE_BUFFERS_GO_ON_STACK
	bool "Allocate on the Stack"

config CONFIG_FEATURE_BUFFERS_GO_IN_BSS
	bool "Allocate in the .bss section"

endchoice

config CONFIG_FEATURE_VERBOSE_USAGE
	bool "Show verbose applet usage messages"
	default n
	help
	  All BusyBox applets will show more verbose help messages when
	  busybox is invoked with --help.  This will add lots of text to the
	  busybox binary.  In the default configuration, this will add about
	  13k, but it can add much more depending on your configuration.

config CONFIG_FEATURE_INSTALLER
	bool "Support --install [-s] to install applet links at runtime"
	default n
	help
	  Enable 'busybox --install [-s]' support.  This will allow you to use
	  busybox at runtime to create hard links or symlinks for all the
	  applets that are compiled into busybox.  This feature requires the
	  /proc filesystem.

config CONFIG_LOCALE_SUPPORT
	bool "Enable locale support (system needs locale for this to work)"
	default n
	help
	  Enable this if your system has locale support, and you would like
	  busybox to support locale settings.

config CONFIG_FEATURE_DEVFS
	bool "Support for devfs"
	default n
	help
	  Enable if you want BusyBox to work with devfs.

config CONFIG_FEATURE_DEVPTS
	bool "Use the devpts filesystem for Unix98 PTYs"
	default y if CONFIG_FEATURE_DEVFS
	help
	  Enable if you want BusyBox to use Unix98 PTY support. If enabled,
	  busybox will use /dev/ptmx for the master side of the pseudoterminal
	  and /dev/pts/<number> for the slave side.  Otherwise, BSD style
	  /dev/ttyp<number> will be used. To use this option, you should have
	  devpts or devfs mounted.

config CONFIG_FEATURE_CLEAN_UP
	bool "Clean up all memory before exiting (usually not needed)"
	default n
	help
	As a size optimization, busybox by default does not cleanup memory
	that is dynamically allocated or close files before exiting. This
	saves space and is usually not needed since the OS will clean up for
	us.  Don't enable this unless you have a really good reason to clean
	things up manually.

config CONFIG_FEATURE_SUID
	bool "Support for SUID/SGID handling"
	default n
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_SUID_CONFIG
	bool "Runtime SUID/SGID configuration via /etc/busybox.conf"
	default y if CONFIG_FEATURE_SUID
	depends on CONFIG_FEATURE_SUID
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_SUID_CONFIG_QUIET
	bool "Suppress warning message if /etc/busybox.conf is not readable"
	default n
	depends on CONFIG_FEATURE_SUID_CONFIG
	help
	  Please submit a patch to add help text for this item.

endmenu

menu 'Build Options'

config DOSTATIC
	bool "Build BusyBox as a static binary (no shared libs)"
	default n
	help
	  If you want to build a static BusyBox binary, which does not 
	  use or require any shared libraries, then enable this option.  

config DOLFS
	bool "Build with Large File Support (for accessing files > 2 GB)" 
	default n
	help
	  If you want to build BusyBox with large file support, then enable
	  this option.  This will have no effect if your kernel or your C
	  library lacks large file support for large files.  Some of the
	  programs that can benefit from large file support include dd, gzip,
	  cp, mount, tar, and many others.  If you want to access files larger
	  than 2 Gigabytes, enable this option.  Otherwise, leave it set to 'N'.

config USING_CROSS_COMPILER
	bool "Do you want to build BusyBox with a Cross Compiler?"
	default n
	help
	  Do you want to build BusyBox with a Cross Compiler?  If so,
	  then enable this option.  Otherwise leave it set to 'N'.

config CROSS_COMPILER_PREFIX
	string "Cross Compiler prefix"
	default "/usr/i386-linux-uclibc/bin/i386-uclibc-"
	depends on USING_CROSS_COMPILER
	help
	  If you want to build BusyBox with a cross compiler, then you 
	  will need to set this to the cross-compiler prefix.  For example,
	  if my cross-compiler is /usr/i386-linux-uclibc/bin/i386-uclibc-gcc
	  then I would enter '/usr/i386-linux-uclibc/bin/i386-uclibc-' here,
	  which will ensure the correct compiler is used.

config EXTRA_CFLAGS_OPTIONS
	string "Any extra CFLAGS options for the compiler?"
	default ""
	help
	  Do you want to pass any extra CFLAGS options to the compiler as
	  you build BusyBox? If so, this is the option for you...  For example,
	  if you want to add some simple compiler switches (like -march=i686),
	  or check for warnings using -Werror, just those options here.

endmenu

menu 'Installation Options'

config CONFIG_INSTALL_NO_USR
	bool "Don't use /usr"
	default n
	help
	  Disable use of /usr. Don't activate this option if you don't know,
	  that you really want this behaviour.

config PREFIX
	string "BusyBox installation prefix"
	default "./_install"
	help
	  Define Your directory to install BusyBox files/subdirs.



endmenu

source archival/Config.in
source coreutils/Config.in
source console-tools/Config.in
source debianutils/Config.in
source editors/Config.in
source findutils/Config.in
source init/Config.in
source loginutils/Config.in
source miscutils/Config.in
source modutils/Config.in
source networking/Config.in
source procps/Config.in
source shell/Config.in
source sysklogd/Config.in
source util-linux/Config.in

menu 'Debugging Options'

config DOSTATIC
	bool "Build BusyBox as a static binary (no shared libs)"
	default n
	help
	  If you want to build a static BusyBox binary, which does not 
	  use or require any shared libraries, then enable this option.  
	  This will make BusyBox be considerable larger, so you should
	  leave this option false unless you have a good reason (i.e.
	  your target platform does not support shared libraries, or
	  you are building an initrd which doesn't need anything but
	  BusyBox, etc).

	  Most people will leave this set to 'N'.

config DODEBUG
	bool "Build BusyBox with Debugging symbols"
	default n
	help
	  Say Y here if you wish to compile BusyBox with debugging symbols.
	  This will allow you to use a debugger to examine BusyBox internals
	  while applets are running.  This increases the size of the binary 
	  considerably and should only be used when doing development.
	  If you are doing development and want to debug BusyBox, answer Y.

	  Otherwise, answer N.

config DODMALLOC
	bool "Build BusyBox with dmalloc support"
	default n
	depends on DODEBUG && !DOEFENCE
	help
	  This enables compiling with dmalloc ( http://dmalloc.com/ )
	  which is an excellent public domain mem leak and malloc problem
	  detector.  To enable dmalloc, before running busybox you will
	  want to properly set your environment, for example:
	    export DMALLOC_OPTIONS=debug=0x34f47d83,inter=100,log=logfile
	  The 'debug=' value is generated using the following command
	    dmalloc -p log-stats -p log-non-free -p log-bad-space -p log-elapsed-time \
	       -p check-fence -p check-heap -p check-lists -p check-blank \
	       -p check-funcs -p realloc-copy -p allow-free-null

	  This will make BusyBox be considerable larger and run slower, so 
	  you should leave this option disabled for production use.

config DOEFENCE
	bool "Build BusyBox with Electric-fence support"
	default n
	depends on DODEBUG && !DODMALLOC
	help
	  This enables compiling with Electric-fence support.  Electric
	  fence is another very useful malloc debugging library which used
	  your computers virtual memory hardware to detect illegal memory 
	  accesses.  This support will make BusyBox be considerable larger 
	  and run slower, so you should leave this option disabled unless 
	  you are hunting a hard to find memory problem.

endmenu

