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

menu "Archival Utilities"

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

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

config FEATURE_SEAMLESS_GZ
	bool "Make tar, rpm, modprobe etc understand .gz data"
	default n
	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
	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 need for debs)"
	default n
	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 BUNZIP2
	bool "bunzip2"
	default n
	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 n
	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 n
	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 n
	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 n
	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 n
	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 n
	help
	  gzip is used to compress files.
	  It's probably the most widely used UNIX compression program.

config LZOP
	bool "lzop"
	default n
	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 n
	help
	  Converts an RPM file into a CPIO archive.

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

config TAR
	bool "tar"
	default n
	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.

if TAR

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 gz/bz2 compressed tarballs"
	default n
	depends on FEATURE_SEAMLESS_Z || FEATURE_SEAMLESS_GZ || FEATURE_SEAMLESS_BZ2 || FEATURE_SEAMLESS_LZMA
	help
	  With this option tar can automatically detect gzip/bzip2 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 n
	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 N
	depends on TAR
	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 N
	depends on TAR
	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
	help
	  With this option busybox supports GNU long filenames and
	  linknames.

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

config FEATURE_TAR_UNAME_GNAME
	bool "Enable use of user and group names"
	default n
	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.

endif #tar

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 n
	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 n
	depends on UNLZMA
	help
	  This option reduces decompression time by about 25% at the cost of
	  a 1K bigger binary.

config UNZIP
	bool "unzip"
	default n
	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
