AM_CFLAGS = -I$(top_srcdir)/src
-check_LIBRARIES = t/libdummy.a
+check_LIBRARIES = t/libdummy.a t/libempty.a
check_PROGRAMS = t/packtestu t/packtests t/packtestu64 t/packtests64
--- /dev/null
+dnl Copyright © 2022 Nick Bowler
+dnl
+dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
+dnl This is free software: you are free to do what the fuck you want to.
+dnl There is NO WARRANTY, to the extent permitted by law.
+
+AC_DEFUN([DX_LIB_CURSES],
+[DX_LIB_SETUP([curses])dnl
+DX_LIB_PKGCONFIG_FLAGS([ncurses])
+AC_MSG_CHECKING([for curses])
+DX_LIB_SEARCH_LINK([curses],
+ [_DX_LIB_CURSES_TEST],
+ [ [[$CURSES_CFLAGS], [$CURSES_LIBS]],
+ [[$dx_cv_ncurses_pkg_cflags], [$dx_cv_ncurses_pkg_libs],
+ [test x"$dx_cv_ncurses_pkg_found" = x"yes"]],
+ [[], [-lcurses]] ])
+AS_IF([test x"$dx_cv_curses_lib_found" = x"yes"], [$1],
+ [m4_default([$2], [AC_MSG_FAILURE(
+[the curses library is required. A suitable version
+may be found at <https://invisible-island.net/ncurses/>.
+m4_newline([DX_LIB_USERFLAG_BLURB([curses])])
+m4_newline([DX_LIB_PKGCONFIG_BLURB([ncurses])])
+])])])])
+
+m4_define([_DX_LIB_CURSES_TEST], [AC_LANG_PROGRAM(
+[#include <curses.h>
+], [initscr(); curs_set(0); endwin();])])
void discid_new(void) {}
void discid_free(void) {}
+void curs_set(int x) {}
+
void g_get_prgname(void) {}
--- /dev/null
+/* library that should satisfy no symbols relevant to library search */
+int dummy___;
]])
AT_SETUP([libdiscid probes])
-AT_KEYWORDS([libdiscid])
+AT_KEYWORDS([lib libdiscid])
mkdir discid
AT_DATA([discid/discid.h],
AT_CHECK_UNQUOTED([cat test], [0], [no
+])
+
+AT_CLEANUP
+
+AT_SETUP([curses probes])
+AT_KEYWORDS([lib curses ncurses])
+
+AT_DATA([curses.h],
+[[void initscr(void) { }
+void endwin(void) { }
+void curs_set(int);
+]])
+
+AT_DATA([test.in],
+[[@HAVE_CURSES@
+@CURSES_CFLAGS@
+@CURSES_LIBS@
+]])
+
+TEST_CONFIGURE_AC([[DX_LIB_CURSES([HAVE_CURSES=yes], [HAVE_CURSES=no])
+AC_SUBST([HAVE_CURSES])
+AC_CONFIG_FILES([test])
+]])
+TEST_AUTORECONF
+
+# Check the search via explicit flags
+TEST_CONFIGURE([CURSES_CFLAGS=-I. CURSES_LIBS="$builddir/t/libdummy.a"])
+AT_CHECK_UNQUOTED([cat test], [0], [yes
+-I.
+$builddir/t/libdummy.a
+])
+
+# Check the search via pkg-config
+TEST_DUMMY_PKGCONFIG([-I.], [$builddir/t/libdummy.a])
+TEST_CONFIGURE([PKG_CONFIG=$PWD/pkg-config])
+AT_CHECK_UNQUOTED([cat test], [0], [yes
+-I.
+$builddir/t/libdummy.a
+])
+
+# Check the default -lcurses search
+cp "$builddir/t/libdummy.a" libcurses.a
+TEST_CONFIGURE([PKG_CONFIG=false CFLAGS=-I. LDFLAGS=-L.])
+AT_CHECK_UNQUOTED([cat test], [0], [yes
+
+-lcurses
+])
+
+# Check the failure case
+cp "$builddir/t/libempty.a" libcurses.a
+TEST_CONFIGURE([PKG_CONFIG=false CFLAGS=-I. LDFLAGS=-L.])
+AT_CHECK_UNQUOTED([cat test], [0], [no
+
+
])
AT_CLEANUP