From 4508c9fcc036d1888f6b650e9adbe4f78c7a5377 Mon Sep 17 00:00:00 2001
From: Russell Bryant <russell@russellbryant.com>
Date: Thu, 1 Jun 2006 17:40:50 +0000
Subject: [PATCH] allow menuselect to display dependencies and conflicts for
 modules

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@31443 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 build_tools/menuselect.c        | 14 --------------
 build_tools/menuselect.h        | 15 +++++++++++++--
 build_tools/menuselect_curses.c | 30 ++++++++++++++++++++++++++----
 3 files changed, 39 insertions(+), 20 deletions(-)

diff --git a/build_tools/menuselect.c b/build_tools/menuselect.c
index 51f31b6385..ca23caf112 100644
--- a/build_tools/menuselect.c
+++ b/build_tools/menuselect.c
@@ -40,20 +40,6 @@
 
 #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;
 
diff --git a/build_tools/menuselect.h b/build_tools/menuselect.h
index 5fc34d0494..fbb76333b8 100644
--- a/build_tools/menuselect.h
+++ b/build_tools/menuselect.h
@@ -31,8 +31,19 @@
 #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 */
diff --git a/build_tools/menuselect_curses.c b/build_tools/menuselect_curses.c
index bdb6cf93f9..7c684bd49d 100644
--- a/build_tools/menuselect_curses.c
+++ b/build_tools/menuselect_curses.c
@@ -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);
 
-- 
GitLab