File: FindPerl.cmake

package info (click to toggle)
cmake 4.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 152,312 kB
  • sloc: ansic: 403,890; cpp: 303,778; sh: 4,097; python: 3,582; yacc: 3,106; lex: 1,279; f90: 534; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 235; objc: 215; perl: 213; xml: 198; makefile: 108; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (149 lines) | stat: -rw-r--r-- 4,109 bytes parent folder | download | duplicates (2)
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)