menu "System configuration"

# Note: usually, it is not possible to select a provider of a virtual
# package. But here we have an exception: there are only four providers
# and they only get selected by separate entries in this choice and
# under different, exclusive conditions. So this is a safe situation.
choice
	prompt "Root FS skeleton"

config BR2_ROOTFS_SKELETON_DEFAULT
	bool "default target skeleton"
	select BR2_PACKAGE_SKELETON_INIT_SYSV if BR2_INIT_SYSV
	select BR2_PACKAGE_SKELETON_INIT_SYSV if BR2_INIT_BUSYBOX
	select BR2_PACKAGE_SKELETON_INIT_SYSTEMD if BR2_INIT_SYSTEMD
	select BR2_PACKAGE_SKELETON_INIT_NONE if BR2_INIT_NONE
	help
	  Use default target skeleton

config BR2_ROOTFS_SKELETON_CUSTOM
	bool "custom target skeleton"
	select BR2_PACKAGE_SKELETON_CUSTOM
	help
	  Use custom target skeleton.

endchoice

if BR2_ROOTFS_SKELETON_CUSTOM

config BR2_ROOTFS_SKELETON_CUSTOM_PATH
	string "custom target skeleton path"
	help
	  Path to custom target skeleton.

endif

if BR2_ROOTFS_SKELETON_DEFAULT

config BR2_TARGET_GENERIC_HOSTNAME
	string "System hostname"
	default "buildroot"
	help
	  Select system hostname to be stored in /etc/hostname.

	  Leave empty to not create /etc/hostname, or to keep the
	  one from a custom skeleton.

config BR2_TARGET_GENERIC_ISSUE
	string "System banner"
	default "Welcome to Buildroot"
	help
	  Select system banner (/etc/issue) to be displayed at login.

	  Leave empty to not create /etc/issue, or to keep the
	  one from a custom skeleton.

endif

choice
	bool "Passwords encoding"
	default BR2_TARGET_GENERIC_PASSWD_SHA256
	help
	  Choose the password encoding scheme to use when Buildroot
	  needs to encode a password (eg. the root password, below).

	  Note: this is used at build-time, and *not* at runtime.

config BR2_TARGET_GENERIC_PASSWD_SHA256
	bool "sha-256"
	help
	  Use SHA256 to encode passwords which is stronger than MD5.

config BR2_TARGET_GENERIC_PASSWD_SHA512
	bool "sha-512"
	help
	  Use SHA512 to encode passwords which is stronger than SHA256

endchoice # Passwd encoding

config BR2_TARGET_GENERIC_PASSWD_METHOD
	string
	default "md5"       if BR2_TARGET_GENERIC_PASSWD_MD5
	default "sha-256"   if BR2_TARGET_GENERIC_PASSWD_SHA256
	default "sha-512"   if BR2_TARGET_GENERIC_PASSWD_SHA512

choice
	prompt "Init system"
	default BR2_INIT_BUSYBOX

config BR2_INIT_BUSYBOX
	bool "BusyBox"
	select BR2_PACKAGE_BUSYBOX
	select BR2_PACKAGE_INITSCRIPTS

config BR2_INIT_SYSV
	bool "systemV"
	depends on BR2_USE_MMU # sysvinit
	select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # sysvinit
	select BR2_PACKAGE_INITSCRIPTS
	select BR2_PACKAGE_SYSVINIT

# In Buildroot, we decided not to support a split-usr when systemd is
# used as an init system. This is a design decision, not a systemd
# issue. Thus the select is with BR2_INIT_SYSTEMD (below) rather than
# with BR2_PACKAGE_SYSTEMD.
config BR2_INIT_SYSTEMD
	bool "systemd"
	depends on BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_USES_GLIBC
	depends on BR2_TOOLCHAIN_HAS_SSP
	depends on BR2_USE_MMU
	depends on !BR2_STATIC_LIBS
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
	select BR2_ROOTFS_MERGED_USR
	select BR2_PACKAGE_SYSTEMD

