allow menuselect to display dependencies and conflicts for modules
authorRussell Bryant <russell@russellbryant.com>
Thu, 1 Jun 2006 17:40:50 +0000 (17:40 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 1 Jun 2006 17:40:50 +0000 (17:40 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@31443 65c4cc65-6c06-0410-ace0-fbb531ad65f3

build_tools/menuselect.c
build_tools/menuselect.h
build_tools/menuselect_curses.c

index 51f31b6..ca23caf 100644 (file)
 
 #undef MENUSELECT_DEBUG
 
-struct depend {
-       /*! the name of the dependency */
-       const char *name;
-       /*! for linking */
-       AST_LIST_ENTRY(depend) list;
-};
-
-struct conflict {
-       /*! the name of the conflict */
-       const char *name;
-       /*! for linking */
-       AST_LIST_ENTRY(conflict) list;
-};
-
 /*! The list of categories */
 struct categories categories = AST_LIST_HEAD_NOLOCK_INIT_VALUE;
 
index 5fc34d0..fbb7633 100644 (file)
 #define OUTPUT_MAKEOPTS_DEFAULT "menuselect.makeopts"
 #define MENUSELECT_DEPS         "build_tools/menuselect-deps"
 
-struct depend;
-struct conflict;
+struct depend {
+       /*! the name of the dependency */
+       const char *name;
+       /*! for linking */
+       AST_LIST_ENTRY(depend) list;
+};
+
+struct conflict {
+       /*! the name of the conflict */
+       const char *name;
+       /*! for linking */
+       AST_LIST_ENTRY(conflict) list;
+};
 
 struct member {
        /*! What will be sent to the makeopts file */
index bdb6cf9..7c684bd 100644 (file)
@@ -126,7 +126,9 @@ void draw_category_menu(WINDOW *menu, struct category *cat, int start, int end,
 {
        int i = 0;
        int j = 0;
-       struct member *mem;
+       struct member *mem, *curmem = NULL;
+       struct depend *dep;
+       struct conflict *con;
        char buf[64];
        const char *desc = NULL;
 
@@ -146,15 +148,35 @@ void draw_category_menu(WINDOW *menu, struct category *cat, int start, int end,
                waddstr(menu, buf);
                
                if (curopt + 1 == i)
-                       desc = mem->displayname;
+                       curmem = mem;
 
                if (i == end)
                        break;
        }
 
-       if (desc) {
+       if (curmem->displayname) {
                wmove(menu, end - start + 2, max_x / 2 - 16);
-               waddstr(menu, desc);
+               waddstr(menu, curmem->displayname);
+       }
+       if (!AST_LIST_EMPTY(&curmem->deps)) {
+               wmove(menu, end - start + 3, max_x / 2 - 16);
+               snprintf(buf, sizeof(buf), "Depends on: ");
+               AST_LIST_TRAVERSE(&curmem->deps, dep, list) {
+                       strncat(buf, dep->name, sizeof(buf) - strlen(buf) - 1);
+                       if (AST_LIST_NEXT(dep, list))
+                               strncat(buf, ", ", sizeof(buf) - strlen(buf) - 1);
+               }
+               waddstr(menu, buf);
+       }
+       if (!AST_LIST_EMPTY(&curmem->conflicts)) {
+               wmove(menu, end - start + 4, max_x / 2 - 16);
+               snprintf(buf, sizeof(buf), "Conflicts with: ");
+               AST_LIST_TRAVERSE(&curmem->conflicts, con, list) {
+                       strncat(buf, con->name, sizeof(buf) - strlen(buf) - 1);
+                       if (AST_LIST_NEXT(con, list))
+                               strncat(buf, ", ", sizeof(buf) - strlen(buf) - 1);
+               }
+               waddstr(menu, buf);
        }
        wmove(menu, curopt - start, max_x / 2 - 9);