Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
* 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6: (25 commits) kconfig: Introduce IS_ENABLED(), IS_BUILTIN() and IS_MODULE() xconfig: Abort close if configuration cannot be saved kconfig: fix missing "0x" prefix from S_HEX symbol in autoconf.h kconfig/nconf: remove useless conditionnal kconfig/nconf: prevent segfault on empty menu kconfig/nconf: use the generic menu_get_ext_help() nconfig: Avoid Wunused-but-set warning kconfig/conf: mark xfgets() private kconfig: remove pending prototypes for kconfig_load() kconfig/conf: add command line options' description kconfig/conf: reduce the scope of `defconfig_file' kconfig: use calloc() for expr allocation kconfig: introduce specialized printer kconfig: do not overwrite symbol direct dependency in assignment kconfig/gconf: silent missing prototype warnings kconfig/gconf: kill deadcode kconfig: nuke LKC_DIRECT_LINK cruft kconfig: nuke reference to SWIG kconfig: add missing <stdlib.h> inclusion kconfig: add missing <ctype.h> inclusion ... Fix up conflicts in scripts/kconfig/Makefile
This commit is contained in:
commit
1d3fe4a75b
2
Makefile
2
Makefile
|
@ -360,7 +360,7 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
||||||
LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \
|
LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \
|
||||||
-Iarch/$(hdr-arch)/include/generated -Iinclude \
|
-Iarch/$(hdr-arch)/include/generated -Iinclude \
|
||||||
$(if $(KBUILD_SRC), -I$(srctree)/include) \
|
$(if $(KBUILD_SRC), -I$(srctree)/include) \
|
||||||
-include include/generated/autoconf.h
|
-include $(srctree)/include/linux/kconfig.h
|
||||||
|
|
||||||
KBUILD_CPPFLAGS := -D__KERNEL__
|
KBUILD_CPPFLAGS := -D__KERNEL__
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef __LINUX_KCONFIG_H
|
||||||
|
#define __LINUX_KCONFIG_H
|
||||||
|
|
||||||
|
#include <generated/autoconf.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Helper macros to use CONFIG_ options in C expressions. Note that
|
||||||
|
* these only work with boolean and tristate options.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y' or 'm',
|
||||||
|
* 0 otherwise.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#define IS_ENABLED(option) \
|
||||||
|
(__enabled_ ## option || __enabled_ ## option ## _MODULE)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
|
||||||
|
* otherwise. For boolean options, this is equivalent to
|
||||||
|
* IS_ENABLED(CONFIG_FOO).
|
||||||
|
*/
|
||||||
|
#define IS_BUILTIN(option) __enabled_ ## option
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IS_MODULE(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'm', 0
|
||||||
|
* otherwise.
|
||||||
|
*/
|
||||||
|
#define IS_MODULE(option) __enabled_ ## option ## _MODULE
|
||||||
|
|
||||||
|
#endif /* __LINUX_KCONFIG_H */
|
|
@ -170,8 +170,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,7 +203,7 @@ 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 zconf.lex.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
|
||||||
|
@ -226,12 +226,12 @@ HOSTCFLAGS_zconf.tab.o := -I$(src)
|
||||||
LEX_PREFIX_zconf := zconf
|
LEX_PREFIX_zconf := zconf
|
||||||
YACC_PREFIX_zconf := zconf
|
YACC_PREFIX_zconf := zconf
|
||||||
|
|
||||||
HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl
|
HOSTLOADLIBES_qconf = $(KC_QT_LIBS)
|
||||||
HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
|
HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS)
|
||||||
|
|
||||||
HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl
|
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))
|
||||||
|
|
||||||
|
@ -321,18 +321,11 @@ endif
|
||||||
|
|
||||||
$(obj)/zconf.tab.o: $(obj)/zconf.lex.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)/gconf.o: $(obj)/lkc_defs.h
|
|
||||||
|
|
||||||
$(obj)/%.moc: $(src)/%.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) \
|
||||||
|
|
|
@ -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,
|
||||||
|
@ -35,8 +35,6 @@ enum input_mode {
|
||||||
oldnoconfig,
|
oldnoconfig,
|
||||||
} input_mode = oldaskconfig;
|
} input_mode = oldaskconfig;
|
||||||
|
|
||||||
char *defconfig_file;
|
|
||||||
|
|
||||||
static int indent = 1;
|
static int indent = 1;
|
||||||
static int valid_stdin = 1;
|
static int valid_stdin = 1;
|
||||||
static int sync_kconfig;
|
static int sync_kconfig;
|
||||||
|
@ -106,6 +104,7 @@ 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);
|
||||||
|
@ -150,6 +149,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 +304,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);
|
||||||
|
@ -369,6 +370,7 @@ static void conf(struct menu *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)
|
||||||
|
@ -456,10 +458,30 @@ static struct option long_opts[] = {
|
||||||
{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(" --oldnoconfig Same as silentoldconfig but set new symbols to no\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, "");
|
||||||
|
@ -491,14 +513,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 oldnoconfig:
|
||||||
|
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];
|
||||||
|
@ -641,13 +673,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,13 +7,13 @@
|
||||||
#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>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.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, ...)
|
||||||
|
@ -128,6 +128,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;
|
||||||
|
@ -140,7 +141,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++)
|
||||||
|
@ -148,6 +149,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;
|
||||||
|
@ -162,6 +164,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:
|
||||||
|
@ -237,6 +240,7 @@ 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;
|
||||||
|
@ -363,6 +367,7 @@ int conf_read(const char *name)
|
||||||
break;
|
break;
|
||||||
if (!sym_is_choice(sym))
|
if (!sym_is_choice(sym))
|
||||||
goto sym_ok;
|
goto sym_ok;
|
||||||
|
/* 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;
|
goto sym_ok;
|
||||||
|
@ -417,64 +422,202 @@ 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%s \"", CONFIG_, name);
|
|
||||||
else
|
|
||||||
fprintf(out, "%s%s=\"", CONFIG_, 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%s is not set\n",
|
if (!skip_unset)
|
||||||
|
fprintf(fp, "# %s%s is not set\n",
|
||||||
CONFIG_, sym->name);
|
CONFIG_, sym->name);
|
||||||
break;
|
return;
|
||||||
case mod:
|
|
||||||
fprintf(out, "%s%s=m\n", CONFIG_, sym->name);
|
|
||||||
break;
|
|
||||||
case yes:
|
|
||||||
fprintf(out, "%s%s=y\n", CONFIG_, sym->name);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fp, "%s%s=%s\n", CONFIG_, 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, " ");
|
||||||
|
fwrite(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%s 1\n",
|
||||||
|
CONFIG_, sym->name, suffix);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Generate the __enabled_CONFIG_* and
|
||||||
|
* __enabled_CONFIG_*_MODULE macros for use by the
|
||||||
|
* IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is
|
||||||
|
* generated even for booleans so that the IS_ENABLED() macro
|
||||||
|
* works.
|
||||||
|
*/
|
||||||
|
fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n",
|
||||||
|
sym->name, (*value == 'y'));
|
||||||
|
fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n",
|
||||||
|
sym->name, (*value == 'm'));
|
||||||
|
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%s\n",
|
||||||
|
CONFIG_, 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 %s\n",
|
||||||
fprintf(out, "%s%s=%s\n", CONFIG_, sym->name, str);
|
CONFIG_, 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, " ");
|
||||||
|
fwrite(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%s=%c\n", CONFIG_, 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.
|
||||||
|
@ -531,7 +674,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) {
|
||||||
|
@ -596,11 +739,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();
|
||||||
|
@ -621,8 +760,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:
|
||||||
|
@ -771,7 +910,6 @@ out:
|
||||||
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;
|
||||||
|
@ -800,68 +938,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%s=M\n",
|
|
||||||
CONFIG_, sym->name);
|
|
||||||
fprintf(out_h, "#define %s%s_MODULE 1\n",
|
|
||||||
CONFIG_, 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);
|
|
||||||
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%s 0x%s\n",
|
|
||||||
CONFIG_, 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);
|
|
||||||
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 = calloc(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 = calloc(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 = calloc(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 = calloc(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;
|
||||||
|
|
|
@ -172,8 +172,6 @@ struct menu {
|
||||||
#define MENU_CHANGED 0x0001
|
#define MENU_CHANGED 0x0001
|
||||||
#define MENU_ROOT 0x0002
|
#define MENU_ROOT 0x0002
|
||||||
|
|
||||||
#ifndef SWIG
|
|
||||||
|
|
||||||
extern struct file *file_list;
|
extern struct file *file_list;
|
||||||
extern struct file *current_file;
|
extern struct file *current_file;
|
||||||
struct file *lookup_file(const char *name);
|
struct file *lookup_file(const char *name);
|
||||||
|
@ -218,7 +216,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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
@ -888,35 +884,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 +1139,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) {
|
||||||
|
@ -1506,10 +1474,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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
@ -79,9 +74,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);
|
||||||
|
@ -90,6 +82,11 @@ 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)
|
||||||
{
|
{
|
||||||
|
@ -97,9 +94,6 @@ static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
|
||||||
fprintf(stderr, "\nError in writing or end of file.\n");
|
fprintf(stderr, "\nError in writing or end of file.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* kconfig_load.c */
|
|
||||||
void kconfig_load(void);
|
|
||||||
|
|
||||||
/* menu.c */
|
/* menu.c */
|
||||||
void _menu_init(void);
|
void _menu_init(void);
|
||||||
void menu_warn(struct menu *menu, const char *fmt, ...);
|
void menu_warn(struct menu *menu, const char *fmt, ...);
|
||||||
|
|
|
@ -31,6 +31,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));
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#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"
|
||||||
|
|
||||||
|
@ -845,6 +844,7 @@ 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"
|
||||||
|
|
|
@ -3,10 +3,11 @@
|
||||||
* 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[] = N_(
|
||||||
|
@ -350,7 +351,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) &&
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#define LKC_DIRECT_LINK
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
#include "nconf.h"
|
#include "nconf.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1478,10 +1478,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 +1645,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 +1752,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);
|
||||||
|
|
|
@ -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 = {
|
||||||
|
@ -751,7 +750,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";
|
||||||
}
|
}
|
||||||
|
@ -893,6 +893,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 = malloc(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;
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -776,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
|
||||||
|
|
|
@ -87,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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue