Skip to contentSkip to conversation

kconfig: Document the 'menu' struct

PATCH In review Ulf Magnusson 2 participants 3 messages Oct 4, 2017 – Dec 7, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 kconfig: Document the 'menu' struct

Understanding what it represents helps a lot when reading the code, and it's not obvious, so document it.

The ROOT_MENU flag is only set and tested by the gconf and qconf front ends, so leave it undocumented here. The obvious guess for what it means is correct.

---
 scripts/kconfig/expr.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)
scripts/kconfig/expr.h +45 -0
index a73f762..ae7583c 100644
@@ -166,22 +166,67 @@ struct property {
 	for (st = sym->prop; st; st = st->next) \
 		if (st->text)
 
+/*
+ * Represents a node in the menu tree, as seen in e.g. menuconfig (though used
+ * for all front ends). Each symbol, menu, etc. defined in the Kconfig files
+ * gets a node. A symbol defined in multiple locations gets one node at each
+ * location.
+ */
 struct menu {
+	/* The next menu node at the same level */
 	struct menu *next;
+
+	/* The parent menu node, corresponding to e.g. a menu or choice */
 	struct menu *parent;
+
+	/* The first child menu node, for e.g. menus and choices */
 	struct menu *list;
+
+	/*
+	 * The symbol associated with the menu node. Choices are implemented as
+	 * a special kind of symbol. NULL for menus, comments, and ifs.
+	 */
 	struct symbol *sym;
+
+	/*
+	 * The prompt associated with the node. This holds the prompt for a
+	 * symbol as well as the text for a menu or comment, along with the
+	 * type (P_PROMPT, P_MENU, etc.)
+	 */
 	struct property *prompt;
+
+	/*
+	 * 'visible if' dependencies. If more than one is given, they will be
+	 * ANDed together.
+	 */
 	struct expr *visibility;
+
+	/*
+	 * Ordinary dependencies from e.g. 'depends on' and 'if', ANDed
+	 * together
+	 */
 	struct expr *dep;
+
+	/* MENU_* flags */
 	unsigned int flags;
+
+	/* Any help text associated with the node */
 	char *help;
+
+	/* The location where the menu node appears in the Kconfig files */
 	struct file *file;
 	int lineno;
+
+	/* For use by front ends that need to store auxiliary data */
 	void *data;
 };
 
+/*
+ * Set on a menu node when the corresponding symbol changes state in some way.
+ * Can be checked by front ends.
+ */
 #define MENU_CHANGED		0x0001
+
 #define MENU_ROOT		0x0002
 
 struct jump_key {
Signature · 1 line
2.7.4
#1 lore raw
Quoted 85 lines · Ulf Magnusson

Understanding what it represents helps a lot when reading the code, and it's not obvious, so document it.

The ROOT_MENU flag is only set and tested by the gconf and qconf front ends, so leave it undocumented here. The obvious guess for what it means is correct.

---
 scripts/kconfig/expr.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)
scripts/kconfig/expr.h +45 -1
index a73f762..ae7583c 100644
@@ -166,22 +166,67 @@ struct property {
        for (st = sym->prop; st; st = st->next) \
                if (st->text)
 
+/*
+ * Represents a node in the menu tree, as seen in e.g. menuconfig (though used
+ * for all front ends). Each symbol, menu, etc. defined in the Kconfig files
+ * gets a node. A symbol defined in multiple locations gets one node at each
+ * location.
+ */
 struct menu {
+       /* The next menu node at the same level */
        struct menu *next;
+
+       /* The parent menu node, corresponding to e.g. a menu or choice */
        struct menu *parent;
+
+       /* The first child menu node, for e.g. menus and choices */
        struct menu *list;
+
+       /*
+        * The symbol associated with the menu node. Choices are implemented as
+        * a special kind of symbol. NULL for menus, comments, and ifs.
+        */
        struct symbol *sym;
+
+       /*
+        * The prompt associated with the node. This holds the prompt for a
+        * symbol as well as the text for a menu or comment, along with the
+        * type (P_PROMPT, P_MENU, etc.)
+        */
        struct property *prompt;
+
+       /*
+        * 'visible if' dependencies. If more than one is given, they will be
+        * ANDed together.
+        */
        struct expr *visibility;
+
+       /*
+        * Ordinary dependencies from e.g. 'depends on' and 'if', ANDed
+        * together
+        */
        struct expr *dep;
+
+       /* MENU_* flags */
        unsigned int flags;
+
+       /* Any help text associated with the node */
        char *help;
+
+       /* The location where the menu node appears in the Kconfig files */
        struct file *file;
        int lineno;
+
+       /* For use by front ends that need to store auxiliary data */
        void *data;
 };
 
+/*
+ * Set on a menu node when the corresponding symbol changes state in some way.
+ * Can be checked by front ends.
+ */
 #define MENU_CHANGED           0x0001
+
 #define MENU_ROOT              0x0002
 
 struct jump_key {
--
Quoted 2 lines

2.7.4

Adding some CCs just because I forgot. No panic.

Cheers,
Ulf

#2 lore raw
In reply to Ulf Magnusson

2017-10-04 12:37 GMT+09:00 Ulf Magnusson <[email protected]>:

Quoted 8 lines

Understanding what it represents helps a lot when reading the code, and it's not obvious, so document it.

The ROOT_MENU flag is only set and tested by the gconf and qconf front ends, so leave it undocumented here. The obvious guess for what it means is correct.

Applied to linux-kbuild/kconfig.
Thanks!

Signature · 2 lines
Best Regards
Masahiro Yamada