curses: ncurses may define curs_set outside of curses
authorRoy Marples <roy@marples.name>
Mon, 10 Aug 2020 11:16:18 +0000 (12:16 +0100)
committerRoy Marples <roy@marples.name>
Mon, 10 Aug 2020 11:16:18 +0000 (12:16 +0100)
This is a very poor design decision that sadly we need to work
around. There is no technical reason why all curses functions
are not defined in libcurses.

Thanks to Lars Wendler <polynomial-c@gentoo.org> for the initial patch.

configure

index bf44bf0657cdf65c3c720e21b766324bb63025f3..0e39ea790225882c1d0cbe49145b47dc8f1be47b 100755 (executable)
--- a/configure
+++ b/configure
@@ -462,11 +462,39 @@ int main(void) {
 EOF
        if $XCC _curses.c -o _curses -lcurses 2>&3; then
                LIB_CURSES=-lcurses
+               echo "$LIB_CURSES"
        fi
        rm -f _curses.c _curses
 fi
+
+# ncurses may have curs_set in libtinfo and not libcurses.
+# This is a very poor design as other curses implementations
+# do not have this limitation.
+if [ -n "$LIB_CURSES" ]; then
+       printf "Testing for curs_set in $LIB_CURSES ... "
+       cat <<EOF >_curses.c
+#include <curses.h>
+int main(void) {
+       curs_set(1);
+       return 0;
+}
+EOF
+       if $XCC _curses.c -o _curses $LIB_CURSES 2>&3; then
+               echo "yes"
+       else
+               if $XCC _curses.c -o _curses $LIB_CURSES -ltinfo 2>&3; then
+                       echo "no (libtinfo)"
+                       LIB_CURSES="$LIB_CURSES -ltinfo"
+               else
+                       echo "no and not found"
+                       [ "$WITH_CURSES" = yes ] && exit 1
+                       LIB_CURSES=
+               fi
+       fi
+       rm -f _curses.c _curses
+fi
+
 if [ -n "$LIB_CURSES" ]; then
-       echo "$LIB_CURSES"
        echo "LIB_CURSES=       $LIB_CURSES" >>$CONFIG_MK
        UI="dhcpcd-curses${UI:+ }$UI"