comment "systemd needs a glibc toolchain w/ SSP, headers >= 3.10"
	depends on BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS
	depends on BR2_USE_MMU
	depends on !BR2_TOOLCHAIN_USES_GLIBC || \
		!BR2_TOOLCHAIN_HAS_SSP || \
		!BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10

config BR2_INIT_NONE
	bool "None"
	help
	  Buildroot will not install any init system. You will
	  have to provide your own, either with a new package
	  or with a rootfs-overlay.

endchoice

choice
	prompt "/dev management" if !BR2_INIT_SYSTEMD
	default BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS

config BR2_ROOTFS_DEVICE_CREATION_STATIC
	bool "Static using device table"

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS
	bool "Dynamic using devtmpfs only"

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV
	bool "Dynamic using devtmpfs + mdev"
	select BR2_PACKAGE_BUSYBOX

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV
	bool "Dynamic using devtmpfs + eudev"
	depends on BR2_USE_WCHAR # eudev
	depends on !BR2_STATIC_LIBS
	depends on BR2_USE_MMU # eudev
	select BR2_PACKAGE_EUDEV

comment "eudev needs a toolchain w/ wchar, dynamic library"
	depends on BR2_USE_MMU
	depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS

endchoice

comment "/dev management using udev (from systemd)"
	depends on BR2_INIT_SYSTEMD

config BR2_ROOTFS_DEVICE_TABLE
	string "Path to the permission tables"
	default "system/device_table.txt"
	help
	  Specify a space-separated list of permission table locations,
	  that will be passed to the makedevs utility to assign
	  correct owners and permissions on various files in the
	  target filesystem.

	  See package/makedevs/README for details on the usage and
	  syntax of these files.

config BR2_ROOTFS_STATIC_DEVICE_TABLE
	string "Path to the device tables"
	default "system/device_table_dev.txt"
	depends on BR2_ROOTFS_DEVICE_CREATION_STATIC
	help
	  Specify a space-separated list of device table locations,
	  that will be passed to the makedevs utility to create all
	  the special device files under /dev.

	  See package/makedevs/README for details on the usage and
	  syntax of these files.

config BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES
	bool "support extended attributes in device tables"
	help
	  Support extended attributes handling in device tables

config BR2_ROOTFS_MERGED_USR
	bool "Use symlinks to /usr for /bin, /sbin and /lib"
	help
	  If you say 'n' here, then /bin, /sbin and /lib and their
	  counterparts in /usr will be separate directories. This
	  is the historical UNIX way. In this case, /usr can be a
	  filesystem on a partition separate from / .

	  If you say 'y' here, then /bin, /sbin and /lib will be
	  symlinks to their counterparts in /usr. In this case, /usr can
	  not be a separate filesystem.

if BR2_ROOTFS_SKELETON_DEFAULT

config BR2_TARGET_ENABLE_ROOT_LOGIN
	bool "Enable root login with password"
	default y
	select BR2_PACKAGE_HOST_MKPASSWD if BR2_TARGET_GENERIC_ROOT_PASSWD != ""
	help
	  Allow root to log in with a password.

	  If not enabled, root will not be able to log in with a
	  password. However, if you have an ssh server and you add an
	  ssh key, you can still allow root to log in. Alternatively,
	  you can use sudo to become root.

config BR2_TARGET_GENERIC_ROOT_PASSWD
	string "Root password"
	default ""
	depends on BR2_TARGET_ENABLE_ROOT_LOGIN
	help
	  Set the initial root password.

	  If set to empty (the default), then no root password will be
	  set, and root will need no password to log in.

	  If the password starts with any of $1$, $5$ or $6$, it is
	  considered to be already crypt-encoded with respectively md5,
	  sha256 or sha512.  Any other value is taken to be a clear-text
	  value, and is crypt-encoded as per the "Passwords encoding"
	  scheme, above.

	  Note: "$" signs in the hashed password must be doubled. For
	  example, if the hashed password is
	  "$1$longsalt$v35DIIeMo4yUfI23yditq0", then you must enter it
	  as "$$1$$longsalt$$v35DIIeMo4yUfI23yditq0" (this is necessary
	  otherwise make would attempt to interpret the $ as a variable
	  expansion).

	  WARNING! WARNING!
	  The password appears as-is in the .config file, and may appear
	  in the build log! Avoid using a valuable password if either
	  the .config file or the build log may be distributed, or at
	  the very least use a strong cryptographic hash for your
	  password!

