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

menu "Archival Utilities"

config 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 XXX bytes.

	  Unless you have a specific application which requires ar, you should
	  probably say N here.

config CONFIG_FEATURE_AR_LONG_FILENAMES
	bool "  Enable support for long filenames (not need for debs)"
	default n
	depends on CONFIG_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 CONFIG_BUNZIP2
	bool "bunzip2"
	default n
	help
	  bunzip2 is an 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.  
	  
	  The BusyBox bunzip2 applet is limited to de-compression only.
	  On an x86 system, this applet adds about XXX bytes.
	  
	  Unless you have a specific application which requires bunzip2, you
	  should probably say N here.

config 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 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 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 CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY
	bool "  extract only (-x)"
	default n
	depends on CONFIG_DPKG_DEB
	help
	  This reduced 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 CONFIG_FEATURE_DEB_TAR_GZ
	bool "  gzip debian packages (normal)"
	default y if CONFIG_DPKG || CONFIG_DPKG_DEB
	depends on CONFIG_DPKG || CONFIG_DPKG_DEB
	help
	  This is the default compression method inside the debian ar file.
	  
	  If you want compatability with standard .deb's you should say yes here.

config CONFIG_FEATURE_DEB_TAR_BZ2
	bool "  bzip2 debian packages"
	default n
	depends on CONFIG_DPKG || CONFIG_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 is your are creating your own custom debian packages that
	  use an internal control.tar.bz2 or data.tar.bz2.

config 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 CONFIG_FEATURE_GUNZIP_UNCOMPRESS
	bool "  Uncompress support"
	default n
	depends on CONFIG_GUNZIP
	help
	  If you want gunzip to have the ability to decompress
	  archives created by the program compress (not much
	  used anymore).

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

config CONFIG_RPM2CPIO
	bool "rpm2cpio"
	default n
	help
	  Converts an RPM file into a CPIO archive.

config CONFIG_RPM
	bool "rpm"
	default n
	help
	  Mini RPM applet - querys and extracts

config 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 used
	  UNIX archive program.

config CONFIG_FEATURE_TAR_CREATE
	bool "  Enable archive creation"
	default y
	depends on CONFIG_TAR
	help
	  If you enable this option you'll be able to create
	  tar archives using the `-c' option.

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

config CONFIG_FEATURE_TAR_EXCLUDE
	bool "  Enable -X and --exclude options (exclude files)"
	default n
	depends on CONFIG_TAR
	help
	  If you enable this option you'll be able to specify
	  a list of files to exclude from an archive.

config CONFIG_FEATURE_TAR_GZIP
	bool "  Enable -z option"
	default y
	depends on CONFIG_TAR
	help
	  If you enable this option tar will be able to call gzip,
	  when creating or extracting tar gziped archives.

config CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY
	bool "  Enable support for old tar header format"
	default N
	depends on CONFIG_TAR
	help
	  This option is required to unpack archives created with
	  in the old GNU format, help to kill this old format by
	  repacking your ancient archives with the new format.

config CONFIG_FEATURE_TAR_GNU_EXTENSIONS
	bool "  Enable support for some GNU tar extensions"
	default y
	depends on CONFIG_TAR
	help
	  With this option busybox supports GNU long filenames and 
	  linknames.

config CONFIG_FEATURE_UNARCHIVE_TAPE
	bool "  Enable tape drive support"
	default n
	depends on CONFIG_TAR || CONFIG_CPIO
	help
	  I dont think this is needed anymore.

config 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 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.

endmenu
