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