1# Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2# file Copyright.txt or https://cmake.org/licensing for details. 3 4#[=======================================================================[.rst: 5FindPerl 6-------- 7 8Find perl 9 10this module looks for Perl 11 12:: 13 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#]=======================================================================] 18 19include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake) 20include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake) 21 22set(PERL_POSSIBLE_BIN_PATHS 23 ${CYGWIN_INSTALL_PATH}/bin 24 ${MSYS_INSTALL_PATH}/usr/bin 25 ) 26 27if(WIN32) 28 get_filename_component( 29 ActivePerl_CurrentVersion 30 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]" 31 NAME) 32 set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS} 33 "C:/Perl/bin" 34 "C:/Strawberry/perl/bin" 35 [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin 36 ) 37endif() 38 39find_program(PERL_EXECUTABLE 40 NAMES perl 41 PATHS ${PERL_POSSIBLE_BIN_PATHS} 42 ) 43 44if(PERL_EXECUTABLE) 45 ### PERL_VERSION 46 execute_process( 47 COMMAND 48 ${PERL_EXECUTABLE} -V:version 49 OUTPUT_VARIABLE 50 PERL_VERSION_OUTPUT_VARIABLE 51 RESULT_VARIABLE 52 PERL_VERSION_RESULT_VARIABLE 53 ERROR_QUIET 54 OUTPUT_STRIP_TRAILING_WHITESPACE 55 ) 56 if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'") 57 string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE}) 58 else() 59 execute_process( 60 COMMAND ${PERL_EXECUTABLE} -v 61 OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE 62 RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE 63 ERROR_QUIET 64 OUTPUT_STRIP_TRAILING_WHITESPACE 65 ) 66 if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]") 67 set(PERL_VERSION_STRING "${CMAKE_MATCH_1}") 68 elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +") 69 set(PERL_VERSION_STRING "${CMAKE_MATCH_1}") 70 endif() 71 endif() 72endif() 73 74# Deprecated settings for compatibility with CMake1.4 75set(PERL ${PERL_EXECUTABLE}) 76 77include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) 78if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs") 79 # FindPerlLibs include()'s this module. It's an old pattern, but rather than 80 # trying to suppress this from outside the module (which is then sensitive to 81 # the contents, detect the case in this module and suppress it explicitly. 82 set(FPHSA_NAME_MISMATCHED 1) 83endif () 84FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl 85 REQUIRED_VARS PERL_EXECUTABLE 86 VERSION_VAR PERL_VERSION_STRING) 87unset(FPHSA_NAME_MISMATCHED) 88 89mark_as_advanced(PERL_EXECUTABLE) 90