Merge topic 'cpack-innosetup-linux'
[kiteware-cmake.git] / Modules / FindPerl.cmake
blob49bc54ccc431fa911519cb90d4ebc1b6577fe6bb
1 # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
4 #[=======================================================================[.rst:
5 FindPerl
6 --------
8 Find a Perl interpreter.
10 This module defines the following variables:
12 ``PERL_EXECUTABLE``
13   The full path to Perl.
15 ``PERL_FOUND``
16   True if the Perl executable was found.
18 ``PERL_VERSION_STRING``
19   .. versionadded:: 2.8.8
21   The version of Perl found.
22 #]=======================================================================]
24 include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
25 include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
27 set(PERL_POSSIBLE_BIN_PATHS
28   ${CYGWIN_INSTALL_PATH}/bin
29   ${MSYS_INSTALL_PATH}/usr/bin
30   )
32 if(WIN32)
33   get_filename_component(
34     ActivePerl_CurrentVersion
35     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
36     NAME)
37   set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
38     "C:/Perl/bin"
39     "C:/Strawberry/perl/bin"
40     [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin
41     )
42 endif()
44 find_program(PERL_EXECUTABLE
45   NAMES perl
46   PATHS ${PERL_POSSIBLE_BIN_PATHS}
47   )
49 if(PERL_EXECUTABLE)
50   ### PERL_VERSION
51   execute_process(
52     COMMAND
53       ${PERL_EXECUTABLE} -V:version
54       OUTPUT_VARIABLE
55         PERL_VERSION_OUTPUT_VARIABLE
56       RESULT_VARIABLE
57         PERL_VERSION_RESULT_VARIABLE
58       ERROR_QUIET
59       OUTPUT_STRIP_TRAILING_WHITESPACE
60   )
61   if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'")
62     string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE})
63   else()
64     execute_process(
65       COMMAND ${PERL_EXECUTABLE} -v
66       OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE
67       RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE
68       ERROR_QUIET
69       OUTPUT_STRIP_TRAILING_WHITESPACE
70     )
71     if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]")
72       set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
73     elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
74       set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
75     endif()
76   endif()
77 endif()
79 # Deprecated settings for compatibility with CMake1.4
80 set(PERL ${PERL_EXECUTABLE})
82 include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
83 if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs")
84   # FindPerlLibs include()'s this module. It's an old pattern, but rather than
85   # trying to suppress this from outside the module (which is then sensitive to
86   # the contents, detect the case in this module and suppress it explicitly.
87   set(FPHSA_NAME_MISMATCHED 1)
88 endif ()
89 FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl
90                                   REQUIRED_VARS PERL_EXECUTABLE
91                                   VERSION_VAR PERL_VERSION_STRING)
92 unset(FPHSA_NAME_MISMATCHED)
94 mark_as_advanced(PERL_EXECUTABLE)