bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Portability of libtextstyle


From: Bruno Haible
Subject: Re: Portability of libtextstyle
Date: Sat, 01 Aug 2020 15:10:58 +0200
User-agent: KMail/5.1.3 (Linux/4.4.0-186-generic; KDE/5.18.0; x86_64; ; )

Hi Akim,

> > Having thought a while about it... I would prefer that users have
> > the possibility to request any libtextstyle vs. request a libtextstyle
> > which defines ostream_printf.
> > 
> > There are two possibilities to implement that:
> >  (a) Turn 'libtextstyle' into a module which, additionally, requires an 
> > explicit
> >      version number e.g. gl_LIBTEXTSTYLE([0.20.5]).
> >  (b) Leave module 'libtextstyle' as it is, and define a new module
> >      'libtextstyle-0.20.5' that does what you need. Likewise for
> >      'libtextstyle-optional'.
> > 
> > Since (a) is not backward compatible
> 
> (a) can easily turned into something compatible by using the version number
> of the current API as the default requirement.  Besides, in the context of
> gnulib, backward compatibility is less of a problem, since there's an
> explicit act from the user to move forward.
> 
> (b) does not seem to scale very well, unless you really believe that there
> will be no need for more version numbers.

You are right. I came to the same conclusion when looking at the
'javaexec-script' and 'javacomp-script' modules. I'm committing the patch
below.

In Bison's configure.ac, you now need to write
  gl_LIBTEXTSTYLE_OPTIONAL([0.20.5])
This will guarantee that you can use ostream_printf. If an older version of
libtextstyle is installed, it will not be used.


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.

diff --git a/NEWS b/NEWS
index 668f2d6..8947747 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 38a7ace..2c41bbf 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 23b4a69..0b1b1d2 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 e086c41..4c3a468 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 2d55b3d..1ee8270 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)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]