Subject: bug#44129: Patch to improve valac version detection

From: Reuben Thomas <[email-masked]>
Date: Wed, 21 Oct 2020 23:37:51 +0100

Attached, a patch to improve valac version detection. The vala compiler,
valac, can report the API version it supports. For releases, this is the
same as the major & minor version of the compiler, so for example:

$ valac --version
Vala 0.48.11
$ valac --api-version
0.48

The advantage of using the API version is that it's semantically
meaningful. It's also simpler to parse! It can be to allow a 3rd-party,
patched, or unreleased compiler to be used more easily.

(For example, the current Vala git master compiler reports:

$ valac-0.52 --version
Vala 0.50.1.19-135c0
$ valac-0.52 --api-version
0.52

)

-- 
https://rrt.sc3d.org
From 3cb4252dd8e182bab5f484d3a8dd7a96f6da2180 Mon Sep 17 00:00:00 2001
From: Reuben Thomas <[email-masked]>
Date: Wed, 21 Oct 2020 23:31:46 +0100
Subject: [PATCH] Improve Vala compiler detection: use API version, not
 compiler version

* m4/vala.m4: check `valac --api-version', not `valac --version'.
* doc/automake.texi: update documentation.
---
 doc/automake.texi | 15 +++++++++------
 m4/vala.m4        | 28 +++++++++++++++-------------
 2 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/doc/automake.texi b/doc/automake.texi
index 91e1d679a..dbeaf01f5 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -6969,12 +6969,15 @@ number.
 Search for a Vala compiler in @env{PATH}.  If it is found, the variable
 @code{VALAC} is set to point to it (see below for more details).  This
 macro takes three optional arguments.  The first argument, if present,
-is the minimum version of the Vala compiler required to compile this
-package.  If a compiler is found and satisfies @var{minimum-version},
-then @var{action-if-found} is run (this defaults to do nothing).
-Otherwise, @var{action-if-not-found} is run.  If @var{action-if-not-found}
-is not specified, the default value is to print a warning in case no
-compiler is found, or if a too-old version of the compiler is found.
+is the minimum version of the Vala API required to compile this package.
+For Vala releases, this is the same as the major and minor release
+number; e.g., when @code{valac --version} reports @code{0.48.7},
+@code{valac --api-version} reports @code{0.48}.  If a compiler is found
+and satisfies @var{minimum-version}, then @var{action-if-found} is run
+(this defaults to do nothing).  Otherwise, @var{action-if-not-found} is
+run.  If @var{action-if-not-found} is not specified, the default value
+is to print a warning in case no compiler is found, or if a too-old
+version of the compiler is found.
 @end defmac
 
 There are a few variables that are used when compiling Vala sources:
diff --git a/m4/vala.m4 b/m4/vala.m4
index 759061dc0..509904b11 100644
--- a/m4/vala.m4
+++ b/m4/vala.m4
@@ -6,23 +6,25 @@
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# Check whether the Vala compiler exists in $PATH.  If it is found, the
-# variable VALAC is set pointing to its absolute path.  Otherwise, it is
-# simply set to 'valac'.
-# Optionally a minimum release number of the compiler can be requested.
-# If the ACTION-IF-FOUND parameter is given, it will be run if a proper
-# Vala compiler is found.
-# Similarly, if the ACTION-IF-FOUND is given, it will be run if no proper
-# Vala compiler is found.  It defaults to simply print a warning about the
-# situation, but otherwise proceeding with the configuration.
+# Search for a Vala compiler in PATH.  If it is found, the variable VALAC is
+# set to point to it.  Otherwise, it is simply set to 'valac'.  This macro
+# takes three optional arguments.  The first argument, if present, is the
+# minimum version of the Vala API required to compile this package.  For Vala
+# releases, this is the same as the major and minor release number; e.g., when
+# `valac --version' reports 0.48.7, `valac --api-version' reports 0.48.  If a
+# compiler is found and satisfies MINIMUM-VERSION, then ACTION-IF-FOUND is run
+# (this defaults to do nothing).  Otherwise, ACTION-IF-NOT-FOUND is run.  If
+# ACTION-IF-NOT-FOUND is not specified, the default value is to print a
+# warning in case no compiler is found, or if a too-old version of the
+# compiler is found.
 #
 # AM_PROG_VALAC([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
 # --------------------------------------------------------------------------
 AC_DEFUN([AM_PROG_VALAC],
   [AC_PATH_PROG([VALAC], [valac], [valac])
    AS_IF([test "$VALAC" != valac && test -n "$1"],
-      [AC_MSG_CHECKING([whether $VALAC is at least version $1])
-       am__vala_version=`$VALAC --version | sed 's/Vala  *//'`
+      [AC_MSG_CHECKING([whether $VALAC supports at least API version $1])
+       am__vala_version=`$VALAC --api-version`
        AS_VERSION_COMPARE([$1], ["$am__vala_version"],
          [AC_MSG_RESULT([yes])],
          [AC_MSG_RESULT([yes])],
@@ -30,8 +32,8 @@ AC_DEFUN([AM_PROG_VALAC],
           VALAC=valac])])
     if test "$VALAC" = valac; then
       m4_default([$3],
-        [AC_MSG_WARN([no proper vala compiler found])
-         AC_MSG_WARN([you will not be able to compile vala source files])])
+        [AC_MSG_WARN([Vala compiler not found or too old])
+         AC_MSG_WARN([you will not be able to compile Vala source files])])
     else
       m4_default([$2], [:])
     fi])
-- 
2.25.1