From ec016cb4cf5cc8faa6d09476fb6bc1818da8e8fe Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Tue, 11 Feb 2014 21:58:15 -0500 Subject: [PATCH] Make libncurses optional During the configure, if ncurses is not detected, compile only the textdump code and print an error if the user tries to use the GUI. This will allow to create a package with only the textdump code for platforms that don't have/want ncurses packages. Signed-off-by: Julien Desfossez --- configure.ac | 18 ++++++++++++++---- src/Makefile.am | 5 ++--- src/cursesdisplay.c | 6 ++++++ src/lttng-live-comm.c | 6 ++++++ src/lttngtop.c | 13 ++++++++++++- 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index fb95653..f4cbfc3 100644 --- a/configure.ac +++ b/configure.ac @@ -40,14 +40,12 @@ AC_CHECK_LIB([popt], [poptGetContext], [], ) # Check for libncurses -AC_CHECK_LIB([ncurses], [initscr], [], - [AC_MSG_ERROR([Cannot find the the ncurses library.])] +AC_CHECK_LIB([ncurses], [initscr], [], [HAVE_NCURSES=0] ) # Check for libpanel, also part of libncurses # (but this check will add the required -lpanel flag) -AC_CHECK_LIB([panel], [update_panels], [], - [AC_MSG_ERROR([Cannot find the the ncurses library.])] +AC_CHECK_LIB([panel], [update_panels], [], [HAVE_PANELS=0] ) # Check for libbabeltrace @@ -81,3 +79,15 @@ AC_CONFIG_FILES([ utils/Makefile ]) AC_OUTPUT + +AS_IF([test "x$HAVE_NCURSES" = "x0"],[ + AS_ECHO() + AS_ECHO_N("Ncurses GUI won't be compiled install ncurses if you want it.") + ], [ + CURSES_LIBS="-lcurses -lpanel" + AC_SUBST(CURSES_LIBS) + AS_ECHO() + AS_ECHO_N("Ncurses GUI will be compiled.") + ]) +AS_ECHO() + diff --git a/src/Makefile.am b/src/Makefile.am index 72599e2..302196e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -29,7 +29,6 @@ lttngtop_SOURCES = \ lttngtop_LDFLAGS = -Wl,--no-as-needed -#lttngtop_LDADD = -lbabeltrace -lbabeltrace-ctf -llttngtop-helper -llttng-ctl -lurcu -llttngtopmmappacketseek -llttng-ust-ctl -lcurses -lpanel -lttngtop_LDADD = -lbabeltrace -lbabeltrace-ctf -llttng-ctl -lurcu -llttng-ust-ctl -lcurses -lpanel \ +lttngtop_LDADD = -lbabeltrace -lbabeltrace-ctf -llttng-ctl \ + -lurcu -llttng-ust-ctl \ $(top_builddir)/src/libbabeltrace-lttngtop-live.la - diff --git a/src/cursesdisplay.c b/src/cursesdisplay.c index 7f52c8b..9e7afb2 100644 --- a/src/cursesdisplay.c +++ b/src/cursesdisplay.c @@ -15,6 +15,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include + +#ifdef HAVE_LIBNCURSES + #include #include #include @@ -1771,3 +1775,5 @@ void init_ncurses() pthread_create(&keyboard_thread, NULL, handle_keyboard, (void *)NULL); } + +#endif /* HAVE_LIBNCURSES */ diff --git a/src/lttng-live-comm.c b/src/lttng-live-comm.c index 988742e..15a3dd2 100644 --- a/src/lttng-live-comm.c +++ b/src/lttng-live-comm.c @@ -1452,10 +1452,16 @@ void lttng_live_read(struct lttng_live_ctx *ctx) } if (!opt_textdump) { +#ifdef HAVE_LIBNCURSES pthread_create(&display_thread, NULL, ncurses_display, (void *) NULL); pthread_create(&timer_thread, NULL, refresh_thread, (void *) NULL); +#else + printf("Ncurses support not compiled, please install " + "the missing dependencies and recompile\n"); + goto end_free; +#endif } iter_trace(ctx->bt_ctx); g_hash_table_foreach_remove(ctx->session->ctf_traces, diff --git a/src/lttngtop.c b/src/lttngtop.c index c29c5a5..173cc82 100644 --- a/src/lttngtop.c +++ b/src/lttngtop.c @@ -49,10 +49,13 @@ #include "lttngtoptypes.h" #include "cputop.h" #include "iostreamtop.h" -#include "cursesdisplay.h" #include "common.h" #include "network-live.h" +#ifdef HAVE_LIBNCURSES +#include "cursesdisplay.h" +#endif + #define NET_URL_PREFIX "net://" #define NET4_URL_PREFIX "net4://" #define NET6_URL_PREFIX "net6://" @@ -153,6 +156,7 @@ void *refresh_thread(void *p) } } +#ifdef HAVE_LIBNCURSES void *ncurses_display(void *p) { unsigned int current_display_index = 0; @@ -184,6 +188,7 @@ void *ncurses_display(void *p) sem_post(&pause_sem); } } +#endif /* HAVE_LIBNCURSES */ void print_fields(struct bt_ctf_event *event, const char *procname, int pid) @@ -1269,10 +1274,16 @@ int main(int argc, char **argv, char **envp) } if (!opt_textdump) { +#ifdef HAVE_LIBNCURSES pthread_create(&display_thread, NULL, ncurses_display, (void *) NULL); pthread_create(&timer_thread, NULL, refresh_thread, (void *) NULL); +#else + printf("Ncurses support not compiled, please install " + "the missing dependencies and recompile\n"); + goto end; +#endif } iter_trace(bt_ctx); -- 2.34.1