new file mode 100644
@@ -0,0 +1,1293 @@
+From d77b59b056c8109ffaa6ea141fc6fb095d315de3 Mon Sep 17 00:00:00 2001
+From: David Corvoysier <david.corvoysier@intel.com>
+Date: Mon, 4 Jul 2016 15:55:15 +0200
+Subject: [PATCH] kconfig: added support for optional file sourcing
+
+Following the GNU Make pattern for sourcing files, add a new '-source'
+keyword that will fail silently if the target file does not exist.
+
+The _shipped versions of bison, flex and gperf zconf files have been
+regenerated manually with the following commands:
+
+flex -ozconf.lex.ci_shipped -L -P zconf ./zconf.l
+bison -ozconf.tab.c_shipped -t -l -p zconf ./zconf.y
+gperf -t --output-file ./zconf.hash.c_shipped -a -C -E -g -k '1,3,$' -p
+-t ./zconf.gperf
+
+Signed-off-by: David Corvoysier <david.corvoysier@intel.com>
+---
+ support/kconfig/lkc.h | 1 +
+ support/kconfig/zconf.gperf | 1 +
+ support/kconfig/zconf.hash.c_shipped | 68 +++--
+ support/kconfig/zconf.l | 21 +-
+ support/kconfig/zconf.lex.c_shipped | 72 ++++-
+ support/kconfig/zconf.tab.c_shipped | 564 ++++++++++++++++++-----------------
+ support/kconfig/zconf.y | 5 +
+ 7 files changed, 406 insertions(+), 326 deletions(-)
+
+diff --git a/support/kconfig/lkc.h b/support/kconfig/lkc.h
+index 09f4edf..7b23125 100644
+--- a/support/kconfig/lkc.h
++++ b/support/kconfig/lkc.h
+@@ -74,6 +74,7 @@ extern int zconfdebug;
+ int zconfparse(void);
+ void zconfdump(FILE *out);
+ void zconf_starthelp(void);
++bool zconf_fexists(const char *name);
+ FILE *zconf_fopen(const char *name);
+ void zconf_initscan(const char *name);
+ void zconf_nextfile(const char *name);
+diff --git a/support/kconfig/zconf.gperf b/support/kconfig/zconf.gperf
+index f14ab41..0561b25 100644
+--- a/support/kconfig/zconf.gperf
++++ b/support/kconfig/zconf.gperf
+@@ -16,6 +16,7 @@ mainmenu, T_MAINMENU, TF_COMMAND
+ menu, T_MENU, TF_COMMAND
+ endmenu, T_ENDMENU, TF_COMMAND
+ source, T_SOURCE, TF_COMMAND
++-source, T_MINUSSOURCE, TF_COMMAND
+ choice, T_CHOICE, TF_COMMAND
+ endchoice, T_ENDCHOICE, TF_COMMAND
+ comment, T_COMMENT, TF_COMMAND
+diff --git a/support/kconfig/zconf.hash.c_shipped b/support/kconfig/zconf.hash.c_shipped
+index 40df000..3a65f3a 100644
+--- a/support/kconfig/zconf.hash.c_shipped
++++ b/support/kconfig/zconf.hash.c_shipped
+@@ -50,7 +50,7 @@ kconf_id_hash (register const char *str, register unsigned int len)
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+- 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
++ 73, 73, 73, 73, 73, 25, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+@@ -112,6 +112,7 @@ struct kconf_id_strings_t
+ char kconf_id_strings_str33[sizeof("env")];
+ char kconf_id_strings_str35[sizeof("range")];
+ char kconf_id_strings_str36[sizeof("choice")];
++ char kconf_id_strings_str37[sizeof("-source")];
+ char kconf_id_strings_str39[sizeof("bool")];
+ char kconf_id_strings_str41[sizeof("source")];
+ char kconf_id_strings_str42[sizeof("visible")];
+@@ -147,6 +148,7 @@ static const struct kconf_id_strings_t kconf_id_strings_contents =
+ "env",
+ "range",
+ "choice",
++ "-source",
+ "bool",
+ "source",
+ "visible",
+@@ -170,7 +172,7 @@ kconf_id_lookup (register const char *str, register unsigned int len)
+ {
+ enum
+ {
+- TOTAL_KEYWORDS = 32,
++ TOTAL_KEYWORDS = 33,
+ MIN_WORD_LENGTH = 2,
+ MAX_WORD_LENGTH = 14,
+ MIN_HASH_VALUE = 2,
+@@ -180,87 +182,89 @@ kconf_id_lookup (register const char *str, register unsigned int len)
+ static const struct kconf_id wordlist[] =
+ {
+ {-1}, {-1},
+-#line 25 "scripts/kconfig/zconf.gperf"
++#line 26 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_IF, TF_COMMAND|TF_PARAM},
+-#line 36 "scripts/kconfig/zconf.gperf"
++#line 37 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_TYPE, TF_COMMAND, S_INT},
+ {-1},
+-#line 26 "scripts/kconfig/zconf.gperf"
++#line 27 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND},
+ {-1},
+-#line 29 "scripts/kconfig/zconf.gperf"
++#line 30 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
+-#line 31 "scripts/kconfig/zconf.gperf"
++#line 32 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_TYPE, TF_COMMAND, S_TRISTATE},
+-#line 20 "scripts/kconfig/zconf.gperf"
++#line 21 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND},
+ {-1}, {-1},
+-#line 32 "scripts/kconfig/zconf.gperf"
++#line 33 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_TRISTATE},
+-#line 35 "scripts/kconfig/zconf.gperf"
++#line 36 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
+-#line 45 "scripts/kconfig/zconf.gperf"
++#line 46 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_OPT_DEFCONFIG_LIST,TF_OPTION},
+ {-1}, {-1},
+-#line 43 "scripts/kconfig/zconf.gperf"
++#line 44 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_ON, TF_PARAM},
+-#line 28 "scripts/kconfig/zconf.gperf"
++#line 29 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_OPTIONAL, TF_COMMAND},
+ {-1}, {-1},
+-#line 42 "scripts/kconfig/zconf.gperf"
++#line 43 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21, T_OPTION, TF_COMMAND},
+ #line 17 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_ENDMENU, TF_COMMAND},
+ #line 15 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_MAINMENU, TF_COMMAND},
+ {-1},
+-#line 23 "scripts/kconfig/zconf.gperf"
++#line 24 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25, T_MENUCONFIG, TF_COMMAND},
+ {-1},
+-#line 44 "scripts/kconfig/zconf.gperf"
++#line 45 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_OPT_MODULES, TF_OPTION},
+ {-1},
+ #line 16 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29, T_MENU, TF_COMMAND},
+ {-1},
+-#line 39 "scripts/kconfig/zconf.gperf"
++#line 40 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31, T_SELECT, TF_COMMAND},
+-#line 21 "scripts/kconfig/zconf.gperf"
++#line 22 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND},
+-#line 46 "scripts/kconfig/zconf.gperf"
++#line 47 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33, T_OPT_ENV, TF_OPTION},
+ {-1},
+-#line 40 "scripts/kconfig/zconf.gperf"
++#line 41 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_RANGE, TF_COMMAND},
+-#line 19 "scripts/kconfig/zconf.gperf"
++#line 20 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_CHOICE, TF_COMMAND},
+- {-1}, {-1},
+-#line 33 "scripts/kconfig/zconf.gperf"
++#line 19 "scripts/kconfig/zconf.gperf"
++ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str37, T_MINUSSOURCE, TF_COMMAND},
++ {-1},
++#line 34 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str39, T_TYPE, TF_COMMAND, S_BOOLEAN},
+ {-1},
+ #line 18 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_SOURCE, TF_COMMAND},
+-#line 41 "scripts/kconfig/zconf.gperf"
++#line 42 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str42, T_VISIBLE, TF_COMMAND},
+-#line 37 "scripts/kconfig/zconf.gperf"
++#line 38 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str43, T_TYPE, TF_COMMAND, S_HEX},
+ {-1}, {-1},
+-#line 22 "scripts/kconfig/zconf.gperf"
++#line 23 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_CONFIG, TF_COMMAND},
+-#line 34 "scripts/kconfig/zconf.gperf"
++#line 35 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str47, T_TYPE, TF_COMMAND, S_BOOLEAN},
+ {-1}, {-1}, {-1},
+-#line 38 "scripts/kconfig/zconf.gperf"
++#line 39 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str51, T_TYPE, TF_COMMAND, S_STRING},
+ {-1}, {-1},
+-#line 24 "scripts/kconfig/zconf.gperf"
++#line 25 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str54, T_HELP, TF_COMMAND},
+ {-1},
+-#line 30 "scripts/kconfig/zconf.gperf"
++#line 31 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str56, T_PROMPT, TF_COMMAND},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+-#line 27 "scripts/kconfig/zconf.gperf"
++#line 28 "scripts/kconfig/zconf.gperf"
+ {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str72, T_DEPENDS, TF_COMMAND}
+ };
+
+@@ -282,5 +286,5 @@ kconf_id_lookup (register const char *str, register unsigned int len)
+ }
+ return 0;
+ }
+-#line 47 "scripts/kconfig/zconf.gperf"
++#line 48 "scripts/kconfig/zconf.gperf"
+
+diff --git a/support/kconfig/zconf.l b/support/kconfig/zconf.l
+index 1a9f53e..f7babf4 100644
+--- a/support/kconfig/zconf.l
++++ b/support/kconfig/zconf.l
+@@ -68,7 +68,7 @@ static void alloc_string(const char *str, int size)
+ }
+ %}
+
+-n [A-Za-z0-9_]
++n [A-Za-z0-9_-]
+
+ %%
+ int str = 0;
+@@ -254,6 +254,25 @@ static void zconf_endhelp(void)
+ BEGIN(INITIAL);
+ }
+
++/*
++ * Check if a file with the following name exists:
++ * ./name
++ * $(srctree)/name
++ * The latter is used when srctree is separate from objtree
++ * when compiling the kernel.
++ * Returns true if the file exists, false otherwise.
++ */
++bool zconf_fexists(const char *name)
++{
++ const char *file_name = sym_expand_string_value(name);
++ FILE* f = zconf_fopen(file_name);
++ free((void*)file_name);
++ if (f) {
++ fclose(f);
++ return true;
++ }
++ return false;
++}
+
+ /*
+ * Try to open specified file with following names:
+diff --git a/support/kconfig/zconf.lex.c_shipped b/support/kconfig/zconf.lex.c_shipped
+index a0521aa..2561bc8 100644
+--- a/support/kconfig/zconf.lex.c_shipped
++++ b/support/kconfig/zconf.lex.c_shipped
+@@ -72,7 +72,6 @@ typedef int flex_int32_t;
+ typedef unsigned char flex_uint8_t;
+ typedef unsigned short int flex_uint16_t;
+ typedef unsigned int flex_uint32_t;
+-#endif /* ! C99 */
+
+ /* Limits of integral types. */
+ #ifndef INT8_MIN
+@@ -103,6 +102,8 @@ typedef unsigned int flex_uint32_t;
+ #define UINT32_MAX (4294967295U)
+ #endif
+
++#endif /* ! C99 */
++
+ #endif /* ! FLEXINT_H */
+
+ #ifdef __cplusplus
+@@ -159,7 +160,15 @@ typedef unsigned int flex_uint32_t;
+
+ /* Size of default input buffer. */
+ #ifndef YY_BUF_SIZE
++#ifdef __ia64__
++/* On IA-64, the buffer size is 16k, not 8k.
++ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
++ * Ditto for the __ia64__ case accordingly.
++ */
++#define YY_BUF_SIZE 32768
++#else
+ #define YY_BUF_SIZE 16384
++#endif /* __ia64__ */
+ #endif
+
+ /* The state buf must be large enough to hold one state per character in the main buffer.
+@@ -384,12 +393,12 @@ static yyconst flex_int16_t yy_nxt[][17] =
+
+ {
+ 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
+- 16, 16, 16, 18, 16, 16, 16
++ 16, 18, 16, 18, 16, 16, 16
+ },
+
+ {
+ 11, 16, 16, 17, 16, 16, 16, 16, 16, 16,
+- 16, 16, 16, 18, 16, 16, 16
++ 16, 18, 16, 18, 16, 16, 16
+
+ },
+
+@@ -462,7 +471,7 @@ static yyconst flex_int16_t yy_nxt[][17] =
+
+ {
+ 11, -18, -18, -18, -18, -18, -18, -18, -18, -18,
+- -18, -18, -18, 44, -18, -18, -18
++ -18, 44, -18, 44, -18, -18, -18
+ },
+
+ {
+@@ -551,7 +560,7 @@ static yyconst flex_int16_t yy_nxt[][17] =
+
+ {
+ 11, -35, -35, -35, -35, -35, -35, -35, -35, -35,
+- -35, 57, 57, 57, -35, -35, -35
++ -35, 58, 57, 57, -35, -35, -35
+ },
+
+ {
+@@ -560,13 +569,13 @@ static yyconst flex_int16_t yy_nxt[][17] =
+ },
+
+ {
+- 11, -37, -37, 58, -37, -37, -37, -37, -37, -37,
++ 11, -37, -37, 59, -37, -37, -37, -37, -37, -37,
+ -37, -37, -37, -37, -37, -37, -37
+ },
+
+ {
+ 11, -38, -38, -38, -38, -38, -38, -38, -38, -38,
+- -38, -38, -38, -38, -38, -38, 59
++ -38, -38, -38, -38, -38, -38, 60
+ },
+
+ {
+@@ -597,7 +606,7 @@ static yyconst flex_int16_t yy_nxt[][17] =
+
+ {
+ 11, -44, -44, -44, -44, -44, -44, -44, -44, -44,
+- -44, -44, -44, 44, -44, -44, -44
++ -44, 44, -44, 44, -44, -44, -44
+
+ },
+
+@@ -660,17 +669,17 @@ static yyconst flex_int16_t yy_nxt[][17] =
+
+ {
+ 11, -56, -56, -56, -56, -56, -56, -56, -56, -56,
+- -56, 60, 57, 57, -56, -56, -56
++ -56, 61, 57, 57, -56, -56, -56
+ },
+
+ {
+ 11, -57, -57, -57, -57, -57, -57, -57, -57, -57,
+- -57, 57, 57, 57, -57, -57, -57
++ -57, 58, 57, 57, -57, -57, -57
+ },
+
+ {
+ 11, -58, -58, -58, -58, -58, -58, -58, -58, -58,
+- -58, -58, -58, -58, -58, -58, -58
++ -58, 58, 57, 57, -58, -58, -58
+ },
+
+ {
+@@ -681,7 +690,12 @@ static yyconst flex_int16_t yy_nxt[][17] =
+
+ {
+ 11, -60, -60, -60, -60, -60, -60, -60, -60, -60,
+- -60, 57, 57, 57, -60, -60, -60
++ -60, -60, -60, -60, -60, -60, -60
++ },
++
++ {
++ 11, -61, -61, -61, -61, -61, -61, -61, -61, -61,
++ -61, 58, 57, 57, -61, -61, -61
+ },
+
+ } ;
+@@ -710,14 +724,15 @@ struct yy_trans_info
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+-static yyconst flex_int16_t yy_accept[61] =
++static yyconst flex_int16_t yy_accept[62] =
+ { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 34, 5, 4, 2, 3, 7, 8, 6, 32, 29,
+ 31, 24, 28, 27, 26, 22, 17, 13, 16, 20,
+ 22, 11, 12, 19, 19, 14, 22, 22, 4, 2,
+ 3, 3, 1, 6, 32, 29, 31, 30, 24, 23,
+- 26, 25, 15, 20, 9, 19, 19, 21, 10, 18
++ 26, 25, 15, 20, 9, 19, 19, 19, 21, 10,
++ 18
+ } ;
+
+ static yyconst flex_int32_t yy_ec[256] =
+@@ -912,7 +927,12 @@ static int input (void );
+
+ /* Amount of stuff to slurp up with each read. */
+ #ifndef YY_READ_BUF_SIZE
++#ifdef __ia64__
++/* On IA-64, the buffer size is 16k, not 8k */
++#define YY_READ_BUF_SIZE 16384
++#else
+ #define YY_READ_BUF_SIZE 8192
++#endif /* __ia64__ */
+ #endif
+
+ /* Copy whatever the last rule matched to the standard output. */
+@@ -2058,8 +2078,8 @@ YY_BUFFER_STATE zconf_scan_string (yyconst char * yystr )
+
+ /** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
+ * scan from a @e copy of @a bytes.
+- * @param bytes the byte buffer to scan
+- * @param len the number of bytes in the buffer pointed to by @a bytes.
++ * @param yybytes the byte buffer to scan
++ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+@@ -2312,6 +2332,26 @@ static void zconf_endhelp(void)
+ }
+
+ /*
++ * Check if a file with the following name exists:
++ * ./name
++ * $(srctree)/name
++ * The latter is used when srctree is separate from objtree
++ * when compiling the kernel.
++ * Returns true if the file exists, false otherwise.
++ */
++bool zconf_fexists(const char *name)
++{
++ const char *file_name = sym_expand_string_value(name);
++ FILE* f = zconf_fopen(file_name);
++ free((void*)file_name);
++ if (f) {
++ fclose(f);
++ return true;
++ }
++ return false;
++}
++
++/*
+ * Try to open specified file with following names:
+ * ./name
+ * $(srctree)/name
+diff --git a/support/kconfig/zconf.tab.c_shipped b/support/kconfig/zconf.tab.c_shipped
+index f343030..747a1ef 100644
+--- a/support/kconfig/zconf.tab.c_shipped
++++ b/support/kconfig/zconf.tab.c_shipped
+@@ -137,35 +137,36 @@ static struct menu *current_menu, *current_entry;
+ T_MENU = 259,
+ T_ENDMENU = 260,
+ T_SOURCE = 261,
+- T_CHOICE = 262,
+- T_ENDCHOICE = 263,
+- T_COMMENT = 264,
+- T_CONFIG = 265,
+- T_MENUCONFIG = 266,
+- T_HELP = 267,
+- T_HELPTEXT = 268,
+- T_IF = 269,
+- T_ENDIF = 270,
+- T_DEPENDS = 271,
+- T_OPTIONAL = 272,
+- T_PROMPT = 273,
+- T_TYPE = 274,
+- T_DEFAULT = 275,
+- T_SELECT = 276,
+- T_RANGE = 277,
+- T_VISIBLE = 278,
+- T_OPTION = 279,
+- T_ON = 280,
+- T_WORD = 281,
+- T_WORD_QUOTE = 282,
+- T_UNEQUAL = 283,
+- T_CLOSE_PAREN = 284,
+- T_OPEN_PAREN = 285,
+- T_EOL = 286,
+- T_OR = 287,
+- T_AND = 288,
+- T_EQUAL = 289,
+- T_NOT = 290
++ T_MINUSSOURCE = 262,
++ T_CHOICE = 263,
++ T_ENDCHOICE = 264,
++ T_COMMENT = 265,
++ T_CONFIG = 266,
++ T_MENUCONFIG = 267,
++ T_HELP = 268,
++ T_HELPTEXT = 269,
++ T_IF = 270,
++ T_ENDIF = 271,
++ T_DEPENDS = 272,
++ T_OPTIONAL = 273,
++ T_PROMPT = 274,
++ T_TYPE = 275,
++ T_DEFAULT = 276,
++ T_SELECT = 277,
++ T_RANGE = 278,
++ T_VISIBLE = 279,
++ T_OPTION = 280,
++ T_ON = 281,
++ T_WORD = 282,
++ T_WORD_QUOTE = 283,
++ T_UNEQUAL = 284,
++ T_CLOSE_PAREN = 285,
++ T_OPEN_PAREN = 286,
++ T_EOL = 287,
++ T_OR = 288,
++ T_AND = 289,
++ T_EQUAL = 290,
++ T_NOT = 291
+ };
+ #endif
+
+@@ -417,20 +418,20 @@ union yyalloc
+ /* YYFINAL -- State number of the termination state. */
+ #define YYFINAL 11
+ /* YYLAST -- Last index in YYTABLE. */
+-#define YYLAST 290
++#define YYLAST 296
+
+ /* YYNTOKENS -- Number of terminals. */
+-#define YYNTOKENS 36
++#define YYNTOKENS 37
+ /* YYNNTS -- Number of nonterminals. */
+ #define YYNNTS 50
+ /* YYNRULES -- Number of rules. */
+-#define YYNRULES 118
++#define YYNRULES 119
+ /* YYNRULES -- Number of states. */
+-#define YYNSTATES 191
++#define YYNSTATES 194
+
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+ #define YYUNDEFTOK 2
+-#define YYMAXUTOK 290
++#define YYMAXUTOK 291
+
+ #define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+@@ -467,7 +468,7 @@ static const yytype_uint8 yytranslate[] =
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+- 35
++ 35, 36
+ };
+
+ #if YYDEBUG
+@@ -483,67 +484,67 @@ static const yytype_uint16 yyprhs[] =
+ 143, 146, 150, 153, 155, 159, 160, 163, 166, 169,
+ 172, 175, 180, 184, 187, 192, 193, 196, 200, 202,
+ 206, 207, 210, 213, 216, 220, 224, 228, 230, 234,
+- 235, 238, 241, 244, 248, 252, 255, 258, 261, 262,
+- 265, 268, 271, 276, 277, 280, 283, 286, 287, 290,
+- 292, 294, 297, 300, 303, 305, 308, 309, 312, 314,
+- 318, 322, 326, 329, 333, 337, 339, 341, 342
++ 235, 238, 241, 244, 248, 252, 256, 259, 262, 265,
++ 266, 269, 272, 275, 280, 281, 284, 287, 290, 291,
++ 294, 296, 298, 301, 304, 307, 309, 312, 313, 316,
++ 318, 322, 326, 330, 333, 337, 341, 343, 345, 346
+ };
+
+ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
+ static const yytype_int8 yyrhs[] =
+ {
+- 37, 0, -1, 81, 38, -1, 38, -1, 63, 39,
+- -1, 39, -1, -1, 39, 41, -1, 39, 55, -1,
+- 39, 67, -1, 39, 80, -1, 39, 26, 1, 31,
+- -1, 39, 40, 1, 31, -1, 39, 1, 31, -1,
+- 16, -1, 18, -1, 19, -1, 21, -1, 17, -1,
+- 22, -1, 20, -1, 23, -1, 31, -1, 61, -1,
+- 71, -1, 44, -1, 46, -1, 69, -1, 26, 1,
+- 31, -1, 1, 31, -1, 10, 26, 31, -1, 43,
+- 47, -1, 11, 26, 31, -1, 45, 47, -1, -1,
+- 47, 48, -1, 47, 49, -1, 47, 75, -1, 47,
+- 73, -1, 47, 42, -1, 47, 31, -1, 19, 78,
+- 31, -1, 18, 79, 82, 31, -1, 20, 83, 82,
+- 31, -1, 21, 26, 82, 31, -1, 22, 84, 84,
+- 82, 31, -1, 24, 50, 31, -1, -1, 50, 26,
+- 51, -1, -1, 34, 79, -1, 7, 85, 31, -1,
+- 52, 56, -1, 80, -1, 53, 58, 54, -1, -1,
+- 56, 57, -1, 56, 75, -1, 56, 73, -1, 56,
+- 31, -1, 56, 42, -1, 18, 79, 82, 31, -1,
+- 19, 78, 31, -1, 17, 31, -1, 20, 26, 82,
+- 31, -1, -1, 58, 41, -1, 14, 83, 81, -1,
+- 80, -1, 59, 62, 60, -1, -1, 62, 41, -1,
+- 62, 67, -1, 62, 55, -1, 3, 79, 81, -1,
+- 4, 79, 31, -1, 64, 76, 74, -1, 80, -1,
+- 65, 68, 66, -1, -1, 68, 41, -1, 68, 67,
+- -1, 68, 55, -1, 6, 79, 31, -1, 9, 79,
+- 31, -1, 70, 74, -1, 12, 31, -1, 72, 13,
+- -1, -1, 74, 75, -1, 74, 31, -1, 74, 42,
+- -1, 16, 25, 83, 31, -1, -1, 76, 77, -1,
+- 76, 31, -1, 23, 82, -1, -1, 79, 82, -1,
+- 26, -1, 27, -1, 5, 31, -1, 8, 31, -1,
+- 15, 31, -1, 31, -1, 81, 31, -1, -1, 14,
+- 83, -1, 84, -1, 84, 34, 84, -1, 84, 28,
+- 84, -1, 30, 83, 29, -1, 35, 83, -1, 83,
+- 32, 83, -1, 83, 33, 83, -1, 26, -1, 27,
+- -1, -1, 26, -1
++ 38, 0, -1, 82, 39, -1, 39, -1, 64, 40,
++ -1, 40, -1, -1, 40, 42, -1, 40, 56, -1,
++ 40, 68, -1, 40, 81, -1, 40, 27, 1, 32,
++ -1, 40, 41, 1, 32, -1, 40, 1, 32, -1,
++ 17, -1, 19, -1, 20, -1, 22, -1, 18, -1,
++ 23, -1, 21, -1, 24, -1, 32, -1, 62, -1,
++ 72, -1, 45, -1, 47, -1, 70, -1, 27, 1,
++ 32, -1, 1, 32, -1, 11, 27, 32, -1, 44,
++ 48, -1, 12, 27, 32, -1, 46, 48, -1, -1,
++ 48, 49, -1, 48, 50, -1, 48, 76, -1, 48,
++ 74, -1, 48, 43, -1, 48, 32, -1, 20, 79,
++ 32, -1, 19, 80, 83, 32, -1, 21, 84, 83,
++ 32, -1, 22, 27, 83, 32, -1, 23, 85, 85,
++ 83, 32, -1, 25, 51, 32, -1, -1, 51, 27,
++ 52, -1, -1, 35, 80, -1, 8, 86, 32, -1,
++ 53, 57, -1, 81, -1, 54, 59, 55, -1, -1,
++ 57, 58, -1, 57, 76, -1, 57, 74, -1, 57,
++ 32, -1, 57, 43, -1, 19, 80, 83, 32, -1,
++ 20, 79, 32, -1, 18, 32, -1, 21, 27, 83,
++ 32, -1, -1, 59, 42, -1, 15, 84, 82, -1,
++ 81, -1, 60, 63, 61, -1, -1, 63, 42, -1,
++ 63, 68, -1, 63, 56, -1, 3, 80, 82, -1,
++ 4, 80, 32, -1, 65, 77, 75, -1, 81, -1,
++ 66, 69, 67, -1, -1, 69, 42, -1, 69, 68,
++ -1, 69, 56, -1, 6, 80, 32, -1, 7, 80,
++ 32, -1, 10, 80, 32, -1, 71, 75, -1, 13,
++ 32, -1, 73, 14, -1, -1, 75, 76, -1, 75,
++ 32, -1, 75, 43, -1, 17, 26, 84, 32, -1,
++ -1, 77, 78, -1, 77, 32, -1, 24, 83, -1,
++ -1, 80, 83, -1, 27, -1, 28, -1, 5, 32,
++ -1, 9, 32, -1, 16, 32, -1, 32, -1, 82,
++ 32, -1, -1, 15, 84, -1, 85, -1, 85, 35,
++ 85, -1, 85, 29, 85, -1, 31, 84, 30, -1,
++ 36, 84, -1, 84, 33, 84, -1, 84, 34, 84,
++ -1, 27, -1, 28, -1, -1, 27, -1
+ };
+
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+ static const yytype_uint16 yyrline[] =
+ {
+- 0, 103, 103, 103, 105, 105, 107, 109, 110, 111,
+- 112, 113, 114, 118, 122, 122, 122, 122, 122, 122,
+- 122, 122, 126, 127, 128, 129, 130, 131, 135, 136,
+- 142, 150, 156, 164, 174, 176, 177, 178, 179, 180,
+- 181, 184, 192, 198, 208, 214, 220, 223, 225, 236,
+- 237, 242, 251, 256, 264, 267, 269, 270, 271, 272,
+- 273, 276, 282, 293, 299, 309, 311, 316, 324, 332,
+- 335, 337, 338, 339, 344, 351, 358, 363, 371, 374,
+- 376, 377, 378, 381, 389, 396, 403, 409, 416, 418,
+- 419, 420, 423, 431, 433, 434, 437, 444, 446, 451,
+- 452, 455, 456, 457, 461, 462, 465, 466, 469, 470,
+- 471, 472, 473, 474, 475, 478, 479, 482, 483
++ 0, 104, 104, 104, 106, 106, 108, 110, 111, 112,
++ 113, 114, 115, 119, 123, 123, 123, 123, 123, 123,
++ 123, 123, 127, 128, 129, 130, 131, 132, 136, 137,
++ 143, 151, 157, 165, 175, 177, 178, 179, 180, 181,
++ 182, 185, 193, 199, 209, 215, 221, 224, 226, 237,
++ 238, 243, 252, 257, 265, 268, 270, 271, 272, 273,
++ 274, 277, 283, 294, 300, 310, 312, 317, 325, 333,
++ 336, 338, 339, 340, 345, 352, 359, 364, 372, 375,
++ 377, 378, 379, 382, 386, 394, 401, 408, 414, 421,
++ 423, 424, 425, 428, 436, 438, 439, 442, 449, 451,
++ 456, 457, 460, 461, 462, 466, 467, 470, 471, 474,
++ 475, 476, 477, 478, 479, 480, 483, 484, 487, 488
+ };
+ #endif
+
+@@ -553,22 +554,23 @@ static const yytype_uint16 yyrline[] =
+ static const char *const yytname[] =
+ {
+ "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
+- "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
+- "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
+- "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", "T_SELECT", "T_RANGE",
+- "T_VISIBLE", "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL",
+- "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", "T_EQUAL",
+- "T_NOT", "$accept", "input", "start", "stmt_list", "option_name",
+- "common_stmt", "option_error", "config_entry_start", "config_stmt",
+- "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
+- "config_option", "symbol_option", "symbol_option_list",
+- "symbol_option_arg", "choice", "choice_entry", "choice_end",
+- "choice_stmt", "choice_option_list", "choice_option", "choice_block",
+- "if_entry", "if_end", "if_stmt", "if_block", "mainmenu_stmt", "menu",
+- "menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt",
+- "comment", "comment_stmt", "help_start", "help", "depends_list",
+- "depends", "visibility_list", "visible", "prompt_stmt_opt", "prompt",
+- "end", "nl", "if_expr", "expr", "symbol", "word_opt", 0
++ "T_SOURCE", "T_MINUSSOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT",
++ "T_CONFIG", "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF",
++ "T_DEPENDS", "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", "T_SELECT",
++ "T_RANGE", "T_VISIBLE", "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE",
++ "T_UNEQUAL", "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND",
++ "T_EQUAL", "T_NOT", "$accept", "input", "start", "stmt_list",
++ "option_name", "common_stmt", "option_error", "config_entry_start",
++ "config_stmt", "menuconfig_entry_start", "menuconfig_stmt",
++ "config_option_list", "config_option", "symbol_option",
++ "symbol_option_list", "symbol_option_arg", "choice", "choice_entry",
++ "choice_end", "choice_stmt", "choice_option_list", "choice_option",
++ "choice_block", "if_entry", "if_end", "if_stmt", "if_block",
++ "mainmenu_stmt", "menu", "menu_entry", "menu_end", "menu_stmt",
++ "menu_block", "source_stmt", "comment", "comment_stmt", "help_start",
++ "help", "depends_list", "depends", "visibility_list", "visible",
++ "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol",
++ "word_opt", 0
+ };
+ #endif
+
+@@ -580,25 +582,25 @@ static const yytype_uint16 yytoknum[] =
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+- 285, 286, 287, 288, 289, 290
++ 285, 286, 287, 288, 289, 290, 291
+ };
+ # endif
+
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+ static const yytype_uint8 yyr1[] =
+ {
+- 0, 36, 37, 37, 38, 38, 39, 39, 39, 39,
+- 39, 39, 39, 39, 40, 40, 40, 40, 40, 40,
+- 40, 40, 41, 41, 41, 41, 41, 41, 42, 42,
+- 43, 44, 45, 46, 47, 47, 47, 47, 47, 47,
+- 47, 48, 48, 48, 48, 48, 49, 50, 50, 51,
+- 51, 52, 53, 54, 55, 56, 56, 56, 56, 56,
+- 56, 57, 57, 57, 57, 58, 58, 59, 60, 61,
+- 62, 62, 62, 62, 63, 64, 65, 66, 67, 68,
+- 68, 68, 68, 69, 70, 71, 72, 73, 74, 74,
+- 74, 74, 75, 76, 76, 76, 77, 78, 78, 79,
+- 79, 80, 80, 80, 81, 81, 82, 82, 83, 83,
+- 83, 83, 83, 83, 83, 84, 84, 85, 85
++ 0, 37, 38, 38, 39, 39, 40, 40, 40, 40,
++ 40, 40, 40, 40, 41, 41, 41, 41, 41, 41,
++ 41, 41, 42, 42, 42, 42, 42, 42, 43, 43,
++ 44, 45, 46, 47, 48, 48, 48, 48, 48, 48,
++ 48, 49, 49, 49, 49, 49, 50, 51, 51, 52,
++ 52, 53, 54, 55, 56, 57, 57, 57, 57, 57,
++ 57, 58, 58, 58, 58, 59, 59, 60, 61, 62,
++ 63, 63, 63, 63, 64, 65, 66, 67, 68, 69,
++ 69, 69, 69, 70, 70, 71, 72, 73, 74, 75,
++ 75, 75, 75, 76, 77, 77, 77, 78, 79, 79,
++ 80, 80, 81, 81, 81, 82, 82, 83, 83, 84,
++ 84, 84, 84, 84, 84, 84, 85, 85, 86, 86
+ };
+
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+@@ -612,10 +614,10 @@ static const yytype_uint8 yyr2[] =
+ 2, 3, 2, 1, 3, 0, 2, 2, 2, 2,
+ 2, 4, 3, 2, 4, 0, 2, 3, 1, 3,
+ 0, 2, 2, 2, 3, 3, 3, 1, 3, 0,
+- 2, 2, 2, 3, 3, 2, 2, 2, 0, 2,
+- 2, 2, 4, 0, 2, 2, 2, 0, 2, 1,
+- 1, 2, 2, 2, 1, 2, 0, 2, 1, 3,
+- 3, 3, 2, 3, 3, 1, 1, 0, 1
++ 2, 2, 2, 3, 3, 3, 2, 2, 2, 0,
++ 2, 2, 2, 4, 0, 2, 2, 2, 0, 2,
++ 1, 1, 2, 2, 2, 1, 2, 0, 2, 1,
++ 3, 3, 3, 2, 3, 3, 1, 1, 0, 1
+ };
+
+ /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+@@ -623,177 +625,177 @@ static const yytype_uint8 yyr2[] =
+ means the default is an error. */
+ static const yytype_uint8 yydefact[] =
+ {
+- 6, 0, 104, 0, 3, 0, 6, 6, 99, 100,
+- 0, 1, 0, 0, 0, 0, 117, 0, 0, 0,
+- 0, 0, 0, 14, 18, 15, 16, 20, 17, 19,
+- 21, 0, 22, 0, 7, 34, 25, 34, 26, 55,
+- 65, 8, 70, 23, 93, 79, 9, 27, 88, 24,
+- 10, 0, 105, 2, 74, 13, 0, 101, 0, 118,
+- 0, 102, 0, 0, 0, 115, 116, 0, 0, 0,
+- 108, 103, 0, 0, 0, 0, 0, 0, 0, 88,
+- 0, 0, 75, 83, 51, 84, 30, 32, 0, 112,
+- 0, 0, 67, 0, 0, 11, 12, 0, 0, 0,
+- 0, 97, 0, 0, 0, 47, 0, 40, 39, 35,
+- 36, 0, 38, 37, 0, 0, 97, 0, 59, 60,
+- 56, 58, 57, 66, 54, 53, 71, 73, 69, 72,
+- 68, 106, 95, 0, 94, 80, 82, 78, 81, 77,
+- 90, 91, 89, 111, 113, 114, 110, 109, 29, 86,
+- 0, 106, 0, 106, 106, 106, 0, 0, 0, 87,
+- 63, 106, 0, 106, 0, 96, 0, 0, 41, 98,
+- 0, 0, 106, 49, 46, 28, 0, 62, 0, 107,
+- 92, 42, 43, 44, 0, 0, 48, 61, 64, 45,
+- 50
++ 6, 0, 105, 0, 3, 0, 6, 6, 100, 101,
++ 0, 1, 0, 0, 0, 0, 0, 118, 0, 0,
++ 0, 0, 0, 0, 14, 18, 15, 16, 20, 17,
++ 19, 21, 0, 22, 0, 7, 34, 25, 34, 26,
++ 55, 65, 8, 70, 23, 94, 79, 9, 27, 89,
++ 24, 10, 0, 106, 2, 74, 13, 0, 102, 0,
++ 0, 119, 0, 103, 0, 0, 0, 116, 117, 0,
++ 0, 0, 109, 104, 0, 0, 0, 0, 0, 0,
++ 0, 89, 0, 0, 75, 83, 84, 51, 85, 30,
++ 32, 0, 113, 0, 0, 67, 0, 0, 11, 12,
++ 0, 0, 0, 0, 98, 0, 0, 0, 47, 0,
++ 40, 39, 35, 36, 0, 38, 37, 0, 0, 98,
++ 0, 59, 60, 56, 58, 57, 66, 54, 53, 71,
++ 73, 69, 72, 68, 107, 96, 0, 95, 80, 82,
++ 78, 81, 77, 91, 92, 90, 112, 114, 115, 111,
++ 110, 29, 87, 0, 107, 0, 107, 107, 107, 0,
++ 0, 0, 88, 63, 107, 0, 107, 0, 97, 0,
++ 0, 41, 99, 0, 0, 107, 49, 46, 28, 0,
++ 62, 0, 108, 93, 42, 43, 44, 0, 0, 48,
++ 61, 64, 45, 50
+ };
+
+ /* YYDEFGOTO[NTERM-NUM]. */
+ static const yytype_int16 yydefgoto[] =
+ {
+- -1, 3, 4, 5, 33, 34, 108, 35, 36, 37,
+- 38, 74, 109, 110, 157, 186, 39, 40, 124, 41,
+- 76, 120, 77, 42, 128, 43, 78, 6, 44, 45,
+- 137, 46, 80, 47, 48, 49, 111, 112, 81, 113,
+- 79, 134, 152, 153, 50, 7, 165, 69, 70, 60
++ -1, 3, 4, 5, 34, 35, 111, 36, 37, 38,
++ 39, 76, 112, 113, 160, 189, 40, 41, 127, 42,
++ 78, 123, 79, 43, 131, 44, 80, 6, 45, 46,
++ 140, 47, 82, 48, 49, 50, 114, 115, 83, 116,
++ 81, 137, 155, 156, 51, 7, 168, 71, 72, 62
+ };
+
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+-#define YYPACT_NINF -90
++#define YYPACT_NINF -92
+ static const yytype_int16 yypact[] =
+ {
+- 4, 42, -90, 96, -90, 111, -90, 15, -90, -90,
+- 75, -90, 82, 42, 104, 42, 110, 107, 42, 115,
+- 125, -4, 121, -90, -90, -90, -90, -90, -90, -90,
+- -90, 162, -90, 163, -90, -90, -90, -90, -90, -90,
+- -90, -90, -90, -90, -90, -90, -90, -90, -90, -90,
+- -90, 139, -90, -90, 138, -90, 142, -90, 143, -90,
+- 152, -90, 164, 167, 168, -90, -90, -4, -4, 77,
+- -18, -90, 177, 185, 33, 71, 195, 247, 236, -2,
+- 236, 171, -90, -90, -90, -90, -90, -90, 41, -90,
+- -4, -4, 138, 97, 97, -90, -90, 186, 187, 194,
+- 42, 42, -4, 196, 97, -90, 219, -90, -90, -90,
+- -90, 210, -90, -90, 204, 42, 42, 199, -90, -90,
+- -90, -90, -90, -90, -90, -90, -90, -90, -90, -90,
+- -90, 222, -90, 223, -90, -90, -90, -90, -90, -90,
+- -90, -90, -90, -90, 215, -90, -90, -90, -90, -90,
+- -4, 222, 228, 222, -5, 222, 97, 35, 229, -90,
+- -90, 222, 232, 222, -4, -90, 135, 233, -90, -90,
+- 234, 235, 222, 240, -90, -90, 237, -90, 239, -13,
+- -90, -90, -90, -90, 244, 42, -90, -90, -90, -90,
+- -90
++ 17, 73, -92, 7, -92, 104, -92, 19, -92, -92,
++ -11, -92, 37, 73, 65, 73, 73, -17, 74, 73,
++ -10, 80, 25, 86, -92, -92, -92, -92, -92, -92,
++ -92, -92, 134, -92, 163, -92, -92, -92, -92, -92,
++ -92, -92, -92, -92, -92, -92, -92, -92, -92, -92,
++ -92, -92, 133, -92, -92, 156, -92, 158, -92, 160,
++ 161, -92, 166, -92, 172, 180, 181, -92, -92, 25,
++ 25, 237, 28, -92, 183, 184, 23, 71, 190, 247,
++ 233, -13, 233, 162, -92, -92, -92, -92, -92, -92,
++ -92, 40, -92, 25, 25, 156, 119, 119, -92, -92,
++ 186, 187, 195, 73, 73, 25, 220, 119, -92, 249,
++ -92, -92, -92, -92, 241, -92, -92, 228, 73, 73,
++ 234, -92, -92, -92, -92, -92, -92, -92, -92, -92,
++ -92, -92, -92, -92, 257, -92, 219, -92, -92, -92,
++ -92, -92, -92, -92, -92, -92, -92, 239, -92, -92,
++ -92, -92, -92, 25, 257, 243, 257, 199, 257, 119,
++ 27, 245, -92, -92, 257, 246, 257, 25, -92, 248,
++ 251, -92, -92, 252, 254, 257, 253, -92, -92, 255,
++ -92, 258, 142, -92, -92, -92, -92, 259, 73, -92,
++ -92, -92, -92, -92
+ };
+
+ /* YYPGOTO[NTERM-NUM]. */
+ static const yytype_int16 yypgoto[] =
+ {
+- -90, -90, 269, 271, -90, 23, -70, -90, -90, -90,
+- -90, 243, -90, -90, -90, -90, -90, -90, -90, -48,
+- -90, -90, -90, -90, -90, -90, -90, -90, -90, -90,
+- -90, -20, -90, -90, -90, -90, -90, 206, 205, -68,
+- -90, -90, 169, -1, 27, -7, 118, -66, -89, -90
++ -92, -92, 282, 286, -92, 50, -74, -92, -92, -92,
++ -92, 256, -92, -92, -92, -92, -92, -92, -92, -22,
++ -92, -92, -92, -92, -92, -92, -92, -92, -92, -92,
++ -92, -15, -92, -92, -92, -92, -92, 215, 214, -70,
++ -92, -92, 177, -1, 79, -7, 110, -68, -91, -92
+ };
+
+ /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+-#define YYTABLE_NINF -86
++#define YYTABLE_NINF -87
+ static const yytype_int16 yytable[] =
+ {
+- 10, 88, 89, 54, 146, 147, 119, 1, 122, 164,
+- 93, 141, 56, 142, 58, 156, 94, 62, 1, 90,
+- 91, 131, 65, 66, 144, 145, 67, 90, 91, 132,
+- 127, 68, 136, -31, 97, 2, 154, -31, -31, -31,
+- -31, -31, -31, -31, -31, 98, 52, -31, -31, 99,
+- -31, 100, 101, 102, 103, 104, -31, 105, 129, 106,
+- 138, 173, 92, 141, 107, 142, 174, 172, 8, 9,
+- 143, -33, 97, 90, 91, -33, -33, -33, -33, -33,
+- -33, -33, -33, 98, 166, -33, -33, 99, -33, 100,
+- 101, 102, 103, 104, -33, 105, 11, 106, 179, 151,
+- 123, 126, 107, 135, 125, 130, 2, 139, 2, 90,
+- 91, -5, 12, 55, 161, 13, 14, 15, 16, 17,
+- 18, 19, 20, 65, 66, 21, 22, 23, 24, 25,
+- 26, 27, 28, 29, 30, 57, 59, 31, 61, -4,
+- 12, 63, 32, 13, 14, 15, 16, 17, 18, 19,
+- 20, 64, 71, 21, 22, 23, 24, 25, 26, 27,
+- 28, 29, 30, 72, 73, 31, 180, 90, 91, 52,
+- 32, -85, 97, 82, 83, -85, -85, -85, -85, -85,
+- -85, -85, -85, 84, 190, -85, -85, 99, -85, -85,
+- -85, -85, -85, -85, -85, 85, 97, 106, 86, 87,
+- -52, -52, 140, -52, -52, -52, -52, 98, 95, -52,
+- -52, 99, 114, 115, 116, 117, 96, 148, 149, 150,
+- 158, 106, 155, 159, 97, 163, 118, -76, -76, -76,
+- -76, -76, -76, -76, -76, 160, 164, -76, -76, 99,
+- 13, 14, 15, 16, 17, 18, 19, 20, 91, 106,
+- 21, 22, 14, 15, 140, 17, 18, 19, 20, 168,
+- 175, 21, 22, 177, 181, 182, 183, 32, 187, 167,
+- 188, 169, 170, 171, 185, 189, 53, 51, 32, 176,
+- 75, 178, 121, 0, 133, 162, 0, 0, 0, 0,
+- 184
++ 10, 91, 92, 55, 122, 149, 150, 11, 125, 144,
++ 61, 134, 57, 145, 59, 60, 159, 65, 64, 135,
++ 1, 2, 1, -31, 100, 147, 148, -31, -31, -31,
++ -31, -31, -31, -31, -31, -31, 101, 157, -31, -31,
++ 102, -31, 103, 104, 105, 106, 107, -31, 108, 2,
++ 109, 53, 67, 68, 176, 110, 69, 96, 130, 177,
++ 139, 70, 144, 97, 95, 132, 145, 141, 175, 56,
++ 146, -33, 100, 93, 94, -33, -33, -33, -33, -33,
++ -33, -33, -33, -33, 101, 169, -33, -33, 102, -33,
++ 103, 104, 105, 106, 107, -33, 108, 58, 109, 182,
++ 8, 9, 154, 110, -5, 12, 63, 66, 13, 14,
++ 15, 16, 17, 18, 19, 20, 21, 164, 73, 22,
++ 23, 24, 25, 26, 27, 28, 29, 30, 31, 126,
++ 129, 32, 138, -4, 12, 74, 33, 13, 14, 15,
++ 16, 17, 18, 19, 20, 21, 67, 68, 22, 23,
++ 24, 25, 26, 27, 28, 29, 30, 31, 128, 133,
++ 32, 142, -86, 100, 75, 33, -86, -86, -86, -86,
++ -86, -86, -86, -86, -86, 93, 94, -86, -86, 102,
++ -86, -86, -86, -86, -86, -86, -86, 193, 53, 109,
++ 84, 100, 85, 86, 143, -52, -52, -52, 87, -52,
++ -52, -52, -52, 101, 88, -52, -52, 102, 117, 118,
++ 119, 120, 89, 90, 167, 98, 99, 109, 151, 152,
++ 100, 153, 121, -76, -76, -76, -76, -76, -76, -76,
++ -76, -76, 93, 94, -76, -76, 102, 13, 14, 15,
++ 16, 17, 18, 19, 20, 21, 109, 158, 22, 23,
++ 161, 143, 14, 15, 16, 162, 18, 19, 20, 21,
++ 163, 166, 22, 23, 170, 33, 172, 173, 174, 2,
++ 93, 94, 167, 94, 179, 171, 181, 178, 180, 33,
++ 183, 93, 94, 184, 185, 187, 186, 190, 188, 54,
++ 191, 192, 52, 124, 77, 136, 165
+ };
+
+ #define yypact_value_is_default(yystate) \
+- ((yystate) == (-90))
++ ((yystate) == (-92))
+
+ #define yytable_value_is_error(yytable_value) \
+ YYID (0)
+
+-static const yytype_int16 yycheck[] =
++static const yytype_uint8 yycheck[] =
+ {
+- 1, 67, 68, 10, 93, 94, 76, 3, 76, 14,
+- 28, 81, 13, 81, 15, 104, 34, 18, 3, 32,
+- 33, 23, 26, 27, 90, 91, 30, 32, 33, 31,
+- 78, 35, 80, 0, 1, 31, 102, 4, 5, 6,
+- 7, 8, 9, 10, 11, 12, 31, 14, 15, 16,
+- 17, 18, 19, 20, 21, 22, 23, 24, 78, 26,
+- 80, 26, 69, 133, 31, 133, 31, 156, 26, 27,
+- 29, 0, 1, 32, 33, 4, 5, 6, 7, 8,
+- 9, 10, 11, 12, 150, 14, 15, 16, 17, 18,
+- 19, 20, 21, 22, 23, 24, 0, 26, 164, 100,
+- 77, 78, 31, 80, 77, 78, 31, 80, 31, 32,
+- 33, 0, 1, 31, 115, 4, 5, 6, 7, 8,
+- 9, 10, 11, 26, 27, 14, 15, 16, 17, 18,
+- 19, 20, 21, 22, 23, 31, 26, 26, 31, 0,
+- 1, 26, 31, 4, 5, 6, 7, 8, 9, 10,
+- 11, 26, 31, 14, 15, 16, 17, 18, 19, 20,
+- 21, 22, 23, 1, 1, 26, 31, 32, 33, 31,
+- 31, 0, 1, 31, 31, 4, 5, 6, 7, 8,
+- 9, 10, 11, 31, 185, 14, 15, 16, 17, 18,
+- 19, 20, 21, 22, 23, 31, 1, 26, 31, 31,
+- 5, 6, 31, 8, 9, 10, 11, 12, 31, 14,
+- 15, 16, 17, 18, 19, 20, 31, 31, 31, 25,
+- 1, 26, 26, 13, 1, 26, 31, 4, 5, 6,
+- 7, 8, 9, 10, 11, 31, 14, 14, 15, 16,
+- 4, 5, 6, 7, 8, 9, 10, 11, 33, 26,
+- 14, 15, 5, 6, 31, 8, 9, 10, 11, 31,
+- 31, 14, 15, 31, 31, 31, 31, 31, 31, 151,
+- 31, 153, 154, 155, 34, 31, 7, 6, 31, 161,
+- 37, 163, 76, -1, 79, 116, -1, -1, -1, -1,
+- 172
++ 1, 69, 70, 10, 78, 96, 97, 0, 78, 83,
++ 27, 24, 13, 83, 15, 16, 107, 27, 19, 32,
++ 3, 32, 3, 0, 1, 93, 94, 4, 5, 6,
++ 7, 8, 9, 10, 11, 12, 13, 105, 15, 16,
++ 17, 18, 19, 20, 21, 22, 23, 24, 25, 32,
++ 27, 32, 27, 28, 27, 32, 31, 29, 80, 32,
++ 82, 36, 136, 35, 71, 80, 136, 82, 159, 32,
++ 30, 0, 1, 33, 34, 4, 5, 6, 7, 8,
++ 9, 10, 11, 12, 13, 153, 15, 16, 17, 18,
++ 19, 20, 21, 22, 23, 24, 25, 32, 27, 167,
++ 27, 28, 103, 32, 0, 1, 32, 27, 4, 5,
++ 6, 7, 8, 9, 10, 11, 12, 118, 32, 15,
++ 16, 17, 18, 19, 20, 21, 22, 23, 24, 79,
++ 80, 27, 82, 0, 1, 1, 32, 4, 5, 6,
++ 7, 8, 9, 10, 11, 12, 27, 28, 15, 16,
++ 17, 18, 19, 20, 21, 22, 23, 24, 79, 80,
++ 27, 82, 0, 1, 1, 32, 4, 5, 6, 7,
++ 8, 9, 10, 11, 12, 33, 34, 15, 16, 17,
++ 18, 19, 20, 21, 22, 23, 24, 188, 32, 27,
++ 32, 1, 32, 32, 32, 5, 6, 7, 32, 9,
++ 10, 11, 12, 13, 32, 15, 16, 17, 18, 19,
++ 20, 21, 32, 32, 15, 32, 32, 27, 32, 32,
++ 1, 26, 32, 4, 5, 6, 7, 8, 9, 10,
++ 11, 12, 33, 34, 15, 16, 17, 4, 5, 6,
++ 7, 8, 9, 10, 11, 12, 27, 27, 15, 16,
++ 1, 32, 5, 6, 7, 14, 9, 10, 11, 12,
++ 32, 27, 15, 16, 154, 32, 156, 157, 158, 32,
++ 33, 34, 15, 34, 164, 32, 166, 32, 32, 32,
++ 32, 33, 34, 32, 32, 175, 32, 32, 35, 7,
++ 32, 32, 6, 78, 38, 81, 119
+ };
+
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+ static const yytype_uint8 yystos[] =
+ {
+- 0, 3, 31, 37, 38, 39, 63, 81, 26, 27,
+- 79, 0, 1, 4, 5, 6, 7, 8, 9, 10,
+- 11, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+- 23, 26, 31, 40, 41, 43, 44, 45, 46, 52,
+- 53, 55, 59, 61, 64, 65, 67, 69, 70, 71,
+- 80, 39, 31, 38, 81, 31, 79, 31, 79, 26,
+- 85, 31, 79, 26, 26, 26, 27, 30, 35, 83,
+- 84, 31, 1, 1, 47, 47, 56, 58, 62, 76,
+- 68, 74, 31, 31, 31, 31, 31, 31, 83, 83,
+- 32, 33, 81, 28, 34, 31, 31, 1, 12, 16,
+- 18, 19, 20, 21, 22, 24, 26, 31, 42, 48,
+- 49, 72, 73, 75, 17, 18, 19, 20, 31, 42,
+- 57, 73, 75, 41, 54, 80, 41, 55, 60, 67,
+- 80, 23, 31, 74, 77, 41, 55, 66, 67, 80,
+- 31, 42, 75, 29, 83, 83, 84, 84, 31, 31,
+- 25, 79, 78, 79, 83, 26, 84, 50, 1, 13,
+- 31, 79, 78, 26, 14, 82, 83, 82, 31, 82,
+- 82, 82, 84, 26, 31, 31, 82, 31, 82, 83,
+- 31, 31, 31, 31, 82, 34, 51, 31, 31, 31,
+- 79
++ 0, 3, 32, 38, 39, 40, 64, 82, 27, 28,
++ 80, 0, 1, 4, 5, 6, 7, 8, 9, 10,
++ 11, 12, 15, 16, 17, 18, 19, 20, 21, 22,
++ 23, 24, 27, 32, 41, 42, 44, 45, 46, 47,
++ 53, 54, 56, 60, 62, 65, 66, 68, 70, 71,
++ 72, 81, 40, 32, 39, 82, 32, 80, 32, 80,
++ 80, 27, 86, 32, 80, 27, 27, 27, 28, 31,
++ 36, 84, 85, 32, 1, 1, 48, 48, 57, 59,
++ 63, 77, 69, 75, 32, 32, 32, 32, 32, 32,
++ 32, 84, 84, 33, 34, 82, 29, 35, 32, 32,
++ 1, 13, 17, 19, 20, 21, 22, 23, 25, 27,
++ 32, 43, 49, 50, 73, 74, 76, 18, 19, 20,
++ 21, 32, 43, 58, 74, 76, 42, 55, 81, 42,
++ 56, 61, 68, 81, 24, 32, 75, 78, 42, 56,
++ 67, 68, 81, 32, 43, 76, 30, 84, 84, 85,
++ 85, 32, 32, 26, 80, 79, 80, 84, 27, 85,
++ 51, 1, 14, 32, 80, 79, 27, 15, 83, 84,
++ 83, 32, 83, 83, 83, 85, 27, 32, 32, 83,
++ 32, 83, 84, 32, 32, 32, 32, 83, 35, 52,
++ 32, 32, 32, 80
+ };
+
+ #define yyerrok (yyerrstatus = 0)
+@@ -1329,7 +1331,7 @@ yydestruct (yymsg, yytype, yyvaluep)
+
+ switch (yytype)
+ {
+- case 53: /* "choice_entry" */
++ case 54: /* "choice_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+@@ -1339,7 +1341,7 @@ yydestruct (yymsg, yytype, yyvaluep)
+ };
+
+ break;
+- case 59: /* "if_entry" */
++ case 60: /* "if_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+@@ -1349,7 +1351,7 @@ yydestruct (yymsg, yytype, yyvaluep)
+ };
+
+ break;
+- case 65: /* "menu_entry" */
++ case 66: /* "menu_entry" */
+
+ {
+ fprintf(stderr, "%s:%d: missing end statement for this entry\n",
+@@ -1930,20 +1932,28 @@ yyreduce:
+ case 84:
+
+ {
++ if (zconf_fexists((yyvsp[(2) - (3)].string)))
++ zconf_nextfile((yyvsp[(2) - (3)].string));
++}
++ break;
++
++ case 85:
++
++ {
+ menu_add_entry(NULL);
+ menu_add_prompt(P_COMMENT, (yyvsp[(2) - (3)].string), NULL);
+ printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
+ }
+ break;
+
+- case 85:
++ case 86:
+
+ {
+ menu_end_entry();
+ }
+ break;
+
+- case 86:
++ case 87:
+
+ {
+ printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
+@@ -1951,14 +1961,14 @@ yyreduce:
+ }
+ break;
+
+- case 87:
++ case 88:
+
+ {
+ current_entry->help = (yyvsp[(2) - (2)].string);
+ }
+ break;
+
+- case 92:
++ case 93:
+
+ {
+ menu_add_dep((yyvsp[(3) - (4)].expr));
+@@ -1966,91 +1976,91 @@ yyreduce:
+ }
+ break;
+
+- case 96:
++ case 97:
+
+ {
+ menu_add_visibility((yyvsp[(2) - (2)].expr));
+ }
+ break;
+
+- case 98:
++ case 99:
+
+ {
+ menu_add_prompt(P_PROMPT, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].expr));
+ }
+ break;
+
+- case 101:
++ case 102:
+
+ { (yyval.id) = (yyvsp[(1) - (2)].id); }
+ break;
+
+- case 102:
++ case 103:
+
+ { (yyval.id) = (yyvsp[(1) - (2)].id); }
+ break;
+
+- case 103:
++ case 104:
+
+ { (yyval.id) = (yyvsp[(1) - (2)].id); }
+ break;
+
+- case 106:
++ case 107:
+
+ { (yyval.expr) = NULL; }
+ break;
+
+- case 107:
++ case 108:
+
+ { (yyval.expr) = (yyvsp[(2) - (2)].expr); }
+ break;
+
+- case 108:
++ case 109:
+
+ { (yyval.expr) = expr_alloc_symbol((yyvsp[(1) - (1)].symbol)); }
+ break;
+
+- case 109:
++ case 110:
+
+ { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); }
+ break;
+
+- case 110:
++ case 111:
+
+ { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); }
+ break;
+
+- case 111:
++ case 112:
+
+ { (yyval.expr) = (yyvsp[(2) - (3)].expr); }
+ break;
+
+- case 112:
++ case 113:
+
+ { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); }
+ break;
+
+- case 113:
++ case 114:
+
+ { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
+ break;
+
+- case 114:
++ case 115:
+
+ { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
+ break;
+
+- case 115:
++ case 116:
+
+ { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); }
+ break;
+
+- case 116:
++ case 117:
+
+ { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); }
+ break;
+
+- case 117:
++ case 118:
+
+ { (yyval.string) = NULL; }
+ break;
+diff --git a/support/kconfig/zconf.y b/support/kconfig/zconf.y
+index 08ac041..9478e78 100644
+--- a/support/kconfig/zconf.y
++++ b/support/kconfig/zconf.y
+@@ -47,6 +47,7 @@ static struct menu *current_menu, *current_entry;
+ %token <id>T_MENU
+ %token <id>T_ENDMENU
+ %token <id>T_SOURCE
++%token <id>T_MINUSSOURCE
+ %token <id>T_CHOICE
+ %token <id>T_ENDCHOICE
+ %token <id>T_COMMENT
+@@ -382,6 +383,10 @@ source_stmt: T_SOURCE prompt T_EOL
+ {
+ printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
+ zconf_nextfile($2);
++} | T_MINUSSOURCE prompt T_EOL
++{
++ if (zconf_fexists($2))
++ zconf_nextfile($2);
+ };
+
+ /* comment entry */
+--
+1.9.1
+
@@ -7,3 +7,4 @@
15-fix-qconf-moc-rule.patch
16-fix-space-to-de-select-options.patch
17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
+18-kconfig-added-support-for-optional-file-sourcing.patch
This just adds the git formatted patch of the optional file sourcing commit to the existing patch serie that is used to rebase against the Kernel upstream Kconfig. Signed-off-by: David Corvoysier <david.corvoysier@intel.com> --- ...-added-support-for-optional-file-sourcing.patch | 1293 ++++++++++++++++++++ support/kconfig/patches/series | 1 + 2 files changed, 1294 insertions(+) create mode 100644 support/kconfig/patches/18-kconfig-added-support-for-optional-file-sourcing.patch