diff mbox series

[2/2] Fix Meson Perl version check

Message ID 20250120160301.121245-2-git@mavit.org.uk (mailing list archive)
State New
Headers show
Series [1/2] Check for Perl 5.26.0 from Meson build | expand

Commit Message

Peter Oliver Jan. 20, 2025, 4:03 p.m. UTC
Command `perl --version` says, e.g., “This is perl 5, version 26,
subversion 0 (v5.26.0)”, which Meson interprets as version 26.

Signed-off-by: Peter Oliver <git@mavit.org.uk>
---
 meson.build | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Patrick Steinhardt Jan. 21, 2025, 6:44 a.m. UTC | #1
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
diff mbox series

Patch

diff --git a/meson.build b/meson.build
index f01d81b39f..bf129205ad 100644
--- a/meson.build
+++ b/meson.build
@@ -755,7 +755,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.26.0', dirs: program_path, required: perl_required)
+#
+# When checking here, it would be better to say,
+#   version: '>=5.26.0', version_argument: '-eprint "$^V"'
+# but that requires Meson 1.5.0, which at the time of writing is rather new.
+perl = find_program('perl', version: '>=26', dirs: program_path, required: perl_required)
 perl_features_enabled = perl.found() and get_option('perl').allowed()
 if perl_features_enabled
   build_options_config.set('NO_PERL', '')