Home | History | Annotate | Download | only in kconfig
      1 /*
      2  * Copyright (C) 2002 Roman Zippel <zippel (at) linux-m68k.org>
      3  * Released under the terms of the GNU GPL v2.0.
      4  */
      5 
      6 #ifndef LKC_H
      7 #define LKC_H
      8 
      9 #include "expr.h"
     10 
     11 #ifndef KBUILD_NO_NLS
     12 # include <libintl.h>
     13 #else
     14 static inline const char *gettext(const char *txt) { return txt; }
     15 static inline void textdomain(const char *domainname) {}
     16 static inline void bindtextdomain(const char *name, const char *dir) {}
     17 static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c; }
     18 #endif
     19 
     20 #ifdef __cplusplus
     21 extern "C" {
     22 #endif
     23 
     24 #include "lkc_proto.h"
     25 
     26 #define SRCTREE "srctree"
     27 
     28 #ifndef PACKAGE
     29 #define PACKAGE "linux"
     30 #endif
     31 
     32 #define LOCALEDIR "/usr/share/locale"
     33 
     34 #define _(text) gettext(text)
     35 #define N_(text) (text)
     36 
     37 #ifndef CONFIG_
     38 #define CONFIG_ "CONFIG_"
     39 #endif
     40 static inline const char *CONFIG_prefix(void)
     41 {
     42 	return getenv( "CONFIG_" ) ?: CONFIG_;
     43 }
     44 #undef CONFIG_
     45 #define CONFIG_ CONFIG_prefix()
     46 
     47 #define TF_COMMAND	0x0001
     48 #define TF_PARAM	0x0002
     49 #define TF_OPTION	0x0004
     50 
     51 enum conf_def_mode {
     52 	def_default,
     53 	def_yes,
     54 	def_mod,
     55 	def_no,
     56 	def_random
     57 };
     58 
     59 #define T_OPT_MODULES		1
     60 #define T_OPT_DEFCONFIG_LIST	2
     61 #define T_OPT_ENV		3
     62 #define T_OPT_ALLNOCONFIG_Y	4
     63 
     64 struct kconf_id {
     65 	const char *name;
     66 	int token;
     67 	unsigned int flags;
     68 	enum symbol_type stype;
     69 };
     70 
     71 extern int yylineno;
     72 void zconfdump(FILE *out);
     73 void zconf_starthelp(void);
     74 FILE *zconf_fopen(const char *name);
     75 void zconf_initscan(const char *name);
     76 void zconf_nextfile(const char *name);
     77 int zconf_lineno(void);
     78 const char *zconf_curname(void);
     79 
     80 /* confdata.c */
     81 const char *conf_get_configname(void);
     82 const char *conf_get_autoconfig_name(void);
     83 char *conf_get_default_confname(void);
     84 void sym_set_change_count(int count);
     85 void sym_add_change_count(int count);
     86 bool conf_set_all_new_symbols(enum conf_def_mode mode);
     87 void set_all_choice_values(struct symbol *csym);
     88 
     89 /* confdata.c and expr.c */
     90 static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
     91 {
     92 	assert(len != 0);
     93 
     94 	if (fwrite(str, len, count, out) != count)
     95 		fprintf(stderr, "Error in writing or end of file.\n");
     96 }
     97 
     98 /* menu.c */
     99 void _menu_init(void);
    100 void menu_warn(struct menu *menu, const char *fmt, ...);
    101 struct menu *menu_add_menu(void);
    102 void menu_end_menu(void);
    103 void menu_add_entry(struct symbol *sym);
    104 void menu_add_dep(struct expr *dep);
    105 void menu_add_visibility(struct expr *dep);
    106 struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
    107 void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
    108 void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
    109 void menu_add_option(int token, char *arg);
    110 void menu_finalize(struct menu *parent);
    111 void menu_set_type(int type);
    112 
    113 /* util.c */
    114 struct file *file_lookup(const char *name);
    115 int file_write_dep(const char *name);
    116 void *xmalloc(size_t size);
    117 void *xcalloc(size_t nmemb, size_t size);
    118 void *xrealloc(void *p, size_t size);
    119 char *xstrdup(const char *s);
    120 
    121 struct gstr {
    122 	size_t len;
    123 	char  *s;
    124 	/*
    125 	* when max_width is not zero long lines in string s (if any) get
    126 	* wrapped not to exceed the max_width value
    127 	*/
    128 	int max_width;
    129 };
    130 struct gstr str_new(void);
    131 void str_free(struct gstr *gs);
    132 void str_append(struct gstr *gs, const char *s);
    133 void str_printf(struct gstr *gs, const char *fmt, ...);
    134 const char *str_get(struct gstr *gs);
    135 
    136 /* symbol.c */
    137 extern struct expr *sym_env_list;
    138 
    139 void sym_init(void);
    140 void sym_clear_all_valid(void);
    141 struct symbol *sym_choice_default(struct symbol *sym);
    142 const char *sym_get_string_default(struct symbol *sym);
    143 struct symbol *sym_check_deps(struct symbol *sym);
    144 struct property *prop_alloc(enum prop_type type, struct symbol *sym);
    145 struct symbol *prop_get_symbol(struct property *prop);
    146 struct property *sym_get_env_prop(struct symbol *sym);
    147 
    148 static inline tristate sym_get_tristate_value(struct symbol *sym)
    149 {
    150 	return sym->curr.tri;
    151 }
    152 
    153 
    154 static inline struct symbol *sym_get_choice_value(struct symbol *sym)
    155 {
    156 	return (struct symbol *)sym->curr.val;
    157 }
    158 
    159 static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval)
    160 {
    161 	return sym_set_tristate_value(chval, yes);
    162 }
    163 
    164 static inline bool sym_is_choice(struct symbol *sym)
    165 {
    166 	return sym->flags & SYMBOL_CHOICE ? true : false;
    167 }
    168 
    169 static inline bool sym_is_choice_value(struct symbol *sym)
    170 {
    171 	return sym->flags & SYMBOL_CHOICEVAL ? true : false;
    172 }
    173 
    174 static inline bool sym_is_optional(struct symbol *sym)
    175 {
    176 	return sym->flags & SYMBOL_OPTIONAL ? true : false;
    177 }
    178 
    179 static inline bool sym_has_value(struct symbol *sym)
    180 {
    181 	return sym->flags & SYMBOL_DEF_USER ? true : false;
    182 }
    183 
    184 #ifdef __cplusplus
    185 }
    186 #endif
    187 
    188 #endif /* LKC_H */
    189