choice
	bool "/bin/sh"
	default BR2_SYSTEM_BIN_SH_DASH if !BR2_PACKAGE_BUSYBOX
	help
	  Select which shell will provide /bin/sh.

# busybox has shells that work on noMMU
config BR2_SYSTEM_BIN_SH_BUSYBOX
	bool "busybox' default shell"
	depends on BR2_PACKAGE_BUSYBOX

config BR2_SYSTEM_BIN_SH_BASH
	bool "bash"
	depends on BR2_USE_MMU # bash
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	select BR2_PACKAGE_BASH

config BR2_SYSTEM_BIN_SH_DASH
	bool "dash"
	depends on BR2_USE_MMU # dash
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	select BR2_PACKAGE_DASH

config BR2_SYSTEM_BIN_SH_MKSH
	bool "mksh"
	depends on BR2_USE_MMU # mksh
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	select BR2_PACKAGE_MKSH

config BR2_SYSTEM_BIN_SH_ZSH
	bool "zsh"
	depends on BR2_USE_MMU # zsh
	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	select BR2_PACKAGE_ZSH

comment "bash, dash, mksh, zsh need BR2_PACKAGE_BUSYBOX_SHOW_OTHERS"
	depends on !BR2_PACKAGE_BUSYBOX_SHOW_OTHERS && BR2_PACKAGE_BUSYBOX

config BR2_SYSTEM_BIN_SH_NONE
	bool "none"

endchoice # /bin/sh

config BR2_SYSTEM_BIN_SH
	string
	default "bash"    if BR2_SYSTEM_BIN_SH_BASH
	default "dash"    if BR2_SYSTEM_BIN_SH_DASH
	default "mksh"    if BR2_SYSTEM_BIN_SH_MKSH
	default "zsh"     if BR2_SYSTEM_BIN_SH_ZSH

menuconfig BR2_TARGET_GENERIC_GETTY
	bool "Run a getty (login prompt) after boot"
	default y

if BR2_TARGET_GENERIC_GETTY
config BR2_TARGET_GENERIC_GETTY_PORT
	string "TTY port"
	default "console"
	help
	  Specify a port to run a getty on.

choice
	prompt "Baudrate"
	default BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
	help
	  Select a baudrate to use.

config BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
	bool "keep kernel default"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600
	bool "9600"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200
	bool "19200"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400
	bool "38400"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600
	bool "57600"
config BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200
	bool "115200"
endchoice

config BR2_TARGET_GENERIC_GETTY_BAUDRATE
	string
	default "0"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP
	default "9600"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600
	default "19200"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200
	default "38400"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400
	default "57600"		if BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600
	default "115200"	if BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200

config BR2_TARGET_GENERIC_GETTY_TERM
	string "TERM environment variable"
	default "vt100"
	# currently observed only by busybox and sysvinit
	depends on BR2_INIT_BUSYBOX || BR2_INIT_SYSV
	help
	  Specify a TERM type.

config BR2_TARGET_GENERIC_GETTY_OPTIONS
	string "other options to pass to getty"
	default ""
	# currently observed only by busybox and sysvinit
	depends on BR2_INIT_BUSYBOX || BR2_INIT_SYSV
	help
	  Any other flags you want to pass to getty,
	  Refer to getty --help for details.
endif

config BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW
	bool "remount root filesystem read-write during boot"
	default y
	help
	  The root filesystem is typically mounted read-only at boot.
	  By default, buildroot remounts it in read-write mode early
	  during the boot process.
	  Say no here if you would rather like your root filesystem to
	  remain read-only.
	  If unsure, say Y.

