From: Bruno Haible <bruno@clisp.org>
Date: Sat, 1 Aug 2020 13:04:52 +0000 (+0200)
Subject: libtextstyle[-optional]: Allow requesting a minimum version.
X-Git-Tag: v1.0~3836
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=c1e59f5ad1141945491135be550829698b9438d0;p=gnulib.git

libtextstyle[-optional]: Allow requesting a minimum version.

* m4/libtextstyle.m4 (gl_LIBTEXTSTYLE): Allow an optional argument.
(gl_LIBTEXTSTYLE_NEWEST_VERSION, gl_LIBTEXTSTYLE_INITIALIZE,
gl_LIBTEXTSTYLE_SEARCH): New macros.
* modules/libtextstyle (configure.ac): Don't invoke gl_LIBTEXTSTYLE.
* m4/libtextstyle-optional.m4 (gl_LIBTEXTSTYLE_OPTIONAL): Allow an
optional argument. Invoke, not require, gl_LIBTEXTSTYLE.
* modules/libtextstyle-optional (configure.ac): Don't invoke
gl_LIBTEXTSTYLE_OPTIONAL.
* NEWS: Mention the changes.
---

diff --git a/ChangeLog b/ChangeLog
index 654c52bdde..b951c6a172 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2020-08-01  Bruno Haible  <bruno@clisp.org>
+
+	libtextstyle[-optional]: Allow requesting a minimum version.
+	* m4/libtextstyle.m4 (gl_LIBTEXTSTYLE): Allow an optional argument.
+	(gl_LIBTEXTSTYLE_NEWEST_VERSION, gl_LIBTEXTSTYLE_INITIALIZE,
+	gl_LIBTEXTSTYLE_SEARCH): New macros.
+	* modules/libtextstyle (configure.ac): Don't invoke gl_LIBTEXTSTYLE.
+	* m4/libtextstyle-optional.m4 (gl_LIBTEXTSTYLE_OPTIONAL): Allow an
+	optional argument. Invoke, not require, gl_LIBTEXTSTYLE.
+	* modules/libtextstyle-optional (configure.ac): Don't invoke
+	gl_LIBTEXTSTYLE_OPTIONAL.
+	* NEWS: Mention the changes.
+
 2020-07-31  Bruno Haible  <bruno@clisp.org>
 
 	_GL_CMP: Improve documentation.
diff --git a/NEWS b/NEWS
index 668f2d60c0..89477472ba 100644
--- a/NEWS
+++ b/NEWS
@@ -58,6 +58,15 @@ User visible incompatible changes
 
 Date        Modules         Changes
 
+2020-08-01  libtextstyle-optional  You now need to invoke
+                                   gl_LIBTEXTSTYLE_OPTIONAL explicitly, because
+                                   this macro now takes an optional
+                                   MINIMUM-VERSION argument.
+
+2020-08-01  libtextstyle    You now need to invoke gl_LIBTEXTSTYLE explicitly,
+                            because this macro now takes an optional
+                            MINIMUM-VERSION argument.
+
 2020-06-27  clean-temp      The functions open_temp, fopen_temp now take a
                             'bool delete_on_close' argument. If in doubt, pass
                             false.
diff --git a/m4/libtextstyle-optional.m4 b/m4/libtextstyle-optional.m4
index 38a7ace873..2c41bbf8d3 100644
--- a/m4/libtextstyle-optional.m4
+++ b/m4/libtextstyle-optional.m4
@@ -1,4 +1,4 @@
-# libtextstyle-optional.m4 serial 1
+# libtextstyle-optional.m4 serial 2
 dnl Copyright (C) 2019-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -6,9 +6,13 @@ dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Bruno Haible.
 
-dnl gl_LIBTEXTSTYLE_OPTIONAL
-dnl Searches for an installed libtextstyle or uses the included source code
-dnl parts that define only part of the API and does not do any styling.
+dnl gl_LIBTEXTSTYLE_OPTIONAL([MINIMUM-VERSION])
+dnl Searches for an installed libtextstyle with version >= MINIMUM-VERSION
+dnl   MINIMUM-VERSION = 0.20      - the first release in 2019
+dnl   MINIMUM-VERSION = 0.20.5    - adds hyperlink support and ostream_printf
+dnl   MINIMUM-VERSION unspecified - the newest release
+dnl or uses the included source code parts that define only part of the API
+dnl and do not do any styling.
 dnl If found, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=yes and the LIBTEXTSTYLE
 dnl and LTLIBTEXTSTYLE variables, and augments the CPPFLAGS variable, and
 dnl #defines HAVE_LIBTEXTSTYLE to 1.
