From e201482ba7d5099e903bab4b61c4b2c22f1cd887 Mon Sep 17 00:00:00 2001 From: Kylie McClain Date: Wed, 27 Apr 2016 00:09:51 -0400 Subject: slbt_output_exec: color+annotate output This patch adds functionality to slbt_output_exec that colors/annotates output if outputting to a terminal, or annotation is explicitly enabled. Currently annotated output includes emboldening "slibtool:" and giving it a magenta, emboldening and coloring the step (compile, link, install) green, and then annotating the "-o " argument. --- src/output/slbt_output_exec.c | 70 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) (limited to 'src/output') diff --git a/src/output/slbt_output_exec.c b/src/output/slbt_output_exec.c index ff14064..7886e0a 100644 --- a/src/output/slbt_output_exec.c +++ b/src/output/slbt_output_exec.c @@ -4,13 +4,63 @@ /* Released under the Standard MIT License; see COPYING.SLIBTOOL. */ /*******************************************************************/ +#include #include #include -int slbt_output_exec( +const char aclr_null[] = ""; +const char aclr_reset[] = "\e[0m"; +const char aclr_bold[] = "\e[1m"; + +const char aclr_green[] = "\e[32m"; +const char aclr_blue[] = "\e[34m"; +const char aclr_magenta[] = "\e[35m"; + +static int slbt_output_exec_annotated( const struct slbt_driver_ctx * dctx, const struct slbt_exec_ctx * ectx, const char * step) +{ + char ** parg; + const char * aclr_set; + const char * aclr_color; + const char * aclr_unset; + + if (fprintf(stdout,"%s%s%s: %s%s%s%s:%s", + aclr_bold,aclr_magenta, + dctx->program,aclr_reset, + aclr_bold,aclr_green,step,aclr_reset) < 0) + return -1; + + for (parg=ectx->argv; *parg; parg++) { + if (parg == ectx->lout[0]) { + aclr_set = aclr_bold; + aclr_color = aclr_blue; + aclr_unset = aclr_null; + } else { + aclr_set = aclr_null; + aclr_color = aclr_null; + aclr_unset = aclr_reset; + } + + if (fprintf(stdout," %s%s%s%s", + aclr_set,aclr_color, + *parg, + aclr_unset) < 0) + return -1; + + } + + if (fputc('\n',stdout) < 0) + return -1; + + return 0; +} + +static int slbt_output_exec_plain( + const struct slbt_driver_ctx * dctx, + const struct slbt_exec_ctx * ectx, + const char * step) { char ** parg; @@ -27,6 +77,24 @@ int slbt_output_exec( return 0; } +int slbt_output_exec( + const struct slbt_driver_ctx * dctx, + const struct slbt_exec_ctx * ectx, + const char * step) +{ + if (dctx->cctx->drvflags & SLBT_DRIVER_ANNOTATE_NEVER) + return slbt_output_exec_plain(dctx,ectx,step); + + else if (dctx->cctx->drvflags & SLBT_DRIVER_ANNOTATE_ALWAYS) + return slbt_output_exec_annotated(dctx,ectx,step); + + else if (isatty(STDOUT_FILENO)) + return slbt_output_exec_annotated(dctx,ectx,step); + + else + return slbt_output_exec_plain(dctx,ectx,step); +} + int slbt_output_compile( const struct slbt_driver_ctx * dctx, const struct slbt_exec_ctx * ectx) -- cgit v1.2.3