1 # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
4 #[=======================================================================[.rst:
8 Find a Perl interpreter.
10 This module defines the following variables:
13 The full path to Perl.
16 True if the Perl executable was found.
18 ``PERL_VERSION_STRING``
19 .. versionadded:: 2.8.8
21 The version of Perl found.
22 #]=======================================================================]
24 include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
25 include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
27 set(PERL_POSSIBLE_BIN_PATHS
28 ${CYGWIN_INSTALL_PATH}/bin
29 ${MSYS_INSTALL_PATH}/usr/bin
33 get_filename_component(
34 ActivePerl_CurrentVersion
35 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
37 set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
39 "C:/Strawberry/perl/bin"
40 [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin
44 find_program(PERL_EXECUTABLE
46 PATHS ${PERL_POSSIBLE_BIN_PATHS}
53 ${PERL_EXECUTABLE} -V:version
55 PERL_VERSION_OUTPUT_VARIABLE
57 PERL_VERSION_RESULT_VARIABLE
59 OUTPUT_STRIP_TRAILING_WHITESPACE
61 if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'")
62 string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE})
65 COMMAND ${PERL_EXECUTABLE} -v
66 OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE
67 RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE
69 OUTPUT_STRIP_TRAILING_WHITESPACE
71 if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]")
72 set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
73 elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
74 set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
79 # Deprecated settings for compatibility with CMake1.4
80 set(PERL ${PERL_EXECUTABLE})
82 include(FindPackageHandleStandardArgs)
83 if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs")
84 # FindPerlLibs include()'s this module. It's an old pattern, but rather than
85 # trying to suppress this from outside the module (which is then sensitive to
86 # the contents, detect the case in this module and suppress it explicitly.
87 set(FPHSA_NAME_MISMATCHED 1)
89 find_package_handle_standard_args(Perl
90 REQUIRED_VARS PERL_EXECUTABLE
91 VERSION_VAR PERL_VERSION_STRING)
92 unset(FPHSA_NAME_MISMATCHED)
94 mark_as_advanced(PERL_EXECUTABLE)