#
# 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,
	  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.

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_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 "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 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 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
