summaryrefslogtreecommitdiffstats
path: root/src/config-bison.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/config-bison.y')
-rw-r--r--src/config-bison.y92
1 files changed, 87 insertions, 5 deletions
diff --git a/src/config-bison.y b/src/config-bison.y
index 4f9dae5..0000907 100644
--- a/src/config-bison.y
+++ b/src/config-bison.y
@@ -21,6 +21,9 @@
%name-prefix "lt_config_"
%{
+#include <stdlib.h>
+#include <string.h>
+
#include "config.h"
#include "lib-include.h"
@@ -48,15 +51,20 @@ do { \
ERROR("failed to process option\n"); \
lt_list_add_tail(&opt->list, &opt_list); \
} while(0)
+
+static struct lt_list_head ln_names;
+
%}
-%token INCLUDE FILENAME BOOL VALUE END
+%token INCLUDE NAME BOOL VALUE END
%token OPTIONS
%token OPT_HEADERS OPT_INDENT_SYM OPT_PIPE
%token OPT_TIMESTAMP OPT_FRAMESIZE OPT_FRAMESIZE_CHECK
%token OPT_HIDE_TID OPT_FOLLOW_FORK OPT_FOLLOW_EXEC
%token OPT_DEMANGLE OPT_BRACES OPT_ENABLE_ARGS
%token OPT_DETAIL_ARGS OPT_OUTPUT_TTY
+%token OPT_LIBS OPT_LIBS_TO OPT_LIBS_FROM
+%token OPT_SYM OPT_SYM_OMIT OPT_SYM_BELOW
%union
{
@@ -64,7 +72,7 @@ do { \
unsigned long l;
}
-%type <s> FILENAME
+%type <s> NAME
%type <s> BOOL
%type <l> VALUE
@@ -82,7 +90,7 @@ entry END
|
/* left blank intentionally */
-include_def: INCLUDE '"' FILENAME '"'
+include_def: INCLUDE '"' NAME '"'
{
if (lt_inc_open(scfg->sh, lt_config_sinc, $3))
ERROR("failed to process include");
@@ -102,7 +110,7 @@ options_def: OPTIONS '{' OPTIONS_DEF '}'
}
OPTIONS_DEF:
-OPTIONS_DEF OPT_HEADERS '=' '"' FILENAME '"'
+OPTIONS_DEF OPT_HEADERS '=' '"' NAME '"'
{
OPTION_ADD(LT_OPT_HEADERS, $5, -1);
}
@@ -167,18 +175,92 @@ OPTIONS_DEF OPT_DETAIL_ARGS '=' BOOL
OPTION_ADD(LT_OPT_DETAIL_ARGS, $4, -1);
}
|
-OPTIONS_DEF OPT_OUTPUT_TTY '=' '"' FILENAME '"'
+OPTIONS_DEF OPT_OUTPUT_TTY '=' '"' NAME '"'
{
OPTION_ADD(LT_OPT_OUTPUT_TTY, $5, -1);
}
|
+OPTIONS_DEF OPT_LIBS '=' list_names_comma
+{
+ char libs[LT_LIBS_MAXSIZE];
+
+ if (lt_config_ln_fill(&ln_names, libs, LT_LIBS_MAXSIZE))
+ ERROR("failed to process libs option");
+
+ OPTION_ADD(LT_OPT_LIBS, libs, -1);
+}
+|
+OPTIONS_DEF OPT_LIBS_TO '=' list_names_comma
+{
+ char libs_to[LT_LIBS_MAXSIZE];
+
+ if (lt_config_ln_fill(&ln_names, libs_to, LT_LIBS_MAXSIZE))
+ ERROR("failed to process libs_to option");
+
+ OPTION_ADD(LT_OPT_LIBS_TO, libs_to, -1);
+}
+|
+OPTIONS_DEF OPT_LIBS_FROM '=' list_names_comma
+{
+ char libs_from[LT_LIBS_MAXSIZE];
+
+ if (lt_config_ln_fill(&ln_names, libs_from, LT_LIBS_MAXSIZE))
+ ERROR("failed to process libs_from option");
+
+ OPTION_ADD(LT_OPT_LIBS_FROM, libs_from, -1);
+}
+|
+OPTIONS_DEF OPT_SYM '=' list_names_comma
+{
+ char sym[LT_LIBS_MAXSIZE];
+
+ if (lt_config_ln_fill(&ln_names, sym, LT_LIBS_MAXSIZE))
+ ERROR("failed to process sym option");
+
+ OPTION_ADD(LT_OPT_SYM, sym, -1);
+}
+|
+OPTIONS_DEF OPT_SYM_OMIT '=' list_names_comma
+{
+ char sym_omit[LT_SYMBOLS_MAXSIZE];
+
+ if (lt_config_ln_fill(&ln_names, sym_omit, LT_SYMBOLS_MAXSIZE))
+ ERROR("failed to process sym_omit option");
+
+ OPTION_ADD(LT_OPT_SYM_OMIT, sym_omit, -1);
+}
+|
+OPTIONS_DEF OPT_SYM_BELOW '=' list_names_comma
+{
+ char sym_below[LT_SYMBOLS_MAXSIZE];
+
+ if (lt_config_ln_fill(&ln_names, sym_below, LT_SYMBOLS_MAXSIZE))
+ ERROR("failed to process sym_below option");
+
+ OPTION_ADD(LT_OPT_SYM_BELOW, sym_below, -1);
+}
+|
/* left blank intentionally */
+list_names_comma:
+list_names_comma ',' NAME
+{
+ if (lt_config_ln_add(&ln_names, $3))
+ ERROR("failed to add list name");
+}
+|
+NAME
+{
+ if (lt_config_ln_add(&ln_names, $1))
+ ERROR("failed to add list name");
+}
+
%%
int lt_config_parse_init(struct lt_config_app *cfg, struct lt_include *inc)
{
scfg = cfg;
lt_config_sinc = inc;
+ lt_init_list_head(&ln_names);
return 0;
}