1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
# 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 [<version>] [...])
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)
|