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:
10 this module looks for Perl
14 PERL_EXECUTABLE - the full path to perl
15 PERL_FOUND - If false, don't attempt to use perl.
16 PERL_VERSION_STRING - version of perl found (since CMake 2.8.8)
17 #]=======================================================================]
19 include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
21 set(PERL_POSSIBLE_BIN_PATHS
22 ${CYGWIN_INSTALL_PATH}/bin
26 get_filename_component(
27 ActivePerl_CurrentVersion
28 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
30 set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
32 "C:/Strawberry/perl/bin"
33 [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin
37 find_program(PERL_EXECUTABLE
39 PATHS ${PERL_POSSIBLE_BIN_PATHS}
46 ${PERL_EXECUTABLE} -V:version
48 PERL_VERSION_OUTPUT_VARIABLE
50 PERL_VERSION_RESULT_VARIABLE
52 OUTPUT_STRIP_TRAILING_WHITESPACE
54 if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'")
55 string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE})
58 COMMAND ${PERL_EXECUTABLE} -v
59 OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE
60 RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE
62 OUTPUT_STRIP_TRAILING_WHITESPACE
64 if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]")
65 set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
66 elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
67 set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
72 # Deprecated settings for compatibility with CMake1.4
73 set(PERL ${PERL_EXECUTABLE})
75 include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
76 if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs")
77 # FindPerlLibs include()'s this module. It's an old pattern, but rather than
78 # trying to suppress this from outside the module (which is then sensitive to
79 # the contents, detect the case in this module and suppress it explicitly.
80 set(FPHSA_NAME_MISMATCHED 1)
82 FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl
83 REQUIRED_VARS PERL_EXECUTABLE
84 VERSION_VAR PERL_VERSION_STRING)
85 unset(FPHSA_NAME_MISMATCHED)
87 mark_as_advanced(PERL_EXECUTABLE)