Subject: Re: [PATCH 2/2] Fix Meson Perl version check

From: Patrick Steinhardt <[email-masked]>
Date: Tue, 21 Jan 2025 07:44:29 +0100

On Mon, Jan 20, 2025 at 04:03:01PM +0000, Peter Oliver wrote:
> Command `perl --version` says, e.g., “This is perl 5, version 26,
> subversion 0 (v5.26.0)”, which Meson interprets as version 26.

Yeah, I've also discovered this issue, but decided to improve it
upstream in Meson [1]. Meson now prefers version numbers with dots when
scanning through the output, which makes it match the "v5.26.0" part
instead of the "version 26" part. This will be released with Meson
1.7.0, which should be released soonish.

I'm a little torn whether it still makes sense to fix the issue in that
light. If we do, we should use a fix that properly fixes the underlying
issue instead of adapting to the misdetected version, as that will stop
working once the mentioned fix is released.

One way would be to use `perl -V:version` instead of `perl --version`,
which will print the following:

    version='5.40.0';

The support of overriding the version argument has only been added
recently with Meson 1.5.0 though. We can still make it work though by
making this conditional:

    diff --git a/meson.build b/meson.build
    index 07744c73b1..c452a79e37 100644
    --- a/meson.build
    +++ b/meson.build
    @@ -754,7 +754,11 @@ endif
     
     # Note that we only set NO_PERL if the Perl features were disabled by the user.
     # It may not be set when we have found Perl, but only use it to run tests.
    -perl = find_program('perl', version: '>=5.8.1', dirs: program_path, required: perl_required)
    +if meson.version().version_compare('>=1.5.0')
    +  perl = find_program('perl', version: '>=5.8.1', dirs: program_path, required: perl_required, version_argument: '-V:version')
    +else
    +  perl = find_program('perl', version: '>=5.8.1', dirs: program_path, required: perl_required)
    +endif
     perl_features_enabled = perl.found() and get_option('perl').allowed()
     if perl_features_enabled
       build_options_config.set('NO_PERL', '')

Is it worth it? I dunno. But also doesn't hurt if you want to go down
that path.

Thanks!

Patrick

[1]: https://github.com/mesonbuild/meson/commit/a3679a64eec7c312c81d657880f34f015426c7db