#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Archival Utilities"

INSERT

config FEATURE_SEAMLESS_XZ
	bool "Make tar, rpm, modprobe etc understand .xz data"
	default y
	help
	  Make tar, rpm, modprobe etc understand .xz data.

config FEATURE_SEAMLESS_LZMA
	bool "Make tar, rpm, modprobe etc understand .lzma data"
	default y
	help
	  Make tar, rpm, modprobe etc understand .lzma data.

config FEATURE_SEAMLESS_BZ2
	bool "Make tar, rpm, modprobe etc understand .bz2 data"
	default y
	help
	  Make tar, rpm, modprobe etc understand .bz2 data.

config FEATURE_SEAMLESS_GZ
	bool "Make tar, rpm, modprobe etc understand .gz data"
	default y
	help
	  Make tar, rpm, modprobe etc understand .gz data.

config FEATURE_SEAMLESS_Z
	bool "Make tar and gunzip understand .Z data"
	default n
	help
	  Make tar and gunzip understand .Z data.

config AR
	bool "ar"
	default n  # needs to be improved to be able to replace binutils ar
	help
	  ar is an archival utility program used to create, modify, and
	  extract contents from archives. An archive is a single file holding
	  a collection of other files in a structure that makes it possible to
	  retrieve the original individual files (called archive members).
	  The original files' contents, mode (permissions), timestamp, owner,
	  and group are preserved in the archive, and can be restored on
	  extraction.

	  The stored filename is limited to 15 characters. (for more information
	  see long filename support).
	  ar has 60 bytes of overheads for every stored file.

	  This implementation of ar can extract archives, it cannot create or
	  modify them.
	  On an x86 system, the ar applet adds about 1K.

	  Unless you have a specific application which requires ar, you should
	  probably say N here.

config FEATURE_AR_LONG_FILENAMES
	bool "Support for long filenames (not needed for debs)"
	default y
	depends on AR
	help
	  By default the ar format can only store the first 15 characters
	  of the filename, this option removes that limitation.
	  It supports the GNU ar long filename method which moves multiple long
	  filenames into a the data section of a new ar entry.

config FEATURE_AR_CREATE
	bool "Support archive creation"
	default y
	depends on AR
	help
	  This enables archive creation (-c and -r) with busybox ar.

config BUNZIP2
	bool "bunzip2"
	default y
	help
	  bunzip2 is a compression utility using the Burrows-Wheeler block
	  sorting text compression algorithm, and Huffman coding. Compression
	  is generally considerably better than that achieved by more
	  conventional LZ77/LZ78-based compressors, and approaches the
	  performance of the PPM family of statistical compressors.

	  Unless you have a specific application which requires bunzip2, you
	  should probably say N here.

config BZIP2
	bool "bzip2"
	default y
	help
	  bzip2 is a compression utility using the Burrows-Wheeler block
	  sorting text compression algorithm, and Huffman coding. Compression
	  is generally considerably better than that achieved by more
	  conventional LZ77/LZ78-based compressors, and approaches the
	  performance of the PPM family of statistical compressors.

	  Unless you have a specific application which requires bzip2, you
	  should probably say N here.

config CPIO
	bool "cpio"
	default y
	help
	  cpio is an archival utility program used to create, modify, and
	  extract contents from archives.
	  cpio has 110 bytes of overheads for every stored file.

	  This implementation of cpio can extract cpio archives created in the
	  "newc" or "crc" format, it cannot create or modify them.

	  Unless you have a specific application which requires cpio, you
	  should probably say N here.

config FEATURE_CPIO_O
	bool "Support for archive creation"
	default y
	depends on CPIO
	help
	  This implementation of cpio can create cpio archives in the "newc"
	  format only.

config FEATURE_CPIO_P
	bool "Support for passthrough mode"
	default y
	depends on FEATURE_CPIO_O
	help
	  Passthrough mode. Rarely used.

config DPKG
	bool "dpkg"
	default n
	select FEATURE_SEAMLESS_GZ
	help
	  dpkg is a medium-level tool to install, build, remove and manage
	  Debian packages.

	  This implementation of dpkg has a number of limitations,
	  you should use the official dpkg if possible.

config DPKG_DEB
	bool "dpkg_deb"
	default n
	select FEATURE_SEAMLESS_GZ
	help
	  dpkg-deb unpacks and provides information about Debian archives.

	  This implementation of dpkg-deb cannot pack archives.

	  Unless you have a specific application which requires dpkg-deb,
	  say N here.

config FEATURE_DPKG_DEB_EXTRACT_ONLY
	bool "Extract only (-x)"
	default n
	depends on DPKG_DEB
	help
	  This reduces dpkg-deb to the equivalent of
	  "ar -p <deb> data.tar.gz | tar -zx". However it saves space as none
	  of the extra dpkg-deb, ar or tar options are needed, they are linked
	  to internally.