config BR2_SYSTEM_DHCP
	string "Network interface to configure through DHCP"
	default ""
	depends on BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN || BR2_PACKAGE_SYSTEMD_NETWORKD
	help
	  Enter here the name of the network interface (E.G. eth0) to
	  automatically configure through DHCP at bootup.

	  If left empty, no automatic DHCP requests will take place.

	  For more complicated network setups use an overlay to
	  overwrite /etc/network/interfaces or add a networkd
	  configuration file.

comment "automatic network configuration via DHCP needs ifupdown or busybox or networkd"
	depends on !(BR2_PACKAGE_BUSYBOX || BR2_PACKAGE_IFUPDOWN || BR2_PACKAGE_SYSTEMD_NETWORKD)

endif # BR2_ROOTFS_SKELETON_DEFAULT

config BR2_SYSTEM_DEFAULT_PATH
	string "Set the system's default PATH"
	default "/bin:/sbin:/usr/bin:/usr/sbin"
	help
	  Sets the system's default PATH. It is being used in
	  /etc/profile in the skeleton-init-common package and by some
	  daemons.

	  The default should work in most cases.

config BR2_ENABLE_LOCALE_PURGE
	bool "Purge unwanted locales"
	default y
	help
	  Explicitly specify what locales to install on target. If N
	  then all locales supported by packages are installed.

config BR2_ENABLE_LOCALE_WHITELIST
	string "Locales to keep"
	default "C en_US"
	depends on BR2_ENABLE_LOCALE_PURGE
	help
	  Whitespace seperated list of locales to allow on target.
	  Locales not listed here will be removed from the target.
	  See 'locale -a' on your host for a list of locales available
	  on your build host, or have a look in /usr/share/locale in
	  the target file system for available locales.

	  Notice that listing a locale here doesn't guarantee that it
	  will be available on the target - That purely depends on the
	  support for that locale in the selected packages.

config BR2_GENERATE_LOCALE
	string "Generate locale data"
	default ""
	depends on \
		(BR2_TOOLCHAIN_BUILDROOT_UCLIBC && BR2_ENABLE_LOCALE) || \
		BR2_TOOLCHAIN_USES_GLIBC
	help
	  Generate support for a list of locales. Locales can be
	  specified with or without encoding, when no encoding is
	  specified, UTF-8 is assumed. Examples of locales: en_US,
	  fr_FR.UTF-8.

config BR2_SYSTEM_ENABLE_NLS
	bool "Enable Native Language Support (NLS)"
	depends on BR2_USE_WCHAR
	#  - glibc has built-in NLS support, but anyway doesn't
	#    support static linking
	#  - musl and uclibc support static linking, but they don't
	#    have built-in NLS support, which is provided by the
	#    libintl library from gettext. The fact that it is a
	#    separate library causes too many problems for static
	#    linking.
	depends on !BR2_STATIC_LIBS
	select BR2_PACKAGE_GETTEXT if !BR2_TOOLCHAIN_HAS_FULL_GETTEXT
	help
	  This option will enable Native Language Support, which will
	  allow software packages to support translations.

comment "NLS support needs a toolchain w/ wchar, dynamic library"
	depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS

config BR2_TARGET_TZ_INFO
	bool "Install timezone info"
	select BR2_PACKAGE_TZDATA if BR2_TOOLCHAIN_USES_GLIBC
	select BR2_PACKAGE_TZDATA if BR2_TOOLCHAIN_USES_MUSL
	select BR2_PACKAGE_TZ if BR2_TOOLCHAIN_USES_UCLIBC
	help
	  Say 'y' here to install timezone info.

if BR2_TARGET_TZ_INFO

config BR2_TARGET_TZ_ZONELIST
	string "timezone list"
	default "default"
	help
	  Space-separated list of time zones to compile.

	  The value "default" includes all commonly used time zones.
	  Note that this set consumes around 5.5M for glibc and 2.1M for
	  uClibc.

	  The full list is the list of files in the time zone database
	  source, not including the build and .tab files.

