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:
5FindPerlLibs
6------------
7
8Find Perl libraries
9
10This module finds if PERL is installed and determines where the
11include files and libraries are.  It also determines what the name of
12the library is.  This code sets the following variables:
13
14::
15
16  PERLLIBS_FOUND    = True if perl.h & libperl were found
17  PERL_INCLUDE_PATH = path to where perl.h is found
18  PERL_LIBRARY      = path to libperl
19  PERL_EXECUTABLE   = full path to the perl binary
20
21
22
23The minimum required version of Perl can be specified using the
24standard syntax, e.g.  find_package(PerlLibs 6.0)
25
26::
27
28  The following variables are also available if needed
29  (introduced after CMake 2.6.4)
30
31
32
33::
34
35  PERL_SITESEARCH     = path to the sitesearch install dir (-V:installsitesearch)
36  PERL_SITEARCH       = path to the sitelib install directory (-V:installsitearch)
37  PERL_SITELIB        = path to the sitelib install directory (-V:installsitelib)
38  PERL_VENDORARCH     = path to the vendor arch install directory (-V:installvendorarch)
39  PERL_VENDORLIB      = path to the vendor lib install directory (-V:installvendorlib)
40  PERL_ARCHLIB        = path to the core arch lib install directory (-V:archlib)
41  PERL_PRIVLIB        = path to the core priv lib install directory (-V:privlib)
42  PERL_UPDATE_ARCHLIB = path to the update arch lib install directory (-V:installarchlib)
43  PERL_UPDATE_PRIVLIB = path to the update priv lib install directory (-V:installprivlib)
44  PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
45#]=======================================================================]
46
47# find the perl executable
48include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake)
49
50if (PERL_EXECUTABLE)
51
52  function (perl_get_info _pgi_info tag)
53    cmake_parse_arguments(_PGI "IS_PATH" "" "" ${ARGN})
54
55    set (${_pgi_info} NOTFOUND PARENT_SCOPE)
56
57    execute_process(COMMAND "${PERL_EXECUTABLE}" -V:${tag}
58      OUTPUT_VARIABLE result
59      RESULT_VARIABLE status)
60
61    if (NOT status)
62      string(REGEX REPLACE "${tag}='([^']*)'.*" "\\1" result "${result}")
63      if (_PGI_IS_PATH)
64        file(TO_CMAKE_PATH "${result}" result)
65      endif()
66      set (${_pgi_info} "${result}" PARENT_SCOPE)
67    endif ()
68  endfunction()
69
70  ### PERL_PREFIX
71  perl_get_info(PERL_PREFIX prefix IS_PATH)
72
73  ### PERL_ARCHNAME
74  perl_get_info(PERL_ARCHNAME archname)
75
76  ### PERL_EXTRA_C_FLAGS
77  perl_get_info(PERL_EXTRA_C_FLAGS cppflags)
78
79  ### PERL_SITESEARCH
80  perl_get_info(PERL_SITESEARCH installsitesearch IS_PATH)
81
82  ### PERL_SITEARCH
83  perl_get_info(PERL_SITEARCH installsitearch IS_PATH)
84
85  ### PERL_SITELIB
86  perl_get_info(PERL_SITELIB installsitelib IS_PATH)
87
88  ### PERL_VENDORARCH
89  perl_get_info(PERL_VENDORARCH installvendorarch IS_PATH)
90
91  ### PERL_VENDORLIB
92  perl_get_info(PERL_VENDORLIB installvendorlib IS_PATH)
93
94  ### PERL_ARCHLIB
95  perl_get_info(PERL_ARCHLIB archlib IS_PATH)
96
97  ### PERL_PRIVLIB
98  perl_get_info(PERL_PRIVLIB privlib IS_PATH)
99
100  ### PERL_UPDATE_ARCHLIB
101  perl_get_info(PERL_UPDATE_ARCHLIB installarchlib IS_PATH)
102
103  ### PERL_UPDATE_PRIVLIB
104  perl_get_info(PERL_UPDATE_PRIVLIB installprivlib IS_PATH)
105
106  ### PERL_POSSIBLE_LIBRARY_NAMES
107  perl_get_info(PERL_POSSIBLE_LIBRARY_NAMES libperl)
108  if (NOT PERL_POSSIBLE_LIBRARY_NAMES)
109    set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl)
110  endif()
111  if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
112    list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING})
113  endif()
114  if (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN")
115    # on MSYS and CYGWIN environments, current perl -V:libperl gives shared library name
116    # rather than the import library. So, extends possible library names
117    list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl)
118  endif()
119
120  ### PERL_INCLUDE_PATH
121  find_path(PERL_INCLUDE_PATH
122    NAMES
123      perl.h
124    PATHS
125      "${PERL_UPDATE_ARCHLIB}/CORE"
126      "${PERL_ARCHLIB}/CORE"
127      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
128      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
129      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
130      /usr/lib/perl/${PERL_VERSION_STRING}/CORE
131  )
132
133  ### PERL_LIBRARY
134  find_library(PERL_LIBRARY
135    NAMES
136      ${PERL_POSSIBLE_LIBRARY_NAMES}
137    PATHS
138      "${PERL_UPDATE_ARCHLIB}/CORE"
139      "${PERL_ARCHLIB}/CORE"
140      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
141      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
142      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
143      /usr/lib/perl/${PERL_VERSION_STRING}/CORE
144  )
145
146endif ()
147
148include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
149find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
150                                           VERSION_VAR PERL_VERSION_STRING)
151
152# Introduced after CMake 2.6.4 to bring module into compliance
153set(PERL_INCLUDE_DIR  ${PERL_INCLUDE_PATH})
154set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
155set(PERL_LIBRARIES    ${PERL_LIBRARY})
156# For backward compatibility with CMake before 2.8.8
157set(PERL_VERSION ${PERL_VERSION_STRING})
158
159mark_as_advanced(
160  PERL_INCLUDE_PATH
161  PERL_LIBRARY
162)
163