#
# 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 n  # needs to be improved to be able to replace binutils ar
	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
