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.

# dummy config so merged /usr workarounds can also be activated for
# custom rootfs skeleton
config BR2_ROOTFS_MERGED_USR

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_MD5
	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_MD5
	bool "md5"
	help
	  Use MD5 to encode passwords.

	  The default. Wildly available, and pretty good.
	  Although pretty strong, MD5 is now an old hash function, and
	  suffers from some weaknesses, which makes it susceptible to
	  brute-force attacks.

config BR2_TARGET_GENERIC_PASSWD_SHA256
	bool "sha-256"
	help
	  Use SHA256 to encode passwords.

	  Very strong, but not ubiquitous, although available in glibc
	  for some time now. Choose only if you are sure your C library
	  understands SHA256 passwords.

config BR2_TARGET_GENERIC_PASSWD_SHA512
	bool "sha-512"
	help
	  Use SHA512 to encode passwords.

	  Extremely strong, but not ubiquitous, although available in
	  glibc for some time now. Choose only if you are sure your C
	  library understands SHA512 passwords.

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 || BR2_TOOLCHAIN_USES_UCLIBC
	depends on BR2_USE_WCHAR
	depends on BR2_TOOLCHAIN_HAS_THREADS
	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 or uClibc toolchain, headers >= 3.10"
	depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_UCLIBC \
		&& 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

if BR2_ROOTFS_SKELETON_DEFAULT

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.

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_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
	    ...

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
