]> git.draconx.ca Git - dxcommon.git/commitdiff
Add library test for curses.
authorNick Bowler <nbowler@draconx.ca>
Sun, 5 Jun 2022 15:59:13 +0000 (11:59 -0400)
committerNick Bowler <nbowler@draconx.ca>
Wed, 8 Jun 2022 01:53:29 +0000 (21:53 -0400)
Makefile.am
m4/curses.m4 [new file with mode: 0644]
t/libdummy.c
t/libempty.c [new file with mode: 0644]
tests/libs.at

index 3f976b1052b058bb5c03e00e4a82473cf1a3c6ee..8b2aa908691a08b5235e8b947966cc7d946482fa 100644 (file)
@@ -8,7 +8,7 @@ ACLOCAL_AMFLAGS = -I m4
 
 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
 
diff --git a/m4/curses.m4 b/m4/curses.m4
new file mode 100644 (file)
index 0000000..f03711c
--- /dev/null
@@ -0,0 +1,27 @@
+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();])])
index 4b92f6f1975faf82f55838d089929f082325571d..dfa2c7d90b80823ce7bbb746d886650dd700d9d9 100644 (file)
@@ -2,4 +2,6 @@
 void discid_new(void) {}
 void discid_free(void) {}
 
+void curs_set(int x) {}
+
 void g_get_prgname(void) {}
diff --git a/t/libempty.c b/t/libempty.c
new file mode 100644 (file)
index 0000000..55bbbbe
--- /dev/null
@@ -0,0 +1,2 @@
+/* library that should satisfy no symbols relevant to library search */
+int dummy___;
index c57f68076cb60aec3d1680daad7042026fd74df4..89ecf67eb2f563a8f83eb1a3c24a2479350dafbc 100644 (file)
@@ -30,7 +30,7 @@ chmod +x pkg-config
 ]])
 
 AT_SETUP([libdiscid probes])
-AT_KEYWORDS([libdiscid])
+AT_KEYWORDS([lib libdiscid])
 
 mkdir discid
 AT_DATA([discid/discid.h],
@@ -83,6 +83,60 @@ TEST_CONFIGURE([PKG_CONFIG=false CFLAGS='-I. -DDISCID_VERSION_MAJOR=0'])
 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