From 4f1732d96bde304bb9ebc732d06be8fc9952d97f Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Fri, 8 Aug 2025 22:22:03 +0200 Subject: [PATCH] FindPerl, FindPerlLibs: Add Perl_VERSION and PerlLibs_VERSION This deprecates the PERL_VERSION_STRING result variable. Issue: #27088 --- Help/release/dev/find-modules.rst | 6 ++ Modules/FindPerl.cmake | 52 +++++++++++++---- Modules/FindPerlLibs.cmake | 58 +++++++++++++------ Tests/CMakeOnly/AllFindModules/CMakeLists.txt | 2 +- 4 files changed, 88 insertions(+), 30 deletions(-) diff --git a/Help/release/dev/find-modules.rst b/Help/release/dev/find-modules.rst index 80f548a793..bd681cd91e 100644 --- a/Help/release/dev/find-modules.rst +++ b/Help/release/dev/find-modules.rst @@ -53,6 +53,12 @@ Find Modules * The :module:`FindOpenSSL` module now provides an ``OpenSSL_VERSION`` result variable. The ``OPENSSL_VERSION`` result variable is deprecated. +* The :module:`FindPerl` module now provides a ``Perl_VERSION`` result + variable. The ``PERL_VERSION_STRING`` result variable is deprecated. + +* The :module:`FindPerlLibs` module now provides a ``PerlLibs_VERSION`` + result variable. + * The :module:`FindPNG` module now provides a ``PNG_VERSION`` result variable. The ``PNG_VERSION_STRING`` result variable is deprecated. diff --git a/Modules/FindPerl.cmake b/Modules/FindPerl.cmake index 06a2e62d18..b1c4f51121 100644 --- a/Modules/FindPerl.cmake +++ b/Modules/FindPerl.cmake @@ -5,8 +5,13 @@ FindPerl -------- -Finds a Perl interpreter. Perl is a general-purpose, interpreted, dynamic -programming language. +Finds a Perl interpreter: + +.. code-block:: cmake + + find_package(Perl [] [...]) + +Perl is a general-purpose, interpreted, dynamic programming language. Result Variables ^^^^^^^^^^^^^^^^ @@ -14,10 +19,13 @@ Result Variables This module defines the following variables: ``Perl_FOUND`` - True if the Perl executable was found. For backward compatibility, the - ``PERL_FOUND`` variable is also set to the same value. + Boolean indicating whether the (requested version of) Perl executable is + found. For backward compatibility, the ``PERL_FOUND`` variable is also + set to the same value. + +``Perl_VERSION`` + .. versionadded:: 4.2 -``PERL_VERSION_STRING`` The version of Perl found. Cache Variables @@ -28,14 +36,34 @@ The following cache variables may also be set: ``PERL_EXECUTABLE`` Full path to the ``perl`` executable. +Deprecated Variables +^^^^^^^^^^^^^^^^^^^^ + +The following variables are provided for backward compatibility: + +``PERL_VERSION_STRING`` + .. deprecated:: 4.2 + Superseded by the ``Perl_VERSION``. + + The version of Perl found. + Examples ^^^^^^^^ -Finding the Perl interpreter: +Finding the Perl interpreter and executing it in a process: .. code-block:: cmake find_package(Perl) + + if(Perl_FOUND) + execute_process(COMMAND ${PERL_EXECUTABLE} --help) + endif() + +See Also +^^^^^^^^ + +* The :module:`FindPerlLibs` to find Perl libraries. #]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake) @@ -64,7 +92,6 @@ find_program(PERL_EXECUTABLE ) if(PERL_EXECUTABLE) - ### PERL_VERSION execute_process( COMMAND ${PERL_EXECUTABLE} -V:version @@ -76,7 +103,8 @@ if(PERL_EXECUTABLE) OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'") - string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE}) + string(REGEX REPLACE "version='([^']+)'.*" "\\1" Perl_VERSION ${PERL_VERSION_OUTPUT_VARIABLE}) + set(PERL_VERSION_STRING "${Perl_VERSION}") else() execute_process( COMMAND ${PERL_EXECUTABLE} -v @@ -86,9 +114,11 @@ if(PERL_EXECUTABLE) OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]") - set(PERL_VERSION_STRING "${CMAKE_MATCH_1}") + set(Perl_VERSION "${CMAKE_MATCH_1}") + set(PERL_VERSION_STRING "${Perl_VERSION}") elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +") - set(PERL_VERSION_STRING "${CMAKE_MATCH_1}") + set(Perl_VERSION "${CMAKE_MATCH_1}") + set(PERL_VERSION_STRING "${Perl_VERSION}") endif() endif() endif() @@ -105,7 +135,7 @@ if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs") endif () find_package_handle_standard_args(Perl REQUIRED_VARS PERL_EXECUTABLE - VERSION_VAR PERL_VERSION_STRING) + VERSION_VAR Perl_VERSION) unset(FPHSA_NAME_MISMATCHED) mark_as_advanced(PERL_EXECUTABLE) diff --git a/Modules/FindPerlLibs.cmake b/Modules/FindPerlLibs.cmake index 330700e183..ab6b33300e 100644 --- a/Modules/FindPerlLibs.cmake +++ b/Modules/FindPerlLibs.cmake @@ -5,18 +5,33 @@ FindPerlLibs ------------ -Finds Perl libraries. Perl is a general-purpose, interpreted, dynamic -programming language. This module detects whether Perl is installed and -determines the locations of include paths, libraries, and the library name. +Finds Perl libraries: + +.. code-block:: cmake + + find_package(PerlLibs [] [...]) + +Perl is a general-purpose, interpreted, dynamic programming language. + +This module detects whether Perl interpreter is installed via the +:module:`FindPerl` module and determines the locations of Perl include paths, +libraries, and the library name. Result Variables ^^^^^^^^^^^^^^^^ -This module sets the following variables: +This module defines the following variables: ``PerlLibs_FOUND`` - True if ``perl.h`` and ``libperl`` were found. For backward compatibility, - the ``PERLLIBS_FOUND`` variable is also set to the same value. + Boolean indicating whether the (requested version of) Perl library + (``perl.h`` and ``libperl``) is found. For backward compatibility, the + ``PERLLIBS_FOUND`` variable is also set to the same value. + +``PerlLibs_VERSION`` + .. versionadded:: 4.2 + + The version of Perl library found. + ``PERL_SITESEARCH`` Path to the sitesearch install directory (``-V:installsitesearch``). ``PERL_SITEARCH`` @@ -58,11 +73,18 @@ Finding Perl libraries and specifying the minimum required version: .. code-block:: cmake find_package(PerlLibs 6.0) + +See Also +^^^^^^^^ + +* The :module:`FindPerl` module to find the Perl interpreter. #]=======================================================================] # find the perl executable include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake) +set(PerlLibs_VERSION "${Perl_VERSION}") + if (PERL_EXECUTABLE) function (perl_get_info _pgi_info tag) @@ -122,10 +144,10 @@ if (PERL_EXECUTABLE) ### PERL_POSSIBLE_LIBRARY_NAMES perl_get_info(PERL_POSSIBLE_LIBRARY_NAMES libperl) if (NOT PERL_POSSIBLE_LIBRARY_NAMES) - set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl) + set(PERL_POSSIBLE_LIBRARY_NAMES perl${PerlLibs_VERSION} perl) endif() if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN") - list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING}) + list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl${PerlLibs_VERSION}) endif() if (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN") # On MSYS and CYGWIN environments, current perl -V:libperl gives shared @@ -141,10 +163,10 @@ if (PERL_EXECUTABLE) PATHS "${PERL_UPDATE_ARCHLIB}/CORE" "${PERL_ARCHLIB}/CORE" - /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE - /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE - /usr/lib/perl5/${PERL_VERSION_STRING}/CORE - /usr/lib/perl/${PERL_VERSION_STRING}/CORE + /usr/lib/perl5/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE + /usr/lib/perl/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE + /usr/lib/perl5/${PerlLibs_VERSION}/CORE + /usr/lib/perl/${PerlLibs_VERSION}/CORE ) ### PERL_LIBRARY @@ -154,24 +176,24 @@ if (PERL_EXECUTABLE) PATHS "${PERL_UPDATE_ARCHLIB}/CORE" "${PERL_ARCHLIB}/CORE" - /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE - /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE - /usr/lib/perl5/${PERL_VERSION_STRING}/CORE - /usr/lib/perl/${PERL_VERSION_STRING}/CORE + /usr/lib/perl5/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE + /usr/lib/perl/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE + /usr/lib/perl5/${PerlLibs_VERSION}/CORE + /usr/lib/perl/${PerlLibs_VERSION}/CORE ) endif () include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH - VERSION_VAR PERL_VERSION_STRING) + VERSION_VAR PerlLibs_VERSION) # Introduced after CMake 2.6.4 to bring module into compliance set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH}) set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH}) set(PERL_LIBRARIES ${PERL_LIBRARY}) # For backward compatibility with CMake before 2.8.8 -set(PERL_VERSION ${PERL_VERSION_STRING}) +set(PERL_VERSION ${PerlLibs_VERSION}) mark_as_advanced( PERL_INCLUDE_PATH diff --git a/Tests/CMakeOnly/AllFindModules/CMakeLists.txt b/Tests/CMakeOnly/AllFindModules/CMakeLists.txt index 566282ec0e..122f32567b 100644 --- a/Tests/CMakeOnly/AllFindModules/CMakeLists.txt +++ b/Tests/CMakeOnly/AllFindModules/CMakeLists.txt @@ -123,7 +123,7 @@ foreach( Jasper JPEG LibArchive LibLZMA LIBLZMA LibXml2 LibXslt LTTngUST OpenSceneGraph OPENSCENEGRAPH OpenSSL OPENSSL - PNG PostgreSQL Protobuf + Perl PerlLibs PNG PostgreSQL Protobuf Ruby RUBY SDL SWIG TIFF