#
# 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 y
	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 LZOP
	bool "lzop"
	default y
	help
	  Lzop compression/decompresion.

config LZOP_COMPR_HIGH
	bool "lzop complession 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 an 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 de-compression only.
	  On an x86 system, this applet adds about 4K.

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

config FEATURE_LZMA_FAST
	bool "Optimize unlzma for speed"
	default y
	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
