util/kconfig: Uprev to Linux 6.6's kconfig
Upstream reimplemented KCONFIG_STRICT, just calling it KCONFIG_WERROR. Therefore, adapt our build system and documentation. Upstream is less strict at this time, but there's a proposed patch that got imported. TEST=`util/abuild/abuild -C` output (config.h and config.build) remains the same. Also, the failure type fixed in https://review.coreboot.org/c/coreboot/+/11272 can be detected, which I tested by manually breaking our Kconfig in a similar way. Change-Id: I322fb08a2f7308b93cff71a5dd4136f1a998773b Signed-off-by: Patrick Georgi <patrick@coreboot.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/79259 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin L Roth <gaumless@gmail.com> Reviewed-by: Felix Singer <service+coreboot-gerrit@felixsinger.de>
This commit is contained in:
@@ -15,8 +15,6 @@
|
||||
#include "nconf.h"
|
||||
#include <ctype.h>
|
||||
|
||||
int kconfig_warnings = 0;
|
||||
|
||||
static const char nconf_global_help[] =
|
||||
"Help windows\n"
|
||||
"------------\n"
|
||||
@@ -222,7 +220,7 @@ search_help[] =
|
||||
"Location:\n"
|
||||
" -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
|
||||
" -> PCI support (PCI [ = y])\n"
|
||||
" -> PCI access mode (<choice> [ = y])\n"
|
||||
"(1) -> PCI access mode (<choice> [ = y])\n"
|
||||
"Selects: LIBCRC32\n"
|
||||
"Selected by: BAR\n"
|
||||
"-----------------------------------------------------------------\n"
|
||||
@@ -233,9 +231,13 @@ search_help[] =
|
||||
"o The 'Depends on:' line lists symbols that need to be defined for\n"
|
||||
" this symbol to be visible and selectable in the menu.\n"
|
||||
"o The 'Location:' lines tell, where in the menu structure this symbol\n"
|
||||
" is located. A location followed by a [ = y] indicates that this is\n"
|
||||
" a selectable menu item, and the current value is displayed inside\n"
|
||||
" brackets.\n"
|
||||
" is located.\n"
|
||||
" A location followed by a [ = y] indicates that this is\n"
|
||||
" a selectable menu item, and the current value is displayed inside\n"
|
||||
" brackets.\n"
|
||||
" Press the key in the (#) prefix to jump directly to that\n"
|
||||
" location. You will be returned to the current search results\n"
|
||||
" after exiting this new menu.\n"
|
||||
"o The 'Selects:' line tells, what symbol will be automatically selected\n"
|
||||
" if this symbol is selected (y or m).\n"
|
||||
"o The 'Selected by' line tells what symbol has selected this symbol.\n"
|
||||
@@ -277,7 +279,9 @@ static const char *current_instructions = menu_instructions;
|
||||
|
||||
static char *dialog_input_result;
|
||||
static int dialog_input_result_len;
|
||||
static int jump_key_char;
|
||||
|
||||
static void selected_conf(struct menu *menu, struct menu *active_menu);
|
||||
static void conf(struct menu *menu);
|
||||
static void conf_choice(struct menu *menu);
|
||||
static void conf_string(struct menu *menu);
|
||||
@@ -647,8 +651,6 @@ static void set_config_filename(const char *config_filename)
|
||||
static int do_exit(void)
|
||||
{
|
||||
int res;
|
||||
char *env;
|
||||
|
||||
if (!conf_get_changed()) {
|
||||
global_exit = 1;
|
||||
return 0;
|
||||
@@ -664,15 +666,6 @@ static int do_exit(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
env = getenv("KCONFIG_STRICT");
|
||||
if (env && *env && kconfig_warnings) {
|
||||
btn_dialog(main_window,
|
||||
"\nWarnings encountered, and warnings are errors.\n\n",
|
||||
1,
|
||||
"<OK>");
|
||||
res = 2;
|
||||
}
|
||||
|
||||
/* if we got here, the user really wants to exit */
|
||||
switch (res) {
|
||||
case 0:
|
||||
@@ -698,6 +691,57 @@ static int do_exit(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct search_data {
|
||||
struct list_head *head;
|
||||
struct menu *target;
|
||||
};
|
||||
|
||||
static int next_jump_key(int key)
|
||||
{
|
||||
if (key < '1' || key > '9')
|
||||
return '1';
|
||||
|
||||
key++;
|
||||
|
||||
if (key > '9')
|
||||
key = '1';
|
||||
|
||||
return key;
|
||||
}
|
||||
|
||||
static int handle_search_keys(int key, size_t start, size_t end, void *_data)
|
||||
{
|
||||
struct search_data *data = _data;
|
||||
struct jump_key *pos;
|
||||
int index = 0;
|
||||
|
||||
if (key < '1' || key > '9')
|
||||
return 0;
|
||||
|
||||
list_for_each_entry(pos, data->head, entries) {
|
||||
index = next_jump_key(index);
|
||||
|
||||
if (pos->offset < start)
|
||||
continue;
|
||||
|
||||
if (pos->offset >= end)
|
||||
break;
|
||||
|
||||
if (key == index) {
|
||||
data->target = pos->target;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_jump_key_char(void)
|
||||
{
|
||||
jump_key_char = next_jump_key(jump_key_char);
|
||||
|
||||
return jump_key_char;
|
||||
}
|
||||
|
||||
static void search_conf(void)
|
||||
{
|
||||
@@ -705,7 +749,8 @@ static void search_conf(void)
|
||||
struct gstr res;
|
||||
struct gstr title;
|
||||
char *dialog_input;
|
||||
int dres;
|
||||
int dres, vscroll = 0, hscroll = 0;
|
||||
bool again;
|
||||
|
||||
title = str_new();
|
||||
str_printf( &title, "Enter (sub)string or regexp to search for "
|
||||
@@ -734,11 +779,28 @@ again:
|
||||
dialog_input += strlen(CONFIG_);
|
||||
|
||||
sym_arr = sym_re_search(dialog_input);
|
||||
res = get_relations_str(sym_arr, NULL);
|
||||
|
||||
do {
|
||||
LIST_HEAD(head);
|
||||
struct search_data data = {
|
||||
.head = &head,
|
||||
.target = NULL,
|
||||
};
|
||||
jump_key_char = 0;
|
||||
res = get_relations_str(sym_arr, &head);
|
||||
dres = show_scroll_win_ext(main_window,
|
||||
"Search Results", str_get(&res),
|
||||
&vscroll, &hscroll,
|
||||
handle_search_keys, &data);
|
||||
again = false;
|
||||
if (dres >= '1' && dres <= '9') {
|
||||
assert(data.target != NULL);
|
||||
selected_conf(data.target->parent, data.target);
|
||||
again = true;
|
||||
}
|
||||
str_free(&res);
|
||||
} while (again);
|
||||
free(sym_arr);
|
||||
show_scroll_win(main_window,
|
||||
"Search Results", str_get(&res));
|
||||
str_free(&res);
|
||||
str_free(&title);
|
||||
}
|
||||
|
||||
@@ -1075,10 +1137,15 @@ static int do_match(int key, struct match_state *state, int *ans)
|
||||
}
|
||||
|
||||
static void conf(struct menu *menu)
|
||||
{
|
||||
selected_conf(menu, NULL);
|
||||
}
|
||||
|
||||
static void selected_conf(struct menu *menu, struct menu *active_menu)
|
||||
{
|
||||
struct menu *submenu = NULL;
|
||||
struct symbol *sym;
|
||||
int res;
|
||||
int i, res;
|
||||
int current_index = 0;
|
||||
int last_top_row = 0;
|
||||
struct match_state match_state = {
|
||||
@@ -1094,6 +1161,19 @@ static void conf(struct menu *menu)
|
||||
if (!child_count)
|
||||
break;
|
||||
|
||||
if (active_menu != NULL) {
|
||||
for (i = 0; i < items_num; i++) {
|
||||
struct mitem *mcur;
|
||||
|
||||
mcur = (struct mitem *) item_userptr(curses_menu_items[i]);
|
||||
if ((struct menu *) mcur->usrptr == active_menu) {
|
||||
current_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
active_menu = NULL;
|
||||
}
|
||||
|
||||
show_menu(menu_get_prompt(menu), menu_instructions,
|
||||
current_index, &last_top_row);
|
||||
keypad((menu_win(curses_menu)), TRUE);
|
||||
|
Reference in New Issue
Block a user