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

mainmenu_option next_comment
comment 'Archival Utilities'

bool 'ar'	    CONFIG_AR
if [ "$CONFIG_AR" = "y" ] ; then
    bool '  Enable support for long filenames (not need for debs)'	CONFIG_FEATURE_AR_LONG_FILENAMES
fi
bool 'bunzip2'	    CONFIG_BUNZIP2
bool 'cpio'	    CONFIG_CPIO
bool 'dpkg'	    CONFIG_DPKG
bool 'dpkg_deb'	    CONFIG_DPKG_DEB
if [ "$CONFIG_DPKG_DEB" = "y" ] ; then
    bool '  extract only (-x)'	CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY
fi
if [ "$CONFIG_DPKG" = "y" ] || [ "$CONFIG_DPKG_DEB" = "y" ] ; then
    comment 'Common dpkg/dpkg-deb options'
    bool '  gzip debian packages (normal)'      CONFIG_FEATURE_DEB_TAR_GZ
    bool '  bzip2 debian packages'              CONFIG_FEATURE_DEB_TAR_BZ2
fi
bool 'gunzip'	    CONFIG_GUNZIP
if [ "$CONFIG_GUNZIP" = "y" ]; then
    bool '  Uncompress support'		CONFIG_FEATURE_GUNZIP_UNCOMPRESS
fi
bool 'gzip'	    CONFIG_GZIP
bool 'rpm2cpio'     CONFIG_RPM2CPIO
bool 'tar'	    CONFIG_TAR
if [ "$CONFIG_TAR" = "y" ] ; then
    bool '  Enable archive creation'	CONFIG_FEATURE_TAR_CREATE
    bool '  Enable -j option to handle .tar.bz2 files'	CONFIG_FEATURE_TAR_BZIP2
    bool '  Enable -X and --exclude options (exclude files)'	CONFIG_FEATURE_TAR_EXCLUDE
    bool '  Enable -z option'	CONFIG_FEATURE_TAR_GZIP
    bool '  Enable support for old tar header format'	CONFIG_FEATURE_TAR_OLD_FORMAT
    bool '  Enable support for GNU long filenames' CONFIG_FEATURE_GNUTAR_LONG_FILENAME
fi
if [ "$CONFIG_CPIO" = "y" -o "$CONFIG_TAR" = "y" ] ; then
    bool '  Enable tape drive support' CONFIG_FEATURE_UNARCHIVE_TAPE
fi
bool 'uncompress'   CONFIG_UNCOMPRESS
bool 'unzip'	    CONFIG_UNZIP
endmenu
