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

menu "Archival Utilities"

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 DPKG
	bool "dpkg"
	default n
	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
	help
	  dpkg-deb packs, 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, you should
	  probably 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 FEATURE_GUNZIP_UNCOMPRESS
	bool "Uncompress support"
	default n
	depends on GUNZIP
	help
	  Enable if you want gunzip to have the ability to decompress
	  archives created by the program compress (not much
	  used anymore).

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

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 FEATURE_RPM_BZ2
	bool "Enable handling of rpms with bzip2-compressed data inside"
	default n
	depends on RPM
	help
	  Enable handling of rpms with bzip2-compressed data inside.

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.

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_GZIP
	bool "Enable -z option"
	default y
	depends on TAR
	help
	  If you enable this option tar will be able to call gzip,
	  when creating or extracting tar gziped archives.

config FEATURE_TAR_BZIP2
	bool "Enable -j option to handle .tar.bz2 files"
	default n
	depends on TAR
	help
	  If you enable this option you'll be able to extract
	  archives compressed with bzip2.

config FEATURE_TAR_LZMA
	bool "Enable -a option to handle .tar.lzma files"
	default n
	depends on TAR
	help
	  If you enable this option you'll be able to extract
	  archives compressed with lzma.

config FEATURE_TAR_COMPRESS
	bool "Enable -Z option"
	default n
	depends on TAR
	help
	  If you enable this option tar will be able to call uncompress,
	  when extracting .tar.Z archives.

config FEATURE_TAR_AUTODETECT
	bool "Let tar autodetect gz/bz2 compresses tarballs"
	default n
	depends on FEATURE_TAR_GZIP || FEATURE_TAR_BZIP2
	help
	  With this option tar can automatically detect gzip/bzip2 compressed
	  tarballs. Currently it works only on seekable streams.

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.

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 "Optimze unlzma for speed"
	default n
	depends on UNLZMA
	help
	  This option reduces decompression time by about 33% at the cost of
	  a 2K 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.

comment "Common options for cpio and tar"
	depends on CPIO || TAR

comment "Common options for dpkg and dpkg_deb"
	depends on DPKG || DPKG_DEB

config FEATURE_DEB_TAR_GZ
	bool "gzip debian packages (normal)"
	default y if DPKG || DPKG_DEB
	depends on DPKG || DPKG_DEB
	help
	  This is the default compression method inside the debian ar file.

	  If you want compatibility with standard .deb's you should say yes here.

config FEATURE_DEB_TAR_BZ2
	bool "bzip2 debian packages"
	default n
	depends on DPKG || DPKG_DEB
	help
	  This allows dpkg and dpkg-deb to extract deb's that are compressed internally
	  with bzip2 instead of gzip.

	  You only want this if you are creating your own custom debian packages that
	  use an internal control.tar.bz2 or data.tar.bz2.

config FEATURE_DEB_TAR_LZMA
	bool "lzma debian packages"
	default n
	depends on DPKG || DPKG_DEB
	help
	  This allows dpkg and dpkg-deb to extract deb's that are compressed
	  internally with lzma instead of gzip.

	  You only want this if you are creating your own custom debian
	  packages that use an internal control.tar.lzma or data.tar.lzma.

endmenu
