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