cmake/Modules/FindPerl.cmake

95 lines
3.0 KiB
CMake
Raw Normal View History

2016-10-30 18:24:19 +01:00
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
2019-11-11 23:01:05 +01:00
#[=======================================================================[.rst:
FindPerl
--------
2024-04-14 22:45:38 +02:00
Find a Perl interpreter.
2019-11-11 23:01:05 +01:00
2024-04-14 22:45:38 +02:00
This module defines the following variables:
2019-11-11 23:01:05 +01:00
2024-04-14 22:45:38 +02:00
``PERL_EXECUTABLE``
The full path to Perl.
2019-11-11 23:01:05 +01:00
2024-04-14 22:45:38 +02:00
``PERL_FOUND``
True if the Perl executable was found.
``PERL_VERSION_STRING``
.. versionadded:: 2.8.8
The version of Perl found.
2019-11-11 23:01:05 +01:00
#]=======================================================================]
2013-03-16 19:13:01 +02:00
include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
2021-09-14 00:13:48 +02:00
include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
2013-03-16 19:13:01 +02:00
set(PERL_POSSIBLE_BIN_PATHS
${CYGWIN_INSTALL_PATH}/bin
2021-09-14 00:13:48 +02:00
${MSYS_INSTALL_PATH}/usr/bin
)
2013-03-16 19:13:01 +02:00
if(WIN32)
get_filename_component(
ActivePerl_CurrentVersion
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
NAME)
2013-03-16 19:13:01 +02:00
set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
"C:/Perl/bin"
2018-08-09 18:06:22 +02:00
"C:/Strawberry/perl/bin"
[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin
)
2013-03-16 19:13:01 +02:00
endif()
2013-03-16 19:13:01 +02:00
find_program(PERL_EXECUTABLE
NAMES perl
PATHS ${PERL_POSSIBLE_BIN_PATHS}
)
2013-03-16 19:13:01 +02:00
if(PERL_EXECUTABLE)
2012-04-19 19:04:21 +03:00
### PERL_VERSION
2013-03-16 19:13:01 +02:00
execute_process(
2012-04-19 19:04:21 +03:00
COMMAND
${PERL_EXECUTABLE} -V:version
OUTPUT_VARIABLE
PERL_VERSION_OUTPUT_VARIABLE
RESULT_VARIABLE
PERL_VERSION_RESULT_VARIABLE
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
2013-03-16 19:13:01 +02:00
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})
else()
execute_process(
2012-04-19 19:04:21 +03:00
COMMAND ${PERL_EXECUTABLE} -v
OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE
RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
2013-03-16 19:13:01 +02:00
if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]")
2015-04-27 22:25:09 +02:00
set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
2013-03-16 19:13:01 +02:00
elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
2015-04-27 22:25:09 +02:00
set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
2013-03-16 19:13:01 +02:00
endif()
endif()
endif()
2012-04-19 19:04:21 +03:00
# Deprecated settings for compatibility with CMake1.4
2013-03-16 19:13:01 +02:00
set(PERL ${PERL_EXECUTABLE})
2013-03-16 19:13:01 +02:00
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
2020-08-30 11:54:41 +02:00
if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs")
# FindPerlLibs include()'s this module. It's an old pattern, but rather than
# trying to suppress this from outside the module (which is then sensitive to
# the contents, detect the case in this module and suppress it explicitly.
set(FPHSA_NAME_MISMATCHED 1)
endif ()
2012-04-19 19:04:21 +03:00
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl
REQUIRED_VARS PERL_EXECUTABLE
VERSION_VAR PERL_VERSION_STRING)
2020-08-30 11:54:41 +02:00
unset(FPHSA_NAME_MISMATCHED)
2013-03-16 19:13:01 +02:00
mark_as_advanced(PERL_EXECUTABLE)