vlib: add recursive macro expander to debug cli

All of the pieces have been sitting around for years.

Added several debug CLI commands:

"define <variable-name> <value>"
"undefine <variable-name>"
"show macro [noeval]"
"echo <whatever>"

Macros may refer to other macros. To defer evaluation:
"define foo \$(bar)" or some such.

The macro evaluator is not smart about "define foo \$(foo)" or more
complicated circular definitions, so don't do that.

Environment variables are available, simply use $<name-of-environment-vbl>

The macro expander has a table of (overrideable) builtin names, which
are evaluated by calling functions.

Simple example:

echo $USER
define ip1 192.168.1.1/24
define ip2 192.168.2.1/24

loop create
loop create
set int ip address loop0 $ip1
set int ip address loop1 $ip2
show int addr
show macro
undefine ip1
undefine ip2

Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I08a800647bac573d8ae3cfd75c40061d41c5f976
diff --git a/src/vppinfra/test_macros.c b/src/vppinfra/test_macros.c
index cf6172a..f130604 100644
--- a/src/vppinfra/test_macros.c
+++ b/src/vppinfra/test_macros.c
@@ -16,12 +16,12 @@
 
 #include <vppinfra/macros.h>
 
-macro_main_t macro_main;
+clib_macro_main_t clib_macro_main;
 
 int
 test_macros_main (unformat_input_t * input)
 {
-  macro_main_t *mm = &macro_main;
+  clib_macro_main_t *mm = &clib_macro_main;
 
   clib_macro_init (mm);