从配置脚本着色输出

时间:2016-08-02 19:48:46

标签: autotools autoconf

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

2 个答案:

答案 0 :(得分:1)

幸运的是,Autoconf基本上是一个巨大的C预处理器滥用,所以它的内部构件都暴露在外,很容易做一些hacky,公平的警告,可能不会从一个Autoconf版本延续到下一个版本。

getBaseContext的定义(打印大部分是/否消息)可以在AC_MSG_RESULT中找到,并且非常简单地定义为将给定消息打印到日志文件以及终端:

/usr/share/autoconf/autoconf/general.m4

由于调用了该宏的Autoconf内部接触到了你的configure.ac,你可以用你自己的宏调用它来覆盖m4_define([AC_MSG_RESULT], [{ _AS_ECHO_LOG([result: $1]) _AS_ECHO([$1]); }dnl ]) 。这是一个适合我的,绿色打印“是”,红色打印“否”,其他所有打印为蓝色。在configure.ac中的任何其他宏调用之前包括它:

AC_MSG_RESULT

但严重的是,不要这样做。

答案 1 :(得分:0)

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

AC_DEFUN([COLOR_PKG_CHECK],[

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

  PKG_CHECK_EXISTS([$1],[$2],[found=yes],[found=no])

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

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