# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file LICENSE.rst or https://cmake.org/licensing for details. #[=======================================================================[.rst: FindPerl -------- Finds a Perl interpreter: .. code-block:: cmake find_package(Perl [] [...]) Perl is a general-purpose, interpreted, dynamic programming language. Result Variables ^^^^^^^^^^^^^^^^ This module defines the following variables: ``Perl_FOUND`` .. versionadded:: 3.3 Boolean indicating whether the (requested version of) Perl executable was found. ``Perl_VERSION`` .. versionadded:: 4.2 The version of Perl found. Cache Variables ^^^^^^^^^^^^^^^ 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_FOUND`` .. deprecated:: 4.2 Use ``Perl_FOUND``, which has the same value. Boolean indicating whether the (requested version of) Perl executable was found. ``PERL_VERSION_STRING`` .. deprecated:: 4.2 Superseded by the ``Perl_VERSION``. The version of Perl found. Examples ^^^^^^^^ 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) include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake) set(PERL_POSSIBLE_BIN_PATHS ${CYGWIN_INSTALL_PATH}/bin ${MSYS_INSTALL_PATH}/usr/bin ) if(WIN32) get_filename_component( ActivePerl_CurrentVersion "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]" NAME) set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS} "C:/Perl/bin" "C:/Strawberry/perl/bin" [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin ) endif() find_program(PERL_EXECUTABLE NAMES perl PATHS ${PERL_POSSIBLE_BIN_PATHS} ) if(PERL_EXECUTABLE) execute_process( COMMAND ${PERL_EXECUTABLE} -V:version OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE ERROR_QUIET 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 ${PERL_VERSION_OUTPUT_VARIABLE}) set(PERL_VERSION_STRING "${Perl_VERSION}") else() execute_process( COMMAND ${PERL_EXECUTABLE} -v OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE ERROR_QUIET 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 "${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 "${CMAKE_MATCH_1}") set(PERL_VERSION_STRING "${Perl_VERSION}") endif() endif() endif() # Deprecated settings for compatibility with CMake1.4 set(PERL ${PERL_EXECUTABLE}) include(FindPackageHandleStandardArgs) 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 () find_package_handle_standard_args(Perl REQUIRED_VARS PERL_EXECUTABLE VERSION_VAR Perl_VERSION) unset(FPHSA_NAME_MISMATCHED) mark_as_advanced(PERL_EXECUTABLE)