From 5b7d43abe3f01d3a72301f9b44faf28cafe5da27 Mon Sep 17 00:00:00 2001 From: Sebastian Gniazdowski Date: Wed, 23 Oct 2019 19:06:40 +0200 Subject: [PATCH] =?UTF-8?q?configure=20=E2=80=93=C2=A0Try=20to=20link=20wi?= =?UTF-8?q?th=20a=20curses=20library=20if=20it=20doesn't=20contain=20the?= =?UTF-8?q?=20tercamp=20&=20terminfo=20functions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configure.ac | 57 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index b31b1d958..8fd4d452f 100644 --- a/configure.ac +++ b/configure.ac @@ -774,7 +774,7 @@ AS_HELP_STRING([--with-term-lib=LIBS],[search space-separated LIBS for terminal termcap_curses_order="$withval" AC_SEARCH_LIBS(tigetstr, [$termcap_curses_order]) else - termcap_curses_order="$ncursesw_test $ncurses_test tinfo termcap curses" + termcap_curses_order="$ncursesw_test $ncurses_test tinfow tinfo termcap curses" fi], [case "$host_os" in solaris*) @@ -783,7 +783,7 @@ fi], DL_EXT="${DL_EXT=sl}" termcap_curses_order="Hcurses $ncursesw_test $ncurses_test curses termcap" ;; *) - termcap_curses_order="$ncursesw_test $ncurses_test tinfo termcap curses" ;; + termcap_curses_order="$ncursesw_test $ncurses_test tinfow tinfo termcap curses" ;; esac])dnl AH_TEMPLATE([ZSH_NO_XOPEN], @@ -807,6 +807,8 @@ dnl That's so that on systems where termcap and [n]curses are dnl both available and both contain termcap functions, while dnl only [n]curses contains terminfo functions, we only link against dnl [n]curses. +LIBS_save_pre_term="$LIBS" +AC_SEARCH_LIBS(tigetstr, [$termcap_curses_order]) AC_SEARCH_LIBS(tigetflag, [$termcap_curses_order]) AC_SEARCH_LIBS(tgetent, [$termcap_curses_order], true, @@ -831,7 +833,56 @@ AC_CACHE_CHECK(if we need to ignore ncurses, zsh_cv_ignore_ncurses, zsh_cv_ignore_ncurses=no ;; *) - zsh_cv_ignore_ncurses=yes + dnl The lack of -lncurses in the $LIBS might be the result of passing + dnl --with-term-lib=^ncurses option. To address this, a test for the tgetent + dnl and other functions is ran here, possibly for the second time, just to + dnl ensure that the ncurses library doesn't have them. + LIBS_save="$LIBS" + dnl Remember (the values are used later, around line 3005) and remove the cache + ac_cv_search_tigetstr_SAVE="$ac_cv_search_tigetstr" + ac_cv_search_tigetnum_SAVE="$ac_cv_search_tigetnum" + ac_cv_search_tigetflag_SAVE="$ac_cv_search_tigetflag" + ac_cv_search_tgetent_SAVE="$ac_cv_search_tgetent" + unset ac_cv_search_tigetstr ac_cv_search_tigetnum ac_cv_search_tigetflag ac_cv_search_tgetent + LIBS="$LIBS_save_pre_term" + + dnl Run the checks for all four used terminal functions + AC_SEARCH_LIBS(tigetstr, [ncursesw ncurses curses]) + AC_SEARCH_LIBS(tigetnum, [ncursesw ncurses curses]) + AC_SEARCH_LIBS(tigetflag, [ncursesw ncurses curses]) + AC_SEARCH_LIBS(tgetent, [ncursesw ncurses curses]) + LIBS_result="$LIBS" + + LIBS="$LIBS_save" + dnl Restore the cache + ac_cv_search_tigetstr="$ac_cv_search_tigetstr_SAVE" + ac_cv_search_tigetnum="$ac_cv_search_tigetnum_SAVE" + ac_cv_search_tigetflag="$ac_cv_search_tigetflag_SAVE" + ac_cv_search_tgetent="$ac_cv_search_tgetent_SAVE" + + case $LIBS_result in + *-lncurses*|*-lcurses*) + dnl Yes we need to ignore ncurses, its tgetent or tigetflag might + dnl conflict with the one from the selected terminal library + zsh_cv_ignore_ncurses=yes + ;; + *) + dnl If the tgetent nor tigetflag weren't found in the libncurses*.so, then + dnl there will be no conflict with the other terminal library selected (e.g. + dnl libtinfo) and it's possible to link ncurses provided that it is working + dnl - it is here verified that it has initscr() function to check that + AC_SEARCH_LIBS(initscr, [ncursesw ncurses curses]) + case $LIBS in + *-lncurses*|*-lcurses*) + dnl No need to ignore curses - it is working and it doesn't + dnl have tgetent nor tigetflag + zsh_cv_ignore_ncurses=no + ;; + *) + zsh_cv_ignore_ncurses=yes + ;; + esac + esac ;; esac]) -- 2.21.0