mirror of
https://github.com/motioneye-project/motioneyeos.git
synced 2025-07-27 13:16:35 +00:00
support/kconfig: upgrade to 3.9-rc2
Our kconfig code is updated to the version of kernel 3.9-rc2. No major issues during the migration, except: * Some conflicts when applying 03-change-config-option-prefix.patch due to upstream kernel changes. * The need of adding a new patch, 15-fix-qconf-moc-rule.patch, to fix the make rule that generates the moc file for the Qt-based interface. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Acked-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Tested-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
This commit is contained in:
parent
cfe70c5e13
commit
6997e461fd
@ -11,6 +11,9 @@ else
|
|||||||
Kconfig := Kconfig
|
Kconfig := Kconfig
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# We need this, in case the user has it in its environment
|
||||||
|
unexport CONFIG_
|
||||||
|
|
||||||
xconfig: $(obj)/qconf
|
xconfig: $(obj)/qconf
|
||||||
$< $(Kconfig)
|
$< $(Kconfig)
|
||||||
|
|
||||||
@ -33,33 +36,9 @@ silentoldconfig: $(obj)/conf
|
|||||||
$(Q)mkdir -p include/generated
|
$(Q)mkdir -p include/generated
|
||||||
$< --$@ $(Kconfig)
|
$< --$@ $(Kconfig)
|
||||||
|
|
||||||
# if no path is given, then use src directory to find file
|
localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
||||||
ifdef LSMOD
|
|
||||||
LSMOD_F := $(LSMOD)
|
|
||||||
ifeq ($(findstring /,$(LSMOD)),)
|
|
||||||
LSMOD_F := $(objtree)/$(LSMOD)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
|
||||||
$(Q)mkdir -p include/generated
|
$(Q)mkdir -p include/generated
|
||||||
$(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
|
$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
|
||||||
$(Q)if [ -f .config ]; then \
|
|
||||||
cmp -s .tmp.config .config || \
|
|
||||||
(mv -f .config .config.old.1; \
|
|
||||||
mv -f .tmp.config .config; \
|
|
||||||
$(obj)/conf --silentoldconfig $(Kconfig); \
|
|
||||||
mv -f .config.old.1 .config.old) \
|
|
||||||
else \
|
|
||||||
mv -f .tmp.config .config; \
|
|
||||||
$(obj)/conf --silentoldconfig $(Kconfig); \
|
|
||||||
fi
|
|
||||||
$(Q)rm -f .tmp.config
|
|
||||||
|
|
||||||
localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
|
|
||||||
$(Q)mkdir -p include/generated
|
|
||||||
$(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
|
|
||||||
$(Q)sed -i s/=m/=y/ .tmp.config
|
|
||||||
$(Q)if [ -f .config ]; then \
|
$(Q)if [ -f .config ]; then \
|
||||||
cmp -s .tmp.config .config || \
|
cmp -s .tmp.config .config || \
|
||||||
(mv -f .config .config.old.1; \
|
(mv -f .config .config.old.1; \
|
||||||
@ -74,9 +53,8 @@ localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
|
|||||||
|
|
||||||
# Create new linux.pot file
|
# Create new linux.pot file
|
||||||
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
|
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
|
||||||
# The symlink is used to repair a deficiency in arch/um
|
|
||||||
update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
|
update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
|
||||||
$(Q)echo " GEN config"
|
$(Q)echo " GEN config.pot"
|
||||||
$(Q)xgettext --default-domain=linux \
|
$(Q)xgettext --default-domain=linux \
|
||||||
--add-comments --keyword=_ --keyword=N_ \
|
--add-comments --keyword=_ --keyword=N_ \
|
||||||
--from-code=UTF-8 \
|
--from-code=UTF-8 \
|
||||||
@ -84,16 +62,16 @@ update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
|
|||||||
--directory=$(srctree) --directory=$(objtree) \
|
--directory=$(srctree) --directory=$(objtree) \
|
||||||
--output $(obj)/config.pot
|
--output $(obj)/config.pot
|
||||||
$(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
|
$(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
|
||||||
$(Q)ln -fs Kconfig.x86 arch/um/Kconfig
|
$(Q)(for i in `ls $(srctree)/arch/*/Kconfig \
|
||||||
$(Q)(for i in `ls $(srctree)/arch/*/Kconfig`; \
|
$(srctree)/arch/*/um/Kconfig`; \
|
||||||
do \
|
do \
|
||||||
echo " GEN $$i"; \
|
echo " GEN $$i"; \
|
||||||
$(obj)/kxgettext $$i \
|
$(obj)/kxgettext $$i \
|
||||||
>> $(obj)/config.pot; \
|
>> $(obj)/config.pot; \
|
||||||
done )
|
done )
|
||||||
|
$(Q)echo " GEN linux.pot"
|
||||||
$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
|
$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
|
||||||
--output $(obj)/linux.pot
|
--output $(obj)/linux.pot
|
||||||
$(Q)rm -f $(srctree)/arch/um/Kconfig
|
|
||||||
$(Q)rm -f $(obj)/config.pot
|
$(Q)rm -f $(obj)/config.pot
|
||||||
|
|
||||||
PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
|
PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
|
||||||
@ -101,11 +79,17 @@ PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
|
|||||||
allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
|
allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
|
||||||
$< --$@ $(Kconfig)
|
$< --$@ $(Kconfig)
|
||||||
|
|
||||||
PHONY += listnewconfig oldnoconfig savedefconfig defconfig
|
PHONY += listnewconfig olddefconfig oldnoconfig savedefconfig defconfig
|
||||||
|
|
||||||
listnewconfig oldnoconfig: $(obj)/conf
|
listnewconfig olddefconfig: $(obj)/conf
|
||||||
$< --$@ $(Kconfig)
|
$< --$@ $(Kconfig)
|
||||||
|
|
||||||
|
# oldnoconfig is an alias of olddefconfig, because people already are dependent
|
||||||
|
# on its behavior(sets new symbols to their default value but not 'n') with the
|
||||||
|
# counter-intuitive name.
|
||||||
|
oldnoconfig: $(obj)/conf
|
||||||
|
$< --olddefconfig $(Kconfig)
|
||||||
|
|
||||||
savedefconfig: $(obj)/conf
|
savedefconfig: $(obj)/conf
|
||||||
$< --$@=defconfig $(Kconfig)
|
$< --$@=defconfig $(Kconfig)
|
||||||
|
|
||||||
@ -139,7 +123,7 @@ help:
|
|||||||
@echo ' alldefconfig - New config with all symbols set to default'
|
@echo ' alldefconfig - New config with all symbols set to default'
|
||||||
@echo ' randconfig - New config with random answer to all options'
|
@echo ' randconfig - New config with random answer to all options'
|
||||||
@echo ' listnewconfig - List new options'
|
@echo ' listnewconfig - List new options'
|
||||||
@echo ' oldnoconfig - Same as silentoldconfig but set new symbols to n (unset)'
|
@echo ' olddefconfig - Same as silentoldconfig but sets new symbols to their default value'
|
||||||
|
|
||||||
# lxdialog stuff
|
# lxdialog stuff
|
||||||
check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
|
check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
|
||||||
@ -170,8 +154,8 @@ mconf-objs := mconf.o zconf.tab.o $(lxdialog)
|
|||||||
nconf-objs := nconf.o zconf.tab.o nconf.gui.o
|
nconf-objs := nconf.o zconf.tab.o nconf.gui.o
|
||||||
kxgettext-objs := kxgettext.o zconf.tab.o
|
kxgettext-objs := kxgettext.o zconf.tab.o
|
||||||
qconf-cxxobjs := qconf.o
|
qconf-cxxobjs := qconf.o
|
||||||
qconf-objs := kconfig_load.o zconf.tab.o
|
qconf-objs := zconf.tab.o
|
||||||
gconf-objs := gconf.o kconfig_load.o zconf.tab.o
|
gconf-objs := gconf.o zconf.tab.o
|
||||||
|
|
||||||
hostprogs-y := conf
|
hostprogs-y := conf
|
||||||
|
|
||||||
@ -203,8 +187,8 @@ ifeq ($(gconf-target),1)
|
|||||||
hostprogs-y += gconf
|
hostprogs-y += gconf
|
||||||
endif
|
endif
|
||||||
|
|
||||||
clean-files := lkc_defs.h qconf.moc .tmp_qtcheck .tmp_gtkcheck
|
clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck
|
||||||
clean-files += zconf.tab.c lex.zconf.c zconf.hash.c gconf.glade.h
|
clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
|
||||||
clean-files += mconf qconf gconf nconf
|
clean-files += mconf qconf gconf nconf
|
||||||
clean-files += config.pot linux.pot
|
clean-files += config.pot linux.pot
|
||||||
|
|
||||||
@ -220,15 +204,18 @@ always := dochecklxdialog
|
|||||||
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
|
HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
|
||||||
|
|
||||||
# generated files seem to need this to find local include files
|
# generated files seem to need this to find local include files
|
||||||
HOSTCFLAGS_lex.zconf.o := -I$(src)
|
HOSTCFLAGS_zconf.lex.o := -I$(src)
|
||||||
HOSTCFLAGS_zconf.tab.o := -I$(src)
|
HOSTCFLAGS_zconf.tab.o := -I$(src)
|
||||||
|
|
||||||
HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl
|
LEX_PREFIX_zconf := zconf
|
||||||
HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
|
YACC_PREFIX_zconf := zconf
|
||||||
|
|
||||||
HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl
|
HOSTLOADLIBES_qconf = $(KC_QT_LIBS)
|
||||||
|
HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS)
|
||||||
|
|
||||||
|
HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
|
||||||
HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
|
HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
|
||||||
-D LKC_DIRECT_LINK
|
-Wno-missing-prototypes
|
||||||
|
|
||||||
HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
|
HOSTLOADLIBES_mconf = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
|
||||||
|
|
||||||
@ -256,12 +243,12 @@ $(obj)/.tmp_qtcheck:
|
|||||||
if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
|
if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
|
||||||
done; \
|
done; \
|
||||||
if [ -z "$$dir" ]; then \
|
if [ -z "$$dir" ]; then \
|
||||||
echo "*"; \
|
echo >&2 "*"; \
|
||||||
echo "* Unable to find any QT installation. Please make sure that"; \
|
echo >&2 "* Unable to find any QT installation. Please make sure that"; \
|
||||||
echo "* the QT4 or QT3 development package is correctly installed and"; \
|
echo >&2 "* the QT4 or QT3 development package is correctly installed and"; \
|
||||||
echo "* either qmake can be found or install pkg-config or set"; \
|
echo >&2 "* either qmake can be found or install pkg-config or set"; \
|
||||||
echo "* the QTDIR environment variable to the correct location."; \
|
echo >&2 "* the QTDIR environment variable to the correct location."; \
|
||||||
echo "*"; \
|
echo >&2 "*"; \
|
||||||
false; \
|
false; \
|
||||||
fi; \
|
fi; \
|
||||||
libpath=$$dir/lib; lib=qt; osdir=""; \
|
libpath=$$dir/lib; lib=qt; osdir=""; \
|
||||||
@ -282,8 +269,8 @@ $(obj)/.tmp_qtcheck:
|
|||||||
else \
|
else \
|
||||||
cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
|
cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
|
||||||
libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
|
libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
|
||||||
binpath="\$$(shell pkg-config QtCore --variable=prefix)"; \
|
moc="\$$(shell pkg-config QtCore --variable=moc_location)"; \
|
||||||
moc="$$binpath/bin/moc"; \
|
[ -n "$$moc" ] || moc="\$$(shell pkg-config QtCore --variable=prefix)/bin/moc"; \
|
||||||
fi; \
|
fi; \
|
||||||
echo "KC_QT_CFLAGS=$$cflags" > $@; \
|
echo "KC_QT_CFLAGS=$$cflags" > $@; \
|
||||||
echo "KC_QT_LIBS=$$libs" >> $@; \
|
echo "KC_QT_LIBS=$$libs" >> $@; \
|
||||||
@ -301,62 +288,30 @@ $(obj)/.tmp_gtkcheck:
|
|||||||
if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then \
|
if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then \
|
||||||
touch $@; \
|
touch $@; \
|
||||||
else \
|
else \
|
||||||
echo "*"; \
|
echo >&2 "*"; \
|
||||||
echo "* GTK+ is present but version >= 2.0.0 is required."; \
|
echo >&2 "* GTK+ is present but version >= 2.0.0 is required."; \
|
||||||
echo "*"; \
|
echo >&2 "*"; \
|
||||||
false; \
|
false; \
|
||||||
fi \
|
fi \
|
||||||
else \
|
else \
|
||||||
echo "*"; \
|
echo >&2 "*"; \
|
||||||
echo "* Unable to find the GTK+ installation. Please make sure that"; \
|
echo >&2 "* Unable to find the GTK+ installation. Please make sure that"; \
|
||||||
echo "* the GTK+ 2.0 development package is correctly installed..."; \
|
echo >&2 "* the GTK+ 2.0 development package is correctly installed..."; \
|
||||||
echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \
|
echo >&2 "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \
|
||||||
echo "*"; \
|
echo >&2 "*"; \
|
||||||
false; \
|
false; \
|
||||||
fi
|
fi
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c
|
$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c
|
||||||
|
|
||||||
$(obj)/kconfig_load.o: $(obj)/lkc_defs.h
|
$(obj)/qconf.o: $(obj)/qconf.moc
|
||||||
|
|
||||||
$(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h
|
$(obj)/%.moc: $(src)/%.h $(obj)/.tmp_qtcheck
|
||||||
|
|
||||||
$(obj)/gconf.o: $(obj)/lkc_defs.h
|
|
||||||
|
|
||||||
$(obj)/%.moc: $(src)/%.h
|
|
||||||
$(KC_QT_MOC) -i $< -o $@
|
$(KC_QT_MOC) -i $< -o $@
|
||||||
|
|
||||||
$(obj)/lkc_defs.h: $(src)/lkc_proto.h
|
|
||||||
$(Q)sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
|
|
||||||
|
|
||||||
# Extract gconf menu items for I18N support
|
# Extract gconf menu items for I18N support
|
||||||
$(obj)/gconf.glade.h: $(obj)/gconf.glade
|
$(obj)/gconf.glade.h: $(obj)/gconf.glade
|
||||||
$(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
|
$(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
|
||||||
$(obj)/gconf.glade
|
$(obj)/gconf.glade
|
||||||
|
|
||||||
###
|
|
||||||
# The following requires flex/bison/gperf
|
|
||||||
# By default we use the _shipped versions, uncomment the following line if
|
|
||||||
# you are modifying the flex/bison src.
|
|
||||||
# LKC_GENPARSER := 1
|
|
||||||
|
|
||||||
ifdef LKC_GENPARSER
|
|
||||||
|
|
||||||
$(obj)/zconf.tab.c: $(src)/zconf.y
|
|
||||||
$(obj)/lex.zconf.c: $(src)/zconf.l
|
|
||||||
$(obj)/zconf.hash.c: $(src)/zconf.gperf
|
|
||||||
|
|
||||||
%.tab.c: %.y
|
|
||||||
bison -l -b $* -p $(notdir $*) $<
|
|
||||||
cp $@ $@_shipped
|
|
||||||
|
|
||||||
lex.%.c: %.l
|
|
||||||
flex -L -P$(notdir $*) -o$@ $<
|
|
||||||
cp $@ $@_shipped
|
|
||||||
|
|
||||||
%.hash.c: %.gperf
|
|
||||||
gperf < $< > $@
|
|
||||||
cp $@ $@_shipped
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
This is a copy of the kconfig code in the kernel (currently 2.6.37-rc1) tweaked
|
This is a copy of the kconfig code in the kernel (currently 3.9-rc2) tweaked
|
||||||
to suit Buildroot.
|
to suit Buildroot.
|
||||||
|
|
||||||
To update:
|
To update:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Needed for systems without gettext
|
# Needed for systems without gettext
|
||||||
$* -xc -o /dev/null - > /dev/null 2>&1 << EOF
|
$* -x c -o /dev/null - > /dev/null 2>&1 << EOF
|
||||||
#include <libintl.h>
|
#include <libintl.h>
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
@ -14,11 +14,11 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
static void conf(struct menu *menu);
|
static void conf(struct menu *menu);
|
||||||
static void check_conf(struct menu *menu);
|
static void check_conf(struct menu *menu);
|
||||||
|
static void xfgets(char *str, int size, FILE *in);
|
||||||
|
|
||||||
enum input_mode {
|
enum input_mode {
|
||||||
oldaskconfig,
|
oldaskconfig,
|
||||||
@ -32,12 +32,11 @@ enum input_mode {
|
|||||||
defconfig,
|
defconfig,
|
||||||
savedefconfig,
|
savedefconfig,
|
||||||
listnewconfig,
|
listnewconfig,
|
||||||
oldnoconfig,
|
olddefconfig,
|
||||||
} input_mode = oldaskconfig;
|
} input_mode = oldaskconfig;
|
||||||
|
|
||||||
char *defconfig_file;
|
|
||||||
|
|
||||||
static int indent = 1;
|
static int indent = 1;
|
||||||
|
static int tty_stdio;
|
||||||
static int valid_stdin = 1;
|
static int valid_stdin = 1;
|
||||||
static int sync_kconfig;
|
static int sync_kconfig;
|
||||||
static int conf_cnt;
|
static int conf_cnt;
|
||||||
@ -106,9 +105,12 @@ static int conf_askvalue(struct symbol *sym, const char *def)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
check_stdin();
|
check_stdin();
|
||||||
|
/* fall through */
|
||||||
case oldaskconfig:
|
case oldaskconfig:
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
xfgets(line, 128, stdin);
|
xfgets(line, 128, stdin);
|
||||||
|
if (!tty_stdio)
|
||||||
|
printf("\n");
|
||||||
return 1;
|
return 1;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -150,6 +152,7 @@ static int conf_string(struct menu *menu)
|
|||||||
def = NULL;
|
def = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
line[strlen(line)-1] = 0;
|
line[strlen(line)-1] = 0;
|
||||||
def = line;
|
def = line;
|
||||||
@ -304,6 +307,7 @@ static int conf_choice(struct menu *menu)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
check_stdin();
|
check_stdin();
|
||||||
|
/* fall through */
|
||||||
case oldaskconfig:
|
case oldaskconfig:
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
xfgets(line, 128, stdin);
|
xfgets(line, 128, stdin);
|
||||||
@ -364,11 +368,12 @@ static void conf(struct menu *menu)
|
|||||||
case P_MENU:
|
case P_MENU:
|
||||||
if ((input_mode == silentoldconfig ||
|
if ((input_mode == silentoldconfig ||
|
||||||
input_mode == listnewconfig ||
|
input_mode == listnewconfig ||
|
||||||
input_mode == oldnoconfig) &&
|
input_mode == olddefconfig) &&
|
||||||
rootEntry != menu) {
|
rootEntry != menu) {
|
||||||
check_conf(menu);
|
check_conf(menu);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
/* fall through */
|
||||||
case P_COMMENT:
|
case P_COMMENT:
|
||||||
prompt = menu_get_prompt(menu);
|
prompt = menu_get_prompt(menu);
|
||||||
if (prompt)
|
if (prompt)
|
||||||
@ -427,7 +432,7 @@ static void check_conf(struct menu *menu)
|
|||||||
if (sym->name && !sym_is_choice_value(sym)) {
|
if (sym->name && !sym_is_choice_value(sym)) {
|
||||||
printf("%s%s\n", CONFIG_, sym->name);
|
printf("%s%s\n", CONFIG_, sym->name);
|
||||||
}
|
}
|
||||||
} else if (input_mode != oldnoconfig) {
|
} else if (input_mode != olddefconfig) {
|
||||||
if (!conf_cnt++)
|
if (!conf_cnt++)
|
||||||
printf(_("*\n* Restart config...\n*\n"));
|
printf(_("*\n* Restart config...\n*\n"));
|
||||||
rootEntry = menu_get_parent_menu(menu);
|
rootEntry = menu_get_parent_menu(menu);
|
||||||
@ -452,20 +457,49 @@ static struct option long_opts[] = {
|
|||||||
{"alldefconfig", no_argument, NULL, alldefconfig},
|
{"alldefconfig", no_argument, NULL, alldefconfig},
|
||||||
{"randconfig", no_argument, NULL, randconfig},
|
{"randconfig", no_argument, NULL, randconfig},
|
||||||
{"listnewconfig", no_argument, NULL, listnewconfig},
|
{"listnewconfig", no_argument, NULL, listnewconfig},
|
||||||
{"oldnoconfig", no_argument, NULL, oldnoconfig},
|
{"olddefconfig", no_argument, NULL, olddefconfig},
|
||||||
|
/*
|
||||||
|
* oldnoconfig is an alias of olddefconfig, because people already
|
||||||
|
* are dependent on its behavior(sets new symbols to their default
|
||||||
|
* value but not 'n') with the counter-intuitive name.
|
||||||
|
*/
|
||||||
|
{"oldnoconfig", no_argument, NULL, olddefconfig},
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void conf_usage(const char *progname)
|
||||||
|
{
|
||||||
|
|
||||||
|
printf("Usage: %s [option] <kconfig-file>\n", progname);
|
||||||
|
printf("[option] is _one_ of the following:\n");
|
||||||
|
printf(" --listnewconfig List new options\n");
|
||||||
|
printf(" --oldaskconfig Start a new configuration using a line-oriented program\n");
|
||||||
|
printf(" --oldconfig Update a configuration using a provided .config as base\n");
|
||||||
|
printf(" --silentoldconfig Same as oldconfig, but quietly, additionally update deps\n");
|
||||||
|
printf(" --olddefconfig Same as silentoldconfig but sets new symbols to their default value\n");
|
||||||
|
printf(" --oldnoconfig An alias of olddefconfig\n");
|
||||||
|
printf(" --defconfig <file> New config with default defined in <file>\n");
|
||||||
|
printf(" --savedefconfig <file> Save the minimal current configuration to <file>\n");
|
||||||
|
printf(" --allnoconfig New config where all options are answered with no\n");
|
||||||
|
printf(" --allyesconfig New config where all options are answered with yes\n");
|
||||||
|
printf(" --allmodconfig New config where all options are answered with mod\n");
|
||||||
|
printf(" --alldefconfig New config with all symbols set to default\n");
|
||||||
|
printf(" --randconfig New config with random answer to all options\n");
|
||||||
|
}
|
||||||
|
|
||||||
int main(int ac, char **av)
|
int main(int ac, char **av)
|
||||||
{
|
{
|
||||||
|
const char *progname = av[0];
|
||||||
int opt;
|
int opt;
|
||||||
const char *name;
|
const char *name, *defconfig_file = NULL /* gcc uninit */;
|
||||||
struct stat tmpstat;
|
struct stat tmpstat;
|
||||||
|
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
bindtextdomain(PACKAGE, LOCALEDIR);
|
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||||
textdomain(PACKAGE);
|
textdomain(PACKAGE);
|
||||||
|
|
||||||
|
tty_stdio = isatty(0) && isatty(1) && isatty(2);
|
||||||
|
|
||||||
while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
|
while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
|
||||||
input_mode = (enum input_mode)opt;
|
input_mode = (enum input_mode)opt;
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
@ -491,14 +525,24 @@ int main(int ac, char **av)
|
|||||||
srand(seed);
|
srand(seed);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case oldaskconfig:
|
||||||
|
case oldconfig:
|
||||||
|
case allnoconfig:
|
||||||
|
case allyesconfig:
|
||||||
|
case allmodconfig:
|
||||||
|
case alldefconfig:
|
||||||
|
case listnewconfig:
|
||||||
|
case olddefconfig:
|
||||||
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
fprintf(stderr, _("See README for usage info\n"));
|
conf_usage(progname);
|
||||||
exit(1);
|
exit(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ac == optind) {
|
if (ac == optind) {
|
||||||
printf(_("%s: Kconfig file missing\n"), av[0]);
|
printf(_("%s: Kconfig file missing\n"), av[0]);
|
||||||
|
conf_usage(progname);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
name = av[optind];
|
name = av[optind];
|
||||||
@ -532,7 +576,7 @@ int main(int ac, char **av)
|
|||||||
case oldaskconfig:
|
case oldaskconfig:
|
||||||
case oldconfig:
|
case oldconfig:
|
||||||
case listnewconfig:
|
case listnewconfig:
|
||||||
case oldnoconfig:
|
case olddefconfig:
|
||||||
conf_read(NULL);
|
conf_read(NULL);
|
||||||
break;
|
break;
|
||||||
case allnoconfig:
|
case allnoconfig:
|
||||||
@ -541,8 +585,15 @@ int main(int ac, char **av)
|
|||||||
case alldefconfig:
|
case alldefconfig:
|
||||||
case randconfig:
|
case randconfig:
|
||||||
name = getenv("KCONFIG_ALLCONFIG");
|
name = getenv("KCONFIG_ALLCONFIG");
|
||||||
if (name && !stat(name, &tmpstat)) {
|
if (!name)
|
||||||
conf_read_simple(name, S_DEF_USER);
|
break;
|
||||||
|
if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) {
|
||||||
|
if (conf_read_simple(name, S_DEF_USER)) {
|
||||||
|
fprintf(stderr,
|
||||||
|
_("*** Can't read seed configuration \"%s\"!\n"),
|
||||||
|
name);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (input_mode) {
|
switch (input_mode) {
|
||||||
@ -553,10 +604,13 @@ int main(int ac, char **av)
|
|||||||
case randconfig: name = "allrandom.config"; break;
|
case randconfig: name = "allrandom.config"; break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
if (!stat(name, &tmpstat))
|
if (conf_read_simple(name, S_DEF_USER) &&
|
||||||
conf_read_simple(name, S_DEF_USER);
|
conf_read_simple("all.config", S_DEF_USER)) {
|
||||||
else if (!stat("all.config", &tmpstat))
|
fprintf(stderr,
|
||||||
conf_read_simple("all.config", S_DEF_USER);
|
_("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"),
|
||||||
|
name);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -571,7 +625,7 @@ int main(int ac, char **av)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
valid_stdin = isatty(0) && isatty(1) && isatty(2);
|
valid_stdin = tty_stdio;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (input_mode) {
|
switch (input_mode) {
|
||||||
@ -602,7 +656,7 @@ int main(int ac, char **av)
|
|||||||
/* fall through */
|
/* fall through */
|
||||||
case oldconfig:
|
case oldconfig:
|
||||||
case listnewconfig:
|
case listnewconfig:
|
||||||
case oldnoconfig:
|
case olddefconfig:
|
||||||
case silentoldconfig:
|
case silentoldconfig:
|
||||||
/* Update until a loop caused no more changes */
|
/* Update until a loop caused no more changes */
|
||||||
do {
|
do {
|
||||||
@ -610,7 +664,7 @@ int main(int ac, char **av)
|
|||||||
check_conf(&rootmenu);
|
check_conf(&rootmenu);
|
||||||
} while (conf_cnt &&
|
} while (conf_cnt &&
|
||||||
(input_mode != listnewconfig &&
|
(input_mode != listnewconfig &&
|
||||||
input_mode != oldnoconfig));
|
input_mode != olddefconfig));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -640,13 +694,11 @@ int main(int ac, char **av)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Helper function to facilitate fgets() by Jean Sacren.
|
* Helper function to facilitate fgets() by Jean Sacren.
|
||||||
*/
|
*/
|
||||||
void xfgets(str, size, in)
|
void xfgets(char *str, int size, FILE *in)
|
||||||
char *str;
|
|
||||||
int size;
|
|
||||||
FILE *in;
|
|
||||||
{
|
{
|
||||||
if (fgets(str, size, in) == NULL)
|
if (fgets(str, size, in) == NULL)
|
||||||
fprintf(stderr, "\nError in reading or end of file.\n");
|
fprintf(stderr, "\nError in reading or end of file.\n");
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -14,7 +15,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
static void conf_warning(const char *fmt, ...)
|
static void conf_warning(const char *fmt, ...)
|
||||||
@ -127,6 +127,7 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
|
|||||||
sym->flags |= def_flags;
|
sym->flags |= def_flags;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* fall through */
|
||||||
case S_BOOLEAN:
|
case S_BOOLEAN:
|
||||||
if (p[0] == 'y') {
|
if (p[0] == 'y') {
|
||||||
sym->def[def].tri = yes;
|
sym->def[def].tri = yes;
|
||||||
@ -139,7 +140,7 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
conf_warning("symbol value '%s' invalid for %s", p, sym->name);
|
conf_warning("symbol value '%s' invalid for %s", p, sym->name);
|
||||||
break;
|
return 1;
|
||||||
case S_OTHER:
|
case S_OTHER:
|
||||||
if (*p != '"') {
|
if (*p != '"') {
|
||||||
for (p2 = p; *p2 && !isspace(*p2); p2++)
|
for (p2 = p; *p2 && !isspace(*p2); p2++)
|
||||||
@ -147,6 +148,7 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
|
|||||||
sym->type = S_STRING;
|
sym->type = S_STRING;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
/* fall through */
|
||||||
case S_STRING:
|
case S_STRING:
|
||||||
if (*p++ != '"')
|
if (*p++ != '"')
|
||||||
break;
|
break;
|
||||||
@ -161,6 +163,7 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
|
|||||||
conf_warning("invalid string found");
|
conf_warning("invalid string found");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/* fall through */
|
||||||
case S_INT:
|
case S_INT:
|
||||||
case S_HEX:
|
case S_HEX:
|
||||||
done:
|
done:
|
||||||
@ -178,10 +181,66 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LINE_GROWTH 16
|
||||||
|
static int add_byte(int c, char **lineptr, size_t slen, size_t *n)
|
||||||
|
{
|
||||||
|
char *nline;
|
||||||
|
size_t new_size = slen + 1;
|
||||||
|
if (new_size > *n) {
|
||||||
|
new_size += LINE_GROWTH - 1;
|
||||||
|
new_size *= 2;
|
||||||
|
nline = realloc(*lineptr, new_size);
|
||||||
|
if (!nline)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
*lineptr = nline;
|
||||||
|
*n = new_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*lineptr)[slen] = c;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t compat_getline(char **lineptr, size_t *n, FILE *stream)
|
||||||
|
{
|
||||||
|
char *line = *lineptr;
|
||||||
|
size_t slen = 0;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
int c = getc(stream);
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
case '\n':
|
||||||
|
if (add_byte(c, &line, slen, n) < 0)
|
||||||
|
goto e_out;
|
||||||
|
slen++;
|
||||||
|
/* fall through */
|
||||||
|
case EOF:
|
||||||
|
if (add_byte('\0', &line, slen, n) < 0)
|
||||||
|
goto e_out;
|
||||||
|
*lineptr = line;
|
||||||
|
if (slen == 0)
|
||||||
|
return -1;
|
||||||
|
return slen;
|
||||||
|
default:
|
||||||
|
if (add_byte(c, &line, slen, n) < 0)
|
||||||
|
goto e_out;
|
||||||
|
slen++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
e_out:
|
||||||
|
line[slen-1] = '\0';
|
||||||
|
*lineptr = line;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int conf_read_simple(const char *name, int def)
|
int conf_read_simple(const char *name, int def)
|
||||||
{
|
{
|
||||||
FILE *in = NULL;
|
FILE *in = NULL;
|
||||||
char line[1024];
|
char *line = NULL;
|
||||||
|
size_t line_asize = 0;
|
||||||
char *p, *p2;
|
char *p, *p2;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
int i, def_flags;
|
int i, def_flags;
|
||||||
@ -236,13 +295,14 @@ load:
|
|||||||
case S_STRING:
|
case S_STRING:
|
||||||
if (sym->def[def].val)
|
if (sym->def[def].val)
|
||||||
free(sym->def[def].val);
|
free(sym->def[def].val);
|
||||||
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
sym->def[def].val = NULL;
|
sym->def[def].val = NULL;
|
||||||
sym->def[def].tri = no;
|
sym->def[def].tri = no;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (fgets(line, sizeof(line), in)) {
|
while (compat_getline(&line, &line_asize, in) != -1) {
|
||||||
conf_lineno++;
|
conf_lineno++;
|
||||||
sym = NULL;
|
sym = NULL;
|
||||||
if (line[0] == '#') {
|
if (line[0] == '#') {
|
||||||
@ -330,6 +390,7 @@ setsym:
|
|||||||
cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri);
|
cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free(line);
|
||||||
fclose(in);
|
fclose(in);
|
||||||
|
|
||||||
if (modules_sym)
|
if (modules_sym)
|
||||||
@ -339,10 +400,8 @@ setsym:
|
|||||||
|
|
||||||
int conf_read(const char *name)
|
int conf_read(const char *name)
|
||||||
{
|
{
|
||||||
struct symbol *sym, *choice_sym;
|
struct symbol *sym;
|
||||||
struct property *prop;
|
int i;
|
||||||
struct expr *e;
|
|
||||||
int i, flags;
|
|
||||||
|
|
||||||
sym_set_change_count(0);
|
sym_set_change_count(0);
|
||||||
|
|
||||||
@ -352,7 +411,7 @@ int conf_read(const char *name)
|
|||||||
for_all_symbols(i, sym) {
|
for_all_symbols(i, sym) {
|
||||||
sym_calc_value(sym);
|
sym_calc_value(sym);
|
||||||
if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
|
if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
|
||||||
goto sym_ok;
|
continue;
|
||||||
if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
|
if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
|
||||||
/* check that calculated value agrees with saved value */
|
/* check that calculated value agrees with saved value */
|
||||||
switch (sym->type) {
|
switch (sym->type) {
|
||||||
@ -361,29 +420,18 @@ int conf_read(const char *name)
|
|||||||
if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym))
|
if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym))
|
||||||
break;
|
break;
|
||||||
if (!sym_is_choice(sym))
|
if (!sym_is_choice(sym))
|
||||||
goto sym_ok;
|
continue;
|
||||||
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
|
if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
|
||||||
goto sym_ok;
|
continue;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
|
} else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
|
||||||
/* no previous value and not saved */
|
/* no previous value and not saved */
|
||||||
goto sym_ok;
|
continue;
|
||||||
conf_unsaved++;
|
conf_unsaved++;
|
||||||
/* maybe print value in verbose mode... */
|
/* maybe print value in verbose mode... */
|
||||||
sym_ok:
|
|
||||||
if (!sym_is_choice(sym))
|
|
||||||
continue;
|
|
||||||
/* The choice symbol only has a set value (and thus is not new)
|
|
||||||
* if all its visible childs have values.
|
|
||||||
*/
|
|
||||||
prop = sym_get_choice_prop(sym);
|
|
||||||
flags = sym->flags;
|
|
||||||
expr_list_for_each_sym(prop->expr, e, choice_sym)
|
|
||||||
if (choice_sym->visible != no)
|
|
||||||
flags &= choice_sym->flags;
|
|
||||||
sym->flags &= flags | ~SYMBOL_DEF_USER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for_all_symbols(i, sym) {
|
for_all_symbols(i, sym) {
|
||||||
@ -416,64 +464,191 @@ int conf_read(const char *name)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write a S_STRING */
|
/*
|
||||||
static void conf_write_string(bool headerfile, const char *name,
|
* Kconfig configuration printer
|
||||||
const char *str, FILE *out)
|
*
|
||||||
|
* This printer is used when generating the resulting configuration after
|
||||||
|
* kconfig invocation and `defconfig' files. Unset symbol might be omitted by
|
||||||
|
* passing a non-NULL argument to the printer.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
||||||
{
|
{
|
||||||
int l;
|
|
||||||
if (headerfile)
|
|
||||||
fprintf(out, "#define %s \"", name);
|
|
||||||
else
|
|
||||||
fprintf(out, "%s=\"", name);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
l = strcspn(str, "\"\\");
|
|
||||||
if (l) {
|
|
||||||
xfwrite(str, l, 1, out);
|
|
||||||
str += l;
|
|
||||||
}
|
|
||||||
if (!*str)
|
|
||||||
break;
|
|
||||||
fprintf(out, "\\%c", *str++);
|
|
||||||
}
|
|
||||||
fputs("\"\n", out);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void conf_write_symbol(struct symbol *sym, FILE *out, bool write_no)
|
|
||||||
{
|
|
||||||
const char *str;
|
|
||||||
|
|
||||||
switch (sym->type) {
|
switch (sym->type) {
|
||||||
case S_BOOLEAN:
|
case S_BOOLEAN:
|
||||||
case S_TRISTATE:
|
case S_TRISTATE:
|
||||||
switch (sym_get_tristate_value(sym)) {
|
if (*value == 'n') {
|
||||||
case no:
|
bool skip_unset = (arg != NULL);
|
||||||
if (write_no)
|
|
||||||
fprintf(out, "# %s is not set\n",
|
if (!skip_unset)
|
||||||
|
fprintf(fp, "# %s is not set\n",
|
||||||
sym->name);
|
sym->name);
|
||||||
break;
|
return;
|
||||||
case mod:
|
|
||||||
fprintf(out, "%s=m\n", sym->name);
|
|
||||||
break;
|
|
||||||
case yes:
|
|
||||||
fprintf(out, "%s=y\n", sym->name);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fp, "%s=%s\n", sym->name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
kconfig_print_comment(FILE *fp, const char *value, void *arg)
|
||||||
|
{
|
||||||
|
const char *p = value;
|
||||||
|
size_t l;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
l = strcspn(p, "\n");
|
||||||
|
fprintf(fp, "#");
|
||||||
|
if (l) {
|
||||||
|
fprintf(fp, " ");
|
||||||
|
xfwrite(p, l, 1, fp);
|
||||||
|
p += l;
|
||||||
|
}
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
if (*p++ == '\0')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct conf_printer kconfig_printer_cb =
|
||||||
|
{
|
||||||
|
.print_symbol = kconfig_print_symbol,
|
||||||
|
.print_comment = kconfig_print_comment,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Header printer
|
||||||
|
*
|
||||||
|
* This printer is used when generating the `include/generated/autoconf.h' file.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
||||||
|
{
|
||||||
|
|
||||||
|
switch (sym->type) {
|
||||||
|
case S_BOOLEAN:
|
||||||
|
case S_TRISTATE: {
|
||||||
|
const char *suffix = "";
|
||||||
|
|
||||||
|
switch (*value) {
|
||||||
|
case 'n':
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
suffix = "_MODULE";
|
||||||
|
/* fall through */
|
||||||
|
default:
|
||||||
|
fprintf(fp, "#define %s%s 1\n",
|
||||||
|
sym->name, suffix);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case S_HEX: {
|
||||||
|
const char *prefix = "";
|
||||||
|
|
||||||
|
if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X'))
|
||||||
|
prefix = "0x";
|
||||||
|
fprintf(fp, "#define %s %s%s\n",
|
||||||
|
sym->name, prefix, value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case S_STRING:
|
case S_STRING:
|
||||||
conf_write_string(false, sym->name, sym_get_string_value(sym), out);
|
|
||||||
break;
|
|
||||||
case S_HEX:
|
|
||||||
case S_INT:
|
case S_INT:
|
||||||
str = sym_get_string_value(sym);
|
fprintf(fp, "#define %s %s\n",
|
||||||
fprintf(out, "%s=%s\n", sym->name, str);
|
sym->name, value);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
header_print_comment(FILE *fp, const char *value, void *arg)
|
||||||
|
{
|
||||||
|
const char *p = value;
|
||||||
|
size_t l;
|
||||||
|
|
||||||
|
fprintf(fp, "/*\n");
|
||||||
|
for (;;) {
|
||||||
|
l = strcspn(p, "\n");
|
||||||
|
fprintf(fp, " *");
|
||||||
|
if (l) {
|
||||||
|
fprintf(fp, " ");
|
||||||
|
xfwrite(p, l, 1, fp);
|
||||||
|
p += l;
|
||||||
|
}
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
if (*p++ == '\0')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fprintf(fp, " */\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct conf_printer header_printer_cb =
|
||||||
|
{
|
||||||
|
.print_symbol = header_print_symbol,
|
||||||
|
.print_comment = header_print_comment,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tristate printer
|
||||||
|
*
|
||||||
|
* This printer is used when generating the `include/config/tristate.conf' file.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
tristate_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (sym->type == S_TRISTATE && *value != 'n')
|
||||||
|
fprintf(fp, "%s=%c\n", sym->name, (char)toupper(*value));
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct conf_printer tristate_printer_cb =
|
||||||
|
{
|
||||||
|
.print_symbol = tristate_print_symbol,
|
||||||
|
.print_comment = kconfig_print_comment,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void conf_write_symbol(FILE *fp, struct symbol *sym,
|
||||||
|
struct conf_printer *printer, void *printer_arg)
|
||||||
|
{
|
||||||
|
const char *str;
|
||||||
|
|
||||||
|
switch (sym->type) {
|
||||||
case S_OTHER:
|
case S_OTHER:
|
||||||
case S_UNKNOWN:
|
case S_UNKNOWN:
|
||||||
break;
|
break;
|
||||||
|
case S_STRING:
|
||||||
|
str = sym_get_string_value(sym);
|
||||||
|
str = sym_escape_string_value(str);
|
||||||
|
printer->print_symbol(fp, sym, str, printer_arg);
|
||||||
|
free((void *)str);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
str = sym_get_string_value(sym);
|
||||||
|
printer->print_symbol(fp, sym, str, printer_arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
conf_write_heading(FILE *fp, struct conf_printer *printer, void *printer_arg)
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf),
|
||||||
|
"\n"
|
||||||
|
"Automatically generated file; DO NOT EDIT.\n"
|
||||||
|
"%s\n",
|
||||||
|
rootmenu.prompt->text);
|
||||||
|
|
||||||
|
printer->print_comment(fp, buf, printer_arg);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write out a minimal config.
|
* Write out a minimal config.
|
||||||
* All values that has default values are skipped as this is redundant.
|
* All values that has default values are skipped as this is redundant.
|
||||||
@ -530,7 +705,7 @@ int conf_write_defconfig(const char *filename)
|
|||||||
goto next_menu;
|
goto next_menu;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
conf_write_symbol(sym, out, true);
|
conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
|
||||||
}
|
}
|
||||||
next_menu:
|
next_menu:
|
||||||
if (menu->list != NULL) {
|
if (menu->list != NULL) {
|
||||||
@ -598,11 +773,7 @@ int conf_write(const char *name)
|
|||||||
if (!out)
|
if (!out)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
fprintf(out, _("#\n"
|
conf_write_heading(out, &kconfig_printer_cb, NULL);
|
||||||
"# Automatically generated make config: don't edit\n"
|
|
||||||
"# %s\n"
|
|
||||||
"#\n"),
|
|
||||||
rootmenu.prompt->text);
|
|
||||||
|
|
||||||
if (!conf_get_changed())
|
if (!conf_get_changed())
|
||||||
sym_clear_all_valid();
|
sym_clear_all_valid();
|
||||||
@ -623,8 +794,8 @@ int conf_write(const char *name)
|
|||||||
if (!(sym->flags & SYMBOL_WRITE))
|
if (!(sym->flags & SYMBOL_WRITE))
|
||||||
goto next;
|
goto next;
|
||||||
sym->flags &= ~SYMBOL_WRITE;
|
sym->flags &= ~SYMBOL_WRITE;
|
||||||
/* Write config symbol to file */
|
|
||||||
conf_write_symbol(sym, out, true);
|
conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
next:
|
next:
|
||||||
@ -788,7 +959,6 @@ err:
|
|||||||
int conf_write_autoconf(void)
|
int conf_write_autoconf(void)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
const char *str;
|
|
||||||
const char *name;
|
const char *name;
|
||||||
FILE *out, *tristate, *out_h;
|
FILE *out, *tristate, *out_h;
|
||||||
int i;
|
int i;
|
||||||
@ -830,68 +1000,23 @@ int conf_write_autoconf(void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(out, "#\n"
|
conf_write_heading(out, &kconfig_printer_cb, NULL);
|
||||||
"# Automatically generated make config: don't edit\n"
|
|
||||||
"# %s\n"
|
conf_write_heading(tristate, &tristate_printer_cb, NULL);
|
||||||
"#\n",
|
|
||||||
rootmenu.prompt->text);
|
conf_write_heading(out_h, &header_printer_cb, NULL);
|
||||||
fprintf(tristate, "#\n"
|
|
||||||
"# Automatically generated - do not edit\n"
|
|
||||||
"\n");
|
|
||||||
fprintf(out_h, "/*\n"
|
|
||||||
" * Automatically generated C config: don't edit\n"
|
|
||||||
" * %s\n"
|
|
||||||
" */\n",
|
|
||||||
rootmenu.prompt->text);
|
|
||||||
|
|
||||||
for_all_symbols(i, sym) {
|
for_all_symbols(i, sym) {
|
||||||
sym_calc_value(sym);
|
sym_calc_value(sym);
|
||||||
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
|
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* write symbol to config file */
|
/* write symbol to auto.conf, tristate and header files */
|
||||||
conf_write_symbol(sym, out, false);
|
conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
|
||||||
|
|
||||||
/* update autoconf and tristate files */
|
conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
|
||||||
switch (sym->type) {
|
|
||||||
case S_BOOLEAN:
|
conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
|
||||||
case S_TRISTATE:
|
|
||||||
switch (sym_get_tristate_value(sym)) {
|
|
||||||
case no:
|
|
||||||
break;
|
|
||||||
case mod:
|
|
||||||
fprintf(tristate, "%s=M\n",
|
|
||||||
sym->name);
|
|
||||||
fprintf(out_h, "#define %s_MODULE 1\n",
|
|
||||||
sym->name);
|
|
||||||
break;
|
|
||||||
case yes:
|
|
||||||
if (sym->type == S_TRISTATE)
|
|
||||||
fprintf(tristate,"%s=Y\n",
|
|
||||||
sym->name);
|
|
||||||
fprintf(out_h, "#define %s 1\n",
|
|
||||||
sym->name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case S_STRING:
|
|
||||||
conf_write_string(true, sym->name, sym_get_string_value(sym), out_h);
|
|
||||||
break;
|
|
||||||
case S_HEX:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
|
|
||||||
fprintf(out_h, "#define %s 0x%s\n",
|
|
||||||
sym->name, str);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case S_INT:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
fprintf(out_h, "#define %s %s\n",
|
|
||||||
sym->name, str);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
fclose(out);
|
fclose(out);
|
||||||
fclose(tristate);
|
fclose(tristate);
|
||||||
|
@ -7,15 +7,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
#define DEBUG_EXPR 0
|
#define DEBUG_EXPR 0
|
||||||
|
|
||||||
struct expr *expr_alloc_symbol(struct symbol *sym)
|
struct expr *expr_alloc_symbol(struct symbol *sym)
|
||||||
{
|
{
|
||||||
struct expr *e = malloc(sizeof(*e));
|
struct expr *e = xcalloc(1, sizeof(*e));
|
||||||
memset(e, 0, sizeof(*e));
|
|
||||||
e->type = E_SYMBOL;
|
e->type = E_SYMBOL;
|
||||||
e->left.sym = sym;
|
e->left.sym = sym;
|
||||||
return e;
|
return e;
|
||||||
@ -23,8 +21,7 @@ struct expr *expr_alloc_symbol(struct symbol *sym)
|
|||||||
|
|
||||||
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
|
struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
|
||||||
{
|
{
|
||||||
struct expr *e = malloc(sizeof(*e));
|
struct expr *e = xcalloc(1, sizeof(*e));
|
||||||
memset(e, 0, sizeof(*e));
|
|
||||||
e->type = type;
|
e->type = type;
|
||||||
e->left.expr = ce;
|
e->left.expr = ce;
|
||||||
return e;
|
return e;
|
||||||
@ -32,8 +29,7 @@ struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
|
|||||||
|
|
||||||
struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
|
struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
|
||||||
{
|
{
|
||||||
struct expr *e = malloc(sizeof(*e));
|
struct expr *e = xcalloc(1, sizeof(*e));
|
||||||
memset(e, 0, sizeof(*e));
|
|
||||||
e->type = type;
|
e->type = type;
|
||||||
e->left.expr = e1;
|
e->left.expr = e1;
|
||||||
e->right.expr = e2;
|
e->right.expr = e2;
|
||||||
@ -42,8 +38,7 @@ struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e
|
|||||||
|
|
||||||
struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
|
struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
|
||||||
{
|
{
|
||||||
struct expr *e = malloc(sizeof(*e));
|
struct expr *e = xcalloc(1, sizeof(*e));
|
||||||
memset(e, 0, sizeof(*e));
|
|
||||||
e->type = type;
|
e->type = type;
|
||||||
e->left.sym = s1;
|
e->left.sym = s1;
|
||||||
e->right.sym = s2;
|
e->right.sym = s2;
|
||||||
@ -71,7 +66,7 @@ struct expr *expr_copy(const struct expr *org)
|
|||||||
if (!org)
|
if (!org)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
e = malloc(sizeof(*org));
|
e = xmalloc(sizeof(*org));
|
||||||
memcpy(e, org, sizeof(*org));
|
memcpy(e, org, sizeof(*org));
|
||||||
switch (org->type) {
|
switch (org->type) {
|
||||||
case E_SYMBOL:
|
case E_SYMBOL:
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "list.h"
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#endif
|
#endif
|
||||||
@ -172,7 +174,14 @@ struct menu {
|
|||||||
#define MENU_CHANGED 0x0001
|
#define MENU_CHANGED 0x0001
|
||||||
#define MENU_ROOT 0x0002
|
#define MENU_ROOT 0x0002
|
||||||
|
|
||||||
#ifndef SWIG
|
struct jump_key {
|
||||||
|
struct list_head entries;
|
||||||
|
size_t offset;
|
||||||
|
struct menu *target;
|
||||||
|
int index;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define JUMP_NB 9
|
||||||
|
|
||||||
extern struct file *file_list;
|
extern struct file *file_list;
|
||||||
extern struct file *current_file;
|
extern struct file *current_file;
|
||||||
@ -218,7 +227,6 @@ static inline int expr_is_no(struct expr *e)
|
|||||||
{
|
{
|
||||||
return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
|
return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
#include "images.c"
|
#include "images.c"
|
||||||
|
|
||||||
@ -22,7 +23,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
//#define DEBUG
|
//#define DEBUG
|
||||||
|
|
||||||
@ -285,8 +285,6 @@ void init_left_tree(void)
|
|||||||
static void renderer_edited(GtkCellRendererText * cell,
|
static void renderer_edited(GtkCellRendererText * cell,
|
||||||
const gchar * path_string,
|
const gchar * path_string,
|
||||||
const gchar * new_text, gpointer user_data);
|
const gchar * new_text, gpointer user_data);
|
||||||
static void renderer_toggled(GtkCellRendererToggle * cellrenderertoggle,
|
|
||||||
gchar * arg1, gpointer user_data);
|
|
||||||
|
|
||||||
void init_right_tree(void)
|
void init_right_tree(void)
|
||||||
{
|
{
|
||||||
@ -320,8 +318,6 @@ void init_right_tree(void)
|
|||||||
"inconsistent", COL_BTNINC,
|
"inconsistent", COL_BTNINC,
|
||||||
"visible", COL_BTNVIS,
|
"visible", COL_BTNVIS,
|
||||||
"radio", COL_BTNRAD, NULL);
|
"radio", COL_BTNRAD, NULL);
|
||||||
/*g_signal_connect(G_OBJECT(renderer), "toggled",
|
|
||||||
G_CALLBACK(renderer_toggled), NULL); */
|
|
||||||
renderer = gtk_cell_renderer_text_new();
|
renderer = gtk_cell_renderer_text_new();
|
||||||
gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
|
gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
|
||||||
renderer, FALSE);
|
renderer, FALSE);
|
||||||
@ -687,7 +683,7 @@ void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data)
|
|||||||
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_MESSAGE_INFO,
|
GTK_MESSAGE_INFO,
|
||||||
GTK_BUTTONS_CLOSE, intro_text);
|
GTK_BUTTONS_CLOSE, "%s", intro_text);
|
||||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||||
G_CALLBACK(gtk_widget_destroy),
|
G_CALLBACK(gtk_widget_destroy),
|
||||||
GTK_OBJECT(dialog));
|
GTK_OBJECT(dialog));
|
||||||
@ -705,7 +701,7 @@ void on_about1_activate(GtkMenuItem * menuitem, gpointer user_data)
|
|||||||
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_MESSAGE_INFO,
|
GTK_MESSAGE_INFO,
|
||||||
GTK_BUTTONS_CLOSE, about_text);
|
GTK_BUTTONS_CLOSE, "%s", about_text);
|
||||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||||
G_CALLBACK(gtk_widget_destroy),
|
G_CALLBACK(gtk_widget_destroy),
|
||||||
GTK_OBJECT(dialog));
|
GTK_OBJECT(dialog));
|
||||||
@ -724,7 +720,7 @@ void on_license1_activate(GtkMenuItem * menuitem, gpointer user_data)
|
|||||||
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_MESSAGE_INFO,
|
GTK_MESSAGE_INFO,
|
||||||
GTK_BUTTONS_CLOSE, license_text);
|
GTK_BUTTONS_CLOSE, "%s", license_text);
|
||||||
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
|
||||||
G_CALLBACK(gtk_widget_destroy),
|
G_CALLBACK(gtk_widget_destroy),
|
||||||
GTK_OBJECT(dialog));
|
GTK_OBJECT(dialog));
|
||||||
@ -834,7 +830,7 @@ static void renderer_edited(GtkCellRendererText * cell,
|
|||||||
static void change_sym_value(struct menu *menu, gint col)
|
static void change_sym_value(struct menu *menu, gint col)
|
||||||
{
|
{
|
||||||
struct symbol *sym = menu->sym;
|
struct symbol *sym = menu->sym;
|
||||||
tristate oldval, newval;
|
tristate newval;
|
||||||
|
|
||||||
if (!sym)
|
if (!sym)
|
||||||
return;
|
return;
|
||||||
@ -851,7 +847,6 @@ static void change_sym_value(struct menu *menu, gint col)
|
|||||||
switch (sym_get_type(sym)) {
|
switch (sym_get_type(sym)) {
|
||||||
case S_BOOLEAN:
|
case S_BOOLEAN:
|
||||||
case S_TRISTATE:
|
case S_TRISTATE:
|
||||||
oldval = sym_get_tristate_value(sym);
|
|
||||||
if (!sym_tristate_within_range(sym, newval))
|
if (!sym_tristate_within_range(sym, newval))
|
||||||
newval = yes;
|
newval = yes;
|
||||||
sym_set_tristate_value(sym, newval);
|
sym_set_tristate_value(sym, newval);
|
||||||
@ -888,35 +883,6 @@ static void toggle_sym_value(struct menu *menu)
|
|||||||
display_tree_part(); //fixme: keep exp/coll
|
display_tree_part(); //fixme: keep exp/coll
|
||||||
}
|
}
|
||||||
|
|
||||||
static void renderer_toggled(GtkCellRendererToggle * cell,
|
|
||||||
gchar * path_string, gpointer user_data)
|
|
||||||
{
|
|
||||||
GtkTreePath *path, *sel_path = NULL;
|
|
||||||
GtkTreeIter iter, sel_iter;
|
|
||||||
GtkTreeSelection *sel;
|
|
||||||
struct menu *menu;
|
|
||||||
|
|
||||||
path = gtk_tree_path_new_from_string(path_string);
|
|
||||||
if (!gtk_tree_model_get_iter(model2, &iter, path))
|
|
||||||
return;
|
|
||||||
|
|
||||||
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree2_w));
|
|
||||||
if (gtk_tree_selection_get_selected(sel, NULL, &sel_iter))
|
|
||||||
sel_path = gtk_tree_model_get_path(model2, &sel_iter);
|
|
||||||
if (!sel_path)
|
|
||||||
goto out1;
|
|
||||||
if (gtk_tree_path_compare(path, sel_path))
|
|
||||||
goto out2;
|
|
||||||
|
|
||||||
gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
|
|
||||||
toggle_sym_value(menu);
|
|
||||||
|
|
||||||
out2:
|
|
||||||
gtk_tree_path_free(sel_path);
|
|
||||||
out1:
|
|
||||||
gtk_tree_path_free(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gint column2index(GtkTreeViewColumn * column)
|
static gint column2index(GtkTreeViewColumn * column)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
@ -1172,6 +1138,7 @@ static gchar **fill_row(struct menu *menu)
|
|||||||
row[COL_BTNVIS] = GINT_TO_POINTER(TRUE);
|
row[COL_BTNVIS] = GINT_TO_POINTER(TRUE);
|
||||||
if (sym_is_choice(sym))
|
if (sym_is_choice(sym))
|
||||||
break;
|
break;
|
||||||
|
/* fall through */
|
||||||
case S_TRISTATE:
|
case S_TRISTATE:
|
||||||
val = sym_get_tristate_value(sym);
|
val = sym_get_tristate_value(sym);
|
||||||
switch (val) {
|
switch (val) {
|
||||||
@ -1310,7 +1277,6 @@ static void update_tree(struct menu *src, GtkTreeIter * dst)
|
|||||||
gboolean valid;
|
gboolean valid;
|
||||||
GtkTreeIter *sibling;
|
GtkTreeIter *sibling;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct property *prop;
|
|
||||||
struct menu *menu1, *menu2;
|
struct menu *menu1, *menu2;
|
||||||
|
|
||||||
if (src == &rootmenu)
|
if (src == &rootmenu)
|
||||||
@ -1319,7 +1285,6 @@ static void update_tree(struct menu *src, GtkTreeIter * dst)
|
|||||||
valid = gtk_tree_model_iter_children(model2, child2, dst);
|
valid = gtk_tree_model_iter_children(model2, child2, dst);
|
||||||
for (child1 = src->list; child1; child1 = child1->next) {
|
for (child1 = src->list; child1; child1 = child1->next) {
|
||||||
|
|
||||||
prop = child1->prompt;
|
|
||||||
sym = child1->sym;
|
sym = child1->sym;
|
||||||
|
|
||||||
reparse:
|
reparse:
|
||||||
@ -1506,10 +1471,6 @@ int main(int ac, char *av[])
|
|||||||
char *env;
|
char *env;
|
||||||
gchar *glade_file;
|
gchar *glade_file;
|
||||||
|
|
||||||
#ifndef LKC_DIRECT_LINK
|
|
||||||
kconfig_load();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bindtextdomain(PACKAGE, LOCALEDIR);
|
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||||
bind_textdomain_codeset(PACKAGE, "UTF-8");
|
bind_textdomain_codeset(PACKAGE, "UTF-8");
|
||||||
textdomain(PACKAGE);
|
textdomain(PACKAGE);
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
#include <dlfcn.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "lkc.h"
|
|
||||||
|
|
||||||
#define P(name,type,arg) type (*name ## _p) arg
|
|
||||||
#include "lkc_proto.h"
|
|
||||||
#undef P
|
|
||||||
|
|
||||||
void kconfig_load(void)
|
|
||||||
{
|
|
||||||
void *handle;
|
|
||||||
char *error;
|
|
||||||
|
|
||||||
handle = dlopen("./libkconfig.so", RTLD_LAZY);
|
|
||||||
if (!handle) {
|
|
||||||
handle = dlopen("./scripts/kconfig/libkconfig.so", RTLD_LAZY);
|
|
||||||
if (!handle) {
|
|
||||||
fprintf(stderr, "%s\n", dlerror());
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define P(name,type,arg) \
|
|
||||||
{ \
|
|
||||||
name ## _p = dlsym(handle, #name); \
|
|
||||||
if ((error = dlerror())) { \
|
|
||||||
fprintf(stderr, "%s\n", error); \
|
|
||||||
exit(1); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
#include "lkc_proto.h"
|
|
||||||
#undef P
|
|
||||||
}
|
|
@ -7,7 +7,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
static char *escape(const char* text, char *bf, int len)
|
static char *escape(const char* text, char *bf, int len)
|
||||||
|
91
support/kconfig/list.h
Normal file
91
support/kconfig/list.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#ifndef LIST_H
|
||||||
|
#define LIST_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copied from include/linux/...
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef offsetof
|
||||||
|
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* container_of - cast a member of a structure out to the containing structure
|
||||||
|
* @ptr: the pointer to the member.
|
||||||
|
* @type: the type of the container struct this is embedded in.
|
||||||
|
* @member: the name of the member within the struct.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define container_of(ptr, type, member) ({ \
|
||||||
|
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
|
||||||
|
(type *)( (char *)__mptr - offsetof(type,member) );})
|
||||||
|
|
||||||
|
|
||||||
|
struct list_head {
|
||||||
|
struct list_head *next, *prev;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define LIST_HEAD_INIT(name) { &(name), &(name) }
|
||||||
|
|
||||||
|
#define LIST_HEAD(name) \
|
||||||
|
struct list_head name = LIST_HEAD_INIT(name)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list_entry - get the struct for this entry
|
||||||
|
* @ptr: the &struct list_head pointer.
|
||||||
|
* @type: the type of the struct this is embedded in.
|
||||||
|
* @member: the name of the list_struct within the struct.
|
||||||
|
*/
|
||||||
|
#define list_entry(ptr, type, member) \
|
||||||
|
container_of(ptr, type, member)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list_for_each_entry - iterate over list of given type
|
||||||
|
* @pos: the type * to use as a loop cursor.
|
||||||
|
* @head: the head for your list.
|
||||||
|
* @member: the name of the list_struct within the struct.
|
||||||
|
*/
|
||||||
|
#define list_for_each_entry(pos, head, member) \
|
||||||
|
for (pos = list_entry((head)->next, typeof(*pos), member); \
|
||||||
|
&pos->member != (head); \
|
||||||
|
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list_empty - tests whether a list is empty
|
||||||
|
* @head: the list to test.
|
||||||
|
*/
|
||||||
|
static inline int list_empty(const struct list_head *head)
|
||||||
|
{
|
||||||
|
return head->next == head;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Insert a new entry between two known consecutive entries.
|
||||||
|
*
|
||||||
|
* This is only for internal list manipulation where we know
|
||||||
|
* the prev/next entries already!
|
||||||
|
*/
|
||||||
|
static inline void __list_add(struct list_head *_new,
|
||||||
|
struct list_head *prev,
|
||||||
|
struct list_head *next)
|
||||||
|
{
|
||||||
|
next->prev = _new;
|
||||||
|
_new->next = next;
|
||||||
|
_new->prev = prev;
|
||||||
|
prev->next = _new;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list_add_tail - add a new entry
|
||||||
|
* @new: new entry to be added
|
||||||
|
* @head: list head to add it before
|
||||||
|
*
|
||||||
|
* Insert a new entry before the specified head.
|
||||||
|
* This is useful for implementing queues.
|
||||||
|
*/
|
||||||
|
static inline void list_add_tail(struct list_head *_new, struct list_head *head)
|
||||||
|
{
|
||||||
|
__list_add(_new, head->prev, head);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -21,12 +21,7 @@ static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c;
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LKC_DIRECT_LINK
|
|
||||||
#define P(name,type,arg) extern type name arg
|
#define P(name,type,arg) extern type name arg
|
||||||
#else
|
|
||||||
#include "lkc_defs.h"
|
|
||||||
#define P(name,type,arg) extern type (*name ## _p) arg
|
|
||||||
#endif
|
|
||||||
#include "lkc_proto.h"
|
#include "lkc_proto.h"
|
||||||
#undef P
|
#undef P
|
||||||
|
|
||||||
@ -44,6 +39,12 @@ extern "C" {
|
|||||||
#ifndef CONFIG_
|
#ifndef CONFIG_
|
||||||
#define CONFIG_ "BR2_"
|
#define CONFIG_ "BR2_"
|
||||||
#endif
|
#endif
|
||||||
|
static inline const char *CONFIG_prefix(void)
|
||||||
|
{
|
||||||
|
return getenv( "CONFIG_" ) ?: CONFIG_;
|
||||||
|
}
|
||||||
|
#undef CONFIG_
|
||||||
|
#define CONFIG_ CONFIG_prefix()
|
||||||
|
|
||||||
#define TF_COMMAND 0x0001
|
#define TF_COMMAND 0x0001
|
||||||
#define TF_PARAM 0x0002
|
#define TF_PARAM 0x0002
|
||||||
@ -68,9 +69,7 @@ struct kconf_id {
|
|||||||
enum symbol_type stype;
|
enum symbol_type stype;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef YYDEBUG
|
|
||||||
extern int zconfdebug;
|
extern int zconfdebug;
|
||||||
#endif
|
|
||||||
|
|
||||||
int zconfparse(void);
|
int zconfparse(void);
|
||||||
void zconfdump(FILE *out);
|
void zconfdump(FILE *out);
|
||||||
@ -81,9 +80,6 @@ void zconf_nextfile(const char *name);
|
|||||||
int zconf_lineno(void);
|
int zconf_lineno(void);
|
||||||
const char *zconf_curname(void);
|
const char *zconf_curname(void);
|
||||||
|
|
||||||
/* conf.c */
|
|
||||||
void xfgets(char *str, int size, FILE *in);
|
|
||||||
|
|
||||||
/* confdata.c */
|
/* confdata.c */
|
||||||
const char *conf_get_configname(void);
|
const char *conf_get_configname(void);
|
||||||
const char *conf_get_autoconfig_name(void);
|
const char *conf_get_autoconfig_name(void);
|
||||||
@ -92,15 +88,19 @@ void sym_set_change_count(int count);
|
|||||||
void sym_add_change_count(int count);
|
void sym_add_change_count(int count);
|
||||||
void conf_set_all_new_symbols(enum conf_def_mode mode);
|
void conf_set_all_new_symbols(enum conf_def_mode mode);
|
||||||
|
|
||||||
|
struct conf_printer {
|
||||||
|
void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
|
||||||
|
void (*print_comment)(FILE *, const char *, void *);
|
||||||
|
};
|
||||||
|
|
||||||
/* confdata.c and expr.c */
|
/* confdata.c and expr.c */
|
||||||
static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
|
static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
|
||||||
{
|
{
|
||||||
if (fwrite(str, len, count, out) < count)
|
assert(len != 0);
|
||||||
fprintf(stderr, "\nError in writing or end of file.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* kconfig_load.c */
|
if (fwrite(str, len, count, out) != count)
|
||||||
void kconfig_load(void);
|
fprintf(stderr, "Error in writing or end of file.\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* menu.c */
|
/* menu.c */
|
||||||
void _menu_init(void);
|
void _menu_init(void);
|
||||||
@ -122,6 +122,8 @@ void menu_set_type(int type);
|
|||||||
/* util.c */
|
/* util.c */
|
||||||
struct file *file_lookup(const char *name);
|
struct file *file_lookup(const char *name);
|
||||||
int file_write_dep(const char *name);
|
int file_write_dep(const char *name);
|
||||||
|
void *xmalloc(size_t size);
|
||||||
|
void *xcalloc(size_t nmemb, size_t size);
|
||||||
|
|
||||||
struct gstr {
|
struct gstr {
|
||||||
size_t len;
|
size_t len;
|
||||||
|
@ -21,8 +21,10 @@ P(menu_get_root_menu,struct menu *,(struct menu *menu));
|
|||||||
P(menu_get_parent_menu,struct menu *,(struct menu *menu));
|
P(menu_get_parent_menu,struct menu *,(struct menu *menu));
|
||||||
P(menu_has_help,bool,(struct menu *menu));
|
P(menu_has_help,bool,(struct menu *menu));
|
||||||
P(menu_get_help,const char *,(struct menu *menu));
|
P(menu_get_help,const char *,(struct menu *menu));
|
||||||
P(get_symbol_str, void, (struct gstr *r, struct symbol *sym));
|
P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct list_head
|
||||||
P(get_relations_str, struct gstr, (struct symbol **sym_arr));
|
*head));
|
||||||
|
P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct list_head
|
||||||
|
*head));
|
||||||
P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
|
P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
|
||||||
|
|
||||||
/* symbol.c */
|
/* symbol.c */
|
||||||
@ -31,6 +33,7 @@ P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
|
|||||||
P(sym_lookup,struct symbol *,(const char *name, int flags));
|
P(sym_lookup,struct symbol *,(const char *name, int flags));
|
||||||
P(sym_find,struct symbol *,(const char *name));
|
P(sym_find,struct symbol *,(const char *name));
|
||||||
P(sym_expand_string_value,const char *,(const char *in));
|
P(sym_expand_string_value,const char *,(const char *in));
|
||||||
|
P(sym_escape_string_value, const char *,(const char *in));
|
||||||
P(sym_re_search,struct symbol **,(const char *pattern));
|
P(sym_re_search,struct symbol **,(const char *pattern));
|
||||||
P(sym_type_name,const char *,(enum symbol_type type));
|
P(sym_type_name,const char *,(enum symbol_type type));
|
||||||
P(sym_calc_value,void,(struct symbol *sym));
|
P(sym_calc_value,void,(struct symbol *sym));
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# What library to link
|
# What library to link
|
||||||
ldflags()
|
ldflags()
|
||||||
{
|
{
|
||||||
for ext in so a dylib ; do
|
for ext in so a dll.a dylib ; do
|
||||||
for lib in ncursesw ncurses curses ; do
|
for lib in ncursesw ncurses curses ; do
|
||||||
$cc -print-file-name=lib${lib}.${ext} | grep -q /
|
$cc -print-file-name=lib${lib}.${ext} | grep -q /
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
@ -19,12 +19,13 @@ ldflags()
|
|||||||
# Where is ncurses.h?
|
# Where is ncurses.h?
|
||||||
ccflags()
|
ccflags()
|
||||||
{
|
{
|
||||||
if [ -f /usr/include/ncurses/ncurses.h ]; then
|
if [ -f /usr/include/ncursesw/curses.h ]; then
|
||||||
|
echo '-I/usr/include/ncursesw -DCURSES_LOC="<ncursesw/curses.h>"'
|
||||||
|
echo ' -DNCURSES_WIDECHAR=1'
|
||||||
|
elif [ -f /usr/include/ncurses/ncurses.h ]; then
|
||||||
echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
|
echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
|
||||||
elif [ -f /usr/include/ncurses/curses.h ]; then
|
elif [ -f /usr/include/ncurses/curses.h ]; then
|
||||||
echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"'
|
echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>"'
|
||||||
elif [ -f /usr/include/ncursesw/curses.h ]; then
|
|
||||||
echo '-I/usr/include/ncursesw -DCURSES_LOC="<ncursesw/curses.h>"'
|
|
||||||
elif [ -f /usr/include/ncurses.h ]; then
|
elif [ -f /usr/include/ncurses.h ]; then
|
||||||
echo '-DCURSES_LOC="<ncurses.h>"'
|
echo '-DCURSES_LOC="<ncurses.h>"'
|
||||||
else
|
else
|
||||||
@ -38,7 +39,7 @@ trap "rm -f $tmp" 0 1 2 3 15
|
|||||||
|
|
||||||
# Check if we can link to ncurses
|
# Check if we can link to ncurses
|
||||||
check() {
|
check() {
|
||||||
$cc -xc - -o $tmp 2>/dev/null <<'EOF'
|
$cc -x c - -o $tmp 2>/dev/null <<'EOF'
|
||||||
#include CURSES_LOC
|
#include CURSES_LOC
|
||||||
main() {}
|
main() {}
|
||||||
EOF
|
EOF
|
||||||
|
@ -144,6 +144,7 @@ struct dialog_info {
|
|||||||
*/
|
*/
|
||||||
extern struct dialog_info dlg;
|
extern struct dialog_info dlg;
|
||||||
extern char dialog_input_result[];
|
extern char dialog_input_result[];
|
||||||
|
extern int saved_x, saved_y; /* Needed in signal handler in mconf.c */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
@ -209,12 +210,17 @@ int first_alpha(const char *string, const char *exempt);
|
|||||||
int dialog_yesno(const char *title, const char *prompt, int height, int width);
|
int dialog_yesno(const char *title, const char *prompt, int height, int width);
|
||||||
int dialog_msgbox(const char *title, const char *prompt, int height,
|
int dialog_msgbox(const char *title, const char *prompt, int height,
|
||||||
int width, int pause);
|
int width, int pause);
|
||||||
int dialog_textbox(const char *title, const char *file, int height, int width);
|
|
||||||
|
|
||||||
|
typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void
|
||||||
|
*_data);
|
||||||
|
int dialog_textbox(const char *title, char *tbuf, int initial_height,
|
||||||
|
int initial_width, int *keys, int *_vscroll, int *_hscroll,
|
||||||
|
update_text_fn update_text, void *data);
|
||||||
int dialog_menu(const char *title, const char *prompt,
|
int dialog_menu(const char *title, const char *prompt,
|
||||||
const void *selected, int *s_scroll);
|
const void *selected, int *s_scroll);
|
||||||
int dialog_checklist(const char *title, const char *prompt, int height,
|
int dialog_checklist(const char *title, const char *prompt, int height,
|
||||||
int width, int list_height);
|
int width, int list_height);
|
||||||
extern char dialog_input_result[];
|
|
||||||
int dialog_inputbox(const char *title, const char *prompt, int height,
|
int dialog_inputbox(const char *title, const char *prompt, int height,
|
||||||
int width, const char *init);
|
int width, const char *init);
|
||||||
|
|
||||||
|
@ -45,7 +45,8 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
|
|||||||
const char *init)
|
const char *init)
|
||||||
{
|
{
|
||||||
int i, x, y, box_y, box_x, box_width;
|
int i, x, y, box_y, box_x, box_width;
|
||||||
int input_x = 0, scroll = 0, key = 0, button = -1;
|
int input_x = 0, key = 0, button = -1;
|
||||||
|
int show_x, len, pos;
|
||||||
char *instr = dialog_input_result;
|
char *instr = dialog_input_result;
|
||||||
WINDOW *dialog;
|
WINDOW *dialog;
|
||||||
|
|
||||||
@ -97,14 +98,17 @@ do_resize:
|
|||||||
wmove(dialog, box_y, box_x);
|
wmove(dialog, box_y, box_x);
|
||||||
wattrset(dialog, dlg.inputbox.atr);
|
wattrset(dialog, dlg.inputbox.atr);
|
||||||
|
|
||||||
input_x = strlen(instr);
|
len = strlen(instr);
|
||||||
|
pos = len;
|
||||||
|
|
||||||
if (input_x >= box_width) {
|
if (len >= box_width) {
|
||||||
scroll = input_x - box_width + 1;
|
show_x = len - box_width + 1;
|
||||||
input_x = box_width - 1;
|
input_x = box_width - 1;
|
||||||
for (i = 0; i < box_width - 1; i++)
|
for (i = 0; i < box_width - 1; i++)
|
||||||
waddch(dialog, instr[scroll + i]);
|
waddch(dialog, instr[show_x + i]);
|
||||||
} else {
|
} else {
|
||||||
|
show_x = 0;
|
||||||
|
input_x = len;
|
||||||
waddstr(dialog, instr);
|
waddstr(dialog, instr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,45 +125,104 @@ do_resize:
|
|||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
break;
|
break;
|
||||||
case KEY_LEFT:
|
|
||||||
continue;
|
|
||||||
case KEY_RIGHT:
|
|
||||||
continue;
|
|
||||||
case KEY_BACKSPACE:
|
case KEY_BACKSPACE:
|
||||||
case 127:
|
case 127:
|
||||||
if (input_x || scroll) {
|
if (pos) {
|
||||||
wattrset(dialog, dlg.inputbox.atr);
|
wattrset(dialog, dlg.inputbox.atr);
|
||||||
if (!input_x) {
|
if (input_x == 0) {
|
||||||
scroll = scroll < box_width - 1 ? 0 : scroll - (box_width - 1);
|
show_x--;
|
||||||
wmove(dialog, box_y, box_x);
|
|
||||||
for (i = 0; i < box_width; i++)
|
|
||||||
waddch(dialog,
|
|
||||||
instr[scroll + input_x + i] ?
|
|
||||||
instr[scroll + input_x + i] : ' ');
|
|
||||||
input_x = strlen(instr) - scroll;
|
|
||||||
} else
|
} else
|
||||||
input_x--;
|
input_x--;
|
||||||
instr[scroll + input_x] = '\0';
|
|
||||||
mvwaddch(dialog, box_y, input_x + box_x, ' ');
|
if (pos < len) {
|
||||||
|
for (i = pos - 1; i < len; i++) {
|
||||||
|
instr[i] = instr[i+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pos--;
|
||||||
|
len--;
|
||||||
|
instr[len] = '\0';
|
||||||
|
wmove(dialog, box_y, box_x);
|
||||||
|
for (i = 0; i < box_width; i++) {
|
||||||
|
if (!instr[show_x + i]) {
|
||||||
|
waddch(dialog, ' ');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
waddch(dialog, instr[show_x + i]);
|
||||||
|
}
|
||||||
wmove(dialog, box_y, input_x + box_x);
|
wmove(dialog, box_y, input_x + box_x);
|
||||||
wrefresh(dialog);
|
wrefresh(dialog);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
case KEY_LEFT:
|
||||||
|
if (pos > 0) {
|
||||||
|
if (input_x > 0) {
|
||||||
|
wmove(dialog, box_y, --input_x + box_x);
|
||||||
|
} else if (input_x == 0) {
|
||||||
|
show_x--;
|
||||||
|
wmove(dialog, box_y, box_x);
|
||||||
|
for (i = 0; i < box_width; i++) {
|
||||||
|
if (!instr[show_x + i]) {
|
||||||
|
waddch(dialog, ' ');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
waddch(dialog, instr[show_x + i]);
|
||||||
|
}
|
||||||
|
wmove(dialog, box_y, box_x);
|
||||||
|
}
|
||||||
|
pos--;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case KEY_RIGHT:
|
||||||
|
if (pos < len) {
|
||||||
|
if (input_x < box_width - 1) {
|
||||||
|
wmove(dialog, box_y, ++input_x + box_x);
|
||||||
|
} else if (input_x == box_width - 1) {
|
||||||
|
show_x++;
|
||||||
|
wmove(dialog, box_y, box_x);
|
||||||
|
for (i = 0; i < box_width; i++) {
|
||||||
|
if (!instr[show_x + i]) {
|
||||||
|
waddch(dialog, ' ');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
waddch(dialog, instr[show_x + i]);
|
||||||
|
}
|
||||||
|
wmove(dialog, box_y, input_x + box_x);
|
||||||
|
}
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
default:
|
default:
|
||||||
if (key < 0x100 && isprint(key)) {
|
if (key < 0x100 && isprint(key)) {
|
||||||
if (scroll + input_x < MAX_LEN) {
|
if (len < MAX_LEN) {
|
||||||
wattrset(dialog, dlg.inputbox.atr);
|
wattrset(dialog, dlg.inputbox.atr);
|
||||||
instr[scroll + input_x] = key;
|
if (pos < len) {
|
||||||
instr[scroll + input_x + 1] = '\0';
|
for (i = len; i > pos; i--)
|
||||||
if (input_x == box_width - 1) {
|
instr[i] = instr[i-1];
|
||||||
scroll++;
|
instr[pos] = key;
|
||||||
wmove(dialog, box_y, box_x);
|
|
||||||
for (i = 0; i < box_width - 1; i++)
|
|
||||||
waddch(dialog, instr [scroll + i]);
|
|
||||||
} else {
|
} else {
|
||||||
wmove(dialog, box_y, input_x++ + box_x);
|
instr[len] = key;
|
||||||
waddch(dialog, key);
|
|
||||||
}
|
}
|
||||||
|
pos++;
|
||||||
|
len++;
|
||||||
|
instr[len] = '\0';
|
||||||
|
|
||||||
|
if (input_x == box_width - 1) {
|
||||||
|
show_x++;
|
||||||
|
} else {
|
||||||
|
input_x++;
|
||||||
|
}
|
||||||
|
|
||||||
|
wmove(dialog, box_y, box_x);
|
||||||
|
for (i = 0; i < box_width; i++) {
|
||||||
|
if (!instr[show_x + i]) {
|
||||||
|
waddch(dialog, ' ');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
waddch(dialog, instr[show_x + i]);
|
||||||
|
}
|
||||||
|
wmove(dialog, box_y, input_x + box_x);
|
||||||
wrefresh(dialog);
|
wrefresh(dialog);
|
||||||
} else
|
} else
|
||||||
flash(); /* Alarm user about overflow */
|
flash(); /* Alarm user about overflow */
|
||||||
|
@ -154,12 +154,14 @@ static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x,
|
|||||||
*/
|
*/
|
||||||
static void print_buttons(WINDOW * win, int height, int width, int selected)
|
static void print_buttons(WINDOW * win, int height, int width, int selected)
|
||||||
{
|
{
|
||||||
int x = width / 2 - 16;
|
int x = width / 2 - 28;
|
||||||
int y = height - 2;
|
int y = height - 2;
|
||||||
|
|
||||||
print_button(win, gettext("Select"), y, x, selected == 0);
|
print_button(win, gettext("Select"), y, x, selected == 0);
|
||||||
print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
|
print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
|
||||||
print_button(win, gettext(" Help "), y, x + 24, selected == 2);
|
print_button(win, gettext(" Help "), y, x + 24, selected == 2);
|
||||||
|
print_button(win, gettext(" Save "), y, x + 36, selected == 3);
|
||||||
|
print_button(win, gettext(" Load "), y, x + 48, selected == 4);
|
||||||
|
|
||||||
wmove(win, y, x + 1 + 12 * selected);
|
wmove(win, y, x + 1 + 12 * selected);
|
||||||
wrefresh(win);
|
wrefresh(win);
|
||||||
@ -372,7 +374,7 @@ do_resize:
|
|||||||
case TAB:
|
case TAB:
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
button = ((key == KEY_LEFT ? --button : ++button) < 0)
|
||||||
? 2 : (button > 2 ? 0 : button);
|
? 4 : (button > 4 ? 0 : button);
|
||||||
|
|
||||||
print_buttons(dialog, height, width, button);
|
print_buttons(dialog, height, width, button);
|
||||||
wrefresh(menu);
|
wrefresh(menu);
|
||||||
@ -399,17 +401,17 @@ do_resize:
|
|||||||
return 2;
|
return 2;
|
||||||
case 's':
|
case 's':
|
||||||
case 'y':
|
case 'y':
|
||||||
return 3;
|
|
||||||
case 'n':
|
|
||||||
return 4;
|
|
||||||
case 'm':
|
|
||||||
return 5;
|
return 5;
|
||||||
case ' ':
|
case 'n':
|
||||||
return 6;
|
return 6;
|
||||||
case '/':
|
case 'm':
|
||||||
return 7;
|
return 7;
|
||||||
case 'z':
|
case ' ':
|
||||||
return 8;
|
return 8;
|
||||||
|
case '/':
|
||||||
|
return 9;
|
||||||
|
case 'z':
|
||||||
|
return 10;
|
||||||
case '\n':
|
case '\n':
|
||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
@ -22,23 +22,25 @@
|
|||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
|
|
||||||
static void back_lines(int n);
|
static void back_lines(int n);
|
||||||
static void print_page(WINDOW * win, int height, int width);
|
static void print_page(WINDOW *win, int height, int width, update_text_fn
|
||||||
static void print_line(WINDOW * win, int row, int width);
|
update_text, void *data);
|
||||||
|
static void print_line(WINDOW *win, int row, int width);
|
||||||
static char *get_line(void);
|
static char *get_line(void);
|
||||||
static void print_position(WINDOW * win);
|
static void print_position(WINDOW * win);
|
||||||
|
|
||||||
static int hscroll;
|
static int hscroll;
|
||||||
static int begin_reached, end_reached, page_length;
|
static int begin_reached, end_reached, page_length;
|
||||||
static const char *buf;
|
static char *buf;
|
||||||
static const char *page;
|
static char *page;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* refresh window content
|
* refresh window content
|
||||||
*/
|
*/
|
||||||
static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
|
static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
|
||||||
int cur_y, int cur_x)
|
int cur_y, int cur_x, update_text_fn update_text,
|
||||||
|
void *data)
|
||||||
{
|
{
|
||||||
print_page(box, boxh, boxw);
|
print_page(box, boxh, boxw, update_text, data);
|
||||||
print_position(dialog);
|
print_position(dialog);
|
||||||
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
|
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
|
||||||
wrefresh(dialog);
|
wrefresh(dialog);
|
||||||
@ -47,14 +49,18 @@ static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Display text from a file in a dialog box.
|
* Display text from a file in a dialog box.
|
||||||
|
*
|
||||||
|
* keys is a null-terminated array
|
||||||
|
* update_text() may not add or remove any '\n' or '\0' in tbuf
|
||||||
*/
|
*/
|
||||||
int dialog_textbox(const char *title, const char *tbuf,
|
int dialog_textbox(const char *title, char *tbuf, int initial_height,
|
||||||
int initial_height, int initial_width)
|
int initial_width, int *keys, int *_vscroll, int *_hscroll,
|
||||||
|
update_text_fn update_text, void *data)
|
||||||
{
|
{
|
||||||
int i, x, y, cur_x, cur_y, key = 0;
|
int i, x, y, cur_x, cur_y, key = 0;
|
||||||
int height, width, boxh, boxw;
|
int height, width, boxh, boxw;
|
||||||
int passed_end;
|
|
||||||
WINDOW *dialog, *box;
|
WINDOW *dialog, *box;
|
||||||
|
bool done = false;
|
||||||
|
|
||||||
begin_reached = 1;
|
begin_reached = 1;
|
||||||
end_reached = 0;
|
end_reached = 0;
|
||||||
@ -63,6 +69,15 @@ int dialog_textbox(const char *title, const char *tbuf,
|
|||||||
buf = tbuf;
|
buf = tbuf;
|
||||||
page = buf; /* page is pointer to start of page to be displayed */
|
page = buf; /* page is pointer to start of page to be displayed */
|
||||||
|
|
||||||
|
if (_vscroll && *_vscroll) {
|
||||||
|
begin_reached = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < *_vscroll; i++)
|
||||||
|
get_line();
|
||||||
|
}
|
||||||
|
if (_hscroll)
|
||||||
|
hscroll = *_hscroll;
|
||||||
|
|
||||||
do_resize:
|
do_resize:
|
||||||
getmaxyx(stdscr, height, width);
|
getmaxyx(stdscr, height, width);
|
||||||
if (height < 8 || width < 8)
|
if (height < 8 || width < 8)
|
||||||
@ -120,25 +135,28 @@ do_resize:
|
|||||||
|
|
||||||
/* Print first page of text */
|
/* Print first page of text */
|
||||||
attr_clear(box, boxh, boxw, dlg.dialog.atr);
|
attr_clear(box, boxh, boxw, dlg.dialog.atr);
|
||||||
refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x);
|
refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x, update_text,
|
||||||
|
data);
|
||||||
|
|
||||||
while ((key != KEY_ESC) && (key != '\n')) {
|
while (!done) {
|
||||||
key = wgetch(dialog);
|
key = wgetch(dialog);
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'E': /* Exit */
|
case 'E': /* Exit */
|
||||||
case 'e':
|
case 'e':
|
||||||
case 'X':
|
case 'X':
|
||||||
case 'x':
|
case 'x':
|
||||||
delwin(box);
|
case 'q':
|
||||||
delwin(dialog);
|
case '\n':
|
||||||
return 0;
|
done = true;
|
||||||
|
break;
|
||||||
case 'g': /* First page */
|
case 'g': /* First page */
|
||||||
case KEY_HOME:
|
case KEY_HOME:
|
||||||
if (!begin_reached) {
|
if (!begin_reached) {
|
||||||
begin_reached = 1;
|
begin_reached = 1;
|
||||||
page = buf;
|
page = buf;
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw,
|
||||||
cur_y, cur_x);
|
cur_y, cur_x, update_text,
|
||||||
|
data);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'G': /* Last page */
|
case 'G': /* Last page */
|
||||||
@ -148,78 +166,48 @@ do_resize:
|
|||||||
/* point to last char in buf */
|
/* point to last char in buf */
|
||||||
page = buf + strlen(buf);
|
page = buf + strlen(buf);
|
||||||
back_lines(boxh);
|
back_lines(boxh);
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case 'K': /* Previous line */
|
case 'K': /* Previous line */
|
||||||
case 'k':
|
case 'k':
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
if (!begin_reached) {
|
if (begin_reached)
|
||||||
|
break;
|
||||||
|
|
||||||
back_lines(page_length + 1);
|
back_lines(page_length + 1);
|
||||||
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
/* We don't call print_page() here but use
|
cur_x, update_text, data);
|
||||||
* scrolling to ensure faster screen update.
|
|
||||||
* However, 'end_reached' and 'page_length'
|
|
||||||
* should still be updated, and 'page' should
|
|
||||||
* point to start of next page. This is done
|
|
||||||
* by calling get_line() in the following
|
|
||||||
* 'for' loop. */
|
|
||||||
scrollok(box, TRUE);
|
|
||||||
wscrl(box, -1); /* Scroll box region down one line */
|
|
||||||
scrollok(box, FALSE);
|
|
||||||
page_length = 0;
|
|
||||||
passed_end = 0;
|
|
||||||
for (i = 0; i < boxh; i++) {
|
|
||||||
if (!i) {
|
|
||||||
/* print first line of page */
|
|
||||||
print_line(box, 0, boxw);
|
|
||||||
wnoutrefresh(box);
|
|
||||||
} else
|
|
||||||
/* Called to update 'end_reached' and 'page' */
|
|
||||||
get_line();
|
|
||||||
if (!passed_end)
|
|
||||||
page_length++;
|
|
||||||
if (end_reached && !passed_end)
|
|
||||||
passed_end = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
print_position(dialog);
|
|
||||||
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
|
|
||||||
wrefresh(dialog);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 'B': /* Previous page */
|
case 'B': /* Previous page */
|
||||||
case 'b':
|
case 'b':
|
||||||
|
case 'u':
|
||||||
case KEY_PPAGE:
|
case KEY_PPAGE:
|
||||||
if (begin_reached)
|
if (begin_reached)
|
||||||
break;
|
break;
|
||||||
back_lines(page_length + boxh);
|
back_lines(page_length + boxh);
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case 'J': /* Next line */
|
case 'J': /* Next line */
|
||||||
case 'j':
|
case 'j':
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
if (!end_reached) {
|
if (end_reached)
|
||||||
begin_reached = 0;
|
break;
|
||||||
scrollok(box, TRUE);
|
|
||||||
scroll(box); /* Scroll box region up one line */
|
back_lines(page_length - 1);
|
||||||
scrollok(box, FALSE);
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
print_line(box, boxh - 1, boxw);
|
cur_x, update_text, data);
|
||||||
wnoutrefresh(box);
|
|
||||||
print_position(dialog);
|
|
||||||
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
|
|
||||||
wrefresh(dialog);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case KEY_NPAGE: /* Next page */
|
case KEY_NPAGE: /* Next page */
|
||||||
case ' ':
|
case ' ':
|
||||||
|
case 'd':
|
||||||
if (end_reached)
|
if (end_reached)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
begin_reached = 0;
|
begin_reached = 0;
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case '0': /* Beginning of line */
|
case '0': /* Beginning of line */
|
||||||
case 'H': /* Scroll left */
|
case 'H': /* Scroll left */
|
||||||
@ -234,8 +222,8 @@ do_resize:
|
|||||||
hscroll--;
|
hscroll--;
|
||||||
/* Reprint current page to scroll horizontally */
|
/* Reprint current page to scroll horizontally */
|
||||||
back_lines(page_length);
|
back_lines(page_length);
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case 'L': /* Scroll right */
|
case 'L': /* Scroll right */
|
||||||
case 'l':
|
case 'l':
|
||||||
@ -245,11 +233,12 @@ do_resize:
|
|||||||
hscroll++;
|
hscroll++;
|
||||||
/* Reprint current page to scroll horizontally */
|
/* Reprint current page to scroll horizontally */
|
||||||
back_lines(page_length);
|
back_lines(page_length);
|
||||||
refresh_text_box(dialog, box, boxh, boxw,
|
refresh_text_box(dialog, box, boxh, boxw, cur_y,
|
||||||
cur_y, cur_x);
|
cur_x, update_text, data);
|
||||||
break;
|
break;
|
||||||
case KEY_ESC:
|
case KEY_ESC:
|
||||||
key = on_key_esc(dialog);
|
if (on_key_esc(dialog) == KEY_ESC)
|
||||||
|
done = true;
|
||||||
break;
|
break;
|
||||||
case KEY_RESIZE:
|
case KEY_RESIZE:
|
||||||
back_lines(height);
|
back_lines(height);
|
||||||
@ -257,11 +246,31 @@ do_resize:
|
|||||||
delwin(dialog);
|
delwin(dialog);
|
||||||
on_key_resize();
|
on_key_resize();
|
||||||
goto do_resize;
|
goto do_resize;
|
||||||
|
default:
|
||||||
|
for (i = 0; keys[i]; i++) {
|
||||||
|
if (key == keys[i]) {
|
||||||
|
done = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delwin(box);
|
delwin(box);
|
||||||
delwin(dialog);
|
delwin(dialog);
|
||||||
return key; /* ESC pressed */
|
if (_vscroll) {
|
||||||
|
const char *s;
|
||||||
|
|
||||||
|
s = buf;
|
||||||
|
*_vscroll = 0;
|
||||||
|
back_lines(page_length);
|
||||||
|
while (s < page && (s = strchr(s, '\n'))) {
|
||||||
|
(*_vscroll)++;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_hscroll)
|
||||||
|
*_hscroll = hscroll;
|
||||||
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -298,12 +307,23 @@ static void back_lines(int n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print a new page of text. Called by dialog_textbox().
|
* Print a new page of text.
|
||||||
*/
|
*/
|
||||||
static void print_page(WINDOW * win, int height, int width)
|
static void print_page(WINDOW *win, int height, int width, update_text_fn
|
||||||
|
update_text, void *data)
|
||||||
{
|
{
|
||||||
int i, passed_end = 0;
|
int i, passed_end = 0;
|
||||||
|
|
||||||
|
if (update_text) {
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
for (i = 0; i < height; i++)
|
||||||
|
get_line();
|
||||||
|
end = page;
|
||||||
|
back_lines(height);
|
||||||
|
update_text(buf, page - buf, end - buf, data);
|
||||||
|
}
|
||||||
|
|
||||||
page_length = 0;
|
page_length = 0;
|
||||||
for (i = 0; i < height; i++) {
|
for (i = 0; i < height; i++) {
|
||||||
print_line(win, i, width);
|
print_line(win, i, width);
|
||||||
@ -316,11 +336,10 @@ static void print_page(WINDOW * win, int height, int width)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print a new line of text. Called by dialog_textbox() and print_page().
|
* Print a new line of text.
|
||||||
*/
|
*/
|
||||||
static void print_line(WINDOW * win, int row, int width)
|
static void print_line(WINDOW * win, int row, int width)
|
||||||
{
|
{
|
||||||
int y, x;
|
|
||||||
char *line;
|
char *line;
|
||||||
|
|
||||||
line = get_line();
|
line = get_line();
|
||||||
@ -329,10 +348,10 @@ static void print_line(WINDOW * win, int row, int width)
|
|||||||
waddch(win, ' ');
|
waddch(win, ' ');
|
||||||
waddnstr(win, line, MIN(strlen(line), width - 2));
|
waddnstr(win, line, MIN(strlen(line), width - 2));
|
||||||
|
|
||||||
getyx(win, y, x);
|
|
||||||
/* Clear 'residue' of previous line */
|
/* Clear 'residue' of previous line */
|
||||||
#if OLD_NCURSES
|
#if OLD_NCURSES
|
||||||
{
|
{
|
||||||
|
int x = getcurx(win);
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < width - x; i++)
|
for (i = 0; i < width - x; i++)
|
||||||
waddch(win, ' ');
|
waddch(win, ' ');
|
||||||
@ -355,10 +374,8 @@ static char *get_line(void)
|
|||||||
end_reached = 0;
|
end_reached = 0;
|
||||||
while (*page != '\n') {
|
while (*page != '\n') {
|
||||||
if (*page == '\0') {
|
if (*page == '\0') {
|
||||||
if (!end_reached) {
|
|
||||||
end_reached = 1;
|
end_reached = 1;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
} else if (i < MAX_LEN)
|
} else if (i < MAX_LEN)
|
||||||
line[i++] = *(page++);
|
line[i++] = *(page++);
|
||||||
else {
|
else {
|
||||||
@ -371,7 +388,7 @@ static char *get_line(void)
|
|||||||
if (i <= MAX_LEN)
|
if (i <= MAX_LEN)
|
||||||
line[i] = '\0';
|
line[i] = '\0';
|
||||||
if (!end_reached)
|
if (!end_reached)
|
||||||
page++; /* move pass '\n' */
|
page++; /* move past '\n' */
|
||||||
|
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,9 @@
|
|||||||
|
|
||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
|
|
||||||
|
/* Needed in signal handler in mconf.c */
|
||||||
|
int saved_x, saved_y;
|
||||||
|
|
||||||
struct dialog_info dlg;
|
struct dialog_info dlg;
|
||||||
|
|
||||||
static void set_mono_theme(void)
|
static void set_mono_theme(void)
|
||||||
@ -273,6 +276,10 @@ int init_dialog(const char *backtitle)
|
|||||||
int height, width;
|
int height, width;
|
||||||
|
|
||||||
initscr(); /* Init curses */
|
initscr(); /* Init curses */
|
||||||
|
|
||||||
|
/* Get current cursor position for signal handler in mconf.c */
|
||||||
|
getyx(stdscr, saved_y, saved_x);
|
||||||
|
|
||||||
getmaxyx(stdscr, height, width);
|
getmaxyx(stdscr, height, width);
|
||||||
if (height < 19 || width < 80) {
|
if (height < 19 || width < 80) {
|
||||||
endwin();
|
endwin();
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <signal.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
#include "lxdialog/dialog.h"
|
#include "lxdialog/dialog.h"
|
||||||
|
|
||||||
@ -105,10 +105,10 @@ static const char mconf_readme[] = N_(
|
|||||||
"Text Box (Help Window)\n"
|
"Text Box (Help Window)\n"
|
||||||
"--------\n"
|
"--------\n"
|
||||||
"o Use the cursor keys to scroll up/down/left/right. The VI editor\n"
|
"o Use the cursor keys to scroll up/down/left/right. The VI editor\n"
|
||||||
" keys h,j,k,l function here as do <SPACE BAR> and <B> for those\n"
|
" keys h,j,k,l function here as do <u>, <d>, <SPACE BAR> and <B> for \n"
|
||||||
" who are familiar with less and lynx.\n"
|
" those who are familiar with less and lynx.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"o Press <E>, <X>, <Enter> or <Esc><Esc> to exit.\n"
|
"o Press <E>, <X>, <q>, <Enter> or <Esc><Esc> to exit.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Alternate Configuration Files\n"
|
"Alternate Configuration Files\n"
|
||||||
@ -236,16 +236,19 @@ search_help[] = N_(
|
|||||||
"Result:\n"
|
"Result:\n"
|
||||||
"-----------------------------------------------------------------\n"
|
"-----------------------------------------------------------------\n"
|
||||||
"Symbol: FOO [=m]\n"
|
"Symbol: FOO [=m]\n"
|
||||||
|
"Type : tristate\n"
|
||||||
"Prompt: Foo bus is used to drive the bar HW\n"
|
"Prompt: Foo bus is used to drive the bar HW\n"
|
||||||
"Defined at drivers/pci/Kconfig:47\n"
|
" Defined at drivers/pci/Kconfig:47\n"
|
||||||
"Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
|
" Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
|
||||||
"Location:\n"
|
" Location:\n"
|
||||||
" -> Bus options (PCI, PCMCIA, EISA, MCA, ISA)\n"
|
" -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
|
||||||
" -> PCI support (PCI [=y])\n"
|
" -> PCI support (PCI [=y])\n"
|
||||||
" -> PCI access mode (<choice> [=y])\n"
|
"(1) -> PCI access mode (<choice> [=y])\n"
|
||||||
"Selects: LIBCRC32\n"
|
" Selects: LIBCRC32\n"
|
||||||
"Selected by: BAR\n"
|
" Selected by: BAR\n"
|
||||||
"-----------------------------------------------------------------\n"
|
"-----------------------------------------------------------------\n"
|
||||||
|
"o The line 'Type:' shows the type of the configuration option for\n"
|
||||||
|
" this symbol (boolean, tristate, string, ...)\n"
|
||||||
"o The line 'Prompt:' shows the text used in the menu structure for\n"
|
"o The line 'Prompt:' shows the text used in the menu structure for\n"
|
||||||
" this symbol\n"
|
" this symbol\n"
|
||||||
"o The 'Defined at' line tell at what file / line number the symbol\n"
|
"o The 'Defined at' line tell at what file / line number the symbol\n"
|
||||||
@ -254,8 +257,12 @@ search_help[] = N_(
|
|||||||
" this symbol to be visible in the menu (selectable)\n"
|
" this symbol to be visible in the menu (selectable)\n"
|
||||||
"o The 'Location:' lines tell where in the menu structure this symbol\n"
|
"o The 'Location:' lines tell where in the menu structure this symbol\n"
|
||||||
" is located\n"
|
" is located\n"
|
||||||
" A location followed by a [=y] indicate that this is a selectable\n"
|
" A location followed by a [=y] indicates that this is a\n"
|
||||||
" menu item - and current value is displayed inside brackets.\n"
|
" 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 tell what symbol will be automatically\n"
|
"o The 'Selects:' line tell what symbol will be automatically\n"
|
||||||
" selected if this symbol is selected (y or m)\n"
|
" selected if this symbol is selected (y or m)\n"
|
||||||
"o The 'Selected by' line tell what symbol has selected this symbol\n"
|
"o The 'Selected by' line tell what symbol has selected this symbol\n"
|
||||||
@ -273,12 +280,16 @@ static struct menu *current_menu;
|
|||||||
static int child_count;
|
static int child_count;
|
||||||
static int single_menu_mode;
|
static int single_menu_mode;
|
||||||
static int show_all_options;
|
static int show_all_options;
|
||||||
|
static int save_and_exit;
|
||||||
|
|
||||||
static void conf(struct menu *menu);
|
static void conf(struct menu *menu, struct menu *active_menu);
|
||||||
static void conf_choice(struct menu *menu);
|
static void conf_choice(struct menu *menu);
|
||||||
static void conf_string(struct menu *menu);
|
static void conf_string(struct menu *menu);
|
||||||
static void conf_load(void);
|
static void conf_load(void);
|
||||||
static void conf_save(void);
|
static void conf_save(void);
|
||||||
|
static int show_textbox_ext(const char *title, char *text, int r, int c,
|
||||||
|
int *keys, int *vscroll, int *hscroll,
|
||||||
|
update_text_fn update_text, void *data);
|
||||||
static void show_textbox(const char *title, const char *text, int r, int c);
|
static void show_textbox(const char *title, const char *text, int r, int c);
|
||||||
static void show_helptext(const char *title, const char *text);
|
static void show_helptext(const char *title, const char *text);
|
||||||
static void show_help(struct menu *menu);
|
static void show_help(struct menu *menu);
|
||||||
@ -301,17 +312,56 @@ static void set_config_filename(const char *config_filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct search_data {
|
||||||
|
struct list_head *head;
|
||||||
|
struct menu **targets;
|
||||||
|
int *keys;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void update_text(char *buf, size_t start, size_t end, void *_data)
|
||||||
|
{
|
||||||
|
struct search_data *data = _data;
|
||||||
|
struct jump_key *pos;
|
||||||
|
int k = 0;
|
||||||
|
|
||||||
|
list_for_each_entry(pos, data->head, entries) {
|
||||||
|
if (pos->offset >= start && pos->offset < end) {
|
||||||
|
char header[4];
|
||||||
|
|
||||||
|
if (k < JUMP_NB) {
|
||||||
|
int key = '0' + (pos->index % JUMP_NB) + 1;
|
||||||
|
|
||||||
|
sprintf(header, "(%c)", key);
|
||||||
|
data->keys[k] = key;
|
||||||
|
data->targets[k] = pos->target;
|
||||||
|
k++;
|
||||||
|
} else {
|
||||||
|
sprintf(header, " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buf + pos->offset, header, sizeof(header) - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data->keys[k] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void search_conf(void)
|
static void search_conf(void)
|
||||||
{
|
{
|
||||||
struct symbol **sym_arr;
|
struct symbol **sym_arr;
|
||||||
struct gstr res;
|
struct gstr res;
|
||||||
|
struct gstr title;
|
||||||
char *dialog_input;
|
char *dialog_input;
|
||||||
int dres;
|
int dres, vscroll = 0, hscroll = 0;
|
||||||
|
bool again;
|
||||||
|
|
||||||
|
title = str_new();
|
||||||
|
str_printf( &title, _("Enter %s (sub)string to search for "
|
||||||
|
"(with or without \"%s\")"), CONFIG_, CONFIG_);
|
||||||
|
|
||||||
again:
|
again:
|
||||||
dialog_clear();
|
dialog_clear();
|
||||||
dres = dialog_inputbox(_("Search Configuration Parameter"),
|
dres = dialog_inputbox(_("Search Configuration Parameter"),
|
||||||
_("Enter " CONFIG_ " (sub)string to search for "
|
str_get(&title),
|
||||||
"(with or without \"" CONFIG_ "\")"),
|
|
||||||
10, 75, "");
|
10, 75, "");
|
||||||
switch (dres) {
|
switch (dres) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -320,6 +370,7 @@ again:
|
|||||||
show_helptext(_("Search Configuration"), search_help);
|
show_helptext(_("Search Configuration"), search_help);
|
||||||
goto again;
|
goto again;
|
||||||
default:
|
default:
|
||||||
|
str_free(&title);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,10 +380,31 @@ again:
|
|||||||
dialog_input += strlen(CONFIG_);
|
dialog_input += strlen(CONFIG_);
|
||||||
|
|
||||||
sym_arr = sym_re_search(dialog_input);
|
sym_arr = sym_re_search(dialog_input);
|
||||||
res = get_relations_str(sym_arr);
|
do {
|
||||||
free(sym_arr);
|
LIST_HEAD(head);
|
||||||
show_textbox(_("Search Results"), str_get(&res), 0, 0);
|
struct menu *targets[JUMP_NB];
|
||||||
|
int keys[JUMP_NB + 1], i;
|
||||||
|
struct search_data data = {
|
||||||
|
.head = &head,
|
||||||
|
.targets = targets,
|
||||||
|
.keys = keys,
|
||||||
|
};
|
||||||
|
|
||||||
|
res = get_relations_str(sym_arr, &head);
|
||||||
|
dres = show_textbox_ext(_("Search Results"), (char *)
|
||||||
|
str_get(&res), 0, 0, keys, &vscroll,
|
||||||
|
&hscroll, &update_text, (void *)
|
||||||
|
&data);
|
||||||
|
again = false;
|
||||||
|
for (i = 0; i < JUMP_NB && keys[i]; i++)
|
||||||
|
if (dres == keys[i]) {
|
||||||
|
conf(targets[i]->parent, targets[i]);
|
||||||
|
again = true;
|
||||||
|
}
|
||||||
str_free(&res);
|
str_free(&res);
|
||||||
|
} while (again);
|
||||||
|
free(sym_arr);
|
||||||
|
str_free(&title);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void build_conf(struct menu *menu)
|
static void build_conf(struct menu *menu)
|
||||||
@ -513,12 +585,11 @@ conf_childs:
|
|||||||
indent -= doint;
|
indent -= doint;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void conf(struct menu *menu)
|
static void conf(struct menu *menu, struct menu *active_menu)
|
||||||
{
|
{
|
||||||
struct menu *submenu;
|
struct menu *submenu;
|
||||||
const char *prompt = menu_get_prompt(menu);
|
const char *prompt = menu_get_prompt(menu);
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct menu *active_menu = NULL;
|
|
||||||
int res;
|
int res;
|
||||||
int s_scroll = 0;
|
int s_scroll = 0;
|
||||||
|
|
||||||
@ -528,14 +599,6 @@ static void conf(struct menu *menu)
|
|||||||
build_conf(menu);
|
build_conf(menu);
|
||||||
if (!child_count)
|
if (!child_count)
|
||||||
break;
|
break;
|
||||||
if (menu == &rootmenu) {
|
|
||||||
item_make("--- ");
|
|
||||||
item_set_tag(':');
|
|
||||||
item_make(_(" Load an Alternate Configuration File"));
|
|
||||||
item_set_tag('L');
|
|
||||||
item_make(_(" Save an Alternate Configuration File"));
|
|
||||||
item_set_tag('S');
|
|
||||||
}
|
|
||||||
dialog_clear();
|
dialog_clear();
|
||||||
res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
|
res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
|
||||||
_(menu_instructions),
|
_(menu_instructions),
|
||||||
@ -561,23 +624,17 @@ static void conf(struct menu *menu)
|
|||||||
if (single_menu_mode)
|
if (single_menu_mode)
|
||||||
submenu->data = (void *) (long) !submenu->data;
|
submenu->data = (void *) (long) !submenu->data;
|
||||||
else
|
else
|
||||||
conf(submenu);
|
conf(submenu, NULL);
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
|
if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
|
||||||
conf_choice(submenu);
|
conf_choice(submenu);
|
||||||
else if (submenu->prompt->type == P_MENU)
|
else if (submenu->prompt->type == P_MENU)
|
||||||
conf(submenu);
|
conf(submenu, NULL);
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
conf_string(submenu);
|
conf_string(submenu);
|
||||||
break;
|
break;
|
||||||
case 'L':
|
|
||||||
conf_load();
|
|
||||||
break;
|
|
||||||
case 'S':
|
|
||||||
conf_save();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
@ -587,6 +644,12 @@ static void conf(struct menu *menu)
|
|||||||
show_helptext(_("README"), _(mconf_readme));
|
show_helptext(_("README"), _(mconf_readme));
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
conf_save();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
conf_load();
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
if (item_is_tag('t')) {
|
if (item_is_tag('t')) {
|
||||||
if (sym_set_tristate_value(sym, yes))
|
if (sym_set_tristate_value(sym, yes))
|
||||||
break;
|
break;
|
||||||
@ -594,34 +657,43 @@ static void conf(struct menu *menu)
|
|||||||
show_textbox(NULL, setmod_text, 6, 74);
|
show_textbox(NULL, setmod_text, 6, 74);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 6:
|
||||||
if (item_is_tag('t'))
|
if (item_is_tag('t'))
|
||||||
sym_set_tristate_value(sym, no);
|
sym_set_tristate_value(sym, no);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 7:
|
||||||
if (item_is_tag('t'))
|
if (item_is_tag('t'))
|
||||||
sym_set_tristate_value(sym, mod);
|
sym_set_tristate_value(sym, mod);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 8:
|
||||||
if (item_is_tag('t'))
|
if (item_is_tag('t'))
|
||||||
sym_toggle_tristate_value(sym);
|
sym_toggle_tristate_value(sym);
|
||||||
else if (item_is_tag('m'))
|
else if (item_is_tag('m'))
|
||||||
conf(submenu);
|
conf(submenu, NULL);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 9:
|
||||||
search_conf();
|
search_conf();
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 10:
|
||||||
show_all_options = !show_all_options;
|
show_all_options = !show_all_options;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_textbox(const char *title, const char *text, int r, int c)
|
static int show_textbox_ext(const char *title, char *text, int r, int c, int
|
||||||
|
*keys, int *vscroll, int *hscroll, update_text_fn
|
||||||
|
update_text, void *data)
|
||||||
{
|
{
|
||||||
dialog_clear();
|
dialog_clear();
|
||||||
dialog_textbox(title, text, r, c);
|
return dialog_textbox(title, text, r, c, keys, vscroll, hscroll,
|
||||||
|
update_text, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void show_textbox(const char *title, const char *text, int r, int c)
|
||||||
|
{
|
||||||
|
show_textbox_ext(title, (char *) text, r, c, (int []) {0}, NULL, NULL,
|
||||||
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_helptext(const char *title, const char *text)
|
static void show_helptext(const char *title, const char *text)
|
||||||
@ -629,6 +701,17 @@ static void show_helptext(const char *title, const char *text)
|
|||||||
show_textbox(title, text, 0, 0);
|
show_textbox(title, text, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void conf_message_callback(const char *fmt, va_list ap)
|
||||||
|
{
|
||||||
|
char buf[PATH_MAX+1];
|
||||||
|
|
||||||
|
vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||||
|
if (save_and_exit)
|
||||||
|
printf("%s", buf);
|
||||||
|
else
|
||||||
|
show_textbox(NULL, buf, 6, 60);
|
||||||
|
}
|
||||||
|
|
||||||
static void show_help(struct menu *menu)
|
static void show_help(struct menu *menu)
|
||||||
{
|
{
|
||||||
struct gstr help = str_new();
|
struct gstr help = str_new();
|
||||||
@ -793,47 +876,20 @@ static void conf_save(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int ac, char **av)
|
static int handle_exit(void)
|
||||||
{
|
{
|
||||||
int saved_x, saved_y;
|
|
||||||
char *mode;
|
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
setlocale(LC_ALL, "");
|
save_and_exit = 1;
|
||||||
bindtextdomain(PACKAGE, LOCALEDIR);
|
|
||||||
textdomain(PACKAGE);
|
|
||||||
|
|
||||||
conf_parse(av[1]);
|
|
||||||
conf_read(NULL);
|
|
||||||
|
|
||||||
mode = getenv("MENUCONFIG_MODE");
|
|
||||||
if (mode) {
|
|
||||||
if (!strcasecmp(mode, "single_menu"))
|
|
||||||
single_menu_mode = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
initscr();
|
|
||||||
|
|
||||||
getyx(stdscr, saved_y, saved_x);
|
|
||||||
if (init_dialog(NULL)) {
|
|
||||||
fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
|
|
||||||
fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_config_filename(conf_get_configname());
|
|
||||||
do {
|
|
||||||
conf(&rootmenu);
|
|
||||||
dialog_clear();
|
dialog_clear();
|
||||||
if (conf_get_changed())
|
if (conf_get_changed())
|
||||||
res = dialog_yesno(NULL,
|
res = dialog_yesno(NULL,
|
||||||
_("Do you wish to save your "
|
_("Do you wish to save your new configuration ?\n"
|
||||||
"new configuration?\n"
|
|
||||||
"<ESC><ESC> to continue."),
|
"<ESC><ESC> to continue."),
|
||||||
6, 60);
|
6, 60);
|
||||||
else
|
else
|
||||||
res = -1;
|
res = -1;
|
||||||
} while (res == KEY_ESC);
|
|
||||||
end_dialog(saved_x, saved_y);
|
end_dialog(saved_x, saved_y);
|
||||||
|
|
||||||
switch (res) {
|
switch (res) {
|
||||||
@ -845,18 +901,63 @@ int main(int ac, char **av)
|
|||||||
"\n\n"));
|
"\n\n"));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/* fall through */
|
||||||
case -1:
|
case -1:
|
||||||
printf(_("\n\n"
|
printf(_("\n\n"
|
||||||
"*** End of the configuration.\n"
|
"*** End of the configuration.\n"
|
||||||
"*** Execute 'make' to start the build or try 'make help'."
|
"*** Execute 'make' to start the build or try 'make help'."
|
||||||
"\n\n"));
|
"\n\n"));
|
||||||
|
res = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, _("\n\n"
|
fprintf(stderr, _("\n\n"
|
||||||
"Your configuration changes were NOT saved."
|
"Your configuration changes were NOT saved."
|
||||||
"\n\n"));
|
"\n\n"));
|
||||||
|
if (res != KEY_ESC)
|
||||||
|
res = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sig_handler(int signo)
|
||||||
|
{
|
||||||
|
exit(handle_exit());
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int ac, char **av)
|
||||||
|
{
|
||||||
|
char *mode;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||||
|
textdomain(PACKAGE);
|
||||||
|
|
||||||
|
signal(SIGINT, sig_handler);
|
||||||
|
|
||||||
|
conf_parse(av[1]);
|
||||||
|
conf_read(NULL);
|
||||||
|
|
||||||
|
mode = getenv("MENUCONFIG_MODE");
|
||||||
|
if (mode) {
|
||||||
|
if (!strcasecmp(mode, "single_menu"))
|
||||||
|
single_menu_mode = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (init_dialog(NULL)) {
|
||||||
|
fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
|
||||||
|
fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_config_filename(conf_get_configname());
|
||||||
|
conf_set_message_callback(conf_message_callback);
|
||||||
|
do {
|
||||||
|
conf(&rootmenu, NULL);
|
||||||
|
res = handle_exit();
|
||||||
|
} while (res == KEY_ESC);
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,14 +3,14 @@
|
|||||||
* Released under the terms of the GNU GPL v2.0.
|
* Released under the terms of the GNU GPL v2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
static const char nohelp_text[] = N_(
|
static const char nohelp_text[] = "There is no help available for this option.";
|
||||||
"There is no help available for this option.\n");
|
|
||||||
|
|
||||||
struct menu rootmenu;
|
struct menu rootmenu;
|
||||||
static struct menu **last_entry_ptr;
|
static struct menu **last_entry_ptr;
|
||||||
@ -48,7 +48,7 @@ void menu_add_entry(struct symbol *sym)
|
|||||||
{
|
{
|
||||||
struct menu *menu;
|
struct menu *menu;
|
||||||
|
|
||||||
menu = malloc(sizeof(*menu));
|
menu = xmalloc(sizeof(*menu));
|
||||||
memset(menu, 0, sizeof(*menu));
|
memset(menu, 0, sizeof(*menu));
|
||||||
menu->sym = sym;
|
menu->sym = sym;
|
||||||
menu->parent = current_menu;
|
menu->parent = current_menu;
|
||||||
@ -350,7 +350,7 @@ void menu_finalize(struct menu *parent)
|
|||||||
last_menu->next = NULL;
|
last_menu->next = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sym->dir_dep.expr = parent->dep;
|
sym->dir_dep.expr = expr_alloc_or(sym->dir_dep.expr, parent->dep);
|
||||||
}
|
}
|
||||||
for (menu = parent->list; menu; menu = menu->next) {
|
for (menu = parent->list; menu; menu = menu->next) {
|
||||||
if (sym && sym_is_choice(sym) &&
|
if (sym && sym_is_choice(sym) &&
|
||||||
@ -507,10 +507,12 @@ const char *menu_get_help(struct menu *menu)
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_prompt_str(struct gstr *r, struct property *prop)
|
static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||||
|
struct list_head *head)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
struct menu *submenu[8], *menu;
|
struct menu *submenu[8], *menu, *location = NULL;
|
||||||
|
struct jump_key *jump;
|
||||||
|
|
||||||
str_printf(r, _("Prompt: %s\n"), _(prop->text));
|
str_printf(r, _("Prompt: %s\n"), _(prop->text));
|
||||||
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
|
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
|
||||||
@ -521,13 +523,44 @@ static void get_prompt_str(struct gstr *r, struct property *prop)
|
|||||||
str_append(r, "\n");
|
str_append(r, "\n");
|
||||||
}
|
}
|
||||||
menu = prop->menu->parent;
|
menu = prop->menu->parent;
|
||||||
for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent)
|
for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
|
||||||
|
bool accessible = menu_is_visible(menu);
|
||||||
|
|
||||||
submenu[i++] = menu;
|
submenu[i++] = menu;
|
||||||
|
if (location == NULL && accessible)
|
||||||
|
location = menu;
|
||||||
|
}
|
||||||
|
if (head && location) {
|
||||||
|
jump = xmalloc(sizeof(struct jump_key));
|
||||||
|
|
||||||
|
if (menu_is_visible(prop->menu)) {
|
||||||
|
/*
|
||||||
|
* There is not enough room to put the hint at the
|
||||||
|
* beginning of the "Prompt" line. Put the hint on the
|
||||||
|
* last "Location" line even when it would belong on
|
||||||
|
* the former.
|
||||||
|
*/
|
||||||
|
jump->target = prop->menu;
|
||||||
|
} else
|
||||||
|
jump->target = location;
|
||||||
|
|
||||||
|
if (list_empty(head))
|
||||||
|
jump->index = 0;
|
||||||
|
else
|
||||||
|
jump->index = list_entry(head->prev, struct jump_key,
|
||||||
|
entries)->index + 1;
|
||||||
|
|
||||||
|
list_add_tail(&jump->entries, head);
|
||||||
|
}
|
||||||
|
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
str_printf(r, _(" Location:\n"));
|
str_printf(r, _(" Location:\n"));
|
||||||
for (j = 4; --i >= 0; j += 2) {
|
for (j = 4; --i >= 0; j += 2) {
|
||||||
menu = submenu[i];
|
menu = submenu[i];
|
||||||
str_printf(r, "%*c-> %s", j, ' ', _(menu_get_prompt(menu)));
|
if (head && location && menu == location)
|
||||||
|
jump->offset = r->len - 1;
|
||||||
|
str_printf(r, "%*c-> %s", j, ' ',
|
||||||
|
_(menu_get_prompt(menu)));
|
||||||
if (menu->sym) {
|
if (menu->sym) {
|
||||||
str_printf(r, " (%s [=%s])", menu->sym->name ?
|
str_printf(r, " (%s [=%s])", menu->sym->name ?
|
||||||
menu->sym->name : _("<choice>"),
|
menu->sym->name : _("<choice>"),
|
||||||
@ -538,7 +571,11 @@ static void get_prompt_str(struct gstr *r, struct property *prop)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_symbol_str(struct gstr *r, struct symbol *sym)
|
/*
|
||||||
|
* head is optional and may be NULL
|
||||||
|
*/
|
||||||
|
void get_symbol_str(struct gstr *r, struct symbol *sym,
|
||||||
|
struct list_head *head)
|
||||||
{
|
{
|
||||||
bool hit;
|
bool hit;
|
||||||
struct property *prop;
|
struct property *prop;
|
||||||
@ -557,7 +594,7 @@ void get_symbol_str(struct gstr *r, struct symbol *sym)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for_all_prompts(sym, prop)
|
for_all_prompts(sym, prop)
|
||||||
get_prompt_str(r, prop);
|
get_prompt_str(r, prop, head);
|
||||||
hit = false;
|
hit = false;
|
||||||
for_all_properties(sym, prop, P_SELECT) {
|
for_all_properties(sym, prop, P_SELECT) {
|
||||||
if (!hit) {
|
if (!hit) {
|
||||||
@ -577,14 +614,14 @@ void get_symbol_str(struct gstr *r, struct symbol *sym)
|
|||||||
str_append(r, "\n\n");
|
str_append(r, "\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct gstr get_relations_str(struct symbol **sym_arr)
|
struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct gstr res = str_new();
|
struct gstr res = str_new();
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
|
for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
|
||||||
get_symbol_str(&res, sym);
|
get_symbol_str(&res, sym, head);
|
||||||
if (!i)
|
if (!i)
|
||||||
str_append(&res, _("No matches found.\n"));
|
str_append(&res, _("No matches found.\n"));
|
||||||
return res;
|
return res;
|
||||||
@ -594,16 +631,14 @@ struct gstr get_relations_str(struct symbol **sym_arr)
|
|||||||
void menu_get_ext_help(struct menu *menu, struct gstr *help)
|
void menu_get_ext_help(struct menu *menu, struct gstr *help)
|
||||||
{
|
{
|
||||||
struct symbol *sym = menu->sym;
|
struct symbol *sym = menu->sym;
|
||||||
|
const char *help_text = nohelp_text;
|
||||||
|
|
||||||
if (menu_has_help(menu)) {
|
if (menu_has_help(menu)) {
|
||||||
if (sym->name) {
|
if (sym->name)
|
||||||
str_printf(help, "%s:\n\n", sym->name);
|
str_printf(help, "%s:\n\n", sym->name);
|
||||||
str_append(help, _(menu_get_help(menu)));
|
help_text = menu_get_help(menu);
|
||||||
str_append(help, "\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
str_append(help, nohelp_text);
|
|
||||||
}
|
}
|
||||||
|
str_printf(help, "%s\n", _(help_text));
|
||||||
if (sym)
|
if (sym)
|
||||||
get_symbol_str(help, sym);
|
get_symbol_str(help, sym, NULL);
|
||||||
}
|
}
|
||||||
|
142
support/kconfig/merge_config.sh
Executable file
142
support/kconfig/merge_config.sh
Executable file
@ -0,0 +1,142 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# merge_config.sh - Takes a list of config fragment values, and merges
|
||||||
|
# them one by one. Provides warnings on overridden values, and specified
|
||||||
|
# values that did not make it to the resulting .config file (due to missed
|
||||||
|
# dependencies or config symbol removal).
|
||||||
|
#
|
||||||
|
# Portions reused from kconf_check and generate_cfg:
|
||||||
|
# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
|
||||||
|
# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
|
||||||
|
#
|
||||||
|
# Copyright (c) 2009-2010 Wind River Systems, Inc.
|
||||||
|
# Copyright 2011 Linaro
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
# See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
clean_up() {
|
||||||
|
rm -f $TMP_FILE
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
trap clean_up HUP INT TERM
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
|
||||||
|
echo " -h display this help text"
|
||||||
|
echo " -m only merge the fragments, do not execute the make command"
|
||||||
|
echo " -n use allnoconfig instead of alldefconfig"
|
||||||
|
echo " -r list redundant entries when merging fragments"
|
||||||
|
echo " -O dir to put generated output files"
|
||||||
|
}
|
||||||
|
|
||||||
|
MAKE=true
|
||||||
|
ALLTARGET=alldefconfig
|
||||||
|
WARNREDUN=false
|
||||||
|
OUTPUT=.
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
case $1 in
|
||||||
|
"-n")
|
||||||
|
ALLTARGET=allnoconfig
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
"-m")
|
||||||
|
MAKE=false
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
"-h")
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
"-r")
|
||||||
|
WARNREDUN=true
|
||||||
|
shift
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
"-O")
|
||||||
|
if [ -d $2 ];then
|
||||||
|
OUTPUT=$(echo $2 | sed 's/\/*$//')
|
||||||
|
else
|
||||||
|
echo "output directory $2 does not exist" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift 2
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
INITFILE=$1
|
||||||
|
shift;
|
||||||
|
|
||||||
|
MERGE_LIST=$*
|
||||||
|
SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
|
||||||
|
TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
|
||||||
|
|
||||||
|
echo "Using $INITFILE as base"
|
||||||
|
cat $INITFILE > $TMP_FILE
|
||||||
|
|
||||||
|
# Merge files, printing warnings on overrided values
|
||||||
|
for MERGE_FILE in $MERGE_LIST ; do
|
||||||
|
echo "Merging $MERGE_FILE"
|
||||||
|
CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
|
||||||
|
|
||||||
|
for CFG in $CFG_LIST ; do
|
||||||
|
grep -q -w $CFG $TMP_FILE
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
PREV_VAL=$(grep -w $CFG $TMP_FILE)
|
||||||
|
NEW_VAL=$(grep -w $CFG $MERGE_FILE)
|
||||||
|
if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
|
||||||
|
echo Value of $CFG is redefined by fragment $MERGE_FILE:
|
||||||
|
echo Previous value: $PREV_VAL
|
||||||
|
echo New value: $NEW_VAL
|
||||||
|
echo
|
||||||
|
elif [ "$WARNREDUN" = "true" ]; then
|
||||||
|
echo Value of $CFG is redundant by fragment $MERGE_FILE:
|
||||||
|
fi
|
||||||
|
sed -i "/$CFG[ =]/d" $TMP_FILE
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cat $MERGE_FILE >> $TMP_FILE
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$MAKE" = "false" ]; then
|
||||||
|
cp $TMP_FILE $OUTPUT/.config
|
||||||
|
echo "#"
|
||||||
|
echo "# merged configuration written to $OUTPUT/.config (needs make)"
|
||||||
|
echo "#"
|
||||||
|
clean_up
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use the merged file as the starting point for:
|
||||||
|
# alldefconfig: Fills in any missing symbols with Kconfig default
|
||||||
|
# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
|
||||||
|
make KCONFIG_ALLCONFIG=$TMP_FILE O=$OUTPUT $ALLTARGET
|
||||||
|
|
||||||
|
|
||||||
|
# Check all specified config values took (might have missed-dependency issues)
|
||||||
|
for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
|
||||||
|
|
||||||
|
REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
|
||||||
|
ACTUAL_VAL=$(grep -w -e "$CFG" $OUTPUT/.config)
|
||||||
|
if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
|
||||||
|
echo "Value requested for $CFG not in final .config"
|
||||||
|
echo "Requested value: $REQUESTED_VAL"
|
||||||
|
echo "Actual value: $ACTUAL_VAL"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
clean_up
|
@ -7,217 +7,208 @@
|
|||||||
*/
|
*/
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#define LKC_DIRECT_LINK
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
#include "nconf.h"
|
#include "nconf.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
static const char nconf_readme[] = N_(
|
static const char nconf_global_help[] = N_(
|
||||||
"Overview\n"
|
"Help windows\n"
|
||||||
"--------\n"
|
"------------\n"
|
||||||
"This interface let you select features and parameters for the build.\n"
|
"o Global help: Unless in a data entry window, pressing <F1> will give \n"
|
||||||
"Features can either be built-in, modularized, or ignored. Parameters\n"
|
" you the global help window, which you are just reading.\n"
|
||||||
"must be entered in as decimal or hexadecimal numbers or text.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"Menu items beginning with following braces represent features that\n"
|
"o A short version of the global help is available by pressing <F3>.\n"
|
||||||
|
"\n"
|
||||||
|
"o Local help: To get help related to the current menu entry, use any\n"
|
||||||
|
" of <?> <h>, or if in a data entry window then press <F1>.\n"
|
||||||
|
"\n"
|
||||||
|
"\n"
|
||||||
|
"Menu entries\n"
|
||||||
|
"------------\n"
|
||||||
|
"This interface lets you select features and parameters for the kernel\n"
|
||||||
|
"build. Kernel features can either be built-in, modularized, or removed.\n"
|
||||||
|
"Parameters must be entered as text or decimal or hexadecimal numbers.\n"
|
||||||
|
"\n"
|
||||||
|
"Menu entries beginning with following braces represent features that\n"
|
||||||
" [ ] can be built in or removed\n"
|
" [ ] can be built in or removed\n"
|
||||||
" < > can be built in, modularized or removed\n"
|
" < > can be built in, modularized or removed\n"
|
||||||
" { } can be built in or modularized (selected by other feature)\n"
|
" { } can be built in or modularized, are selected by another feature\n"
|
||||||
" - - are selected by other feature,\n"
|
" - - are selected by another feature\n"
|
||||||
" XXX cannot be selected. Use Symbol Info to find out why,\n"
|
" XXX cannot be selected. Symbol Info <F2> tells you why.\n"
|
||||||
"while *, M or whitespace inside braces means to build in, build as\n"
|
"*, M or whitespace inside braces means to build in, build as a module\n"
|
||||||
"a module or to exclude the feature respectively.\n"
|
"or to exclude the feature respectively.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"To change any of these features, highlight it with the cursor\n"
|
"To change any of these features, highlight it with the movement keys\n"
|
||||||
"keys and press <Y> to build it in, <M> to make it a module or\n"
|
"listed below and press <y> to build it in, <m> to make it a module or\n"
|
||||||
"<N> to removed it. You may also press the <Space Bar> to cycle\n"
|
"<n> to remove it. You may press the <Space> key to cycle through the\n"
|
||||||
"through the available options (ie. Y->N->M->Y).\n"
|
"available options.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Some additional keyboard hints:\n"
|
"A trailing \"--->\" designates a submenu.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Menus\n"
|
"\n"
|
||||||
|
"Menu navigation keys\n"
|
||||||
|
"----------------------------------------------------------------------\n"
|
||||||
|
"Linewise up <Up>\n"
|
||||||
|
"Linewise down <Down>\n"
|
||||||
|
"Pagewise up <Page Up>\n"
|
||||||
|
"Pagewise down <Page Down>\n"
|
||||||
|
"First entry <Home>\n"
|
||||||
|
"Last entry <End>\n"
|
||||||
|
"Enter a submenu <Right> <Enter>\n"
|
||||||
|
"Go back to parent menu <Left> <Esc> <F5>\n"
|
||||||
|
"Close a help window <Enter> <Esc> <F5>\n"
|
||||||
|
"Close entry window, apply <Enter>\n"
|
||||||
|
"Close entry window, forget <Esc> <F5>\n"
|
||||||
|
"Start incremental, case-insensitive search for STRING in menu entries,\n"
|
||||||
|
" no regex support, STRING is displayed in upper left corner\n"
|
||||||
|
" </>STRING\n"
|
||||||
|
" Remove last character <Backspace>\n"
|
||||||
|
" Jump to next hit <Down>\n"
|
||||||
|
" Jump to previous hit <Up>\n"
|
||||||
|
"Exit menu search mode </> <Esc>\n"
|
||||||
|
"Search for configuration variables with or without leading CONFIG_\n"
|
||||||
|
" <F8>RegExpr<Enter>\n"
|
||||||
|
"Verbose search help <F8><F1>\n"
|
||||||
|
"----------------------------------------------------------------------\n"
|
||||||
|
"\n"
|
||||||
|
"Unless in a data entry window, key <1> may be used instead of <F1>,\n"
|
||||||
|
"<2> instead of <F2>, etc.\n"
|
||||||
|
"\n"
|
||||||
|
"\n"
|
||||||
|
"Radiolist (Choice list)\n"
|
||||||
|
"-----------------------\n"
|
||||||
|
"Use the movement keys listed above to select the option you wish to set\n"
|
||||||
|
"and press <Space>.\n"
|
||||||
|
"\n"
|
||||||
|
"\n"
|
||||||
|
"Data entry\n"
|
||||||
"----------\n"
|
"----------\n"
|
||||||
"o Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
|
"Enter the requested information and press <Enter>. Hexadecimal values\n"
|
||||||
" you wish to change use <Enter> or <Space>. Goto submenu by \n"
|
"may be entered without the \"0x\" prefix.\n"
|
||||||
" pressing <Enter> of <right-arrow>. Use <Esc> or <left-arrow> to go back.\n"
|
|
||||||
" Submenus are designated by \"--->\".\n"
|
|
||||||
"\n"
|
|
||||||
" Searching: pressing '/' triggers interactive search mode.\n"
|
|
||||||
" nconfig performs a case insensitive search for the string\n"
|
|
||||||
" in the menu prompts (no regex support).\n"
|
|
||||||
" Pressing the up/down keys highlights the previous/next\n"
|
|
||||||
" matching item. Backspace removes one character from the\n"
|
|
||||||
" match string. Pressing either '/' again or ESC exits\n"
|
|
||||||
" search mode. All other keys behave normally.\n"
|
|
||||||
"\n"
|
|
||||||
" You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
|
|
||||||
" unseen options into view.\n"
|
|
||||||
"\n"
|
|
||||||
"o To exit a menu use the just press <ESC> <F5> <F8> or <left-arrow>.\n"
|
|
||||||
"\n"
|
|
||||||
"o To get help with an item, press <F1>\n"
|
|
||||||
" Shortcut: Press <h> or <?>.\n"
|
|
||||||
"\n"
|
|
||||||
"\n"
|
|
||||||
"Radiolists (Choice lists)\n"
|
|
||||||
"-----------\n"
|
|
||||||
"o Use the cursor keys to select the option you wish to set and press\n"
|
|
||||||
" <S> or the <SPACE BAR>.\n"
|
|
||||||
"\n"
|
|
||||||
" Shortcut: Press the first letter of the option you wish to set then\n"
|
|
||||||
" press <S> or <SPACE BAR>.\n"
|
|
||||||
"\n"
|
|
||||||
"o To see available help for the item, press <F1>\n"
|
|
||||||
" Shortcut: Press <H> or <?>.\n"
|
|
||||||
"\n"
|
|
||||||
"\n"
|
|
||||||
"Data Entry\n"
|
|
||||||
"-----------\n"
|
|
||||||
"o Enter the requested information and press <ENTER>\n"
|
|
||||||
" If you are entering hexadecimal values, it is not necessary to\n"
|
|
||||||
" add the '0x' prefix to the entry.\n"
|
|
||||||
"\n"
|
|
||||||
"o For help, press <F1>.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Text Box (Help Window)\n"
|
"Text Box (Help Window)\n"
|
||||||
"--------\n"
|
"----------------------\n"
|
||||||
"o Use the cursor keys to scroll up/down/left/right. The VI editor\n"
|
"Use movement keys as listed in table above.\n"
|
||||||
" keys h,j,k,l function here as do <SPACE BAR> for those\n"
|
|
||||||
" who are familiar with less and lynx.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"o Press <Enter>, <F1>, <F5>, <F7> or <Esc> to exit.\n"
|
"Press any of <Enter> <Esc> <q> <F5> <F9> to exit.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Alternate Configuration Files\n"
|
"Alternate configuration files\n"
|
||||||
"-----------------------------\n"
|
"-----------------------------\n"
|
||||||
"nconfig supports the use of alternate configuration files for\n"
|
"nconfig supports switching between different configurations.\n"
|
||||||
"those who, for various reasons, find it necessary to switch\n"
|
"Press <F6> to save your current configuration. Press <F7> and enter\n"
|
||||||
"between different configurations.\n"
|
"a file name to load a previously saved configuration.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"At the end of the main menu you will find two options. One is\n"
|
|
||||||
"for saving the current configuration to a file of your choosing.\n"
|
|
||||||
"The other option is for loading a previously saved alternate\n"
|
|
||||||
"configuration.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"Even if you don't use alternate configuration files, but you\n"
|
"Terminal configuration\n"
|
||||||
"find during a nconfig session that you have completely messed\n"
|
"----------------------\n"
|
||||||
"up your settings, you may use the \"Load Alternate...\" option to\n"
|
"If you use nconfig in a xterm window, make sure your TERM environment\n"
|
||||||
"restore your previously saved settings from \".config\" without\n"
|
"variable specifies a terminal configuration which supports at least\n"
|
||||||
"restarting nconfig.\n"
|
"16 colors. Otherwise nconfig will look rather bad.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Other information\n"
|
"If the \"stty size\" command reports the current terminalsize correctly,\n"
|
||||||
"-----------------\n"
|
"nconfig will adapt to sizes larger than the traditional 80x25 \"standard\"\n"
|
||||||
"If you use nconfig in an XTERM window make sure you have your\n"
|
"and display longer menus properly.\n"
|
||||||
"$TERM variable set to point to a xterm definition which supports color.\n"
|
|
||||||
"Otherwise, nconfig will look rather bad. nconfig will not\n"
|
|
||||||
"display correctly in a RXVT window because rxvt displays only one\n"
|
|
||||||
"intensity of color, bright.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"nconfig will display larger menus on screens or xterms which are\n"
|
|
||||||
"set to display more than the standard 25 row by 80 column geometry.\n"
|
|
||||||
"In order for this to work, the \"stty size\" command must be able to\n"
|
|
||||||
"display the screen's current row and column geometry. I STRONGLY\n"
|
|
||||||
"RECOMMEND that you make sure you do NOT have the shell variables\n"
|
|
||||||
"LINES and COLUMNS exported into your environment. Some distributions\n"
|
|
||||||
"export those variables via /etc/profile. Some ncurses programs can\n"
|
|
||||||
"become confused when those variables (LINES & COLUMNS) don't reflect\n"
|
|
||||||
"the true screen size.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"Optional personality available\n"
|
"Single menu mode\n"
|
||||||
"------------------------------\n"
|
"----------------\n"
|
||||||
"If you prefer to have all of the options listed in a single menu, rather\n"
|
"If you prefer to have all of the menu entries listed in a single menu,\n"
|
||||||
"than the default multimenu hierarchy, run the nconfig with NCONFIG_MODE\n"
|
"rather than the default multimenu hierarchy, run nconfig with\n"
|
||||||
"environment variable set to single_menu. Example:\n"
|
"NCONFIG_MODE environment variable set to single_menu. Example:\n"
|
||||||
"\n"
|
"\n"
|
||||||
"make NCONFIG_MODE=single_menu nconfig\n"
|
"make NCONFIG_MODE=single_menu nconfig\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<Enter> will then unroll the appropriate category, or enfold it if it\n"
|
"<Enter> will then unfold the appropriate category, or fold it if it\n"
|
||||||
"is already unrolled.\n"
|
"is already unfolded. Folded menu entries will be designated by a\n"
|
||||||
|
"leading \"++>\" and unfolded entries by a leading \"-->\".\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Note that this mode can eventually be a little more CPU expensive\n"
|
"Note that this mode can eventually be a little more CPU expensive than\n"
|
||||||
"(especially with a larger number of unrolled categories) than the\n"
|
"the default mode, especially with a larger number of unfolded submenus.\n"
|
||||||
"default mode.\n"
|
|
||||||
"\n"),
|
"\n"),
|
||||||
menu_no_f_instructions[] = N_(
|
menu_no_f_instructions[] = N_(
|
||||||
" You do not have function keys support. Please follow the\n"
|
"Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
|
||||||
" following instructions:\n"
|
"Submenus are designated by a trailing \"--->\".\n"
|
||||||
" Arrow keys navigate the menu.\n"
|
"\n"
|
||||||
" <Enter> or <right-arrow> selects submenus --->.\n"
|
"Use the following keys to navigate the menus:\n"
|
||||||
" Capital Letters are hotkeys.\n"
|
"Move up or down with <Up> and <Down>.\n"
|
||||||
" Pressing <Y> includes, <N> excludes, <M> modularizes features.\n"
|
"Enter a submenu with <Enter> or <Right>.\n"
|
||||||
" Pressing SpaceBar toggles between the above options.\n"
|
"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
|
||||||
" Press <Esc> or <left-arrow> to go back one menu,\n"
|
"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
|
||||||
" <?> or <h> for Help, </> for Search.\n"
|
"Pressing <Space> cycles through the available options.\n"
|
||||||
" <1> is interchangeable with <F1>, <2> with <F2>, etc.\n"
|
"To search for menu entries press </>.\n"
|
||||||
" Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
|
"<Esc> always leaves the current window.\n"
|
||||||
" <Esc> always leaves the current window.\n"),
|
"\n"
|
||||||
|
"You do not have function keys support.\n"
|
||||||
|
"Press <1> instead of <F1>, <2> instead of <F2>, etc.\n"
|
||||||
|
"For verbose global help use key <1>.\n"
|
||||||
|
"For help related to the current menu entry press <?> or <h>.\n"),
|
||||||
menu_instructions[] = N_(
|
menu_instructions[] = N_(
|
||||||
" Arrow keys navigate the menu.\n"
|
"Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
|
||||||
" <Enter> or <right-arrow> selects submenus --->.\n"
|
"Submenus are designated by a trailing \"--->\".\n"
|
||||||
" Capital Letters are hotkeys.\n"
|
"\n"
|
||||||
" Pressing <Y> includes, <N> excludes, <M> modularizes features.\n"
|
"Use the following keys to navigate the menus:\n"
|
||||||
" Pressing SpaceBar toggles between the above options\n"
|
"Move up or down with <Up> or <Down>.\n"
|
||||||
" Press <Esc>, <F5> or <left-arrow> to go back one menu,\n"
|
"Enter a submenu with <Enter> or <Right>.\n"
|
||||||
" <?>, <F1> or <h> for Help, </> for Search.\n"
|
"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
|
||||||
" <1> is interchangeable with <F1>, <2> with <F2>, etc.\n"
|
"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
|
||||||
" Legend: [*] built-in [ ] excluded <M> module < > module capable.\n"
|
"Pressing <Space> cycles through the available options.\n"
|
||||||
" <Esc> always leaves the current window\n"),
|
"To search for menu entries press </>.\n"
|
||||||
|
"<Esc> always leaves the current window.\n"
|
||||||
|
"\n"
|
||||||
|
"Pressing <1> may be used instead of <F1>, <2> instead of <F2>, etc.\n"
|
||||||
|
"For verbose global help press <F1>.\n"
|
||||||
|
"For help related to the current menu entry press <?> or <h>.\n"),
|
||||||
radiolist_instructions[] = N_(
|
radiolist_instructions[] = N_(
|
||||||
" Use the arrow keys to navigate this window or\n"
|
"Press <Up>, <Down>, <Home> or <End> to navigate a radiolist, select\n"
|
||||||
" press the hotkey of the item you wish to select\n"
|
"with <Space>.\n"
|
||||||
" followed by the <SPACE BAR>.\n"
|
"For help related to the current entry press <?> or <h>.\n"
|
||||||
" Press <?>, <F1> or <h> for additional information about this option.\n"),
|
"For global help press <F1>.\n"),
|
||||||
inputbox_instructions_int[] = N_(
|
inputbox_instructions_int[] = N_(
|
||||||
"Please enter a decimal value.\n"
|
"Please enter a decimal value.\n"
|
||||||
"Fractions will not be accepted.\n"
|
"Fractions will not be accepted.\n"
|
||||||
"Press <RETURN> to accept, <ESC> to cancel."),
|
"Press <Enter> to apply, <Esc> to cancel."),
|
||||||
inputbox_instructions_hex[] = N_(
|
inputbox_instructions_hex[] = N_(
|
||||||
"Please enter a hexadecimal value.\n"
|
"Please enter a hexadecimal value.\n"
|
||||||
"Press <RETURN> to accept, <ESC> to cancel."),
|
"Press <Enter> to apply, <Esc> to cancel."),
|
||||||
inputbox_instructions_string[] = N_(
|
inputbox_instructions_string[] = N_(
|
||||||
"Please enter a string value.\n"
|
"Please enter a string value.\n"
|
||||||
"Press <RETURN> to accept, <ESC> to cancel."),
|
"Press <Enter> to apply, <Esc> to cancel."),
|
||||||
setmod_text[] = N_(
|
setmod_text[] = N_(
|
||||||
"This feature depends on another which\n"
|
"This feature depends on another feature which has been configured as a\n"
|
||||||
"has been configured as a module.\n"
|
"module. As a result, the current feature will be built as a module too."),
|
||||||
"As a result, this feature will be built as a module."),
|
|
||||||
nohelp_text[] = N_(
|
|
||||||
"There is no help available for this option.\n"),
|
|
||||||
load_config_text[] = N_(
|
load_config_text[] = N_(
|
||||||
"Enter the name of the configuration file you wish to load.\n"
|
"Enter the name of the configuration file you wish to load.\n"
|
||||||
"Accept the name shown to restore the configuration you\n"
|
"Accept the name shown to restore the configuration you last\n"
|
||||||
"last retrieved. Leave blank to abort."),
|
"retrieved. Leave empty to abort."),
|
||||||
load_config_help[] = N_(
|
load_config_help[] = N_(
|
||||||
"\n"
|
|
||||||
"For various reasons, one may wish to keep several different\n"
|
"For various reasons, one may wish to keep several different\n"
|
||||||
"configurations available on a single machine.\n"
|
"configurations available on a single machine.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"If you have saved a previous configuration in a file other than the\n"
|
"If you have saved a previous configuration in a file other than the\n"
|
||||||
"default one, entering its name here will allow you to modify that\n"
|
"default one, entering its name here will allow you to load and modify\n"
|
||||||
"configuration.\n"
|
"that configuration.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"If you are uncertain, then you have probably never used alternate\n"
|
"Leave empty to abort.\n"),
|
||||||
"configuration files. You should therefor leave this blank to abort.\n"),
|
|
||||||
save_config_text[] = N_(
|
save_config_text[] = N_(
|
||||||
"Enter a filename to which this configuration should be saved\n"
|
"Enter a filename to which this configuration should be saved\n"
|
||||||
"as an alternate. Leave blank to abort."),
|
"as an alternate. Leave empty to abort."),
|
||||||
save_config_help[] = N_(
|
save_config_help[] = N_(
|
||||||
"\n"
|
"For various reasons, one may wish to keep several different\n"
|
||||||
"For various reasons, one may wish to keep different configurations\n"
|
"configurations available on a single machine.\n"
|
||||||
"available on a single machine.\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"Entering a file name here will allow you to later retrieve, modify\n"
|
"Entering a file name here will allow you to later retrieve, modify\n"
|
||||||
"and use the current configuration as an alternate to whatever\n"
|
"and use the current configuration as an alternate to whatever\n"
|
||||||
"configuration options you have selected at that time.\n"
|
"configuration options you have selected at that time.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"If you are uncertain what all this means then you should probably\n"
|
"Leave empty to abort.\n"),
|
||||||
"leave this blank.\n"),
|
|
||||||
search_help[] = N_(
|
search_help[] = N_(
|
||||||
"\n"
|
"Search for symbols (configuration variable names CONFIG_*) and display\n"
|
||||||
"Search for symbols and display their relations. Regular expressions\n"
|
"their relations. Regular expressions are supported.\n"
|
||||||
"are allowed.\n"
|
"Example: Search for \"^FOO\".\n"
|
||||||
"Example: search for \"^FOO\"\n"
|
|
||||||
"Result:\n"
|
"Result:\n"
|
||||||
"-----------------------------------------------------------------\n"
|
"-----------------------------------------------------------------\n"
|
||||||
"Symbol: FOO [ = m]\n"
|
"Symbol: FOO [ = m]\n"
|
||||||
@ -225,32 +216,32 @@ search_help[] = N_(
|
|||||||
"Defined at drivers/pci/Kconfig:47\n"
|
"Defined at drivers/pci/Kconfig:47\n"
|
||||||
"Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
|
"Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
|
||||||
"Location:\n"
|
"Location:\n"
|
||||||
" -> Bus options (PCI, PCMCIA, EISA, MCA, ISA)\n"
|
" -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
|
||||||
" -> PCI support (PCI [ = y])\n"
|
" -> PCI support (PCI [ = y])\n"
|
||||||
" -> PCI access mode (<choice> [ = y])\n"
|
" -> PCI access mode (<choice> [ = y])\n"
|
||||||
"Selects: LIBCRC32\n"
|
"Selects: LIBCRC32\n"
|
||||||
"Selected by: BAR\n"
|
"Selected by: BAR\n"
|
||||||
"-----------------------------------------------------------------\n"
|
"-----------------------------------------------------------------\n"
|
||||||
"o The line 'Prompt:' shows the text used in the menu structure for\n"
|
"o The line 'Prompt:' shows the text displayed for this symbol in\n"
|
||||||
" this symbol\n"
|
" the menu hierarchy.\n"
|
||||||
"o The 'Defined at' line tell at what file / line number the symbol\n"
|
"o The 'Defined at' line tells at what file / line number the symbol is\n"
|
||||||
" is defined\n"
|
" defined.\n"
|
||||||
"o The 'Depends on:' line tell what symbols needs to be defined for\n"
|
"o The 'Depends on:' line lists symbols that need to be defined for\n"
|
||||||
" this symbol to be visible in the menu (selectable)\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"
|
"o The 'Location:' lines tell, where in the menu structure this symbol\n"
|
||||||
" is located\n"
|
" is located. A location followed by a [ = y] indicates that this is\n"
|
||||||
" A location followed by a [ = y] indicate that this is a selectable\n"
|
" a selectable menu item, and the current value is displayed inside\n"
|
||||||
" menu item - and current value is displayed inside brackets.\n"
|
" brackets.\n"
|
||||||
"o The 'Selects:' line tell what symbol will be automatically\n"
|
"o The 'Selects:' line tells, what symbol will be automatically selected\n"
|
||||||
" selected if this symbol is selected (y or m)\n"
|
" if this symbol is selected (y or m).\n"
|
||||||
"o The 'Selected by' line tell what symbol has selected this symbol\n"
|
"o The 'Selected by' line tells what symbol has selected this symbol.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Only relevant lines are shown.\n"
|
"Only relevant lines are shown.\n"
|
||||||
"\n\n"
|
"\n\n"
|
||||||
"Search examples:\n"
|
"Search examples:\n"
|
||||||
"Examples: USB => find all symbols containing USB\n"
|
"USB => find all symbols containing USB\n"
|
||||||
" ^USB => find all symbols starting with USB\n"
|
"^USB => find all symbols starting with USB\n"
|
||||||
" USB$ => find all symbols ending with USB\n"
|
"USB$ => find all symbols ending with USB\n"
|
||||||
"\n");
|
"\n");
|
||||||
|
|
||||||
struct mitem {
|
struct mitem {
|
||||||
@ -280,6 +271,9 @@ static int global_exit;
|
|||||||
/* the currently selected button */
|
/* the currently selected button */
|
||||||
const char *current_instructions = menu_instructions;
|
const char *current_instructions = menu_instructions;
|
||||||
|
|
||||||
|
static char *dialog_input_result;
|
||||||
|
static int dialog_input_result_len;
|
||||||
|
|
||||||
static void conf(struct menu *menu);
|
static void conf(struct menu *menu);
|
||||||
static void conf_choice(struct menu *menu);
|
static void conf_choice(struct menu *menu);
|
||||||
static void conf_string(struct menu *menu);
|
static void conf_string(struct menu *menu);
|
||||||
@ -318,19 +312,19 @@ struct function_keys function_keys[] = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.key_str = "F2",
|
.key_str = "F2",
|
||||||
.func = "Sym Info",
|
.func = "SymInfo",
|
||||||
.key = F_SYMBOL,
|
.key = F_SYMBOL,
|
||||||
.handler = handle_f2,
|
.handler = handle_f2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.key_str = "F3",
|
.key_str = "F3",
|
||||||
.func = "Insts",
|
.func = "Help 2",
|
||||||
.key = F_INSTS,
|
.key = F_INSTS,
|
||||||
.handler = handle_f3,
|
.handler = handle_f3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.key_str = "F4",
|
.key_str = "F4",
|
||||||
.func = "Config",
|
.func = "ShowAll",
|
||||||
.key = F_CONF,
|
.key = F_CONF,
|
||||||
.handler = handle_f4,
|
.handler = handle_f4,
|
||||||
},
|
},
|
||||||
@ -354,7 +348,7 @@ struct function_keys function_keys[] = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.key_str = "F8",
|
.key_str = "F8",
|
||||||
.func = "Sym Search",
|
.func = "SymSearch",
|
||||||
.key = F_SEARCH,
|
.key = F_SEARCH,
|
||||||
.handler = handle_f8,
|
.handler = handle_f8,
|
||||||
},
|
},
|
||||||
@ -391,7 +385,7 @@ static void print_function_line(void)
|
|||||||
static void handle_f1(int *key, struct menu *current_item)
|
static void handle_f1(int *key, struct menu *current_item)
|
||||||
{
|
{
|
||||||
show_scroll_win(main_window,
|
show_scroll_win(main_window,
|
||||||
_("README"), _(nconf_readme));
|
_("Global help"), _(nconf_global_help));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -406,7 +400,7 @@ static void handle_f2(int *key, struct menu *current_item)
|
|||||||
static void handle_f3(int *key, struct menu *current_item)
|
static void handle_f3(int *key, struct menu *current_item)
|
||||||
{
|
{
|
||||||
show_scroll_win(main_window,
|
show_scroll_win(main_window,
|
||||||
_("Instructions"),
|
_("Short help"),
|
||||||
_(current_instructions));
|
_(current_instructions));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -695,15 +689,19 @@ static void search_conf(void)
|
|||||||
{
|
{
|
||||||
struct symbol **sym_arr;
|
struct symbol **sym_arr;
|
||||||
struct gstr res;
|
struct gstr res;
|
||||||
char dialog_input_result[100];
|
struct gstr title;
|
||||||
char *dialog_input;
|
char *dialog_input;
|
||||||
int dres;
|
int dres;
|
||||||
|
|
||||||
|
title = str_new();
|
||||||
|
str_printf( &title, _("Enter %s (sub)string to search for "
|
||||||
|
"(with or without \"%s\")"), CONFIG_, CONFIG_);
|
||||||
|
|
||||||
again:
|
again:
|
||||||
dres = dialog_inputbox(main_window,
|
dres = dialog_inputbox(main_window,
|
||||||
_("Search Configuration Parameter"),
|
_("Search Configuration Parameter"),
|
||||||
_("Enter " CONFIG_ " (sub)string to search for "
|
str_get(&title),
|
||||||
"(with or without \"" CONFIG_ "\")"),
|
"", &dialog_input_result, &dialog_input_result_len);
|
||||||
"", dialog_input_result, 99);
|
|
||||||
switch (dres) {
|
switch (dres) {
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
@ -712,6 +710,7 @@ again:
|
|||||||
_("Search Configuration"), search_help);
|
_("Search Configuration"), search_help);
|
||||||
goto again;
|
goto again;
|
||||||
default:
|
default:
|
||||||
|
str_free(&title);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -721,11 +720,12 @@ again:
|
|||||||
dialog_input += strlen(CONFIG_);
|
dialog_input += strlen(CONFIG_);
|
||||||
|
|
||||||
sym_arr = sym_re_search(dialog_input);
|
sym_arr = sym_re_search(dialog_input);
|
||||||
res = get_relations_str(sym_arr);
|
res = get_relations_str(sym_arr, NULL);
|
||||||
free(sym_arr);
|
free(sym_arr);
|
||||||
show_scroll_win(main_window,
|
show_scroll_win(main_window,
|
||||||
_("Search Results"), str_get(&res));
|
_("Search Results"), str_get(&res));
|
||||||
str_free(&res);
|
str_free(&res);
|
||||||
|
str_free(&title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1067,7 +1067,6 @@ static void conf(struct menu *menu)
|
|||||||
struct menu *submenu = 0;
|
struct menu *submenu = 0;
|
||||||
const char *prompt = menu_get_prompt(menu);
|
const char *prompt = menu_get_prompt(menu);
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct menu *active_menu = NULL;
|
|
||||||
int res;
|
int res;
|
||||||
int current_index = 0;
|
int current_index = 0;
|
||||||
int last_top_row = 0;
|
int last_top_row = 0;
|
||||||
@ -1152,13 +1151,9 @@ static void conf(struct menu *menu)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
submenu = (struct menu *) item_data();
|
submenu = (struct menu *) item_data();
|
||||||
active_menu = (struct menu *)item_data();
|
|
||||||
if (!submenu || !menu_is_visible(submenu))
|
if (!submenu || !menu_is_visible(submenu))
|
||||||
continue;
|
continue;
|
||||||
if (submenu)
|
|
||||||
sym = submenu->sym;
|
sym = submenu->sym;
|
||||||
else
|
|
||||||
sym = NULL;
|
|
||||||
|
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case ' ':
|
case ' ':
|
||||||
@ -1222,20 +1217,13 @@ static void conf_message_callback(const char *fmt, va_list ap)
|
|||||||
|
|
||||||
static void show_help(struct menu *menu)
|
static void show_help(struct menu *menu)
|
||||||
{
|
{
|
||||||
struct gstr help = str_new();
|
struct gstr help;
|
||||||
|
|
||||||
if (menu && menu->sym && menu_has_help(menu)) {
|
if (!menu)
|
||||||
if (menu->sym->name) {
|
return;
|
||||||
str_printf(&help, "%s%s:\n\n", CONFIG_, menu->sym->name);
|
|
||||||
str_append(&help, _(menu_get_help(menu)));
|
help = str_new();
|
||||||
str_append(&help, "\n");
|
menu_get_ext_help(menu, &help);
|
||||||
get_symbol_str(&help, menu->sym);
|
|
||||||
} else {
|
|
||||||
str_append(&help, _(menu_get_help(menu)));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
str_append(&help, nohelp_text);
|
|
||||||
}
|
|
||||||
show_scroll_win(main_window, _(menu_get_prompt(menu)), str_get(&help));
|
show_scroll_win(main_window, _(menu_get_prompt(menu)), str_get(&help));
|
||||||
str_free(&help);
|
str_free(&help);
|
||||||
}
|
}
|
||||||
@ -1360,7 +1348,6 @@ static void conf_choice(struct menu *menu)
|
|||||||
static void conf_string(struct menu *menu)
|
static void conf_string(struct menu *menu)
|
||||||
{
|
{
|
||||||
const char *prompt = menu_get_prompt(menu);
|
const char *prompt = menu_get_prompt(menu);
|
||||||
char dialog_input_result[256];
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
int res;
|
int res;
|
||||||
@ -1383,8 +1370,8 @@ static void conf_string(struct menu *menu)
|
|||||||
prompt ? _(prompt) : _("Main Menu"),
|
prompt ? _(prompt) : _("Main Menu"),
|
||||||
heading,
|
heading,
|
||||||
sym_get_string_value(menu->sym),
|
sym_get_string_value(menu->sym),
|
||||||
dialog_input_result,
|
&dialog_input_result,
|
||||||
sizeof(dialog_input_result));
|
&dialog_input_result_len);
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case 0:
|
case 0:
|
||||||
if (sym_set_string_value(menu->sym,
|
if (sym_set_string_value(menu->sym,
|
||||||
@ -1404,14 +1391,13 @@ static void conf_string(struct menu *menu)
|
|||||||
|
|
||||||
static void conf_load(void)
|
static void conf_load(void)
|
||||||
{
|
{
|
||||||
char dialog_input_result[256];
|
|
||||||
while (1) {
|
while (1) {
|
||||||
int res;
|
int res;
|
||||||
res = dialog_inputbox(main_window,
|
res = dialog_inputbox(main_window,
|
||||||
NULL, load_config_text,
|
NULL, load_config_text,
|
||||||
filename,
|
filename,
|
||||||
dialog_input_result,
|
&dialog_input_result,
|
||||||
sizeof(dialog_input_result));
|
&dialog_input_result_len);
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case 0:
|
case 0:
|
||||||
if (!dialog_input_result[0])
|
if (!dialog_input_result[0])
|
||||||
@ -1436,14 +1422,13 @@ static void conf_load(void)
|
|||||||
|
|
||||||
static void conf_save(void)
|
static void conf_save(void)
|
||||||
{
|
{
|
||||||
char dialog_input_result[256];
|
|
||||||
while (1) {
|
while (1) {
|
||||||
int res;
|
int res;
|
||||||
res = dialog_inputbox(main_window,
|
res = dialog_inputbox(main_window,
|
||||||
NULL, save_config_text,
|
NULL, save_config_text,
|
||||||
filename,
|
filename,
|
||||||
dialog_input_result,
|
&dialog_input_result,
|
||||||
sizeof(dialog_input_result));
|
&dialog_input_result_len);
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case 0:
|
case 0:
|
||||||
if (!dialog_input_result[0])
|
if (!dialog_input_result[0])
|
||||||
@ -1518,7 +1503,11 @@ int main(int ac, char **av)
|
|||||||
}
|
}
|
||||||
|
|
||||||
notimeout(stdscr, FALSE);
|
notimeout(stdscr, FALSE);
|
||||||
|
#if NCURSES_REENTRANT
|
||||||
|
set_escdelay(1);
|
||||||
|
#else
|
||||||
ESCDELAY = 1;
|
ESCDELAY = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* set btns menu */
|
/* set btns menu */
|
||||||
curses_menu = new_menu(curses_menu_items);
|
curses_menu = new_menu(curses_menu_items);
|
||||||
|
@ -48,7 +48,7 @@ static void set_normal_colors(void)
|
|||||||
init_pair(INPUT_FIELD, -1, -1);
|
init_pair(INPUT_FIELD, -1, -1);
|
||||||
|
|
||||||
init_pair(FUNCTION_HIGHLIGHT, -1, -1);
|
init_pair(FUNCTION_HIGHLIGHT, -1, -1);
|
||||||
init_pair(FUNCTION_TEXT, COLOR_BLUE, -1);
|
init_pair(FUNCTION_TEXT, COLOR_YELLOW, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* available attributes:
|
/* available attributes:
|
||||||
@ -356,7 +356,7 @@ int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...)
|
|||||||
|
|
||||||
int dialog_inputbox(WINDOW *main_window,
|
int dialog_inputbox(WINDOW *main_window,
|
||||||
const char *title, const char *prompt,
|
const char *title, const char *prompt,
|
||||||
const char *init, char *result, int result_len)
|
const char *init, char **resultp, int *result_len)
|
||||||
{
|
{
|
||||||
int prompt_lines = 0;
|
int prompt_lines = 0;
|
||||||
int prompt_width = 0;
|
int prompt_width = 0;
|
||||||
@ -367,7 +367,13 @@ int dialog_inputbox(WINDOW *main_window,
|
|||||||
int i, x, y;
|
int i, x, y;
|
||||||
int res = -1;
|
int res = -1;
|
||||||
int cursor_position = strlen(init);
|
int cursor_position = strlen(init);
|
||||||
|
int cursor_form_win;
|
||||||
|
char *result = *resultp;
|
||||||
|
|
||||||
|
if (strlen(init)+1 > *result_len) {
|
||||||
|
*result_len = strlen(init)+1;
|
||||||
|
*resultp = result = realloc(result, *result_len);
|
||||||
|
}
|
||||||
|
|
||||||
/* find the widest line of msg: */
|
/* find the widest line of msg: */
|
||||||
prompt_lines = get_line_no(prompt);
|
prompt_lines = get_line_no(prompt);
|
||||||
@ -384,7 +390,7 @@ int dialog_inputbox(WINDOW *main_window,
|
|||||||
y = (LINES-(prompt_lines+4))/2;
|
y = (LINES-(prompt_lines+4))/2;
|
||||||
x = (COLS-(prompt_width+4))/2;
|
x = (COLS-(prompt_width+4))/2;
|
||||||
|
|
||||||
strncpy(result, init, result_len);
|
strncpy(result, init, *result_len);
|
||||||
|
|
||||||
/* create the windows */
|
/* create the windows */
|
||||||
win = newwin(prompt_lines+6, prompt_width+7, y, x);
|
win = newwin(prompt_lines+6, prompt_width+7, y, x);
|
||||||
@ -405,7 +411,9 @@ int dialog_inputbox(WINDOW *main_window,
|
|||||||
fill_window(prompt_win, prompt);
|
fill_window(prompt_win, prompt);
|
||||||
|
|
||||||
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
|
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
|
||||||
mvwprintw(form_win, 0, 0, "%s", result);
|
cursor_form_win = min(cursor_position, prompt_width-1);
|
||||||
|
mvwprintw(form_win, 0, 0, "%s",
|
||||||
|
result + cursor_position-cursor_form_win);
|
||||||
|
|
||||||
/* create panels */
|
/* create panels */
|
||||||
panel = new_panel(win);
|
panel = new_panel(win);
|
||||||
@ -431,6 +439,8 @@ int dialog_inputbox(WINDOW *main_window,
|
|||||||
&result[cursor_position],
|
&result[cursor_position],
|
||||||
len-cursor_position+1);
|
len-cursor_position+1);
|
||||||
cursor_position--;
|
cursor_position--;
|
||||||
|
cursor_form_win--;
|
||||||
|
len--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_DC:
|
case KEY_DC:
|
||||||
@ -438,38 +448,63 @@ int dialog_inputbox(WINDOW *main_window,
|
|||||||
memmove(&result[cursor_position],
|
memmove(&result[cursor_position],
|
||||||
&result[cursor_position+1],
|
&result[cursor_position+1],
|
||||||
len-cursor_position+1);
|
len-cursor_position+1);
|
||||||
|
len--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
if (cursor_position < len &&
|
if (cursor_position < len) {
|
||||||
cursor_position < min(result_len, prompt_width))
|
|
||||||
cursor_position++;
|
cursor_position++;
|
||||||
|
cursor_form_win++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
if (cursor_position > 0)
|
if (cursor_position > 0) {
|
||||||
cursor_position--;
|
cursor_position--;
|
||||||
|
cursor_form_win--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case KEY_HOME:
|
||||||
|
cursor_position = 0;
|
||||||
|
cursor_form_win = 0;
|
||||||
|
break;
|
||||||
|
case KEY_END:
|
||||||
|
cursor_position = len;
|
||||||
|
cursor_form_win = min(cursor_position, prompt_width-1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if ((isgraph(res) || isspace(res)) &&
|
if ((isgraph(res) || isspace(res))) {
|
||||||
len-2 < result_len) {
|
/* one for new char, one for '\0' */
|
||||||
|
if (len+2 > *result_len) {
|
||||||
|
*result_len = len+2;
|
||||||
|
*resultp = result = realloc(result,
|
||||||
|
*result_len);
|
||||||
|
}
|
||||||
/* insert the char at the proper position */
|
/* insert the char at the proper position */
|
||||||
memmove(&result[cursor_position+1],
|
memmove(&result[cursor_position+1],
|
||||||
&result[cursor_position],
|
&result[cursor_position],
|
||||||
len+1);
|
len-cursor_position+1);
|
||||||
result[cursor_position] = res;
|
result[cursor_position] = res;
|
||||||
cursor_position++;
|
cursor_position++;
|
||||||
|
cursor_form_win++;
|
||||||
|
len++;
|
||||||
} else {
|
} else {
|
||||||
mvprintw(0, 0, "unknow key: %d\n", res);
|
mvprintw(0, 0, "unknown key: %d\n", res);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (cursor_form_win < 0)
|
||||||
|
cursor_form_win = 0;
|
||||||
|
else if (cursor_form_win > prompt_width-1)
|
||||||
|
cursor_form_win = prompt_width-1;
|
||||||
|
|
||||||
wmove(form_win, 0, 0);
|
wmove(form_win, 0, 0);
|
||||||
wclrtoeol(form_win);
|
wclrtoeol(form_win);
|
||||||
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
|
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
|
||||||
mvwprintw(form_win, 0, 0, "%s", result);
|
mvwprintw(form_win, 0, 0, "%s",
|
||||||
wmove(form_win, 0, cursor_position);
|
result + cursor_position-cursor_form_win);
|
||||||
|
wmove(form_win, 0, cursor_form_win);
|
||||||
touchwin(win);
|
touchwin(win);
|
||||||
refresh_all_windows(main_window);
|
refresh_all_windows(main_window);
|
||||||
|
|
||||||
@ -569,9 +604,11 @@ void show_scroll_win(WINDOW *main_window,
|
|||||||
switch (res) {
|
switch (res) {
|
||||||
case KEY_NPAGE:
|
case KEY_NPAGE:
|
||||||
case ' ':
|
case ' ':
|
||||||
|
case 'd':
|
||||||
start_y += text_lines-2;
|
start_y += text_lines-2;
|
||||||
break;
|
break;
|
||||||
case KEY_PPAGE:
|
case KEY_PPAGE:
|
||||||
|
case 'u':
|
||||||
start_y -= text_lines+2;
|
start_y -= text_lines+2;
|
||||||
break;
|
break;
|
||||||
case KEY_HOME:
|
case KEY_HOME:
|
||||||
@ -597,10 +634,10 @@ void show_scroll_win(WINDOW *main_window,
|
|||||||
start_x++;
|
start_x++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (res == 10 || res == 27 || res == 'q'
|
if (res == 10 || res == 27 || res == 'q' ||
|
||||||
|| res == KEY_F(F_BACK) || res == KEY_F(F_EXIT)) {
|
res == KEY_F(F_HELP) || res == KEY_F(F_BACK) ||
|
||||||
|
res == KEY_F(F_EXIT))
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (start_y < 0)
|
if (start_y < 0)
|
||||||
start_y = 0;
|
start_y = 0;
|
||||||
if (start_y >= total_lines-text_lines)
|
if (start_y >= total_lines-text_lines)
|
||||||
|
@ -89,7 +89,7 @@ void fill_window(WINDOW *win, const char *text);
|
|||||||
int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...);
|
int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...);
|
||||||
int dialog_inputbox(WINDOW *main_window,
|
int dialog_inputbox(WINDOW *main_window,
|
||||||
const char *title, const char *prompt,
|
const char *title, const char *prompt,
|
||||||
const char *init, char *result, int result_len);
|
const char *init, char **resultp, int *result_len);
|
||||||
void refresh_all_windows(WINDOW *main_window);
|
void refresh_all_windows(WINDOW *main_window);
|
||||||
void show_scroll_win(WINDOW *main_window,
|
void show_scroll_win(WINDOW *main_window,
|
||||||
const char *title,
|
const char *title,
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
zconf.y | 2 +-
|
zconf.y | 2 +-
|
||||||
4 files changed, 5 insertions(+), 5 deletions(-)
|
4 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
Index: config/gconf.glade
|
Index: b/gconf.glade
|
||||||
===================================================================
|
===================================================================
|
||||||
--- config.orig/gconf.glade
|
--- a/gconf.glade
|
||||||
+++ config/gconf.glade
|
+++ b/gconf.glade
|
||||||
@@ -4,7 +4,7 @@
|
@@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<widget class="GtkWindow" id="window1">
|
<widget class="GtkWindow" id="window1">
|
||||||
@ -18,10 +18,10 @@ Index: config/gconf.glade
|
|||||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
<property name="window_position">GTK_WIN_POS_NONE</property>
|
||||||
<property name="modal">False</property>
|
<property name="modal">False</property>
|
||||||
Index: config/mconf.c
|
Index: b/mconf.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- config.orig/mconf.c
|
--- a/mconf.c
|
||||||
+++ config/mconf.c
|
+++ b/mconf.c
|
||||||
@@ -178,9 +178,9 @@
|
@@ -178,9 +178,9 @@
|
||||||
"Arrow keys navigate the menu. "
|
"Arrow keys navigate the menu. "
|
||||||
"<Enter> selects submenus --->. "
|
"<Enter> selects submenus --->. "
|
||||||
@ -34,29 +34,29 @@ Index: config/mconf.c
|
|||||||
radiolist_instructions[] = N_(
|
radiolist_instructions[] = N_(
|
||||||
"Use the arrow keys to navigate this window or "
|
"Use the arrow keys to navigate this window or "
|
||||||
"press the hotkey of the item you wish to select "
|
"press the hotkey of the item you wish to select "
|
||||||
Index: config/zconf.tab.c_shipped
|
Index: b/zconf.tab.c_shipped
|
||||||
===================================================================
|
===================================================================
|
||||||
--- config.orig/zconf.tab.c_shipped
|
--- a/zconf.tab.c_shipped
|
||||||
+++ config/zconf.tab.c_shipped
|
+++ b/zconf.tab.c_shipped
|
||||||
@@ -2256,7 +2256,7 @@
|
@@ -2259,7 +2259,7 @@
|
||||||
modules_sym = sym_lookup(NULL, 0);
|
modules_sym = sym_lookup(NULL, 0);
|
||||||
modules_sym->type = S_BOOLEAN;
|
modules_sym->type = S_BOOLEAN;
|
||||||
modules_sym->flags |= SYMBOL_AUTO;
|
modules_sym->flags |= SYMBOL_AUTO;
|
||||||
- rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
|
- rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
|
||||||
+ rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
|
+ rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
|
||||||
|
|
||||||
#if YYDEBUG
|
|
||||||
if (getenv("ZCONF_DEBUG"))
|
if (getenv("ZCONF_DEBUG"))
|
||||||
Index: config/zconf.y
|
zconfdebug = 1;
|
||||||
|
Index: b/zconf.y
|
||||||
===================================================================
|
===================================================================
|
||||||
--- config.orig/zconf.y
|
--- a/zconf.y
|
||||||
+++ config/zconf.y
|
+++ b/zconf.y
|
||||||
@@ -501,7 +501,7 @@
|
@@ -496,7 +496,7 @@
|
||||||
modules_sym = sym_lookup(NULL, 0);
|
modules_sym = sym_lookup(NULL, 0);
|
||||||
modules_sym->type = S_BOOLEAN;
|
modules_sym->type = S_BOOLEAN;
|
||||||
modules_sym->flags |= SYMBOL_AUTO;
|
modules_sym->flags |= SYMBOL_AUTO;
|
||||||
- rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
|
- rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
|
||||||
+ rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
|
+ rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
|
||||||
|
|
||||||
#if YYDEBUG
|
|
||||||
if (getenv("ZCONF_DEBUG"))
|
if (getenv("ZCONF_DEBUG"))
|
||||||
|
zconfdebug = 1;
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
expr.c | 42 +++++++++++++++++++++---------------------
|
expr.c | 42 +++++++++++++++++++++---------------------
|
||||||
1 file changed, 21 insertions(+), 21 deletions(-)
|
1 file changed, 21 insertions(+), 21 deletions(-)
|
||||||
|
|
||||||
Index: config/expr.c
|
Index: b/expr.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- config.orig/expr.c
|
--- a/expr.c
|
||||||
+++ config/expr.c
|
+++ b/expr.c
|
||||||
@@ -331,7 +331,7 @@
|
@@ -326,7 +326,7 @@
|
||||||
e->right.expr = expr_trans_bool(e->right.expr);
|
e->right.expr = expr_trans_bool(e->right.expr);
|
||||||
break;
|
break;
|
||||||
case E_UNEQUAL:
|
case E_UNEQUAL:
|
||||||
@ -15,7 +15,7 @@ Index: config/expr.c
|
|||||||
if (e->left.sym->type == S_TRISTATE) {
|
if (e->left.sym->type == S_TRISTATE) {
|
||||||
if (e->right.sym == &symbol_no) {
|
if (e->right.sym == &symbol_no) {
|
||||||
e->type = E_SYMBOL;
|
e->type = E_SYMBOL;
|
||||||
@@ -380,19 +380,19 @@
|
@@ -375,19 +375,19 @@
|
||||||
if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
|
if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
|
||||||
((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
|
((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
|
||||||
(e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) {
|
(e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) {
|
||||||
@ -38,7 +38,7 @@ Index: config/expr.c
|
|||||||
return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes);
|
return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -443,29 +443,29 @@
|
@@ -438,29 +438,29 @@
|
||||||
|
|
||||||
if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) ||
|
if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) ||
|
||||||
(e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes))
|
(e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes))
|
||||||
@ -73,7 +73,7 @@ Index: config/expr.c
|
|||||||
sym2 = e2->right.sym;
|
sym2 = e2->right.sym;
|
||||||
if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
|
if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
|
||||||
return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
|
return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
|
||||||
@@ -474,19 +474,19 @@
|
@@ -469,19 +469,19 @@
|
||||||
if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
|
if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
|
||||||
((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
|
((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
|
||||||
(e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes)))
|
(e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes)))
|
||||||
@ -96,7 +96,7 @@ Index: config/expr.c
|
|||||||
return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
|
return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
|
||||||
|
|
||||||
if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) ||
|
if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) ||
|
||||||
@@ -579,7 +579,7 @@
|
@@ -574,7 +574,7 @@
|
||||||
switch (e1->type) {
|
switch (e1->type) {
|
||||||
case E_OR:
|
case E_OR:
|
||||||
expr_eliminate_dups2(e1->type, &e1, &e1);
|
expr_eliminate_dups2(e1->type, &e1, &e1);
|
||||||
@ -105,7 +105,7 @@ Index: config/expr.c
|
|||||||
tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
|
tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
|
||||||
tmp2 = expr_copy(e2);
|
tmp2 = expr_copy(e2);
|
||||||
tmp = expr_extract_eq_and(&tmp1, &tmp2);
|
tmp = expr_extract_eq_and(&tmp1, &tmp2);
|
||||||
@@ -594,7 +594,7 @@
|
@@ -589,7 +589,7 @@
|
||||||
break;
|
break;
|
||||||
case E_AND:
|
case E_AND:
|
||||||
expr_eliminate_dups2(e1->type, &e1, &e1);
|
expr_eliminate_dups2(e1->type, &e1, &e1);
|
||||||
@ -114,7 +114,7 @@ Index: config/expr.c
|
|||||||
tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
|
tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
|
||||||
tmp2 = expr_copy(e2);
|
tmp2 = expr_copy(e2);
|
||||||
tmp = expr_extract_eq_or(&tmp1, &tmp2);
|
tmp = expr_extract_eq_or(&tmp1, &tmp2);
|
||||||
@@ -703,7 +703,7 @@
|
@@ -698,7 +698,7 @@
|
||||||
case E_NOT:
|
case E_NOT:
|
||||||
switch (e->left.expr->type) {
|
switch (e->left.expr->type) {
|
||||||
case E_NOT:
|
case E_NOT:
|
||||||
@ -123,7 +123,7 @@ Index: config/expr.c
|
|||||||
tmp = e->left.expr->left.expr;
|
tmp = e->left.expr->left.expr;
|
||||||
free(e->left.expr);
|
free(e->left.expr);
|
||||||
free(e);
|
free(e);
|
||||||
@@ -712,14 +712,14 @@
|
@@ -707,14 +707,14 @@
|
||||||
break;
|
break;
|
||||||
case E_EQUAL:
|
case E_EQUAL:
|
||||||
case E_UNEQUAL:
|
case E_UNEQUAL:
|
||||||
@ -140,7 +140,7 @@ Index: config/expr.c
|
|||||||
tmp = e->left.expr;
|
tmp = e->left.expr;
|
||||||
e->type = E_AND;
|
e->type = E_AND;
|
||||||
e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
|
e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
|
||||||
@@ -728,7 +728,7 @@
|
@@ -723,7 +723,7 @@
|
||||||
e = expr_transform(e);
|
e = expr_transform(e);
|
||||||
break;
|
break;
|
||||||
case E_AND:
|
case E_AND:
|
||||||
@ -149,7 +149,7 @@ Index: config/expr.c
|
|||||||
tmp = e->left.expr;
|
tmp = e->left.expr;
|
||||||
e->type = E_OR;
|
e->type = E_OR;
|
||||||
e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
|
e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
|
||||||
@@ -738,7 +738,7 @@
|
@@ -733,7 +733,7 @@
|
||||||
break;
|
break;
|
||||||
case E_SYMBOL:
|
case E_SYMBOL:
|
||||||
if (e->left.expr->left.sym == &symbol_yes) {
|
if (e->left.expr->left.sym == &symbol_yes) {
|
||||||
@ -158,7 +158,7 @@ Index: config/expr.c
|
|||||||
tmp = e->left.expr;
|
tmp = e->left.expr;
|
||||||
free(e);
|
free(e);
|
||||||
e = tmp;
|
e = tmp;
|
||||||
@@ -747,7 +747,7 @@
|
@@ -742,7 +742,7 @@
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (e->left.expr->left.sym == &symbol_mod) {
|
if (e->left.expr->left.sym == &symbol_mod) {
|
||||||
@ -167,7 +167,7 @@ Index: config/expr.c
|
|||||||
tmp = e->left.expr;
|
tmp = e->left.expr;
|
||||||
free(e);
|
free(e);
|
||||||
e = tmp;
|
e = tmp;
|
||||||
@@ -756,7 +756,7 @@
|
@@ -751,7 +751,7 @@
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (e->left.expr->left.sym == &symbol_no) {
|
if (e->left.expr->left.sym == &symbol_no) {
|
||||||
|
@ -4,18 +4,18 @@
|
|||||||
menu.c | 2 +-
|
menu.c | 2 +-
|
||||||
3 files changed, 31 insertions(+), 30 deletions(-)
|
3 files changed, 31 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
Index: kconfig/confdata.c
|
Index: b/confdata.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/confdata.c
|
--- a/confdata.c
|
||||||
+++ kconfig/confdata.c
|
+++ b/confdata.c
|
||||||
@@ -12,6 +12,7 @@
|
@@ -13,6 +13,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
+#include <libgen.h>
|
+#include <libgen.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
@@ -25,7 +26,7 @@
|
@@ -25,7 +26,7 @@
|
||||||
static const char *conf_filename;
|
static const char *conf_filename;
|
||||||
static int conf_lineno, conf_warnings, conf_unsaved;
|
static int conf_lineno, conf_warnings, conf_unsaved;
|
||||||
@ -34,7 +34,7 @@ Index: kconfig/confdata.c
|
|||||||
|
|
||||||
return name ? name : ".config";
|
return name ? name : ".config";
|
||||||
}
|
}
|
||||||
@@ -249,20 +250,20 @@
|
@@ -309,20 +310,20 @@
|
||||||
if (line[0] == '#') {
|
if (line[0] == '#') {
|
||||||
if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
|
if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
|
||||||
continue;
|
continue;
|
||||||
@ -58,7 +58,7 @@ Index: kconfig/confdata.c
|
|||||||
if (sym->type == S_UNKNOWN)
|
if (sym->type == S_UNKNOWN)
|
||||||
sym->type = S_BOOLEAN;
|
sym->type = S_BOOLEAN;
|
||||||
}
|
}
|
||||||
@@ -278,8 +279,8 @@
|
@@ -338,8 +339,8 @@
|
||||||
default:
|
default:
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ Index: kconfig/confdata.c
|
|||||||
if (!p)
|
if (!p)
|
||||||
continue;
|
continue;
|
||||||
*p++ = 0;
|
*p++ = 0;
|
||||||
@@ -290,13 +291,13 @@
|
@@ -350,13 +351,13 @@
|
||||||
*p2 = 0;
|
*p2 = 0;
|
||||||
}
|
}
|
||||||
if (def == S_DEF_USER) {
|
if (def == S_DEF_USER) {
|
||||||
@ -85,114 +85,88 @@ Index: kconfig/confdata.c
|
|||||||
if (sym->type == S_UNKNOWN)
|
if (sym->type == S_UNKNOWN)
|
||||||
sym->type = S_OTHER;
|
sym->type = S_OTHER;
|
||||||
}
|
}
|
||||||
@@ -423,9 +424,9 @@
|
@@ -484,8 +485,8 @@
|
||||||
{
|
bool skip_unset = (arg != NULL);
|
||||||
int l;
|
|
||||||
if (headerfile)
|
|
||||||
- fprintf(out, "#define %s%s \"", CONFIG_, name);
|
|
||||||
+ fprintf(out, "#define %s \"", name);
|
|
||||||
else
|
|
||||||
- fprintf(out, "%s%s=\"", CONFIG_, name);
|
|
||||||
+ fprintf(out, "%s=\"", name);
|
|
||||||
|
|
||||||
while (1) {
|
if (!skip_unset)
|
||||||
l = strcspn(str, "\"\\");
|
- fprintf(fp, "# %s%s is not set\n",
|
||||||
@@ -450,14 +451,14 @@
|
|
||||||
switch (sym_get_tristate_value(sym)) {
|
|
||||||
case no:
|
|
||||||
if (write_no)
|
|
||||||
- fprintf(out, "# %s%s is not set\n",
|
|
||||||
- CONFIG_, sym->name);
|
- CONFIG_, sym->name);
|
||||||
+ fprintf(out, "# %s is not set\n",
|
+ fprintf(fp, "# %s is not set\n",
|
||||||
+ sym->name);
|
+ sym->name);
|
||||||
break;
|
return;
|
||||||
case mod:
|
|
||||||
- fprintf(out, "%s%s=m\n", CONFIG_, sym->name);
|
|
||||||
+ fprintf(out, "%s=m\n", sym->name);
|
|
||||||
break;
|
|
||||||
case yes:
|
|
||||||
- fprintf(out, "%s%s=y\n", CONFIG_, sym->name);
|
|
||||||
+ fprintf(out, "%s=y\n", sym->name);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -467,7 +468,7 @@
|
@@ -493,7 +494,7 @@
|
||||||
case S_HEX:
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value);
|
||||||
|
+ fprintf(fp, "%s=%s\n", sym->name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -543,8 +544,8 @@
|
||||||
|
suffix = "_MODULE";
|
||||||
|
/* fall through */
|
||||||
|
default:
|
||||||
|
- fprintf(fp, "#define %s%s%s 1\n",
|
||||||
|
- CONFIG_, sym->name, suffix);
|
||||||
|
+ fprintf(fp, "#define %s%s 1\n",
|
||||||
|
+ sym->name, suffix);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -553,14 +554,14 @@
|
||||||
|
|
||||||
|
if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X'))
|
||||||
|
prefix = "0x";
|
||||||
|
- fprintf(fp, "#define %s%s %s%s\n",
|
||||||
|
- CONFIG_, sym->name, prefix, value);
|
||||||
|
+ fprintf(fp, "#define %s %s%s\n",
|
||||||
|
+ sym->name, prefix, value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case S_STRING:
|
||||||
case S_INT:
|
case S_INT:
|
||||||
str = sym_get_string_value(sym);
|
- fprintf(fp, "#define %s%s %s\n",
|
||||||
- fprintf(out, "%s%s=%s\n", CONFIG_, sym->name, str);
|
- CONFIG_, sym->name, value);
|
||||||
+ fprintf(out, "%s=%s\n", sym->name, str);
|
+ fprintf(fp, "#define %s %s\n",
|
||||||
break;
|
+ sym->name, value);
|
||||||
case S_OTHER:
|
|
||||||
case S_UNKNOWN:
|
|
||||||
@@ -830,17 +831,17 @@
|
|
||||||
case no:
|
|
||||||
break;
|
|
||||||
case mod:
|
|
||||||
- fprintf(tristate, "%s%s=M\n",
|
|
||||||
- CONFIG_, sym->name);
|
|
||||||
- fprintf(out_h, "#define %s%s_MODULE 1\n",
|
|
||||||
- CONFIG_, sym->name);
|
|
||||||
+ fprintf(tristate, "%s=M\n",
|
|
||||||
+ sym->name);
|
|
||||||
+ fprintf(out_h, "#define %s_MODULE 1\n",
|
|
||||||
+ sym->name);
|
|
||||||
break;
|
|
||||||
case yes:
|
|
||||||
if (sym->type == S_TRISTATE)
|
|
||||||
- fprintf(tristate,"%s%s=Y\n",
|
|
||||||
- CONFIG_, sym->name);
|
|
||||||
- fprintf(out_h, "#define %s%s 1\n",
|
|
||||||
- CONFIG_, sym->name);
|
|
||||||
+ fprintf(tristate,"%s=Y\n",
|
|
||||||
+ sym->name);
|
|
||||||
+ fprintf(out_h, "#define %s 1\n",
|
|
||||||
+ sym->name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
@@ -850,14 +851,14 @@
|
|
||||||
case S_HEX:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
|
|
||||||
- fprintf(out_h, "#define %s%s 0x%s\n",
|
|
||||||
- CONFIG_, sym->name, str);
|
|
||||||
+ fprintf(out_h, "#define %s 0x%s\n",
|
|
||||||
+ sym->name, str);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case S_INT:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
- fprintf(out_h, "#define %s%s %s\n",
|
|
||||||
- CONFIG_, sym->name, str);
|
|
||||||
+ fprintf(out_h, "#define %s %s\n",
|
|
||||||
+ sym->name, str);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
Index: kconfig/lkc.h
|
@@ -606,7 +607,7 @@
|
||||||
|
{
|
||||||
|
|
||||||
|
if (sym->type == S_TRISTATE && *value != 'n')
|
||||||
|
- fprintf(fp, "%s%s=%c\n", CONFIG_, sym->name, (char)toupper(*value));
|
||||||
|
+ fprintf(fp, "%s=%c\n", sym->name, (char)toupper(*value));
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct conf_printer tristate_printer_cb =
|
||||||
|
Index: b/lkc.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/lkc.h
|
--- a/lkc.h
|
||||||
+++ kconfig/lkc.h
|
+++ b/lkc.h
|
||||||
@@ -42,7 +42,7 @@
|
@@ -37,7 +37,7 @@
|
||||||
#define N_(text) (text)
|
#define N_(text) (text)
|
||||||
|
|
||||||
#ifndef CONFIG_
|
#ifndef CONFIG_
|
||||||
-#define CONFIG_ "CONFIG_"
|
-#define CONFIG_ "CONFIG_"
|
||||||
+#define CONFIG_ "BR2_"
|
+#define CONFIG_ "BR2_"
|
||||||
#endif
|
#endif
|
||||||
|
static inline const char *CONFIG_prefix(void)
|
||||||
#define TF_COMMAND 0x0001
|
{
|
||||||
Index: kconfig/menu.c
|
Index: b/menu.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/menu.c
|
--- a/menu.c
|
||||||
+++ kconfig/menu.c
|
+++ b/menu.c
|
||||||
@@ -597,7 +597,7 @@
|
@@ -635,7 +635,7 @@
|
||||||
|
|
||||||
if (menu_has_help(menu)) {
|
if (menu_has_help(menu)) {
|
||||||
if (sym->name) {
|
if (sym->name)
|
||||||
- str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
|
- str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
|
||||||
+ str_printf(help, "%s:\n\n", sym->name);
|
+ str_printf(help, "%s:\n\n", sym->name);
|
||||||
str_append(help, _(menu_get_help(menu)));
|
help_text = menu_get_help(menu);
|
||||||
str_append(help, "\n");
|
|
||||||
}
|
}
|
||||||
|
str_printf(help, "%s\n", _(help_text));
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
Makefile | 8 ++++----
|
Makefile | 8 ++++----
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
Index: kconfig/Makefile
|
Index: b/Makefile
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/Makefile
|
--- a/Makefile
|
||||||
+++ kconfig/Makefile
|
+++ b/Makefile
|
||||||
@@ -175,11 +175,11 @@
|
@@ -159,11 +159,11 @@
|
||||||
|
|
||||||
hostprogs-y := conf
|
hostprogs-y := conf
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ Index: kconfig/Makefile
|
|||||||
hostprogs-y += mconf
|
hostprogs-y += mconf
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -187,10 +187,10 @@
|
@@ -171,10 +171,10 @@
|
||||||
hostprogs-y += kxgettext
|
hostprogs-y += kxgettext
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
confdata.c | 22 +++++++++++++++++++---
|
confdata.c | 22 +++++++++++++++++++---
|
||||||
1 file changed, 19 insertions(+), 3 deletions(-)
|
1 file changed, 19 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
Index: kconfig/confdata.c
|
Index: b/confdata.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/confdata.c
|
--- a/confdata.c
|
||||||
+++ kconfig/confdata.c
|
+++ b/confdata.c
|
||||||
@@ -982,7 +982,16 @@
|
@@ -1107,7 +1107,16 @@
|
||||||
void conf_set_all_new_symbols(enum conf_def_mode mode)
|
void conf_set_all_new_symbols(enum conf_def_mode mode)
|
||||||
{
|
{
|
||||||
struct symbol *sym, *csym;
|
struct symbol *sym, *csym;
|
||||||
@ -24,7 +24,7 @@ Index: kconfig/confdata.c
|
|||||||
|
|
||||||
for_all_symbols(i, sym) {
|
for_all_symbols(i, sym) {
|
||||||
if (sym_has_value(sym))
|
if (sym_has_value(sym))
|
||||||
@@ -1001,8 +1010,15 @@
|
@@ -1126,8 +1135,15 @@
|
||||||
sym->def[S_DEF_USER].tri = no;
|
sym->def[S_DEF_USER].tri = no;
|
||||||
break;
|
break;
|
||||||
case def_random:
|
case def_random:
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
foo.h | 12 ++++++++++++
|
foo.h | 12 ++++++++++++
|
||||||
2 files changed, 65 insertions(+)
|
2 files changed, 65 insertions(+)
|
||||||
|
|
||||||
Index: kconfig/Makefile.br
|
Index: b/Makefile.br
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ kconfig/Makefile.br
|
+++ b/Makefile.br
|
||||||
@@ -0,0 +1,53 @@
|
@@ -0,0 +1,53 @@
|
||||||
+src := .
|
+src := .
|
||||||
+top_srcdir=../../
|
+top_srcdir=../../
|
||||||
@ -61,10 +61,10 @@ Index: kconfig/Makefile.br
|
|||||||
+
|
+
|
||||||
+FORCE:
|
+FORCE:
|
||||||
+.PHONY: FORCE clean distclean
|
+.PHONY: FORCE clean distclean
|
||||||
Index: kconfig/foo.h
|
Index: b/foo.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ kconfig/foo.h
|
+++ b/foo.h
|
||||||
@@ -0,0 +1,12 @@
|
@@ -0,0 +1,12 @@
|
||||||
+#ifndef __KCONFIG_FOO_H
|
+#ifndef __KCONFIG_FOO_H
|
||||||
+#define __KCONFIG_FOO_H
|
+#define __KCONFIG_FOO_H
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
lxdialog/check-lxdialog.sh | 2 +-
|
lxdialog/check-lxdialog.sh | 2 +-
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
Index: config/lxdialog/check-lxdialog.sh
|
Index: b/lxdialog/check-lxdialog.sh
|
||||||
===================================================================
|
===================================================================
|
||||||
--- config.orig/lxdialog/check-lxdialog.sh
|
--- a/lxdialog/check-lxdialog.sh
|
||||||
+++ config/lxdialog/check-lxdialog.sh
|
+++ b/lxdialog/check-lxdialog.sh
|
||||||
@@ -33,7 +33,7 @@
|
@@ -34,7 +34,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
# Temp file, try to clean up after us
|
# Temp file, try to clean up after us
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
gconf.c | 2 +-
|
gconf.c | 2 +-
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
Index: kconfig/gconf.c
|
Index: b/gconf.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/gconf.c
|
--- a/gconf.c
|
||||||
+++ kconfig/gconf.c
|
+++ b/gconf.c
|
||||||
@@ -1525,7 +1525,7 @@
|
@@ -1486,7 +1486,7 @@
|
||||||
/* Determine GUI path */
|
/* Determine GUI path */
|
||||||
env = getenv(SRCTREE);
|
env = getenv(SRCTREE);
|
||||||
if (env)
|
if (env)
|
||||||
|
@ -4,11 +4,11 @@
|
|||||||
util.c | 16 +++++++++++++--
|
util.c | 16 +++++++++++++--
|
||||||
3 files changed, 61 insertions(+), 18 deletions(-)
|
3 files changed, 61 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
Index: kconfig/conf.c
|
Index: b/conf.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/conf.c
|
--- a/conf.c
|
||||||
+++ kconfig/conf.c
|
+++ b/conf.c
|
||||||
@@ -503,7 +503,6 @@
|
@@ -547,7 +547,6 @@
|
||||||
}
|
}
|
||||||
name = av[optind];
|
name = av[optind];
|
||||||
conf_parse(name);
|
conf_parse(name);
|
||||||
@ -16,10 +16,10 @@ Index: kconfig/conf.c
|
|||||||
if (sync_kconfig) {
|
if (sync_kconfig) {
|
||||||
name = conf_get_configname();
|
name = conf_get_configname();
|
||||||
if (stat(name, &tmpstat)) {
|
if (stat(name, &tmpstat)) {
|
||||||
Index: kconfig/confdata.c
|
Index: b/confdata.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/confdata.c
|
--- a/confdata.c
|
||||||
+++ kconfig/confdata.c
|
+++ b/confdata.c
|
||||||
@@ -71,9 +71,7 @@
|
@@ -71,9 +71,7 @@
|
||||||
|
|
||||||
const char *conf_get_autoconfig_name(void)
|
const char *conf_get_autoconfig_name(void)
|
||||||
@ -31,7 +31,7 @@ Index: kconfig/confdata.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char *conf_expand_value(const char *in)
|
static char *conf_expand_value(const char *in)
|
||||||
@@ -563,6 +561,9 @@
|
@@ -738,6 +736,9 @@
|
||||||
char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
|
char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
|
||||||
char *env;
|
char *env;
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ Index: kconfig/confdata.c
|
|||||||
dirname[0] = 0;
|
dirname[0] = 0;
|
||||||
if (name && name[0]) {
|
if (name && name[0]) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
@@ -661,6 +662,7 @@
|
@@ -832,6 +833,7 @@
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
char path[PATH_MAX+1];
|
char path[PATH_MAX+1];
|
||||||
@ -49,7 +49,7 @@ Index: kconfig/confdata.c
|
|||||||
char *s, *d, c;
|
char *s, *d, c;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
@@ -669,8 +671,20 @@
|
@@ -840,8 +842,20 @@
|
||||||
name = conf_get_autoconfig_name();
|
name = conf_get_autoconfig_name();
|
||||||
conf_read_simple(name, S_DEF_AUTO);
|
conf_read_simple(name, S_DEF_AUTO);
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ Index: kconfig/confdata.c
|
|||||||
|
|
||||||
res = 0;
|
res = 0;
|
||||||
for_all_symbols(i, sym) {
|
for_all_symbols(i, sym) {
|
||||||
@@ -763,9 +777,11 @@
|
@@ -934,9 +948,11 @@
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
@ -87,7 +87,7 @@ Index: kconfig/confdata.c
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -776,25 +792,38 @@
|
@@ -946,25 +962,38 @@
|
||||||
const char *name;
|
const char *name;
|
||||||
FILE *out, *tristate, *out_h;
|
FILE *out, *tristate, *out_h;
|
||||||
int i;
|
int i;
|
||||||
@ -130,7 +130,7 @@ Index: kconfig/confdata.c
|
|||||||
if (!out_h) {
|
if (!out_h) {
|
||||||
fclose(out);
|
fclose(out);
|
||||||
fclose(tristate);
|
fclose(tristate);
|
||||||
@@ -871,19 +900,22 @@
|
@@ -996,19 +1025,22 @@
|
||||||
name = getenv("KCONFIG_AUTOHEADER");
|
name = getenv("KCONFIG_AUTOHEADER");
|
||||||
if (!name)
|
if (!name)
|
||||||
name = "include/generated/autoconf.h";
|
name = "include/generated/autoconf.h";
|
||||||
@ -156,11 +156,11 @@ Index: kconfig/confdata.c
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
Index: kconfig/util.c
|
Index: b/util.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- kconfig.orig/util.c
|
--- a/util.c
|
||||||
+++ kconfig/util.c
|
+++ b/util.c
|
||||||
@@ -32,6 +32,8 @@
|
@@ -34,6 +34,8 @@
|
||||||
/* write a dependency file as used by kbuild to track dependencies */
|
/* write a dependency file as used by kbuild to track dependencies */
|
||||||
int file_write_dep(const char *name)
|
int file_write_dep(const char *name)
|
||||||
{
|
{
|
||||||
@ -169,7 +169,7 @@ Index: kconfig/util.c
|
|||||||
struct symbol *sym, *env_sym;
|
struct symbol *sym, *env_sym;
|
||||||
struct expr *e;
|
struct expr *e;
|
||||||
struct file *file;
|
struct file *file;
|
||||||
@@ -39,7 +41,16 @@
|
@@ -41,7 +43,16 @@
|
||||||
|
|
||||||
if (!name)
|
if (!name)
|
||||||
name = ".kconfig.d";
|
name = ".kconfig.d";
|
||||||
@ -187,7 +187,7 @@ Index: kconfig/util.c
|
|||||||
if (!out)
|
if (!out)
|
||||||
return 1;
|
return 1;
|
||||||
fprintf(out, "deps_config := \\\n");
|
fprintf(out, "deps_config := \\\n");
|
||||||
@@ -70,7 +81,8 @@
|
@@ -72,7 +83,8 @@
|
||||||
|
|
||||||
fprintf(out, "\n$(deps_config): ;\n");
|
fprintf(out, "\n$(deps_config): ;\n");
|
||||||
fclose(out);
|
fclose(out);
|
||||||
|
24
support/kconfig/patches/15-fix-qconf-moc-rule.patch
Normal file
24
support/kconfig/patches/15-fix-qconf-moc-rule.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
Fix the rule that generates the .moc file
|
||||||
|
|
||||||
|
The Linux kernel has a "cmd" make function, but we don't have it in
|
||||||
|
Buildroot, so we need to adjust this rule.
|
||||||
|
|
||||||
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||||
|
|
||||||
|
Index: b/Makefile
|
||||||
|
===================================================================
|
||||||
|
--- a/Makefile
|
||||||
|
+++ b/Makefile
|
||||||
|
@@ -307,11 +307,8 @@
|
||||||
|
|
||||||
|
$(obj)/qconf.o: $(obj)/qconf.moc
|
||||||
|
|
||||||
|
-quiet_cmd_moc = MOC $@
|
||||||
|
- cmd_moc = $(KC_QT_MOC) -i $< -o $@
|
||||||
|
-
|
||||||
|
$(obj)/%.moc: $(src)/%.h $(obj)/.tmp_qtcheck
|
||||||
|
- $(call cmd,moc)
|
||||||
|
+ $(KC_QT_MOC) -i $< -o $@
|
||||||
|
|
||||||
|
# Extract gconf menu items for I18N support
|
||||||
|
$(obj)/gconf.glade.h: $(obj)/gconf.glade
|
@ -7,3 +7,4 @@
|
|||||||
11-use-mktemp-for-lxdialog.patch
|
11-use-mktemp-for-lxdialog.patch
|
||||||
12-fix-glade-file-path.patch
|
12-fix-glade-file-path.patch
|
||||||
14-support-out-of-tree-config.patch
|
14-support-out-of-tree-config.patch
|
||||||
|
15-fix-qconf-moc-rule.patch
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <qglobal.h>
|
#include <qglobal.h>
|
||||||
|
|
||||||
#if QT_VERSION < 0x040000
|
#if QT_VERSION < 0x040000
|
||||||
|
#include <stddef.h>
|
||||||
#include <qmainwindow.h>
|
#include <qmainwindow.h>
|
||||||
#include <qvbox.h>
|
#include <qvbox.h>
|
||||||
#include <qvaluelist.h>
|
#include <qvaluelist.h>
|
||||||
@ -1478,10 +1479,13 @@ void ConfigMainWindow::loadConfig(void)
|
|||||||
ConfigView::updateListAll();
|
ConfigView::updateListAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigMainWindow::saveConfig(void)
|
bool ConfigMainWindow::saveConfig(void)
|
||||||
{
|
{
|
||||||
if (conf_write(NULL))
|
if (conf_write(NULL)) {
|
||||||
QMessageBox::information(this, "qconf", _("Unable to save configuration!"));
|
QMessageBox::information(this, "qconf", _("Unable to save configuration!"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigMainWindow::saveConfigAs(void)
|
void ConfigMainWindow::saveConfigAs(void)
|
||||||
@ -1642,7 +1646,11 @@ void ConfigMainWindow::closeEvent(QCloseEvent* e)
|
|||||||
mb.setButtonText(QMessageBox::Cancel, _("Cancel Exit"));
|
mb.setButtonText(QMessageBox::Cancel, _("Cancel Exit"));
|
||||||
switch (mb.exec()) {
|
switch (mb.exec()) {
|
||||||
case QMessageBox::Yes:
|
case QMessageBox::Yes:
|
||||||
saveConfig();
|
if (saveConfig())
|
||||||
|
e->accept();
|
||||||
|
else
|
||||||
|
e->ignore();
|
||||||
|
break;
|
||||||
case QMessageBox::No:
|
case QMessageBox::No:
|
||||||
e->accept();
|
e->accept();
|
||||||
break;
|
break;
|
||||||
@ -1745,10 +1753,6 @@ int main(int ac, char** av)
|
|||||||
bindtextdomain(PACKAGE, LOCALEDIR);
|
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||||
textdomain(PACKAGE);
|
textdomain(PACKAGE);
|
||||||
|
|
||||||
#ifndef LKC_DIRECT_LINK
|
|
||||||
kconfig_load();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
progname = av[0];
|
progname = av[0];
|
||||||
configApp = new QApplication(ac, av);
|
configApp = new QApplication(ac, av);
|
||||||
if (ac > 1 && av[1][0] == '-') {
|
if (ac > 1 && av[1][0] == '-') {
|
||||||
|
@ -311,7 +311,7 @@ public slots:
|
|||||||
void listFocusChanged(void);
|
void listFocusChanged(void);
|
||||||
void goBack(void);
|
void goBack(void);
|
||||||
void loadConfig(void);
|
void loadConfig(void);
|
||||||
void saveConfig(void);
|
bool saveConfig(void);
|
||||||
void saveConfigAs(void);
|
void saveConfigAs(void);
|
||||||
void searchConfig(void);
|
void searchConfig(void);
|
||||||
void showSingleView(void);
|
void showSingleView(void);
|
||||||
|
@ -43,6 +43,17 @@
|
|||||||
# make oldconfig
|
# make oldconfig
|
||||||
#
|
#
|
||||||
use strict;
|
use strict;
|
||||||
|
use Getopt::Long;
|
||||||
|
|
||||||
|
# set the environment variable LOCALMODCONFIG_DEBUG to get
|
||||||
|
# debug output.
|
||||||
|
my $debugprint = 0;
|
||||||
|
$debugprint = 1 if (defined($ENV{LOCALMODCONFIG_DEBUG}));
|
||||||
|
|
||||||
|
sub dprint {
|
||||||
|
return if (!$debugprint);
|
||||||
|
print STDERR @_;
|
||||||
|
}
|
||||||
|
|
||||||
my $config = ".config";
|
my $config = ".config";
|
||||||
|
|
||||||
@ -89,7 +100,7 @@ my @searchconfigs = (
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
sub find_config {
|
sub read_config {
|
||||||
foreach my $conf (@searchconfigs) {
|
foreach my $conf (@searchconfigs) {
|
||||||
my $file = $conf->{"file"};
|
my $file = $conf->{"file"};
|
||||||
|
|
||||||
@ -104,18 +115,27 @@ sub find_config {
|
|||||||
|
|
||||||
print STDERR "using config: '$file'\n";
|
print STDERR "using config: '$file'\n";
|
||||||
|
|
||||||
open(CIN, "$exec $file |") || die "Failed to run $exec $file";
|
open(my $infile, '-|', "$exec $file") || die "Failed to run $exec $file";
|
||||||
return;
|
my @x = <$infile>;
|
||||||
|
close $infile;
|
||||||
|
return @x;
|
||||||
}
|
}
|
||||||
die "No config file found";
|
die "No config file found";
|
||||||
}
|
}
|
||||||
|
|
||||||
find_config;
|
my @config_file = read_config;
|
||||||
|
|
||||||
|
# Parse options
|
||||||
|
my $localmodconfig = 0;
|
||||||
|
my $localyesconfig = 0;
|
||||||
|
|
||||||
|
GetOptions("localmodconfig" => \$localmodconfig,
|
||||||
|
"localyesconfig" => \$localyesconfig);
|
||||||
|
|
||||||
# Get the build source and top level Kconfig file (passed in)
|
# Get the build source and top level Kconfig file (passed in)
|
||||||
my $ksource = $ARGV[0];
|
my $ksource = ($ARGV[0] ? $ARGV[0] : '.');
|
||||||
my $kconfig = $ARGV[1];
|
my $kconfig = $ARGV[1];
|
||||||
my $lsmod_file = $ARGV[2];
|
my $lsmod_file = $ENV{'LSMOD'};
|
||||||
|
|
||||||
my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
|
my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
|
||||||
chomp @makefiles;
|
chomp @makefiles;
|
||||||
@ -151,8 +171,8 @@ sub read_kconfig {
|
|||||||
$source =~ s/\$$env/$ENV{$env}/;
|
$source =~ s/\$$env/$ENV{$env}/;
|
||||||
}
|
}
|
||||||
|
|
||||||
open(KIN, "$source") || die "Can't open $kconfig";
|
open(my $kinfile, '<', $source) || die "Can't open $kconfig";
|
||||||
while (<KIN>) {
|
while (<$kinfile>) {
|
||||||
chomp;
|
chomp;
|
||||||
|
|
||||||
# Make sure that lines ending with \ continue
|
# Make sure that lines ending with \ continue
|
||||||
@ -178,6 +198,7 @@ sub read_kconfig {
|
|||||||
$state = "NEW";
|
$state = "NEW";
|
||||||
$config = $2;
|
$config = $2;
|
||||||
|
|
||||||
|
# Add depends for 'if' nesting
|
||||||
for (my $i = 0; $i < $iflevel; $i++) {
|
for (my $i = 0; $i < $iflevel; $i++) {
|
||||||
if ($i) {
|
if ($i) {
|
||||||
$depends{$config} .= " " . $ifdeps[$i];
|
$depends{$config} .= " " . $ifdeps[$i];
|
||||||
@ -196,10 +217,11 @@ sub read_kconfig {
|
|||||||
|
|
||||||
# Get the configs that select this config
|
# Get the configs that select this config
|
||||||
} elsif ($state ne "NONE" && /^\s*select\s+(\S+)/) {
|
} elsif ($state ne "NONE" && /^\s*select\s+(\S+)/) {
|
||||||
if (defined($selects{$1})) {
|
my $conf = $1;
|
||||||
$selects{$1} .= " " . $config;
|
if (defined($selects{$conf})) {
|
||||||
|
$selects{$conf} .= " " . $config;
|
||||||
} else {
|
} else {
|
||||||
$selects{$1} = $config;
|
$selects{$conf} = $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
# configs without prompts must be selected
|
# configs without prompts must be selected
|
||||||
@ -227,10 +249,10 @@ sub read_kconfig {
|
|||||||
$state = "NONE";
|
$state = "NONE";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(KIN);
|
close($kinfile);
|
||||||
|
|
||||||
# read in any configs that were found.
|
# read in any configs that were found.
|
||||||
foreach $kconfig (@kconfigs) {
|
foreach my $kconfig (@kconfigs) {
|
||||||
if (!defined($read_kconfigs{$kconfig})) {
|
if (!defined($read_kconfigs{$kconfig})) {
|
||||||
$read_kconfigs{$kconfig} = 1;
|
$read_kconfigs{$kconfig} = 1;
|
||||||
read_kconfig($kconfig);
|
read_kconfig($kconfig);
|
||||||
@ -242,33 +264,63 @@ if ($kconfig) {
|
|||||||
read_kconfig($kconfig);
|
read_kconfig($kconfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Makefiles can use variables to define their dependencies
|
||||||
|
sub convert_vars {
|
||||||
|
my ($line, %vars) = @_;
|
||||||
|
|
||||||
|
my $process = "";
|
||||||
|
|
||||||
|
while ($line =~ s/^(.*?)(\$\((.*?)\))//) {
|
||||||
|
my $start = $1;
|
||||||
|
my $variable = $2;
|
||||||
|
my $var = $3;
|
||||||
|
|
||||||
|
if (defined($vars{$var})) {
|
||||||
|
$process .= $start . $vars{$var};
|
||||||
|
} else {
|
||||||
|
$process .= $start . $variable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$process .= $line;
|
||||||
|
|
||||||
|
return $process;
|
||||||
|
}
|
||||||
|
|
||||||
# Read all Makefiles to map the configs to the objects
|
# Read all Makefiles to map the configs to the objects
|
||||||
foreach my $makefile (@makefiles) {
|
foreach my $makefile (@makefiles) {
|
||||||
|
|
||||||
my $cont = 0;
|
my $line = "";
|
||||||
|
my %make_vars;
|
||||||
|
|
||||||
|
open(my $infile, '<', $makefile) || die "Can't open $makefile";
|
||||||
|
while (<$infile>) {
|
||||||
|
# if this line ends with a backslash, continue
|
||||||
|
chomp;
|
||||||
|
if (/^(.*)\\$/) {
|
||||||
|
$line .= $1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
$line .= $_;
|
||||||
|
$_ = $line;
|
||||||
|
$line = "";
|
||||||
|
|
||||||
open(MIN,$makefile) || die "Can't open $makefile";
|
|
||||||
while (<MIN>) {
|
|
||||||
my $objs;
|
my $objs;
|
||||||
|
|
||||||
# is this a line after a line with a backslash?
|
# Convert variables in a line (could define configs)
|
||||||
if ($cont && /(\S.*)$/) {
|
$_ = convert_vars($_, %make_vars);
|
||||||
$objs = $1;
|
|
||||||
}
|
|
||||||
$cont = 0;
|
|
||||||
|
|
||||||
# collect objects after obj-$(CONFIG_FOO_BAR)
|
# collect objects after obj-$(CONFIG_FOO_BAR)
|
||||||
if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
|
if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
|
||||||
$var = $1;
|
$var = $1;
|
||||||
$objs = $2;
|
$objs = $2;
|
||||||
|
|
||||||
|
# check if variables are set
|
||||||
|
} elsif (/^\s*(\S+)\s*[:]?=\s*(.*\S)/) {
|
||||||
|
$make_vars{$1} = $2;
|
||||||
}
|
}
|
||||||
if (defined($objs)) {
|
if (defined($objs)) {
|
||||||
# test if the line ends with a backslash
|
|
||||||
if ($objs =~ m,(.*)\\$,) {
|
|
||||||
$objs = $1;
|
|
||||||
$cont = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $obj (split /\s+/,$objs) {
|
foreach my $obj (split /\s+/,$objs) {
|
||||||
$obj =~ s/-/_/g;
|
$obj =~ s/-/_/g;
|
||||||
if ($obj =~ /(.*)\.o$/) {
|
if ($obj =~ /(.*)\.o$/) {
|
||||||
@ -289,22 +341,24 @@ foreach my $makefile (@makefiles) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(MIN);
|
close($infile);
|
||||||
}
|
}
|
||||||
|
|
||||||
my %modules;
|
my %modules;
|
||||||
|
my $linfile;
|
||||||
|
|
||||||
if (defined($lsmod_file)) {
|
if (defined($lsmod_file)) {
|
||||||
if ( ! -f $lsmod_file) {
|
if ( ! -f $lsmod_file) {
|
||||||
|
if ( -f $ENV{'objtree'}."/".$lsmod_file) {
|
||||||
|
$lsmod_file = $ENV{'objtree'}."/".$lsmod_file;
|
||||||
|
} else {
|
||||||
die "$lsmod_file not found";
|
die "$lsmod_file not found";
|
||||||
}
|
}
|
||||||
if ( -x $lsmod_file) {
|
|
||||||
# the file is executable, run it
|
|
||||||
open(LIN, "$lsmod_file|");
|
|
||||||
} else {
|
|
||||||
# Just read the contents
|
|
||||||
open(LIN, "$lsmod_file");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $otype = ( -x $lsmod_file) ? '-|' : '<';
|
||||||
|
open($linfile, $otype, $lsmod_file);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
# see what modules are loaded on this system
|
# see what modules are loaded on this system
|
||||||
@ -321,25 +375,27 @@ if (defined($lsmod_file)) {
|
|||||||
$lsmod = "lsmod";
|
$lsmod = "lsmod";
|
||||||
}
|
}
|
||||||
|
|
||||||
open(LIN,"$lsmod|") || die "Can not call lsmod with $lsmod";
|
open($linfile, '-|', $lsmod) || die "Can not call lsmod with $lsmod";
|
||||||
}
|
}
|
||||||
|
|
||||||
while (<LIN>) {
|
while (<$linfile>) {
|
||||||
next if (/^Module/); # Skip the first line.
|
next if (/^Module/); # Skip the first line.
|
||||||
if (/^(\S+)/) {
|
if (/^(\S+)/) {
|
||||||
$modules{$1} = 1;
|
$modules{$1} = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close (LIN);
|
close ($linfile);
|
||||||
|
|
||||||
# add to the configs hash all configs that are needed to enable
|
# add to the configs hash all configs that are needed to enable
|
||||||
# a loaded module.
|
# a loaded module. This is a direct obj-${CONFIG_FOO} += bar.o
|
||||||
|
# where we know we need bar.o so we add FOO to the list.
|
||||||
my %configs;
|
my %configs;
|
||||||
foreach my $module (keys(%modules)) {
|
foreach my $module (keys(%modules)) {
|
||||||
if (defined($objects{$module})) {
|
if (defined($objects{$module})) {
|
||||||
my @arr = @{$objects{$module}};
|
my @arr = @{$objects{$module}};
|
||||||
foreach my $conf (@arr) {
|
foreach my $conf (@arr) {
|
||||||
$configs{$conf} = $module;
|
$configs{$conf} = $module;
|
||||||
|
dprint "$conf added by direct ($module)\n";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# Most likely, someone has a custom (binary?) module loaded.
|
# Most likely, someone has a custom (binary?) module loaded.
|
||||||
@ -347,9 +403,24 @@ foreach my $module (keys(%modules)) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Read the current config, and see what is enabled. We want to
|
||||||
|
# ignore configs that we would not enable anyway.
|
||||||
|
|
||||||
|
my %orig_configs;
|
||||||
my $valid = "A-Za-z_0-9";
|
my $valid = "A-Za-z_0-9";
|
||||||
|
|
||||||
|
foreach my $line (@config_file) {
|
||||||
|
$_ = $line;
|
||||||
|
|
||||||
|
if (/(CONFIG_[$valid]*)=(m|y)/) {
|
||||||
|
$orig_configs{$1} = $2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
my $repeat = 1;
|
my $repeat = 1;
|
||||||
|
|
||||||
|
my $depconfig;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Note, we do not care about operands (like: &&, ||, !) we want to add any
|
# Note, we do not care about operands (like: &&, ||, !) we want to add any
|
||||||
# config that is in the depend list of another config. This script does
|
# config that is in the depend list of another config. This script does
|
||||||
@ -358,7 +429,7 @@ my $repeat = 1;
|
|||||||
# to keep on. If A was on in the original config, B would not have been
|
# to keep on. If A was on in the original config, B would not have been
|
||||||
# and B would not be turned on by this script.
|
# and B would not be turned on by this script.
|
||||||
#
|
#
|
||||||
sub parse_config_dep_select
|
sub parse_config_depends
|
||||||
{
|
{
|
||||||
my ($p) = @_;
|
my ($p) = @_;
|
||||||
|
|
||||||
@ -369,10 +440,16 @@ sub parse_config_dep_select
|
|||||||
|
|
||||||
$p =~ s/^[^$valid]*[$valid]+//;
|
$p =~ s/^[^$valid]*[$valid]+//;
|
||||||
|
|
||||||
|
# We only need to process if the depend config is a module
|
||||||
|
if (!defined($orig_configs{$conf}) || !$orig_configs{conf} eq "m") {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
if (!defined($configs{$conf})) {
|
if (!defined($configs{$conf})) {
|
||||||
# We must make sure that this config has its
|
# We must make sure that this config has its
|
||||||
# dependencies met.
|
# dependencies met.
|
||||||
$repeat = 1; # do again
|
$repeat = 1; # do again
|
||||||
|
dprint "$conf selected by depend $depconfig\n";
|
||||||
$configs{$conf} = 1;
|
$configs{$conf} = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -381,31 +458,132 @@ sub parse_config_dep_select
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while ($repeat) {
|
# Select is treated a bit differently than depends. We call this
|
||||||
$repeat = 0;
|
# when a config has no prompt and requires another config to be
|
||||||
|
# selected. We use to just select all configs that selected this
|
||||||
|
# config, but found that that can balloon into enabling hundreds
|
||||||
|
# of configs that we do not care about.
|
||||||
|
#
|
||||||
|
# The idea is we look at all the configs that select it. If one
|
||||||
|
# is already in our list of configs to enable, then there's nothing
|
||||||
|
# else to do. If there isn't, we pick the first config that was
|
||||||
|
# enabled in the orignal config and use that.
|
||||||
|
sub parse_config_selects
|
||||||
|
{
|
||||||
|
my ($config, $p) = @_;
|
||||||
|
|
||||||
foreach my $config (keys %configs) {
|
my $next_config;
|
||||||
$config =~ s/^CONFIG_//;
|
|
||||||
|
|
||||||
if (defined($depends{$config})) {
|
while ($p =~ /[$valid]/) {
|
||||||
# This config has dependencies. Make sure they are also included
|
|
||||||
parse_config_dep_select $depends{$config};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (defined($prompts{$config}) || !defined($selects{$config})) {
|
if ($p =~ /^[^$valid]*([$valid]+)/) {
|
||||||
|
my $conf = "CONFIG_" . $1;
|
||||||
|
|
||||||
|
$p =~ s/^[^$valid]*[$valid]+//;
|
||||||
|
|
||||||
|
# Make sure that this config exists in the current .config file
|
||||||
|
if (!defined($orig_configs{$conf})) {
|
||||||
|
dprint "$conf not set for $config select\n";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
# config has no prompt and must be selected.
|
# Check if something other than a module selects this config
|
||||||
parse_config_dep_select $selects{$config};
|
if (defined($orig_configs{$conf}) && $orig_configs{$conf} ne "m") {
|
||||||
|
dprint "$conf (non module) selects config, we are good\n";
|
||||||
|
# we are good with this
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
if (defined($configs{$conf})) {
|
||||||
|
dprint "$conf selects $config so we are good\n";
|
||||||
|
# A set config selects this config, we are good
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
# Set this config to be selected
|
||||||
|
if (!defined($next_config)) {
|
||||||
|
$next_config = $conf;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
die "this should never happen";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# If no possible config selected this, then something happened.
|
||||||
|
if (!defined($next_config)) {
|
||||||
|
print STDERR "WARNING: $config is required, but nothing in the\n";
|
||||||
|
print STDERR " current config selects it.\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
# If we are here, then we found no config that is set and
|
||||||
|
# selects this config. Repeat.
|
||||||
|
$repeat = 1;
|
||||||
|
# Make this config need to be selected
|
||||||
|
$configs{$next_config} = 1;
|
||||||
|
dprint "$next_config selected by select $config\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
my %process_selects;
|
||||||
|
|
||||||
|
# loop through all configs, select their dependencies.
|
||||||
|
sub loop_depend {
|
||||||
|
$repeat = 1;
|
||||||
|
|
||||||
|
while ($repeat) {
|
||||||
|
$repeat = 0;
|
||||||
|
|
||||||
|
forloop:
|
||||||
|
foreach my $config (keys %configs) {
|
||||||
|
|
||||||
|
# If this config is not a module, we do not need to process it
|
||||||
|
if (defined($orig_configs{$config}) && $orig_configs{$config} ne "m") {
|
||||||
|
next forloop;
|
||||||
|
}
|
||||||
|
|
||||||
|
$config =~ s/^CONFIG_//;
|
||||||
|
$depconfig = $config;
|
||||||
|
|
||||||
|
if (defined($depends{$config})) {
|
||||||
|
# This config has dependencies. Make sure they are also included
|
||||||
|
parse_config_depends $depends{$config};
|
||||||
|
}
|
||||||
|
|
||||||
|
# If the config has no prompt, then we need to check if a config
|
||||||
|
# that is enabled selected it. Or if we need to enable one.
|
||||||
|
if (!defined($prompts{$config}) && defined($selects{$config})) {
|
||||||
|
$process_selects{$config} = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub loop_select {
|
||||||
|
|
||||||
|
foreach my $config (keys %process_selects) {
|
||||||
|
$config =~ s/^CONFIG_//;
|
||||||
|
|
||||||
|
dprint "Process select $config\n";
|
||||||
|
|
||||||
|
# config has no prompt and must be selected.
|
||||||
|
parse_config_selects $config, $selects{$config};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while ($repeat) {
|
||||||
|
# Get the first set of configs and their dependencies.
|
||||||
|
loop_depend;
|
||||||
|
|
||||||
|
$repeat = 0;
|
||||||
|
|
||||||
|
# Now we need to see if we have to check selects;
|
||||||
|
loop_select;
|
||||||
}
|
}
|
||||||
|
|
||||||
my %setconfigs;
|
my %setconfigs;
|
||||||
|
|
||||||
# Finally, read the .config file and turn off any module enabled that
|
# Finally, read the .config file and turn off any module enabled that
|
||||||
# we could not find a reason to keep enabled.
|
# we could not find a reason to keep enabled.
|
||||||
while(<CIN>) {
|
foreach my $line (@config_file) {
|
||||||
|
$_ = $line;
|
||||||
|
|
||||||
if (/CONFIG_IKCONFIG/) {
|
if (/CONFIG_IKCONFIG/) {
|
||||||
if (/# CONFIG_IKCONFIG is not set/) {
|
if (/# CONFIG_IKCONFIG is not set/) {
|
||||||
@ -421,7 +599,13 @@ while(<CIN>) {
|
|||||||
|
|
||||||
if (/^(CONFIG.*)=(m|y)/) {
|
if (/^(CONFIG.*)=(m|y)/) {
|
||||||
if (defined($configs{$1})) {
|
if (defined($configs{$1})) {
|
||||||
|
if ($localyesconfig) {
|
||||||
|
$setconfigs{$1} = 'y';
|
||||||
|
print "$1=y\n";
|
||||||
|
next;
|
||||||
|
} else {
|
||||||
$setconfigs{$1} = $2;
|
$setconfigs{$1} = $2;
|
||||||
|
}
|
||||||
} elsif ($2 eq "m") {
|
} elsif ($2 eq "m") {
|
||||||
print "# $1 is not set\n";
|
print "# $1 is not set\n";
|
||||||
next;
|
next;
|
||||||
@ -429,7 +613,6 @@ while(<CIN>) {
|
|||||||
}
|
}
|
||||||
print;
|
print;
|
||||||
}
|
}
|
||||||
close(CIN);
|
|
||||||
|
|
||||||
# Integrity check, make sure all modules that we want enabled do
|
# Integrity check, make sure all modules that we want enabled do
|
||||||
# indeed have their configs set.
|
# indeed have their configs set.
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
#include <sys/utsname.h>
|
#include <sys/utsname.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
struct symbol symbol_yes = {
|
struct symbol symbol_yes = {
|
||||||
@ -263,11 +262,18 @@ static struct symbol *sym_calc_choice(struct symbol *sym)
|
|||||||
struct symbol *def_sym;
|
struct symbol *def_sym;
|
||||||
struct property *prop;
|
struct property *prop;
|
||||||
struct expr *e;
|
struct expr *e;
|
||||||
|
int flags;
|
||||||
|
|
||||||
/* first calculate all choice values' visibilities */
|
/* first calculate all choice values' visibilities */
|
||||||
|
flags = sym->flags;
|
||||||
prop = sym_get_choice_prop(sym);
|
prop = sym_get_choice_prop(sym);
|
||||||
expr_list_for_each_sym(prop->expr, e, def_sym)
|
expr_list_for_each_sym(prop->expr, e, def_sym) {
|
||||||
sym_calc_visibility(def_sym);
|
sym_calc_visibility(def_sym);
|
||||||
|
if (def_sym->visible != no)
|
||||||
|
flags &= def_sym->flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
sym->flags &= flags | ~SYMBOL_DEF_USER;
|
||||||
|
|
||||||
/* is the user choice visible? */
|
/* is the user choice visible? */
|
||||||
def_sym = sym->def[S_DEF_USER].val;
|
def_sym = sym->def[S_DEF_USER].val;
|
||||||
@ -650,11 +656,11 @@ bool sym_set_string_value(struct symbol *sym, const char *newval)
|
|||||||
size = strlen(newval) + 1;
|
size = strlen(newval) + 1;
|
||||||
if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
|
if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
|
||||||
size += 2;
|
size += 2;
|
||||||
sym->def[S_DEF_USER].val = val = malloc(size);
|
sym->def[S_DEF_USER].val = val = xmalloc(size);
|
||||||
*val++ = '0';
|
*val++ = '0';
|
||||||
*val++ = 'x';
|
*val++ = 'x';
|
||||||
} else if (!oldval || strcmp(oldval, newval))
|
} else if (!oldval || strcmp(oldval, newval))
|
||||||
sym->def[S_DEF_USER].val = val = malloc(size);
|
sym->def[S_DEF_USER].val = val = xmalloc(size);
|
||||||
else
|
else
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -751,7 +757,8 @@ const char *sym_get_string_value(struct symbol *sym)
|
|||||||
case no:
|
case no:
|
||||||
return "n";
|
return "n";
|
||||||
case mod:
|
case mod:
|
||||||
return "m";
|
sym_calc_value(modules_sym);
|
||||||
|
return (modules_sym->curr.tri == no) ? "n" : "m";
|
||||||
case yes:
|
case yes:
|
||||||
return "y";
|
return "y";
|
||||||
}
|
}
|
||||||
@ -805,7 +812,7 @@ struct symbol *sym_lookup(const char *name, int flags)
|
|||||||
hash = 0;
|
hash = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
symbol = malloc(sizeof(*symbol));
|
symbol = xmalloc(sizeof(*symbol));
|
||||||
memset(symbol, 0, sizeof(*symbol));
|
memset(symbol, 0, sizeof(*symbol));
|
||||||
symbol->name = new_name;
|
symbol->name = new_name;
|
||||||
symbol->type = S_UNKNOWN;
|
symbol->type = S_UNKNOWN;
|
||||||
@ -856,7 +863,7 @@ const char *sym_expand_string_value(const char *in)
|
|||||||
size_t reslen;
|
size_t reslen;
|
||||||
|
|
||||||
reslen = strlen(in) + 1;
|
reslen = strlen(in) + 1;
|
||||||
res = malloc(reslen);
|
res = xmalloc(reslen);
|
||||||
res[0] = '\0';
|
res[0] = '\0';
|
||||||
|
|
||||||
while ((src = strchr(in, '$'))) {
|
while ((src = strchr(in, '$'))) {
|
||||||
@ -893,6 +900,49 @@ const char *sym_expand_string_value(const char *in)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *sym_escape_string_value(const char *in)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
size_t reslen;
|
||||||
|
char *res;
|
||||||
|
size_t l;
|
||||||
|
|
||||||
|
reslen = strlen(in) + strlen("\"\"") + 1;
|
||||||
|
|
||||||
|
p = in;
|
||||||
|
for (;;) {
|
||||||
|
l = strcspn(p, "\"\\");
|
||||||
|
p += l;
|
||||||
|
|
||||||
|
if (p[0] == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
reslen++;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = xmalloc(reslen);
|
||||||
|
res[0] = '\0';
|
||||||
|
|
||||||
|
strcat(res, "\"");
|
||||||
|
|
||||||
|
p = in;
|
||||||
|
for (;;) {
|
||||||
|
l = strcspn(p, "\"\\");
|
||||||
|
strncat(res, p, l);
|
||||||
|
p += l;
|
||||||
|
|
||||||
|
if (p[0] == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
strcat(res, "\\");
|
||||||
|
strncat(res, p++, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat(res, "\"");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
struct symbol **sym_re_search(const char *pattern)
|
struct symbol **sym_re_search(const char *pattern)
|
||||||
{
|
{
|
||||||
struct symbol *sym, **sym_arr = NULL;
|
struct symbol *sym, **sym_arr = NULL;
|
||||||
@ -1178,7 +1228,7 @@ struct property *prop_alloc(enum prop_type type, struct symbol *sym)
|
|||||||
struct property *prop;
|
struct property *prop;
|
||||||
struct property **propp;
|
struct property **propp;
|
||||||
|
|
||||||
prop = malloc(sizeof(*prop));
|
prop = xmalloc(sizeof(*prop));
|
||||||
memset(prop, 0, sizeof(*prop));
|
memset(prop, 0, sizeof(*prop));
|
||||||
prop->type = type;
|
prop->type = type;
|
||||||
prop->sym = sym;
|
prop->sym = sym;
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
* Released under the terms of the GNU GPL v2.0.
|
* Released under the terms of the GNU GPL v2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
@ -21,7 +23,7 @@ struct file *file_lookup(const char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
file = malloc(sizeof(*file));
|
file = xmalloc(sizeof(*file));
|
||||||
memset(file, 0, sizeof(*file));
|
memset(file, 0, sizeof(*file));
|
||||||
file->name = file_name;
|
file->name = file_name;
|
||||||
file->next = file_list;
|
file->next = file_list;
|
||||||
@ -91,7 +93,7 @@ int file_write_dep(const char *name)
|
|||||||
struct gstr str_new(void)
|
struct gstr str_new(void)
|
||||||
{
|
{
|
||||||
struct gstr gs;
|
struct gstr gs;
|
||||||
gs.s = malloc(sizeof(char) * 64);
|
gs.s = xmalloc(sizeof(char) * 64);
|
||||||
gs.len = 64;
|
gs.len = 64;
|
||||||
gs.max_width = 0;
|
gs.max_width = 0;
|
||||||
strcpy(gs.s, "\0");
|
strcpy(gs.s, "\0");
|
||||||
@ -148,3 +150,22 @@ const char *str_get(struct gstr *gs)
|
|||||||
return gs->s;
|
return gs->s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *xmalloc(size_t size)
|
||||||
|
{
|
||||||
|
void *p = malloc(size);
|
||||||
|
if (p)
|
||||||
|
return p;
|
||||||
|
fprintf(stderr, "Out of memory.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *xcalloc(size_t nmemb, size_t size)
|
||||||
|
{
|
||||||
|
void *p = calloc(nmemb, size);
|
||||||
|
if (p)
|
||||||
|
return p;
|
||||||
|
fprintf(stderr, "Out of memory.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
struct kconf_id;
|
struct kconf_id;
|
||||||
|
|
||||||
static struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
|
static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
|
||||||
|
|
||||||
%%
|
%%
|
||||||
mainmenu, T_MAINMENU, TF_COMMAND
|
mainmenu, T_MAINMENU, TF_COMMAND
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* ANSI-C code produced by gperf version 3.0.3 */
|
/* ANSI-C code produced by gperf version 3.0.4 */
|
||||||
/* Command-line: gperf */
|
/* Command-line: gperf -t --output-file scripts/kconfig/zconf.hash.c_shipped -a -C -E -g -k '1,3,$' -p -t scripts/kconfig/zconf.gperf */
|
||||||
/* Computed positions: -k'1,3' */
|
|
||||||
|
|
||||||
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
|
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
|
||||||
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
|
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
|
||||||
@ -29,10 +28,11 @@
|
|||||||
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
|
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#line 10 "scripts/kconfig/zconf.gperf"
|
||||||
struct kconf_id;
|
struct kconf_id;
|
||||||
|
|
||||||
static struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
|
static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
|
||||||
/* maximum key range = 50, duplicates = 0 */
|
/* maximum key range = 71, duplicates = 0 */
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__inline
|
__inline
|
||||||
@ -44,34 +44,34 @@ inline
|
|||||||
static unsigned int
|
static unsigned int
|
||||||
kconf_id_hash (register const char *str, register unsigned int len)
|
kconf_id_hash (register const char *str, register unsigned int len)
|
||||||
{
|
{
|
||||||
static unsigned char asso_values[] =
|
static const unsigned char asso_values[] =
|
||||||
{
|
{
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 40, 5,
|
73, 73, 73, 73, 73, 73, 73, 73, 25, 25,
|
||||||
0, 0, 5, 52, 0, 20, 52, 52, 10, 20,
|
0, 0, 0, 5, 0, 0, 73, 73, 5, 0,
|
||||||
5, 0, 35, 52, 0, 30, 0, 15, 0, 52,
|
10, 5, 45, 73, 20, 20, 0, 15, 15, 73,
|
||||||
15, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
20, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
|
73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
|
||||||
52, 52, 52, 52, 52, 52
|
73, 73, 73, 73, 73, 73
|
||||||
};
|
};
|
||||||
register int hval = len;
|
register int hval = len;
|
||||||
|
|
||||||
@ -85,87 +85,87 @@ kconf_id_hash (register const char *str, register unsigned int len)
|
|||||||
hval += asso_values[(unsigned char)str[0]];
|
hval += asso_values[(unsigned char)str[0]];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return hval;
|
return hval + asso_values[(unsigned char)str[len - 1]];
|
||||||
}
|
}
|
||||||
|
|
||||||
struct kconf_id_strings_t
|
struct kconf_id_strings_t
|
||||||
{
|
{
|
||||||
char kconf_id_strings_str2[sizeof("on")];
|
char kconf_id_strings_str2[sizeof("if")];
|
||||||
char kconf_id_strings_str3[sizeof("env")];
|
char kconf_id_strings_str3[sizeof("int")];
|
||||||
char kconf_id_strings_str5[sizeof("endif")];
|
char kconf_id_strings_str5[sizeof("endif")];
|
||||||
char kconf_id_strings_str6[sizeof("option")];
|
char kconf_id_strings_str7[sizeof("default")];
|
||||||
char kconf_id_strings_str7[sizeof("endmenu")];
|
char kconf_id_strings_str8[sizeof("tristate")];
|
||||||
char kconf_id_strings_str8[sizeof("optional")];
|
|
||||||
char kconf_id_strings_str9[sizeof("endchoice")];
|
char kconf_id_strings_str9[sizeof("endchoice")];
|
||||||
char kconf_id_strings_str10[sizeof("range")];
|
char kconf_id_strings_str12[sizeof("def_tristate")];
|
||||||
char kconf_id_strings_str11[sizeof("choice")];
|
|
||||||
char kconf_id_strings_str12[sizeof("default")];
|
|
||||||
char kconf_id_strings_str13[sizeof("def_bool")];
|
char kconf_id_strings_str13[sizeof("def_bool")];
|
||||||
char kconf_id_strings_str14[sizeof("help")];
|
char kconf_id_strings_str14[sizeof("defconfig_list")];
|
||||||
char kconf_id_strings_str16[sizeof("config")];
|
char kconf_id_strings_str17[sizeof("on")];
|
||||||
char kconf_id_strings_str17[sizeof("def_tristate")];
|
char kconf_id_strings_str18[sizeof("optional")];
|
||||||
char kconf_id_strings_str18[sizeof("hex")];
|
char kconf_id_strings_str21[sizeof("option")];
|
||||||
char kconf_id_strings_str19[sizeof("defconfig_list")];
|
char kconf_id_strings_str22[sizeof("endmenu")];
|
||||||
char kconf_id_strings_str22[sizeof("if")];
|
char kconf_id_strings_str23[sizeof("mainmenu")];
|
||||||
char kconf_id_strings_str23[sizeof("int")];
|
char kconf_id_strings_str25[sizeof("menuconfig")];
|
||||||
char kconf_id_strings_str27[sizeof("modules")];
|
char kconf_id_strings_str27[sizeof("modules")];
|
||||||
char kconf_id_strings_str28[sizeof("tristate")];
|
|
||||||
char kconf_id_strings_str29[sizeof("menu")];
|
char kconf_id_strings_str29[sizeof("menu")];
|
||||||
|
char kconf_id_strings_str31[sizeof("select")];
|
||||||
char kconf_id_strings_str32[sizeof("comment")];
|
char kconf_id_strings_str32[sizeof("comment")];
|
||||||
char kconf_id_strings_str35[sizeof("menuconfig")];
|
char kconf_id_strings_str33[sizeof("env")];
|
||||||
char kconf_id_strings_str36[sizeof("string")];
|
char kconf_id_strings_str35[sizeof("range")];
|
||||||
char kconf_id_strings_str37[sizeof("visible")];
|
char kconf_id_strings_str36[sizeof("choice")];
|
||||||
char kconf_id_strings_str41[sizeof("prompt")];
|
char kconf_id_strings_str39[sizeof("bool")];
|
||||||
char kconf_id_strings_str42[sizeof("depends")];
|
char kconf_id_strings_str41[sizeof("source")];
|
||||||
char kconf_id_strings_str44[sizeof("bool")];
|
char kconf_id_strings_str42[sizeof("visible")];
|
||||||
char kconf_id_strings_str46[sizeof("select")];
|
char kconf_id_strings_str43[sizeof("hex")];
|
||||||
|
char kconf_id_strings_str46[sizeof("config")];
|
||||||
char kconf_id_strings_str47[sizeof("boolean")];
|
char kconf_id_strings_str47[sizeof("boolean")];
|
||||||
char kconf_id_strings_str48[sizeof("mainmenu")];
|
char kconf_id_strings_str51[sizeof("string")];
|
||||||
char kconf_id_strings_str51[sizeof("source")];
|
char kconf_id_strings_str54[sizeof("help")];
|
||||||
|
char kconf_id_strings_str56[sizeof("prompt")];
|
||||||
|
char kconf_id_strings_str72[sizeof("depends")];
|
||||||
};
|
};
|
||||||
static struct kconf_id_strings_t kconf_id_strings_contents =
|
static const struct kconf_id_strings_t kconf_id_strings_contents =
|
||||||
{
|
{
|
||||||
"on",
|
|
||||||
"env",
|
|
||||||
"endif",
|
|
||||||
"option",
|
|
||||||
"endmenu",
|
|
||||||
"optional",
|
|
||||||
"endchoice",
|
|
||||||
"range",
|
|
||||||
"choice",
|
|
||||||
"default",
|
|
||||||
"def_bool",
|
|
||||||
"help",
|
|
||||||
"config",
|
|
||||||
"def_tristate",
|
|
||||||
"hex",
|
|
||||||
"defconfig_list",
|
|
||||||
"if",
|
"if",
|
||||||
"int",
|
"int",
|
||||||
"modules",
|
"endif",
|
||||||
|
"default",
|
||||||
"tristate",
|
"tristate",
|
||||||
"menu",
|
"endchoice",
|
||||||
"comment",
|
"def_tristate",
|
||||||
"menuconfig",
|
"def_bool",
|
||||||
"string",
|
"defconfig_list",
|
||||||
"visible",
|
"on",
|
||||||
"prompt",
|
"optional",
|
||||||
"depends",
|
"option",
|
||||||
"bool",
|
"endmenu",
|
||||||
"select",
|
|
||||||
"boolean",
|
|
||||||
"mainmenu",
|
"mainmenu",
|
||||||
"source"
|
"menuconfig",
|
||||||
|
"modules",
|
||||||
|
"menu",
|
||||||
|
"select",
|
||||||
|
"comment",
|
||||||
|
"env",
|
||||||
|
"range",
|
||||||
|
"choice",
|
||||||
|
"bool",
|
||||||
|
"source",
|
||||||
|
"visible",
|
||||||
|
"hex",
|
||||||
|
"config",
|
||||||
|
"boolean",
|
||||||
|
"string",
|
||||||
|
"help",
|
||||||
|
"prompt",
|
||||||
|
"depends"
|
||||||
};
|
};
|
||||||
#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
|
#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__inline
|
__inline
|
||||||
#ifdef __GNUC_STDC_INLINE__
|
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||||
__attribute__ ((__gnu_inline__))
|
__attribute__ ((__gnu_inline__))
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
struct kconf_id *
|
const struct kconf_id *
|
||||||
kconf_id_lookup (register const char *str, register unsigned int len)
|
kconf_id_lookup (register const char *str, register unsigned int len)
|
||||||
{
|
{
|
||||||
enum
|
enum
|
||||||
@ -174,54 +174,94 @@ kconf_id_lookup (register const char *str, register unsigned int len)
|
|||||||
MIN_WORD_LENGTH = 2,
|
MIN_WORD_LENGTH = 2,
|
||||||
MAX_WORD_LENGTH = 14,
|
MAX_WORD_LENGTH = 14,
|
||||||
MIN_HASH_VALUE = 2,
|
MIN_HASH_VALUE = 2,
|
||||||
MAX_HASH_VALUE = 51
|
MAX_HASH_VALUE = 72
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct kconf_id wordlist[] =
|
static const struct kconf_id wordlist[] =
|
||||||
{
|
{
|
||||||
{-1}, {-1},
|
{-1}, {-1},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_ON, TF_PARAM},
|
#line 25 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_OPT_ENV, TF_OPTION},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2, T_IF, TF_COMMAND|TF_PARAM},
|
||||||
|
#line 36 "scripts/kconfig/zconf.gperf"
|
||||||
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3, T_TYPE, TF_COMMAND, S_INT},
|
||||||
{-1},
|
{-1},
|
||||||
|
#line 26 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5, T_ENDIF, TF_COMMAND},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str6, T_OPTION, TF_COMMAND},
|
{-1},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_ENDMENU, TF_COMMAND},
|
#line 29 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8, T_OPTIONAL, TF_COMMAND},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
|
||||||
|
#line 31 "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"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9, T_ENDCHOICE, TF_COMMAND},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str10, T_RANGE, TF_COMMAND},
|
{-1}, {-1},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str11, T_CHOICE, TF_COMMAND},
|
#line 32 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_UNKNOWN},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12, T_DEFAULT, TF_COMMAND, S_TRISTATE},
|
||||||
|
#line 35 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13, T_DEFAULT, TF_COMMAND, S_BOOLEAN},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_HELP, TF_COMMAND},
|
#line 45 "scripts/kconfig/zconf.gperf"
|
||||||
{-1},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14, T_OPT_DEFCONFIG_LIST,TF_OPTION},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str16, T_CONFIG, TF_COMMAND},
|
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_DEFAULT, TF_COMMAND, S_TRISTATE},
|
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18, T_TYPE, TF_COMMAND, S_HEX},
|
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str19, T_OPT_DEFCONFIG_LIST,TF_OPTION},
|
|
||||||
{-1}, {-1},
|
{-1}, {-1},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22, T_IF, TF_COMMAND|TF_PARAM},
|
#line 43 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23, T_TYPE, TF_COMMAND, S_INT},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17, T_ON, TF_PARAM},
|
||||||
{-1}, {-1}, {-1},
|
#line 28 "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"
|
||||||
|
{(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"
|
||||||
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25, T_MENUCONFIG, TF_COMMAND},
|
||||||
|
{-1},
|
||||||
|
#line 44 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_OPT_MODULES, TF_OPTION},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27, T_OPT_MODULES, TF_OPTION},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str28, T_TYPE, TF_COMMAND, S_TRISTATE},
|
{-1},
|
||||||
|
#line 16 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29, T_MENU, TF_COMMAND},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29, T_MENU, TF_COMMAND},
|
||||||
{-1}, {-1},
|
{-1},
|
||||||
|
#line 39 "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"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32, T_COMMENT, TF_COMMAND},
|
||||||
|
#line 46 "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"
|
||||||
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_RANGE, TF_COMMAND},
|
||||||
|
#line 19 "scripts/kconfig/zconf.gperf"
|
||||||
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_CHOICE, TF_COMMAND},
|
||||||
{-1}, {-1},
|
{-1}, {-1},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35, T_MENUCONFIG, TF_COMMAND},
|
#line 33 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36, T_TYPE, TF_COMMAND, S_STRING},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str39, T_TYPE, TF_COMMAND, S_BOOLEAN},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str37, T_VISIBLE, TF_COMMAND},
|
|
||||||
{-1}, {-1}, {-1},
|
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_PROMPT, TF_COMMAND},
|
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str42, T_DEPENDS, TF_COMMAND},
|
|
||||||
{-1},
|
{-1},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str44, T_TYPE, TF_COMMAND, S_BOOLEAN},
|
#line 18 "scripts/kconfig/zconf.gperf"
|
||||||
{-1},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41, T_SOURCE, TF_COMMAND},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_SELECT, TF_COMMAND},
|
#line 41 "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"
|
||||||
|
{(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"
|
||||||
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46, T_CONFIG, TF_COMMAND},
|
||||||
|
#line 34 "scripts/kconfig/zconf.gperf"
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str47, T_TYPE, TF_COMMAND, S_BOOLEAN},
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str47, T_TYPE, TF_COMMAND, S_BOOLEAN},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str48, T_MAINMENU, TF_COMMAND},
|
{-1}, {-1}, {-1},
|
||||||
|
#line 38 "scripts/kconfig/zconf.gperf"
|
||||||
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str51, T_TYPE, TF_COMMAND, S_STRING},
|
||||||
{-1}, {-1},
|
{-1}, {-1},
|
||||||
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str51, T_SOURCE, TF_COMMAND}
|
#line 24 "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"
|
||||||
|
{(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"
|
||||||
|
{(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str72, T_DEPENDS, TF_COMMAND}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
||||||
@ -242,4 +282,5 @@ kconf_id_lookup (register const char *str, register unsigned int len)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#line 47 "scripts/kconfig/zconf.gperf"
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
%option backup nostdinit noyywrap never-interactive full ecs
|
%option nostdinit noyywrap never-interactive full ecs
|
||||||
%option 8bit backup nodefault perf-report perf-report
|
%option 8bit nodefault perf-report perf-report
|
||||||
%option noinput
|
%option noinput
|
||||||
%x COMMAND HELP STRING PARAM
|
%x COMMAND HELP STRING PARAM
|
||||||
%{
|
%{
|
||||||
@ -14,7 +14,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
#define START_STRSIZE 16
|
#define START_STRSIZE 16
|
||||||
@ -41,7 +40,7 @@ static void zconf_endfile(void);
|
|||||||
|
|
||||||
static void new_string(void)
|
static void new_string(void)
|
||||||
{
|
{
|
||||||
text = malloc(START_STRSIZE);
|
text = xmalloc(START_STRSIZE);
|
||||||
text_asize = START_STRSIZE;
|
text_asize = START_STRSIZE;
|
||||||
text_size = 0;
|
text_size = 0;
|
||||||
*text = 0;
|
*text = 0;
|
||||||
@ -63,7 +62,7 @@ static void append_string(const char *str, int size)
|
|||||||
|
|
||||||
static void alloc_string(const char *str, int size)
|
static void alloc_string(const char *str, int size)
|
||||||
{
|
{
|
||||||
text = malloc(size + 1);
|
text = xmalloc(size + 1);
|
||||||
memcpy(text, str, size);
|
memcpy(text, str, size);
|
||||||
text[size] = 0;
|
text[size] = 0;
|
||||||
}
|
}
|
||||||
@ -96,7 +95,7 @@ n [A-Za-z0-9_]
|
|||||||
|
|
||||||
<COMMAND>{
|
<COMMAND>{
|
||||||
{n}+ {
|
{n}+ {
|
||||||
struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
|
const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
|
||||||
BEGIN(PARAM);
|
BEGIN(PARAM);
|
||||||
current_pos.file = current_file;
|
current_pos.file = current_file;
|
||||||
current_pos.lineno = current_file->lineno;
|
current_pos.lineno = current_file->lineno;
|
||||||
@ -132,7 +131,7 @@ n [A-Za-z0-9_]
|
|||||||
\n BEGIN(INITIAL); current_file->lineno++; return T_EOL;
|
\n BEGIN(INITIAL); current_file->lineno++; return T_EOL;
|
||||||
--- /* ignore */
|
--- /* ignore */
|
||||||
({n}|[-/.])+ {
|
({n}|[-/.])+ {
|
||||||
struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
|
const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
|
||||||
if (id && id->flags & TF_PARAM) {
|
if (id && id->flags & TF_PARAM) {
|
||||||
zconflval.id = id;
|
zconflval.id = id;
|
||||||
return id->token;
|
return id->token;
|
||||||
@ -289,7 +288,7 @@ void zconf_initscan(const char *name)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
current_buf = malloc(sizeof(*current_buf));
|
current_buf = xmalloc(sizeof(*current_buf));
|
||||||
memset(current_buf, 0, sizeof(*current_buf));
|
memset(current_buf, 0, sizeof(*current_buf));
|
||||||
|
|
||||||
current_file = file_lookup(name);
|
current_file = file_lookup(name);
|
||||||
@ -300,7 +299,7 @@ void zconf_nextfile(const char *name)
|
|||||||
{
|
{
|
||||||
struct file *iter;
|
struct file *iter;
|
||||||
struct file *file = file_lookup(name);
|
struct file *file = file_lookup(name);
|
||||||
struct buffer *buf = malloc(sizeof(*buf));
|
struct buffer *buf = xmalloc(sizeof(*buf));
|
||||||
memset(buf, 0, sizeof(*buf));
|
memset(buf, 0, sizeof(*buf));
|
||||||
|
|
||||||
current_buf->state = YY_CURRENT_BUFFER;
|
current_buf->state = YY_CURRENT_BUFFER;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
#line 3 "scripts/kconfig/lex.zconf.c"
|
#line 3 "scripts/kconfig/zconf.lex.c_shipped"
|
||||||
|
|
||||||
#define YY_INT_ALIGNED short int
|
#define YY_INT_ALIGNED short int
|
||||||
|
|
||||||
@ -72,6 +72,7 @@ typedef int flex_int32_t;
|
|||||||
typedef unsigned char flex_uint8_t;
|
typedef unsigned char flex_uint8_t;
|
||||||
typedef unsigned short int flex_uint16_t;
|
typedef unsigned short int flex_uint16_t;
|
||||||
typedef unsigned int flex_uint32_t;
|
typedef unsigned int flex_uint32_t;
|
||||||
|
#endif /* ! C99 */
|
||||||
|
|
||||||
/* Limits of integral types. */
|
/* Limits of integral types. */
|
||||||
#ifndef INT8_MIN
|
#ifndef INT8_MIN
|
||||||
@ -102,8 +103,6 @@ typedef unsigned int flex_uint32_t;
|
|||||||
#define UINT32_MAX (4294967295U)
|
#define UINT32_MAX (4294967295U)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* ! C99 */
|
|
||||||
|
|
||||||
#endif /* ! FLEXINT_H */
|
#endif /* ! FLEXINT_H */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -160,15 +159,7 @@ typedef unsigned int flex_uint32_t;
|
|||||||
|
|
||||||
/* Size of default input buffer. */
|
/* Size of default input buffer. */
|
||||||
#ifndef YY_BUF_SIZE
|
#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
|
#define YY_BUF_SIZE 16384
|
||||||
#endif /* __ia64__ */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The state buf must be large enough to hold one state per character in the main buffer.
|
/* The state buf must be large enough to hold one state per character in the main buffer.
|
||||||
@ -785,7 +776,6 @@ char *zconftext;
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
#define START_STRSIZE 16
|
#define START_STRSIZE 16
|
||||||
@ -812,7 +802,7 @@ static void zconf_endfile(void);
|
|||||||
|
|
||||||
static void new_string(void)
|
static void new_string(void)
|
||||||
{
|
{
|
||||||
text = malloc(START_STRSIZE);
|
text = xmalloc(START_STRSIZE);
|
||||||
text_asize = START_STRSIZE;
|
text_asize = START_STRSIZE;
|
||||||
text_size = 0;
|
text_size = 0;
|
||||||
*text = 0;
|
*text = 0;
|
||||||
@ -834,7 +824,7 @@ static void append_string(const char *str, int size)
|
|||||||
|
|
||||||
static void alloc_string(const char *str, int size)
|
static void alloc_string(const char *str, int size)
|
||||||
{
|
{
|
||||||
text = malloc(size + 1);
|
text = xmalloc(size + 1);
|
||||||
memcpy(text, str, size);
|
memcpy(text, str, size);
|
||||||
text[size] = 0;
|
text[size] = 0;
|
||||||
}
|
}
|
||||||
@ -922,12 +912,7 @@ static int input (void );
|
|||||||
|
|
||||||
/* Amount of stuff to slurp up with each read. */
|
/* Amount of stuff to slurp up with each read. */
|
||||||
#ifndef YY_READ_BUF_SIZE
|
#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
|
#define YY_READ_BUF_SIZE 8192
|
||||||
#endif /* __ia64__ */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Copy whatever the last rule matched to the standard output. */
|
/* Copy whatever the last rule matched to the standard output. */
|
||||||
@ -1100,7 +1085,7 @@ YY_RULE_SETUP
|
|||||||
case 6:
|
case 6:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{
|
{
|
||||||
struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
|
const struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
|
||||||
BEGIN(PARAM);
|
BEGIN(PARAM);
|
||||||
current_pos.file = current_file;
|
current_pos.file = current_file;
|
||||||
current_pos.lineno = current_file->lineno;
|
current_pos.lineno = current_file->lineno;
|
||||||
@ -1175,7 +1160,7 @@ YY_RULE_SETUP
|
|||||||
case 19:
|
case 19:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{
|
{
|
||||||
struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
|
const struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
|
||||||
if (id && id->flags & TF_PARAM) {
|
if (id && id->flags & TF_PARAM) {
|
||||||
zconflval.id = id;
|
zconflval.id = id;
|
||||||
return id->token;
|
return id->token;
|
||||||
@ -2073,8 +2058,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
|
/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
|
||||||
* scan from a @e copy of @a bytes.
|
* scan from a @e copy of @a bytes.
|
||||||
* @param yybytes the byte buffer to scan
|
* @param bytes the byte buffer to scan
|
||||||
* @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
|
* @param len the number of bytes in the buffer pointed to by @a bytes.
|
||||||
*
|
*
|
||||||
* @return the newly allocated buffer state object.
|
* @return the newly allocated buffer state object.
|
||||||
*/
|
*/
|
||||||
@ -2358,7 +2343,7 @@ void zconf_initscan(const char *name)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
current_buf = malloc(sizeof(*current_buf));
|
current_buf = xmalloc(sizeof(*current_buf));
|
||||||
memset(current_buf, 0, sizeof(*current_buf));
|
memset(current_buf, 0, sizeof(*current_buf));
|
||||||
|
|
||||||
current_file = file_lookup(name);
|
current_file = file_lookup(name);
|
||||||
@ -2369,7 +2354,7 @@ void zconf_nextfile(const char *name)
|
|||||||
{
|
{
|
||||||
struct file *iter;
|
struct file *iter;
|
||||||
struct file *file = file_lookup(name);
|
struct file *file = file_lookup(name);
|
||||||
struct buffer *buf = malloc(sizeof(*buf));
|
struct buffer *buf = xmalloc(sizeof(*buf));
|
||||||
memset(buf, 0, sizeof(*buf));
|
memset(buf, 0, sizeof(*buf));
|
||||||
|
|
||||||
current_buf->state = YY_CURRENT_BUFFER;
|
current_buf->state = YY_CURRENT_BUFFER;
|
@ -1,10 +1,9 @@
|
|||||||
|
/* A Bison parser, made by GNU Bison 2.4.3. */
|
||||||
/* A Bison parser, made by GNU Bison 2.4.1. */
|
|
||||||
|
|
||||||
/* Skeleton implementation for Bison's Yacc-like parsers in C
|
/* Skeleton implementation for Bison's Yacc-like parsers in C
|
||||||
|
|
||||||
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||||
Free Software Foundation, Inc.
|
2009, 2010 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -46,7 +45,7 @@
|
|||||||
#define YYBISON 1
|
#define YYBISON 1
|
||||||
|
|
||||||
/* Bison version. */
|
/* Bison version. */
|
||||||
#define YYBISON_VERSION "2.4.1"
|
#define YYBISON_VERSION "2.4.3"
|
||||||
|
|
||||||
/* Skeleton name. */
|
/* Skeleton name. */
|
||||||
#define YYSKELETON_NAME "yacc.c"
|
#define YYSKELETON_NAME "yacc.c"
|
||||||
@ -88,7 +87,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
|
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
|
||||||
@ -102,22 +100,18 @@ extern int zconflex(void);
|
|||||||
static void zconfprint(const char *err, ...);
|
static void zconfprint(const char *err, ...);
|
||||||
static void zconf_error(const char *err, ...);
|
static void zconf_error(const char *err, ...);
|
||||||
static void zconferror(const char *err);
|
static void zconferror(const char *err);
|
||||||
static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
|
static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
|
||||||
|
|
||||||
struct symbol *symbol_hash[SYMBOL_HASHSIZE];
|
struct symbol *symbol_hash[SYMBOL_HASHSIZE];
|
||||||
|
|
||||||
static struct menu *current_menu, *current_entry;
|
static struct menu *current_menu, *current_entry;
|
||||||
|
|
||||||
#define YYDEBUG 0
|
|
||||||
#if YYDEBUG
|
|
||||||
#define YYERROR_VERBOSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Enabling traces. */
|
/* Enabling traces. */
|
||||||
#ifndef YYDEBUG
|
#ifndef YYDEBUG
|
||||||
# define YYDEBUG 0
|
# define YYDEBUG 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Enabling verbose error messages. */
|
/* Enabling verbose error messages. */
|
||||||
@ -188,7 +182,7 @@ typedef union YYSTYPE
|
|||||||
struct symbol *symbol;
|
struct symbol *symbol;
|
||||||
struct expr *expr;
|
struct expr *expr;
|
||||||
struct menu *menu;
|
struct menu *menu;
|
||||||
struct kconf_id *id;
|
const struct kconf_id *id;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -255,7 +249,7 @@ typedef short int yytype_int16;
|
|||||||
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
|
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
|
||||||
|
|
||||||
#ifndef YY_
|
#ifndef YY_
|
||||||
# if YYENABLE_NLS
|
# if defined YYENABLE_NLS && YYENABLE_NLS
|
||||||
# if ENABLE_NLS
|
# if ENABLE_NLS
|
||||||
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
|
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
|
||||||
# define YY_(msgid) dgettext ("bison-runtime", msgid)
|
# define YY_(msgid) dgettext ("bison-runtime", msgid)
|
||||||
@ -535,18 +529,18 @@ static const yytype_int8 yyrhs[] =
|
|||||||
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
||||||
static const yytype_uint16 yyrline[] =
|
static const yytype_uint16 yyrline[] =
|
||||||
{
|
{
|
||||||
0, 108, 108, 108, 110, 110, 112, 114, 115, 116,
|
0, 104, 104, 104, 106, 106, 108, 110, 111, 112,
|
||||||
117, 118, 119, 123, 127, 127, 127, 127, 127, 127,
|
113, 114, 115, 119, 123, 123, 123, 123, 123, 123,
|
||||||
127, 127, 131, 132, 133, 134, 135, 136, 140, 141,
|
123, 123, 127, 128, 129, 130, 131, 132, 136, 137,
|
||||||
147, 155, 161, 169, 179, 181, 182, 183, 184, 185,
|
143, 151, 157, 165, 175, 177, 178, 179, 180, 181,
|
||||||
186, 189, 197, 203, 213, 219, 225, 228, 230, 241,
|
182, 185, 193, 199, 209, 215, 221, 224, 226, 237,
|
||||||
242, 247, 256, 261, 269, 272, 274, 275, 276, 277,
|
238, 243, 252, 257, 265, 268, 270, 271, 272, 273,
|
||||||
278, 281, 287, 298, 304, 314, 316, 321, 329, 337,
|
274, 277, 283, 294, 300, 310, 312, 317, 325, 333,
|
||||||
340, 342, 343, 344, 349, 356, 363, 368, 376, 379,
|
336, 338, 339, 340, 345, 352, 359, 364, 372, 375,
|
||||||
381, 382, 383, 386, 394, 401, 408, 414, 421, 423,
|
377, 378, 379, 382, 390, 397, 404, 410, 417, 419,
|
||||||
424, 425, 428, 436, 438, 439, 442, 449, 451, 456,
|
420, 421, 424, 432, 434, 435, 438, 445, 447, 452,
|
||||||
457, 460, 461, 462, 466, 467, 470, 471, 474, 475,
|
453, 456, 457, 458, 462, 463, 466, 467, 470, 471,
|
||||||
476, 477, 478, 479, 480, 483, 484, 487, 488
|
472, 473, 474, 475, 476, 479, 480, 483, 484
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -806,9 +800,18 @@ static const yytype_uint8 yystos[] =
|
|||||||
|
|
||||||
/* Like YYERROR except do call yyerror. This remains here temporarily
|
/* Like YYERROR except do call yyerror. This remains here temporarily
|
||||||
to ease the transition to the new meaning of YYERROR, for GCC.
|
to ease the transition to the new meaning of YYERROR, for GCC.
|
||||||
Once GCC version 2 has supplanted version 1, this can go. */
|
Once GCC version 2 has supplanted version 1, this can go. However,
|
||||||
|
YYFAIL appears to be in use. Nevertheless, it is formally deprecated
|
||||||
|
in Bison 2.4.2's NEWS entry, where a plan to phase it out is
|
||||||
|
discussed. */
|
||||||
|
|
||||||
#define YYFAIL goto yyerrlab
|
#define YYFAIL goto yyerrlab
|
||||||
|
#if defined YYFAIL
|
||||||
|
/* This is here to suppress warnings from the GCC cpp's
|
||||||
|
-Wunused-macros. Normally we don't worry about that warning, but
|
||||||
|
some users do, and we want to make it easy for users to remove
|
||||||
|
YYFAIL uses, which will produce warnings from Bison 2.5. */
|
||||||
|
#endif
|
||||||
|
|
||||||
#define YYRECOVERING() (!!yyerrstatus)
|
#define YYRECOVERING() (!!yyerrstatus)
|
||||||
|
|
||||||
@ -865,7 +868,7 @@ while (YYID (0))
|
|||||||
we won't break user code: when these are the locations we know. */
|
we won't break user code: when these are the locations we know. */
|
||||||
|
|
||||||
#ifndef YY_LOCATION_PRINT
|
#ifndef YY_LOCATION_PRINT
|
||||||
# if YYLTYPE_IS_TRIVIAL
|
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
|
||||||
# define YY_LOCATION_PRINT(File, Loc) \
|
# define YY_LOCATION_PRINT(File, Loc) \
|
||||||
fprintf (File, "%d.%d-%d.%d", \
|
fprintf (File, "%d.%d-%d.%d", \
|
||||||
(Loc).first_line, (Loc).first_column, \
|
(Loc).first_line, (Loc).first_column, \
|
||||||
@ -1753,7 +1756,7 @@ yyreduce:
|
|||||||
case 48:
|
case 48:
|
||||||
|
|
||||||
{
|
{
|
||||||
struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
|
const struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
|
||||||
if (id && id->flags & TF_OPTION)
|
if (id && id->flags & TF_OPTION)
|
||||||
menu_add_option(id->token, (yyvsp[(3) - (3)].string));
|
menu_add_option(id->token, (yyvsp[(3) - (3)].string));
|
||||||
else
|
else
|
||||||
@ -2258,10 +2261,8 @@ void conf_parse(const char *name)
|
|||||||
modules_sym->flags |= SYMBOL_AUTO;
|
modules_sym->flags |= SYMBOL_AUTO;
|
||||||
rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
|
rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
|
||||||
|
|
||||||
#if YYDEBUG
|
|
||||||
if (getenv("ZCONF_DEBUG"))
|
if (getenv("ZCONF_DEBUG"))
|
||||||
zconfdebug = 1;
|
zconfdebug = 1;
|
||||||
#endif
|
|
||||||
zconfparse();
|
zconfparse();
|
||||||
if (zconfnerrs)
|
if (zconfnerrs)
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -2300,7 +2301,7 @@ static const char *zconf_tokenname(int token)
|
|||||||
return "<token>";
|
return "<token>";
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
|
static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
|
||||||
{
|
{
|
||||||
if (id->token != endtoken) {
|
if (id->token != endtoken) {
|
||||||
zconf_error("unexpected '%s' within %s block",
|
zconf_error("unexpected '%s' within %s block",
|
||||||
@ -2345,9 +2346,7 @@ static void zconf_error(const char *err, ...)
|
|||||||
|
|
||||||
static void zconferror(const char *err)
|
static void zconferror(const char *err)
|
||||||
{
|
{
|
||||||
#if YYDEBUG
|
|
||||||
fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
|
fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_quoted_string(FILE *out, const char *str)
|
static void print_quoted_string(FILE *out, const char *str)
|
||||||
@ -2496,7 +2495,7 @@ void zconfdump(FILE *out)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "lex.zconf.c"
|
#include "zconf.lex.c"
|
||||||
#include "util.c"
|
#include "util.c"
|
||||||
#include "confdata.c"
|
#include "confdata.c"
|
||||||
#include "expr.c"
|
#include "expr.c"
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
|
#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
|
||||||
@ -25,16 +24,12 @@ extern int zconflex(void);
|
|||||||
static void zconfprint(const char *err, ...);
|
static void zconfprint(const char *err, ...);
|
||||||
static void zconf_error(const char *err, ...);
|
static void zconf_error(const char *err, ...);
|
||||||
static void zconferror(const char *err);
|
static void zconferror(const char *err);
|
||||||
static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
|
static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
|
||||||
|
|
||||||
struct symbol *symbol_hash[SYMBOL_HASHSIZE];
|
struct symbol *symbol_hash[SYMBOL_HASHSIZE];
|
||||||
|
|
||||||
static struct menu *current_menu, *current_entry;
|
static struct menu *current_menu, *current_entry;
|
||||||
|
|
||||||
#define YYDEBUG 0
|
|
||||||
#if YYDEBUG
|
|
||||||
#define YYERROR_VERBOSE
|
|
||||||
#endif
|
|
||||||
%}
|
%}
|
||||||
%expect 30
|
%expect 30
|
||||||
|
|
||||||
@ -45,7 +40,7 @@ static struct menu *current_menu, *current_entry;
|
|||||||
struct symbol *symbol;
|
struct symbol *symbol;
|
||||||
struct expr *expr;
|
struct expr *expr;
|
||||||
struct menu *menu;
|
struct menu *menu;
|
||||||
struct kconf_id *id;
|
const struct kconf_id *id;
|
||||||
}
|
}
|
||||||
|
|
||||||
%token <id>T_MAINMENU
|
%token <id>T_MAINMENU
|
||||||
@ -229,7 +224,7 @@ symbol_option_list:
|
|||||||
/* empty */
|
/* empty */
|
||||||
| symbol_option_list T_WORD symbol_option_arg
|
| symbol_option_list T_WORD symbol_option_arg
|
||||||
{
|
{
|
||||||
struct kconf_id *id = kconf_id_lookup($2, strlen($2));
|
const struct kconf_id *id = kconf_id_lookup($2, strlen($2));
|
||||||
if (id && id->flags & TF_OPTION)
|
if (id && id->flags & TF_OPTION)
|
||||||
menu_add_option(id->token, $3);
|
menu_add_option(id->token, $3);
|
||||||
else
|
else
|
||||||
@ -503,10 +498,8 @@ void conf_parse(const char *name)
|
|||||||
modules_sym->flags |= SYMBOL_AUTO;
|
modules_sym->flags |= SYMBOL_AUTO;
|
||||||
rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
|
rootmenu.prompt = menu_add_prompt(P_MENU, "Buildroot Configuration", NULL);
|
||||||
|
|
||||||
#if YYDEBUG
|
|
||||||
if (getenv("ZCONF_DEBUG"))
|
if (getenv("ZCONF_DEBUG"))
|
||||||
zconfdebug = 1;
|
zconfdebug = 1;
|
||||||
#endif
|
|
||||||
zconfparse();
|
zconfparse();
|
||||||
if (zconfnerrs)
|
if (zconfnerrs)
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -545,7 +538,7 @@ static const char *zconf_tokenname(int token)
|
|||||||
return "<token>";
|
return "<token>";
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
|
static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
|
||||||
{
|
{
|
||||||
if (id->token != endtoken) {
|
if (id->token != endtoken) {
|
||||||
zconf_error("unexpected '%s' within %s block",
|
zconf_error("unexpected '%s' within %s block",
|
||||||
@ -590,9 +583,7 @@ static void zconf_error(const char *err, ...)
|
|||||||
|
|
||||||
static void zconferror(const char *err)
|
static void zconferror(const char *err)
|
||||||
{
|
{
|
||||||
#if YYDEBUG
|
|
||||||
fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
|
fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_quoted_string(FILE *out, const char *str)
|
static void print_quoted_string(FILE *out, const char *str)
|
||||||
@ -741,7 +732,7 @@ void zconfdump(FILE *out)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "lex.zconf.c"
|
#include "zconf.lex.c"
|
||||||
#include "util.c"
|
#include "util.c"
|
||||||
#include "confdata.c"
|
#include "confdata.c"
|
||||||
#include "expr.c"
|
#include "expr.c"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user