@@ -17,7 +21,7 @@ dnl LTLIBTEXTSTYLE to empty.
 
 AC_DEFUN([gl_LIBTEXTSTYLE_OPTIONAL],
 [
-  AC_REQUIRE([gl_LIBTEXTSTYLE])
+  gl_LIBTEXTSTYLE([$1])
   if test $HAVE_LIBTEXTSTYLE = yes; then
     TEXTSTYLE_H=
   else
diff --git a/m4/libtextstyle.m4 b/m4/libtextstyle.m4
index 23b4a6959c..0b1b1d2d43 100644
--- a/m4/libtextstyle.m4
+++ b/m4/libtextstyle.m4
@@ -1,4 +1,4 @@
-# libtextstyle.m4 serial 1
+# libtextstyle.m4 serial 2
 dnl Copyright (C) 2019-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -6,8 +6,11 @@ dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Bruno Haible.
 
-dnl gl_LIBTEXTSTYLE
-dnl Searches for an installed libtextstyle.
+dnl gl_LIBTEXTSTYLE([MINIMUM-VERSION])
+dnl Searches for an installed libtextstyle with version >= MINIMUM-VERSION.
+dnl   MINIMUM-VERSION = 0.20      - the first release in 2019
+dnl   MINIMUM-VERSION = 0.20.5    - adds hyperlink support and ostream_printf
+dnl   MINIMUM-VERSION unspecified - the newest release
 dnl If found, it sets and AC_SUBSTs HAVE_LIBTEXTSTYLE=yes and the LIBTEXTSTYLE
 dnl and LTLIBTEXTSTYLE variables, and augments the CPPFLAGS variable, and
 dnl #defines HAVE_LIBTEXTSTYLE to 1.
@@ -16,7 +19,41 @@ dnl LTLIBTEXTSTYLE to empty.
 
 AC_DEFUN([gl_LIBTEXTSTYLE],
 [
+  AC_REQUIRE([gl_LIBTEXTSTYLE_INITIALIZE])
+  AC_REQUIRE([gl_LIBTEXTSTYLE_SEARCH])
+  pushdef([MINVERSION], ifelse([$1], [], [gl_LIBTEXTSTYLE_NEWEST_VERSION], [$1]))
+  dnl Signal a fatal error if MINVERSION is not among the allowed values.
+  ifelse(ifelse(MINVERSION, [0.20], [x], [])ifelse(MINVERSION, [0.20.5], [x], []), [],
+    [m4_fatal([The argument to gl_LIBTEXTSTYLE or gl_LIBTEXTSTYLE_OPTIONAL is not one of the expected values.])])
+  dnl Store the specified minimum version in gl_libtextstyle_minversion.
+  dnl (This needs to be outside the ifelse. m4_divert_text inside ifelse does
+  dnl not work reliably in Autoconf 2.69.)
+  m4_divert_text([INIT_PREPARE],
+    [gl_libtextstyle_minversion="$gl_libtextstyle_minversion MINVERSION "])
+  popdef([MINVERSION])
+])
+
+AC_DEFUN([gl_LIBTEXTSTYLE_NEWEST_VERSION], [0.20.5])
+
+AC_DEFUN([gl_LIBTEXTSTYLE_INITIALIZE],
+[
+  m4_divert_text([DEFAULTS], [gl_libtextstyle_minversion=' 0.20 '])
+])
+
+AC_DEFUN([gl_LIBTEXTSTYLE_SEARCH],
+[
+  dnl $gl_libtextstyle_minversion evaluates to a space-separated list of
+  dnl specified minimum versions. The maximum of these requirement matters.
+  case "$gl_libtextstyle_minversion" in
+    *" 0.20.5 "*)
+      snippet='styled_ostream_t s = term_styled_ostream_create(1,"",TTYCTL_AUTO,"");
+               ostream_printf(s,"%d",42);'
+      ;;
+    *" 0.20 "*)
+      snippet='term_styled_ostream_create(1,"",TTYCTL_AUTO,"");'
+      ;;
+  esac
   AC_LIB_HAVE_LINKFLAGS([textstyle], [],
-    [#include <textstyle.h>], [term_styled_ostream_create(1,"",TTYCTL_AUTO,"");],
+    [#include <textstyle.h>], [$snippet],
     [no])
 ])
diff --git a/modules/libtextstyle b/modules/libtextstyle
index e086c41724..4c3a4686ac 100644
--- a/modules/libtextstyle
+++ b/modules/libtextstyle
@@ -8,7 +8,7 @@ Depends-on:
 havelib
 
 configure.ac:
-gl_LIBTEXTSTYLE
+# You need to invoke gl_LIBTEXTSTYLE yourself, possibly with arguments.
 
 Makefile.am:
 
diff --git a/modules/libtextstyle-optional b/modules/libtextstyle-optional
index 2d55b3d76f..1ee82707f1 100644
--- a/modules/libtextstyle-optional
+++ b/modules/libtextstyle-optional
@@ -13,7 +13,7 @@ fsync
 vasprintf-posix
 
 configure.ac:
-gl_LIBTEXTSTYLE_OPTIONAL
+# You need to invoke gl_LIBTEXTSTYLE_OPTIONAL yourself, possibly with arguments.
 
 Makefile.am:
 BUILT_SOURCES += $(TEXTSTYLE_H)