#
# 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 1K.

	  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 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.  
	  
	  The BusyBox bunzip2 applet is limited to de-compression only.
	  On an x86 system, this applet adds about 11K.
	  
	  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 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 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 compatibility 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 if you 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
	  Enable 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 widely 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 - queries 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 widely 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_COMPRESS
	bool "  Enable -Z option"
	default n
	depends on CONFIG_TAR
	help
	  If you enable this option tar will be able to call uncompress,
	  when extracting .tar.Z 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 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_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.

comment "Common options for cpio and tar"
	depends on CONFIG_CPIO || CONFIG_TAR

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

endmenu
