#
# 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 compression 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 a 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
