From 18c520e1c6d44a8c68328f3ffa4d64434fb454b8 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Sun, 5 Jun 2022 11:59:13 -0400 Subject: [PATCH] Add library test for curses. --- Makefile.am | 2 +- m4/curses.m4 | 27 +++++++++++++++++++++++++ t/libdummy.c | 2 ++ t/libempty.c | 2 ++ tests/libs.at | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 m4/curses.m4 create mode 100644 t/libempty.c diff --git a/Makefile.am b/Makefile.am index 3f976b1..8b2aa90 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 index 0000000..f03711c --- /dev/null +++ b/m4/curses.m4 @@ -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 . +m4_newline([DX_LIB_USERFLAG_BLURB([curses])]) +m4_newline([DX_LIB_PKGCONFIG_BLURB([ncurses])]) +])])])]) + +m4_define([_DX_LIB_CURSES_TEST], [AC_LANG_PROGRAM( +[#include +], [initscr(); curs_set(0); endwin();])]) diff --git a/t/libdummy.c b/t/libdummy.c index 4b92f6f..dfa2c7d 100644 --- a/t/libdummy.c +++ b/t/libdummy.c @@ -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 index 0000000..55bbbbe --- /dev/null +++ b/t/libempty.c @@ -0,0 +1,2 @@ +/* library that should satisfy no symbols relevant to library search */ +int dummy___; diff --git a/tests/libs.at b/tests/libs.at index c57f680..89ecf67 100644 --- a/tests/libs.at +++ b/tests/libs.at @@ -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 -- 2.43.2