#
# 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 "Enable 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 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_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_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_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_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_OLDGNU_COMPATIBILITY
	bool "Enable 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 "Enable support for some GNU tar extensions"
	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 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

config FEATURE_UNARCHIVE_TAPE
	bool "Enable tape drive support"
	default n
	depends on CPIO || TAR
	help
	  I don't think this is needed anymore.

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
