#
# 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

comment "Busybox Settings"

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 a lot 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 normally exits without explicitly
	  freeing dynamically allocated memory or closing files.  This saves
	  space since the OS will clean up for us, but it can confuse debuggers
	  like valgrind, which report tons of memory and resource leaks.

	  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 n if CONFIG_FEATURE_SUID
	depends on CONFIG_FEATURE_SUID
	help
	  Allow the SUID / SGID state of an applet to be determined 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

	  The file has to be owned by user root, group root and has to be
	  writeable only by root:
	  	(chown 0.0 /etc/busybox.conf; chmod 600 /etc/busybox.conf)
	  The busybox executable has to be owned by user root, group
	  root and has to be setuid root for this to work:
	  	(chown 0.0 /bin/busybox; chmod 4755 /bin/busybox)

	  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.

	  If you do not have a complete SE Linux Full Userland installed, this
	  stuff will not compile.  Go visit
		http://www.nsa.gov/selinux/index.html
	  to download the necessary stuff to allow busybox to compile with this
	  option enabled.

	  Most people will leave this set to 'N'.

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 cause BusyBox to 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_BUILD_LIBBUSYBOX
	bool "Build shared libbusybox"
	default y
	help
	  Build a shared library libbusybox.so which contains all
	  libraries used inside busybox.

config CONFIG_FEATURE_FULL_LIBBUSYBOX
	bool "Feature-complete libbusybox"
	default n if !CONFIG_FEATURE_SHARED_BUSYBOX
	depends on CONFIG_BUILD_LIBBUSYBOX
	help
	  Build a libbusybox with the complete feature-set, disregarding
	  the actually selected config.

	  Normally, libbusybox will only contain the features which are
	  used by busybox itself. If you plan to write a separate
	  standalone application which uses libbusybox say 'Y'.

	  Note: libbusybox is GPL, not LGPL, and exports no stable API that
	  might act as a copyright barrier.  We can and will modify the
	  exported function set between releases (even minor version number
	  changes), and happily break out-of-tree features.

	  Say 'N' if in doubt.

config CONFIG_FEATURE_SHARED_BUSYBOX
	bool "Use shared libbusybox for busybox"
	default y if CONFIG_BUILD_LIBBUSYBOX
	depends on !CONFIG_STATIC && CONFIG_BUILD_LIBBUSYBOX
	help
	  Use libbusybox.so also for busybox itself.
	  You need to have a working dynamic linker to use this variant.

config CONFIG_LFS
	bool "Build with Large File Support (for accessing files > 2 GB)"
	default n
	select FDISK_SUPPORT_LARGE_DISKS
	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.

config CONFIG_BUILD_AT_ONCE
	bool "Compile all sources at once"
	default n
	help
	  Normally each source-file is compiled with one invocation of
	  the compiler.
	  If you set this option, all sources are compiled at once.
	  This gives the compiler more opportunities to optimize which can
	  result in smaller and/or faster binaries.

	  Setting this option will consume alot of memory, e.g. if you
	  enable all applets with all features, gcc uses more than 300MB
	  RAM during compilation of busybox.

	  This option is most likely only beneficial for newer compilers
	  such as gcc-4.1 and above.

	  Say 'N' unless you know what you are doing.

endmenu

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.

	  Most people should answer N.

choice
	prompt "Additional debugging library"
	default CONFIG_NO_DEBUG_LIB
	depends on CONFIG_DEBUG
	help
	  Using an additional debugging library will make BusyBox become
	  considerable larger and will cause it to run more slowly.  You
	  should always leave this option disabled for production use.

	  dmalloc support:
	  ----------------
	  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

	  Electric-fence support:
	  -----------------------
	  This enables compiling with Electric-fence support.  Electric
	  fence is another very useful malloc debugging library which uses
	  your computer's 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.


config CONFIG_NO_DEBUG_LIB
	bool "None"

config CONFIG_DMALLOC
	bool "Dmalloc"

config CONFIG_EFENCE
	bool "Electric-fence"

endchoice

config CONFIG_DEBUG_YANK_SUSv2
	bool "Disable obsolete features removed before SUSv3?"
	default y
	help
	  This option will disable backwards compatability with SuSv2,
	  specifically, old-style numeric options ('command -1 <file>')
	  will not be supported in head, tail, and fold.  (Note: should
	  yank from renice too.)

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.

choice
       prompt "Applets links"
       default CONFIG_INSTALL_APPLET_SYMLINKS
       help
         Choose how you install applets links.

config CONFIG_INSTALL_APPLET_SYMLINKS
       bool "as soft-links"
       help
         Install applets as soft-links to the busybox binary. This needs some
         free inodes on the filesystem, but might help with filesystem
         generators that can't cope with hard-links.

config CONFIG_INSTALL_APPLET_HARDLINKS
       bool "as hard-links"
       help
         Install applets as hard-links to the busybox binary. This might count
         on a filesystem with few inodes.

config CONFIG_INSTALL_APPLET_DONT
       bool
       prompt "not installed"
       depends on CONFIG_FEATURE_INSTALLER || CONFIG_FEATURE_SH_STANDALONE_SHELL
       help
         Do not install applets links. Usefull when using the -install feature
         or a standalone shell for rescue pruposes.

endchoice

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

endmenu

source libbb/Config.in

comment "Applets"

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 e2fsprogs/Config.in
source modutils/Config.in
source util-linux/Config.in
source miscutils/Config.in
source networking/Config.in
source procps/Config.in
source shell/Config.in
source sysklogd/Config.in
