kconfig: remove string expansion in file_lookup()
[carl9170fw.git] / config / symbol.c
index 6acf536c9726846913d4321460c946d3042d171d..2460648a581aee4a9c8d41a6661dfd29627b8ff3 100644 (file)
@@ -33,33 +33,6 @@ struct symbol *sym_defconfig_list;
 struct symbol *modules_sym;
 tristate modules_val;
 
-struct expr *sym_env_list;
-
-static void sym_add_default(struct symbol *sym, const char *def)
-{
-       struct property *prop = prop_alloc(P_DEFAULT, sym);
-
-       prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
-}
-
-void sym_init(void)
-{
-       struct symbol *sym;
-       struct utsname uts;
-       static bool inited = false;
-
-       if (inited)
-               return;
-       inited = true;
-
-       uname(&uts);
-
-       sym = sym_lookup("UNAME_RELEASE", 0);
-       sym->type = S_STRING;
-       sym->flags |= SYMBOL_AUTO;
-       sym_add_default(sym, uts.release);
-}
-
 enum symbol_type sym_get_type(struct symbol *sym)
 {
        enum symbol_type type = sym->type;
@@ -333,6 +306,27 @@ static struct symbol *sym_calc_choice(struct symbol *sym)
        return def_sym;
 }
 
+static void sym_warn_unmet_dep(struct symbol *sym)
+{
+       struct gstr gs = str_new();
+
+       str_printf(&gs,
+                  "\nWARNING: unmet direct dependencies detected for %s\n",
+                  sym->name);
+       str_printf(&gs,
+                  "  Depends on [%c]: ",
+                  sym->dir_dep.tri == mod ? 'm' : 'n');
+       expr_gstr_print(sym->dir_dep.expr, &gs);
+       str_printf(&gs, "\n");
+
+       expr_gstr_print_revdep(sym->rev_dep.expr, &gs, yes,
+                              "  Selected by [y]:\n");
+       expr_gstr_print_revdep(sym->rev_dep.expr, &gs, mod,
+                              "  Selected by [m]:\n");
+
+       fputs(str_get(&gs), stderr);
+}
+
 void sym_calc_value(struct symbol *sym)
 {
        struct symbol_value newval, oldval;
@@ -414,18 +408,8 @@ void sym_calc_value(struct symbol *sym)
                                }
                        }
                calc_newval:
-                       if (sym->dir_dep.tri < sym->rev_dep.tri) {
-                               struct expr *e;
-                               e = expr_simplify_unmet_dep(sym->rev_dep.expr,
-                                   sym->dir_dep.expr);
-                               fprintf(stderr, "warning: (");
-                               expr_fprint(e, stderr);
-                               fprintf(stderr, ") selects %s which has unmet direct dependencies (",
-                                       sym->name);
-                               expr_fprint(sym->dir_dep.expr, stderr);
-                               fprintf(stderr, ")\n");
-                               expr_free(e);
-                       }
+                       if (sym->dir_dep.tri < sym->rev_dep.tri)
+                               sym_warn_unmet_dep(sym);
                        newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
                }
                if (newval.tri == mod &&
@@ -1390,32 +1374,3 @@ const char *prop_get_type_name(enum prop_type type)
        }
        return "unknown";
 }
-
-static void prop_add_env(const char *env)
-{
-       struct symbol *sym, *sym2;
-       struct property *prop;
-       char *p;
-
-       sym = current_entry->sym;
-       sym->flags |= SYMBOL_AUTO;
-       for_all_properties(sym, prop, P_ENV) {
-               sym2 = prop_get_symbol(prop);
-               if (strcmp(sym2->name, env))
-                       menu_warn(current_entry, "redefining environment symbol from %s",
-                                 sym2->name);
-               return;
-       }
-
-       prop = prop_alloc(P_ENV, sym);
-       prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
-
-       sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
-       sym_env_list->right.sym = sym;
-
-       p = getenv(env);
-       if (p)
-               sym_add_default(sym, p);
-       else
-               menu_warn(current_entry, "environment variable %s undefined", env);
-}