You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
340 lines
14 KiB
340 lines
14 KiB
From 5eee0216193ef9e6ca39906aeeb7b7774097a2f7 Mon Sep 17 00:00:00 2001
|
|
From: Justin Lecher <jlec@gentoo.org>
|
|
Date: Sat, 26 Nov 2016 12:55:42 +0100
|
|
Subject: [PATCH] Use pkg-config to detect ncurses
|
|
|
|
Update ax_with_curses.m4 to latest version and use pkg-config as primary
|
|
detection mechanism for ncurses. Latest version of ax_with_curses.m4
|
|
supports pkg-config. This is important as libcurses is split into
|
|
libcurses.so and libtinfo.so on many distros and linking against
|
|
libcurses.so is not sufficiant. Pkg-config allows proper detection of
|
|
necessary libs.
|
|
|
|
Signed-off-by: Justin Lecher <jlec@gentoo.org>
|
|
|
|
Also include ax_require_defined.m4 to fix issue with undefined macro:
|
|
|
|
configure:3751: error: possibly undefined macro: AX_REQUIRE_DEFINED
|
|
If this token and others are legitimate, please use m4_pattern_allow.
|
|
See the Autoconf documentation.
|
|
configure:3751: error: possibly undefined macro: PKG_CHECK_EXISTS
|
|
|
|
Signed-off-by: Jonas Fonseca <jonas.fonseca@gmail.com>
|
|
---
|
|
config.make.in | 2 +-
|
|
configure.ac | 2 +-
|
|
tools/ax_require_defined.m4 | 37 ++++++++++++
|
|
tools/ax_with_curses.m4 | 142 ++++++++++++++++++++++++++++++++------------
|
|
4 files changed, 142 insertions(+), 41 deletions(-)
|
|
create mode 100644 tools/ax_require_defined.m4
|
|
|
|
diff --git a/config.make.in b/config.make.in
|
|
index bf41d85..a7c9ce3 100644
|
|
--- a/config.make.in
|
|
+++ b/config.make.in
|
|
@@ -12,7 +12,7 @@ CC = @CC@
|
|
CFLAGS = @CFLAGS@ @COVERAGE_CFLAGS@
|
|
CPPFLAGS = @CPPFLAGS@ -DHAVE_CONFIG_H
|
|
LDFLAGS = @LDFLAGS@
|
|
-LDLIBS = @LIBS@ @CURSES_LIB@
|
|
+LDLIBS = @LIBS@ @CURSES_LIBS@
|
|
|
|
ASCIIDOC = @ASCIIDOC@
|
|
XMLTO = @XMLTO@
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 0bcfb3f..8b956ba 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -29,7 +29,7 @@ case "$ax_cv_ncursesw" in "no")
|
|
AC_MSG_WARN([The found ncurses library does not support wide-char.])
|
|
AC_MSG_WARN([This means that tig will not correctly render UTF-8.])
|
|
esac
|
|
-AC_SUBST(CURSES_LIB)
|
|
+AC_SUBST(CURSES_LIBS)
|
|
|
|
AX_LIB_READLINE(6.2)
|
|
|
|
diff --git a/tools/ax_require_defined.m4 b/tools/ax_require_defined.m4
|
|
new file mode 100644
|
|
index 0000000..cae1111
|
|
--- /dev/null
|
|
+++ b/tools/ax_require_defined.m4
|
|
@@ -0,0 +1,37 @@
|
|
+# ===========================================================================
|
|
+# http://www.gnu.org/software/autoconf-archive/ax_require_defined.html
|
|
+# ===========================================================================
|
|
+#
|
|
+# SYNOPSIS
|
|
+#
|
|
+# AX_REQUIRE_DEFINED(MACRO)
|
|
+#
|
|
+# DESCRIPTION
|
|
+#
|
|
+# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
|
|
+# been defined and thus are available for use. This avoids random issues
|
|
+# where a macro isn't expanded. Instead the configure script emits a
|
|
+# non-fatal:
|
|
+#
|
|
+# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
|
|
+#
|
|
+# It's like AC_REQUIRE except it doesn't expand the required macro.
|
|
+#
|
|
+# Here's an example:
|
|
+#
|
|
+# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
|
|
+#
|
|
+# LICENSE
|
|
+#
|
|
+# Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>
|
|
+#
|
|
+# Copying and distribution of this file, with or without modification, are
|
|
+# permitted in any medium without royalty provided the copyright notice
|
|
+# and this notice are preserved. This file is offered as-is, without any
|
|
+# warranty.
|
|
+
|
|
+#serial 1
|
|
+
|
|
+AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
|
|
+ m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
|
|
+])dnl AX_REQUIRE_DEFINED
|
|
diff --git a/tools/ax_with_curses.m4 b/tools/ax_with_curses.m4
|
|
index 33a37ac..9461eef 100644
|
|
--- a/tools/ax_with_curses.m4
|
|
+++ b/tools/ax_with_curses.m4
|
|
@@ -12,7 +12,9 @@
|
|
# present, along with the associated header file. The NcursesW
|
|
# (wide-character) library is searched for first, followed by Ncurses,
|
|
# then the system-default plain Curses. The first library found is the
|
|
-# one returned.
|
|
+# one returned. Finding libraries will first be attempted by using
|
|
+# pkg-config, and should the pkg-config files not be available, will
|
|
+# fallback to combinations of known flags itself.
|
|
#
|
|
# The following options are understood: --with-ncursesw, --with-ncurses,
|
|
# --without-ncursesw, --without-ncurses. The "--with" options force the
|
|
@@ -52,23 +54,29 @@
|
|
#
|
|
# (These preprocessor symbols are discussed later in this document.)
|
|
#
|
|
-# The following output variable is defined by this macro; it is precious
|
|
-# and may be overridden on the ./configure command line:
|
|
+# The following output variables are defined by this macro; they are
|
|
+# precious and may be overridden on the ./configure command line:
|
|
#
|
|
-# CURSES_LIB - library to add to xxx_LDADD
|
|
+# CURSES_LIBS - library to add to xxx_LDADD
|
|
+# CURSES_CFLAGS - include paths to add to xxx_CPPFLAGS
|
|
#
|
|
-# The library listed in CURSES_LIB is NOT added to LIBS by default. You
|
|
-# need to add CURSES_LIB to the appropriate xxx_LDADD line in your
|
|
-# Makefile.am. For example:
|
|
+# In previous versions of this macro, the flags CURSES_LIB and
|
|
+# CURSES_CPPFLAGS were defined. These have been renamed, in keeping with
|
|
+# AX_WITH_CURSES's close bigger brother, PKG_CHECK_MODULES, which should
|
|
+# eventually supersede the use of AX_WITH_CURSES. Neither the library
|
|
+# listed in CURSES_LIBS, nor the flags in CURSES_CFLAGS are added to LIBS,
|
|
+# respectively CPPFLAGS, by default. You need to add both to the
|
|
+# appropriate xxx_LDADD/xxx_CPPFLAGS line in your Makefile.am. For
|
|
+# example:
|
|
#
|
|
-# prog_LDADD = @CURSES_LIB@
|
|
+# prog_LDADD = @CURSES_LIBS@
|
|
+# prog_CPPFLAGS = @CURSES_CFLAGS@
|
|
#
|
|
-# If CURSES_LIB is set on the configure command line (such as by running
|
|
-# "./configure CURSES_LIB=-lmycurses"), then the only header searched for
|
|
-# is <curses.h>. The user may use the CPPFLAGS precious variable to
|
|
-# override the standard #include search path. If the user needs to
|
|
-# specify an alternative path for a library (such as for a non-standard
|
|
-# NcurseW), the user should use the LDFLAGS variable.
|
|
+# If CURSES_LIBS is set on the configure command line (such as by running
|
|
+# "./configure CURSES_LIBS=-lmycurses"), then the only header searched for
|
|
+# is <curses.h>. If the user needs to specify an alternative path for a
|
|
+# library (such as for a non-standard NcurseW), the user should use the
|
|
+# LDFLAGS variable.
|
|
#
|
|
# The following shell variables may be defined by this macro:
|
|
#
|
|
@@ -88,7 +96,7 @@
|
|
#
|
|
# AX_WITH_CURSES
|
|
# if test "x$ax_cv_ncursesw" != xyes && test "x$ax_cv_ncurses" != xyes; then
|
|
-# AX_MSG_ERROR([requires either NcursesW or Ncurses library])
|
|
+# AC_MSG_ERROR([requires either NcursesW or Ncurses library])
|
|
# fi
|
|
#
|
|
# If any Curses library will do (but one must be present and must support
|
|
@@ -182,11 +190,66 @@
|
|
# modified version of the Autoconf Macro, you may extend this special
|
|
# exception to the GPL to apply to your modified version as well.
|
|
|
|
-#serial 13
|
|
+#serial 17
|
|
+
|
|
+# internal function to factorize common code that is used by both ncurses
|
|
+# and ncursesw
|
|
+AC_DEFUN([_FIND_CURSES_FLAGS], [
|
|
+ AC_MSG_CHECKING([for $1 via pkg-config])
|
|
+
|
|
+ AX_REQUIRE_DEFINED([PKG_CHECK_EXISTS])
|
|
+ _PKG_CONFIG([_ax_cv_$1_libs], [libs], [$1])
|
|
+ _PKG_CONFIG([_ax_cv_$1_cppflags], [cflags], [$1])
|
|
+
|
|
+ AS_IF([test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried"],[
|
|
+ AC_MSG_RESULT([no])
|
|
+ # No suitable .pc file found, have to find flags via fallback
|
|
+ AC_CACHE_CHECK([for $1 via fallback], [ax_cv_$1], [
|
|
+ AS_ECHO()
|
|
+ pkg_cv__ax_cv_$1_libs="-l$1"
|
|
+ pkg_cv__ax_cv_$1_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS"
|
|
+ LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs"
|
|
+ CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags"
|
|
+
|
|
+ AC_MSG_CHECKING([for initscr() with $pkg_cv__ax_cv_$1_libs])
|
|
+ AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])],
|
|
+ [
|
|
+ AC_MSG_RESULT([yes])
|
|
+ AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs])
|
|
+ AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[
|
|
+ ax_cv_$1=yes
|
|
+ ],[
|
|
+ AC_MSG_RESULT([no])
|
|
+ m4_if(
|
|
+ [$1],[ncursesw],[pkg_cv__ax_cv_$1_libs="$pkg_cv__ax_cv_$1_libs -ltinfow"],
|
|
+ [$1],[ncurses],[pkg_cv__ax_cv_$1_libs="$pkg_cv__ax_cv_$1_libs -ltinfo"]
|
|
+ )
|
|
+ LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs"
|
|
+
|
|
+ AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs])
|
|
+ AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[
|
|
+ ax_cv_$1=yes
|
|
+ ],[
|
|
+ ax_cv_$1=no
|
|
+ ])
|
|
+ ])
|
|
+ ],[
|
|
+ ax_cv_$1=no
|
|
+ ])
|
|
+ ])
|
|
+ ],[
|
|
+ AC_MSG_RESULT([yes])
|
|
+ # Found .pc file, using its information
|
|
+ LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs"
|
|
+ CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags"
|
|
+ ax_cv_$1=yes
|
|
+ ])
|
|
+])
|
|
|
|
AU_ALIAS([MP_WITH_CURSES], [AX_WITH_CURSES])
|
|
AC_DEFUN([AX_WITH_CURSES], [
|
|
- AC_ARG_VAR([CURSES_LIB], [linker library for Curses, e.g. -lcurses])
|
|
+ AC_ARG_VAR([CURSES_LIBS], [linker library for Curses, e.g. -lcurses])
|
|
+ AC_ARG_VAR([CURSES_CFLAGS], [preprocessor flags for Curses, e.g. -I/usr/include/ncursesw])
|
|
AC_ARG_WITH([ncurses], [AS_HELP_STRING([--with-ncurses],
|
|
[force the use of Ncurses or NcursesW])],
|
|
[], [with_ncurses=check])
|
|
@@ -195,20 +258,17 @@ AC_DEFUN([AX_WITH_CURSES], [
|
|
[], [with_ncursesw=check])
|
|
|
|
ax_saved_LIBS=$LIBS
|
|
+ ax_saved_CPPFLAGS=$CPPFLAGS
|
|
+
|
|
AS_IF([test "x$with_ncurses" = xyes || test "x$with_ncursesw" = xyes],
|
|
[ax_with_plaincurses=no], [ax_with_plaincurses=check])
|
|
|
|
ax_cv_curses_which=no
|
|
|
|
# Test for NcursesW
|
|
+ AS_IF([test "x$CURSES_LIBS" = x && test "x$with_ncursesw" != xno], [
|
|
+ _FIND_CURSES_FLAGS([ncursesw])
|
|
|
|
- AS_IF([test "x$CURSES_LIB" = x && test "x$with_ncursesw" != xno], [
|
|
- LIBS="$ax_saved_LIBS -lncursesw"
|
|
-
|
|
- AC_CACHE_CHECK([for NcursesW wide-character library], [ax_cv_ncursesw], [
|
|
- AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])],
|
|
- [ax_cv_ncursesw=yes], [ax_cv_ncursesw=no])
|
|
- ])
|
|
AS_IF([test "x$ax_cv_ncursesw" = xno && test "x$with_ncursesw" = xyes], [
|
|
AC_MSG_ERROR([--with-ncursesw specified but could not find NcursesW library])
|
|
])
|
|
@@ -216,7 +276,8 @@ AC_DEFUN([AX_WITH_CURSES], [
|
|
AS_IF([test "x$ax_cv_ncursesw" = xyes], [
|
|
ax_cv_curses=yes
|
|
ax_cv_curses_which=ncursesw
|
|
- CURSES_LIB="-lncursesw"
|
|
+ CURSES_LIBS="$pkg_cv__ax_cv_ncursesw_libs"
|
|
+ CURSES_CFLAGS="$pkg_cv__ax_cv_ncursesw_cppflags"
|
|
AC_DEFINE([HAVE_NCURSESW], [1], [Define to 1 if the NcursesW library is present])
|
|
AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present])
|
|
|
|
@@ -318,16 +379,13 @@ AC_DEFUN([AX_WITH_CURSES], [
|
|
])
|
|
])
|
|
])
|
|
+ unset pkg_cv__ax_cv_ncursesw_libs
|
|
+ unset pkg_cv__ax_cv_ncursesw_cppflags
|
|
|
|
# Test for Ncurses
|
|
+ AS_IF([test "x$CURSES_LIBS" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno], [
|
|
+ _FIND_CURSES_FLAGS([ncurses])
|
|
|
|
- AS_IF([test "x$CURSES_LIB" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno], [
|
|
- LIBS="$ax_saved_LIBS -lncurses"
|
|
-
|
|
- AC_CACHE_CHECK([for Ncurses library], [ax_cv_ncurses], [
|
|
- AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])],
|
|
- [ax_cv_ncurses=yes], [ax_cv_ncurses=no])
|
|
- ])
|
|
AS_IF([test "x$ax_cv_ncurses" = xno && test "x$with_ncurses" = xyes], [
|
|
AC_MSG_ERROR([--with-ncurses specified but could not find Ncurses library])
|
|
])
|
|
@@ -335,7 +393,8 @@ AC_DEFUN([AX_WITH_CURSES], [
|
|
AS_IF([test "x$ax_cv_ncurses" = xyes], [
|
|
ax_cv_curses=yes
|
|
ax_cv_curses_which=ncurses
|
|
- CURSES_LIB="-lncurses"
|
|
+ CURSES_LIBS="$pkg_cv__ax_cv_ncurses_libs"
|
|
+ CURSES_CFLAGS="$pkg_cv__ax_cv_ncurses_cppflags"
|
|
AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if the Ncurses library is present])
|
|
AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present])
|
|
|
|
@@ -390,12 +449,13 @@ AC_DEFUN([AX_WITH_CURSES], [
|
|
])
|
|
])
|
|
])
|
|
+ unset pkg_cv__ax_cv_ncurses_libs
|
|
+ unset pkg_cv__ax_cv_ncurses_cppflags
|
|
|
|
- # Test for plain Curses (or if CURSES_LIB was set by user)
|
|
-
|
|
+ # Test for plain Curses (or if CURSES_LIBS was set by user)
|
|
AS_IF([test "x$with_plaincurses" != xno && test "x$ax_cv_curses_which" = xno], [
|
|
- AS_IF([test "x$CURSES_LIB" != x], [
|
|
- LIBS="$ax_saved_LIBS $CURSES_LIB"
|
|
+ AS_IF([test "x$CURSES_LIBS" != x], [
|
|
+ LIBS="$ax_saved_LIBS $CURSES_LIBS"
|
|
], [
|
|
LIBS="$ax_saved_LIBS -lcurses"
|
|
])
|
|
@@ -408,8 +468,8 @@ AC_DEFUN([AX_WITH_CURSES], [
|
|
AS_IF([test "x$ax_cv_plaincurses" = xyes], [
|
|
ax_cv_curses=yes
|
|
ax_cv_curses_which=plaincurses
|
|
- AS_IF([test "x$CURSES_LIB" = x], [
|
|
- CURSES_LIB="-lcurses"
|
|
+ AS_IF([test "x$CURSES_LIBS" = x], [
|
|
+ CURSES_LIBS="-lcurses"
|
|
])
|
|
AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present])
|
|
|
|
@@ -515,4 +575,8 @@ AC_DEFUN([AX_WITH_CURSES], [
|
|
AS_IF([test "x$ax_cv_curses_obsolete" != xyes], [ax_cv_curses_obsolete=no])
|
|
|
|
LIBS=$ax_saved_LIBS
|
|
+ CPPFLAGS=$ax_saved_CPPFLAGS
|
|
+
|
|
+ unset ax_saved_LIBS
|
|
+ unset ax_saved_CPPFLAGS
|
|
])dnl
|