config GUNZIP
	bool "gunzip"
	default y
	help
	  gunzip is used to decompress archives created by gzip.
	  You can use the `-t' option to test the integrity of
	  an archive, without decompressing it.

config GZIP
	bool "gzip"
	default y
	help
	  gzip is used to compress files.
	  It's probably the most widely used UNIX compression program.

config FEATURE_GZIP_LONG_OPTIONS
	bool "Enable long options"
	default y
	depends on GZIP && LONG_OPTS
	help
	  Enable use of long options, increases size by about 106 Bytes

config GZIP_FAST
	int "Trade memory for gzip speed (0:small,slow - 2:fast,big)"
	default 0
	range 0 2
	depends on GZIP
	help
	  Enable big memory options for gzip.
	  0: small buffers, small hash-tables
	  1: larger buffers, larger hash-tables
	  2: larger buffers, largest hash-tables
	  Larger models may give slightly better compression

config LZOP
	bool "lzop"
	default y
	help
	  Lzop compression/decompresion.

config LZOP_COMPR_HIGH
	bool "lzop compression levels 7,8,9 (not very useful)"
	default n
	depends on LZOP
	help
	  High levels (7,8,9) of lzop compression. These levels
	  are actually slower than gzip at equivalent compression ratios
	  and take up 3.2K of code.

config RPM2CPIO
	bool "rpm2cpio"
	default y
	help
	  Converts a RPM file into a CPIO archive.

config RPM
	bool "rpm"
	default y
	help
	  Mini RPM applet - queries and extracts RPM packages.

config TAR
	bool "tar"
	default y
	help
	  tar is an archiving program. It's commonly used with gzip to
	  create compressed archives. It's probably the most widely used
	  UNIX archive program.

config FEATURE_TAR_CREATE
	bool "Enable archive creation"
	default y
	depends on TAR
	help
	  If you enable this option you'll be able to create
	  tar archives using the `-c' option.

config FEATURE_TAR_AUTODETECT
	bool "Autodetect compressed tarballs"
	default y
	depends on TAR && (FEATURE_SEAMLESS_Z || FEATURE_SEAMLESS_GZ || FEATURE_SEAMLESS_BZ2 || FEATURE_SEAMLESS_LZMA || FEATURE_SEAMLESS_XZ)
	help
	  With this option tar can automatically detect compressed
	  tarballs. Currently it works only on files (not pipes etc).

config FEATURE_TAR_FROM
	bool "Enable -X (exclude from) and -T (include from) options)"
	default y
	depends on TAR
	help
	  If you enable this option you'll be able to specify
	  a list of files to include or exclude from an archive.

config FEATURE_TAR_OLDGNU_COMPATIBILITY
	bool "Support for old tar header format"
	default y
	depends on TAR || DPKG
	help
	  This option is required to unpack archives created in
	  the old GNU format; help to kill this old format by
	  repacking your ancient archives with the new format.

config FEATURE_TAR_OLDSUN_COMPATIBILITY
	bool "Enable untarring of tarballs with checksums produced by buggy Sun tar"
	default y
	depends on TAR || DPKG
	help
	  This option is required to unpack archives created by some old
	  version of Sun's tar (it was calculating checksum using signed
	  arithmetic). It is said to be fixed in newer Sun tar, but "old"
	  tarballs still exist.

config FEATURE_TAR_GNU_EXTENSIONS
	bool "Support for GNU tar extensions (long filenames)"
	default y
	depends on TAR || DPKG
	help
	  With this option busybox supports GNU long filenames and
	  linknames.

config FEATURE_TAR_LONG_OPTIONS
	bool "Enable long options"
	default y
	depends on TAR && LONG_OPTS
	help
	  Enable use of long options, increases size by about 400 Bytes

config FEATURE_TAR_TO_COMMAND
	bool "Support for writing to an external program"
	default y
	depends on TAR && FEATURE_TAR_LONG_OPTIONS
	help
	  If you enable this option you'll be able to instruct tar to send
	  the contents of each extracted file to the standard input of an
	  external program.

config FEATURE_TAR_UNAME_GNAME
	bool "Enable use of user and group names"
	default y
	depends on TAR
	help
	  Enables use of user and group names in tar. This affects contents
	  listings (-t) and preserving permissions when unpacking (-p).
	  +200 bytes.

config FEATURE_TAR_NOPRESERVE_TIME
	bool "Enable -m (do not preserve time) option"
	default y
	depends on TAR
	help
	  With this option busybox supports GNU tar -m
	  (do not preserve time) option.

config FEATURE_TAR_SELINUX
	bool "Support for extracting SELinux labels"
	default n
	depends on TAR && SELINUX
	help
	  With this option busybox supports restoring SELinux labels
	  when extracting files from tar archives.

config UNCOMPRESS
	bool "uncompress"
	default n
	help
	  uncompress is used to decompress archives created by compress.
	  Not much used anymore, replaced by gzip/gunzip.

config UNLZMA
	bool "unlzma"
	default y
	help
	  unlzma is a compression utility using the Lempel-Ziv-Markov chain
	  compression algorithm, and range coding. Compression
	  is generally considerably better than that achieved by the bzip2
	  compressors.

	  The BusyBox unlzma applet is limited to decompression only.
	  On an x86 system, this applet adds about 4K.

config FEATURE_LZMA_FAST
	bool "Optimize unlzma for speed"
	default n
	depends on UNLZMA
	help
	  This option reduces decompression time by about 25% at the cost of
	  a 1K bigger binary.

config LZMA
	bool "Provide lzma alias which supports only unpacking"
	default y
	depends on UNLZMA
	help
	  Enable this option if you want commands like "lzma -d" to work.
	  IOW: you'll get lzma applet, but it will always require -d option.

config UNXZ
	bool "unxz"
	default y
	help
	  unxz is a unlzma successor.

config XZ
	bool "Provide xz alias which supports only unpacking"
	default y
	depends on UNXZ
	help
	  Enable this option if you want commands like "xz -d" to work.
	  IOW: you'll get xz applet, but it will always require -d option.

config UNZIP
	bool "unzip"
	default y
	help
	  unzip will list or extract files from a ZIP archive,
	  commonly found on DOS/WIN systems. The default behavior
	  (with no options) is to extract the archive into the
	  current directory. Use the `-d' option to extract to a
	  directory of your choice.

endmenu
