#
# 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 CONFIG_FEATURE_BUFFERS_USE_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
	  Support SUID and SGID binaries.

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
	  Allow the SUID / SGID state of an applet to be determinded runtime by
	  checking /etc/busybox.conf.  The format of this file is as follows:

	  <applet> = [Ssx-][Ssx-][x-] (<username>|<uid>).(<groupname>|<gid>)
	  
	  An example might help:

	  [SUID]
	  su = ssx root.0 # applet su can be run by anyone and runs with euid=0/egid=0
	  su = ssx        # exactly the same

	  mount = sx- root.disk # applet mount can be run by root and members of group disk
	                        # and runs with euid=0

	  cp = --- # disable applet cp for everyone

	  Robert 'sandman' Griebl has more information here:
	  <url: http://www.softforge.de/bb/suid.html >.

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
	  /etc/busybox.conf should be readable by the user needing the SUID, check
	  this option to avoid users to be notified about missing permissions.

config CONFIG_SELINUX
	bool "Support NSA Security Enhanced Linux"
	default n
	help
	  Enable support for SE Linux in applets ls, ps, and id.  Also provide
	  the option of compiling in SE Linux applets.

endmenu

menu 'Build Options'

config CONFIG_STATIC
	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 can make BusyBox be considerably 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 CONFIG_LFS
	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 CONFIG_DEBUG
	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 CONFIG_DMALLOC
	bool "Build BusyBox with dmalloc support"
	default n
	depends on CONFIG_DEBUG && !CONFIG_EFENCE
	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 CONFIG_EFENCE
	bool "Build BusyBox with Electric-fence support"
	default n
	depends on CONFIG_DEBUG && !CONFIG_DMALLOC
	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

