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