2016-08-02 7 views
0

Я ищу способ раскрасить вывод из ./configure, чтобы все экземпляры yes в конце чек-шоу в одном цвете и no в другом. Я думаю, что может быть способ создания эхо-сообщения с использованием AS_IF, чтобы проверить результат проверки, а затем установить выход, используя обычные команды цвета bash. Я бы предпочел не тратить время на это, если это уже сделано.Раскрасить вывод из скрипта configure

ответ

1

К счастью для вас, Autoconf - это, в основном, один гигантский C-препроцессор, поэтому его внутренности все разоблачены, и легко сделать что-то взломанное, что, честное предупреждение, может не переноситься с одной версии Autoconf на другую.

Определение AC_MSG_RESULT (который печатает большинство из этих да/нет сообщений) не найден в /usr/share/autoconf/autoconf/general.m4, и достаточно просто определяется как печать данного сообщения в файл журнала, а также к терминалу:

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

Поскольку внутренние объекты Autoconf, вызываемые в этом макросе, подвергаются воздействию вашего configure.ac, вы можете просто переопределить AC_MSG_RESULT своим собственным макросом, который их вызывает. Вот один из них, который работал для меня, печатал «да» зеленым, «нет» красным, а все остальные - синим. Включите его перед любыми другими вызовами макросов в вашем файле configure.ac:

m4_pushdef([AC_MSG_RESULT], [ 
    { result=$1 
    _AS_ECHO_LOG([result: $result]) 
    AS_CASE(["x$result"], 
     [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 
]) 

А если серьезно, не делайте этого.

+0

Это единственная причина не делать этого, потому что это может не переноситься в будущие версии Autoconf или есть другие? – geoffjay

+0

Он также может не соответствовать прошлым версиям Autoconf. Таким образом, любой, кто пытается создать ваш пакет в режиме поддержки, у которого есть другая версия Autoconf, чем вы, может также потерпеть неудачу. – ptomato

+0

Это имеет смысл. Благодарю. – geoffjay

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 
    ]) 
]) 

Это работает, но это своего рода отметил, что единственный способ сделать это было бы обернуть любые вызовы, представляющие интерес таким же образом. Я не хочу этого делать.