Autoconf检查tar支持xz

时间:2014-08-12 20:43:24

标签: autoconf

我正在准备我的BSD Make scripts的新版本,需要检查系统上的tar命令是否支持使用-J进行压缩的xz选项。

autoconf中执行此操作的正确方法是什么? AC_CHECK_PROG似乎不允许使用选项测试程序。

在我的情况下,有效的测试可能是tar -cJf /dev/null /dev/null,所以我想出了测试

define([CHECK_TAR_OPTION], dnl
 [printf 'checking whether tar -$1 works...']
 [if tar c$1f /dev/null /dev/null >&- 2>&-;then $2=yes; else $2=no; fi]
 [printf '%s\n' "$$2"])dnl

在我的代码中

 CHECK_TAR_OPTION(z,USE_GZIP)

如果tar -z有效,则将USE_GZIP设置为是,否则设置为否。

我对M4编程有一些经验,但与autoconf没有关系,所以我希望有一个更特殊的解决方案。

1 个答案:

答案 0 :(得分:3)

你的方法在我看来是错误的。你可以随时:

tar c /dev/null | <compression command> > foo.tar.<compression extension>

无论tar支持什么,使用AC_CHECK_PROG或其他任何内容都很容易。对你来说重要的是tar可以提取,你没有测试。此代码介绍了您的压缩方法,并应根据通过tar往返数据的能力选择一种方法。

compressor_test ()
{
  AS_CASE(["$1"], [*xz], [tflag="J"], [*bzip2], [tflag="j"], [*gzip], [tflag="z"], [tflag=""])
  tar c /dev/null > /dev/null 2>&1 | "$1" | tar "tv${tflag}" > /dev/null 2>&1
  test $? -eq 0
}

AC_CACHE_CHECK([for a suitable tar compressor], [ac_cv_path_COMPRESSOR],
        [AC_PATH_PROGS_FEATURE_CHECK([COMPRESSOR], [xz bzip2 gzip cat],
          [[compressor_test $ac_path_COMPRESSOR \
            && ac_cv_path_COMPRESSOR=$ac_path_COMPRESSOR ac_path_COMPRESSOR_found=:]])])
AC_SUBST([COMPRESSOR], [$ac_cv_path_COMPRESSOR])