config BR2_TARGET_LOCALTIME
	string "default local time"
	default "Etc/UTC"
	help
	  The time zone to install as the default local time, expressed
	  as a tzdata location, such as:
	    Etc/UTC             (the default)
	    GMT
	    Europe/Paris
	    America/New_York
	    Pacific/Wallis
	    ...

	  Set to empty to not install a default time zone.

endif # BR2_TARGET_TZ_INFO

config BR2_ROOTFS_USERS_TABLES
	string "Path to the users tables"
	help
	  Specify a space-separated list of users table locations,
	  that will be passed to the mkusers utility to create
	  users on the system, with home directory, password, etc.

	  See manual for details on the usage and syntax of these files.

config BR2_ROOTFS_OVERLAY
	string "Root filesystem overlay directories"
	default ""
	help
	  Specify a list of directories that are copied over the target
	  root filesystem after the build has finished and before it is
	  packed into the selected filesystem images.

	  They are copied as-is into the rootfs, excluding files ending
	  with ~ and .git, .svn and .hg directories.

config BR2_ROOTFS_POST_BUILD_SCRIPT
	string "Custom scripts to run before creating filesystem images"
	default ""
	help
	  Specify a space-separated list of scripts to be run after the
	  build has finished and before Buildroot starts packing the
	  files into selected filesystem images.

	  This gives users the opportunity to do board-specific
	  cleanups, add-ons and the like, so the generated files can be
	  used directly without further processing.

	  These scripts are called with the target directory name as
	  first argument. Make sure the exit code of those scripts are
	  0, otherwise make will stop after calling them.

config BR2_ROOTFS_POST_FAKEROOT_SCRIPT
	string "Custom scripts to run inside the fakeroot environment"
	default ""
	help
	  Specify a space-separated list of scripts to be run at the end
	  of the fakeroot script right before the image(s) are actually
	  generated.

	  This gives users the opportunity to do customisations of the
	  content of the rootfs, which would otherwise require root
	  rights.

	  These scripts are called with the target directory name as
	  first argument. The build will fail on the first scripts that
	  exits with a non-zero exit code.

	  Note that Buildroot already provides mechanisms to customise
	  the content of the rootfs:

	    - BR2_ROOTFS_STATIC_DEVICE_TABLE
	        to create arbitrary entries statically in /dev

	    - BR2_ROOTFS_DEVICE_TABLE
	        to set arbitrary permissions as well as extended
	        attributes (such as capabilities) on files and
	        directories,

	    - BR2_ROOTFS_USERS_TABLES:
	        to create arbitrary users and their home directories

	  It is highly recommended to use those mechanisms if possible,
	  rather than using custom fakeroot scripts.

config BR2_ROOTFS_POST_IMAGE_SCRIPT
	string "Custom scripts to run after creating filesystem images"
	default ""
	help
	  Specify a space-separated list of scripts to be run after
	  the build has finished and after Buildroot has packed the
	  files into selected filesystem images.

	  This can for example be used to call a tool building a
	  firmware image from different images generated by Buildroot,
	  or automatically extract the tarball root filesystem image
	  into some location exported by NFS, or any other custom
	  action.

	  These scripts are called with the images directory name as
	  first argument. The script is executed from the main Buildroot
	  source directory as the current directory.

config BR2_ROOTFS_POST_SCRIPT_ARGS
	string "Extra arguments passed to custom scripts"
	depends on BR2_ROOTFS_POST_BUILD_SCRIPT != "" \
		|| BR2_ROOTFS_POST_FAKEROOT_SCRIPT != "" \
		|| BR2_ROOTFS_POST_IMAGE_SCRIPT != ""
	help
	  Pass these additional arguments to each post-build or
	  post-image scripts.

	  Note that all the post-build and post-image scripts will be
	  passed the same set of arguments, you can not pass different
	  arguments to each script.

	  Note also, as stated in their respective help text, that the
	  first argument to each post-build or post-image script is the
	  target directory / images directory. The arguments in this
	  option will be passed *after* those.

endmenu
