[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)
- Re: Portability of libtextstyle,
Bruno Haible <=