为配置脚本的输出着色

Colorize output from configure script

我正在寻找一种方法来为 ./configure 的输出着色,以便检查结束时 yes 的所有实例都以一种颜色显示,而 no 以另一种颜色显示.我认为可能有一种方法可以使用 AS_IF 创建回显消息来测试检查结果,然后使用通常的 bash 颜色命令设置输出。如果已经完成,我显然宁愿不必花时间做这件事。

这可能是个愚蠢的问题。我为包裹检查写了一个:

AC_DEFUN([COLOR_PKG_CHECK],[

  red=$(tput setaf 1)
  grn=$(tput setaf 2)
  clr=$(tput sgr0)

  PKG_CHECK_EXISTS([],[],[found=yes],[found=no])

  AS_IF([test "x$found" = "xyes"],[
    msg="checking for ... ${grn}yes${clr}"
    AC_MSG_RESULT($msg)
    
  ],[
    msg="checking for ... ${red}no${clr}"
    AC_MSG_RESULT($msg)
    
  ])
])

这行得通,但有点指出,执行此操作的唯一方法是以相同方式包装任何感兴趣的调用。我不想那样做。

幸运的是,Autoconf 基本上是一个巨大的 C 预处理器滥用,因此它的内部结构全部暴露并且很容易做一些骇人听闻的事情,公平警告,可能不会从一个 Autoconf 版本转移到下一个版本。

AC_MSG_RESULT 的定义(它打印大部分 yes/no 消息)在 /usr/share/autoconf/autoconf/general.m4 中找到,并且非常简单地定义为将给定消息打印到日志文件中以及终端:

m4_define([AC_MSG_RESULT],
[{ _AS_ECHO_LOG([result: ])
_AS_ECHO([]); }dnl
])

由于在该宏中调用的 Autoconf 内部结构暴露给您的 configure.ac,您只需使用调用它们的自己的宏覆盖 AC_MSG_RESULT。这是一个对我有用的,打印 "yes" 为绿色, "no" 为红色,所有其他结果为蓝色。在 configure.ac:

中的任何其他宏调用之前包含它
m4_pushdef([AC_MSG_RESULT], [
    { result=""
    _AS_ECHO_LOG([result: $result])
    AS_CASE(["x$result"],
        [xnone\ needed], _AS_ECHO([$(tput setaf 4)$result$(tput sgr0)]),
        [xyes*], _AS_ECHO([$(tput setaf 2)$result$(tput sgr0)]),
        [xno*], _AS_ECHO([$(tput setaf 1)$result$(tput sgr0)]),
        _AS_ECHO([$(tput setaf 4)$result$(tput sgr0)])); }dnl
])

但是说真的,不要这样做。