FindPerlLibs.cmake 8.16 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#.rst:
# FindPerlLibs
# ------------
#
# Find Perl libraries
#
# This module finds if PERL is installed and determines where the
# include files and libraries are.  It also determines what the name of
# the library is.  This code sets the following variables:
#
# ::
#
#   PERLLIBS_FOUND    = True if perl.h & libperl were found
#   PERL_INCLUDE_PATH = path to where perl.h is found
#   PERL_LIBRARY      = path to libperl
#   PERL_EXECUTABLE   = full path to the perl binary
#
18 19
#
#
20
# The minimum required version of Perl can be specified using the
21 22 23 24 25 26 27
# standard syntax, e.g.  find_package(PerlLibs 6.0)
#
# ::
#
#   The following variables are also available if needed
#   (introduced after CMake 2.6.4)
#
28
#
29
#
30
# ::
31
#
32 33 34 35 36 37 38
#   PERL_SITESEARCH    = path to the sitesearch install dir
#   PERL_SITELIB       = path to the sitelib install directory
#   PERL_VENDORARCH    = path to the vendor arch install directory
#   PERL_VENDORLIB     = path to the vendor lib install directory
#   PERL_ARCHLIB       = path to the arch lib install directory
#   PERL_PRIVLIB       = path to the priv lib install directory
#   PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
39

40 41
#=============================================================================
# Copyright 2004-2009 Kitware, Inc.
42
# Copyright 2008      Andreas Schneider <asn@cryptomilk.org>
43 44 45 46 47 48 49 50
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
51
# (To distribute this file outside of CMake, substitute the full
52 53
#  License text for the above reference.)

54
# find the perl executable
55
include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake)
56

57 58 59 60 61 62 63 64 65
if (PERL_EXECUTABLE)
  ### PERL_PREFIX
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:prefix
      OUTPUT_VARIABLE
        PERL_PREFIX_OUTPUT_VARIABLE
      RESULT_VARIABLE
        PERL_PREFIX_RESULT_VARIABLE
66 67
  )

68 69
  if (NOT PERL_PREFIX_RESULT_VARIABLE)
    string(REGEX REPLACE "prefix='([^']+)'.*" "\\1" PERL_PREFIX ${PERL_PREFIX_OUTPUT_VARIABLE})
70
  endif ()
71 72 73 74 75 76 77 78 79 80 81 82

  ### PERL_ARCHNAME
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:archname
      OUTPUT_VARIABLE
        PERL_ARCHNAME_OUTPUT_VARIABLE
      RESULT_VARIABLE
        PERL_ARCHNAME_RESULT_VARIABLE
  )
  if (NOT PERL_ARCHNAME_RESULT_VARIABLE)
    string(REGEX REPLACE "archname='([^']+)'.*" "\\1" PERL_ARCHNAME ${PERL_ARCHNAME_OUTPUT_VARIABLE})
83
  endif ()
84 85 86



87 88 89 90 91 92 93 94
  ### PERL_EXTRA_C_FLAGS
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:cppflags
    OUTPUT_VARIABLE
      PERL_CPPFLAGS_OUTPUT_VARIABLE
    RESULT_VARIABLE
      PERL_CPPFLAGS_RESULT_VARIABLE
95
    )
96 97
  if (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
    string(REGEX REPLACE "cppflags='([^']+)'.*" "\\1" PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE})
98
  endif ()
99 100 101 102 103 104 105 106 107 108 109 110

  ### PERL_SITESEARCH
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:installsitesearch
    OUTPUT_VARIABLE
      PERL_SITESEARCH_OUTPUT_VARIABLE
    RESULT_VARIABLE
      PERL_SITESEARCH_RESULT_VARIABLE
  )
  if (NOT PERL_SITESEARCH_RESULT_VARIABLE)
    string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITESEARCH ${PERL_SITESEARCH_OUTPUT_VARIABLE})
111
    file(TO_CMAKE_PATH "${PERL_SITESEARCH}" PERL_SITESEARCH)
112
  endif ()
113 114 115 116 117 118 119 120 121 122 123 124

  ### PERL_SITELIB
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:installsitelib
    OUTPUT_VARIABLE
      PERL_SITELIB_OUTPUT_VARIABLE
    RESULT_VARIABLE
      PERL_SITELIB_RESULT_VARIABLE
  )
  if (NOT PERL_SITELIB_RESULT_VARIABLE)
    string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITELIB ${PERL_SITELIB_OUTPUT_VARIABLE})
125
    file(TO_CMAKE_PATH "${PERL_SITELIB}" PERL_SITELIB)
126
  endif ()
127 128 129 130 131 132 133 134 135

  ### PERL_VENDORARCH
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:installvendorarch
    OUTPUT_VARIABLE
      PERL_VENDORARCH_OUTPUT_VARIABLE
    RESULT_VARIABLE
      PERL_VENDORARCH_RESULT_VARIABLE
136
    )
137 138
  if (NOT PERL_VENDORARCH_RESULT_VARIABLE)
    string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORARCH ${PERL_VENDORARCH_OUTPUT_VARIABLE})
139
    file(TO_CMAKE_PATH "${PERL_VENDORARCH}" PERL_VENDORARCH)
140
  endif ()
141 142 143 144 145 146 147 148 149 150 151 152

  ### PERL_VENDORLIB
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:installvendorlib
    OUTPUT_VARIABLE
      PERL_VENDORLIB_OUTPUT_VARIABLE
    RESULT_VARIABLE
      PERL_VENDORLIB_RESULT_VARIABLE
  )
  if (NOT PERL_VENDORLIB_RESULT_VARIABLE)
    string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORLIB ${PERL_VENDORLIB_OUTPUT_VARIABLE})
153
    file(TO_CMAKE_PATH "${PERL_VENDORLIB}" PERL_VENDORLIB)
154
  endif ()
155

156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
  macro(perl_adjust_darwin_lib_variable varname)
    string( TOUPPER PERL_${varname} FINDPERL_VARNAME )
    string( TOLOWER install${varname} PERL_VARNAME )

    if (NOT PERL_MINUSV_OUTPUT_VARIABLE)
      execute_process(
        COMMAND
        ${PERL_EXECUTABLE} -V
        OUTPUT_VARIABLE
        PERL_MINUSV_OUTPUT_VARIABLE
        RESULT_VARIABLE
        PERL_MINUSV_RESULT_VARIABLE
        )
    endif()

    if (NOT PERL_MINUSV_RESULT_VARIABLE)
      string(REGEX MATCH "(${PERL_VARNAME}.*points? to the Updates directory)"
        PERL_NEEDS_ADJUSTMENT ${PERL_MINUSV_OUTPUT_VARIABLE})

      if (PERL_NEEDS_ADJUSTMENT)
        string(REGEX REPLACE "(.*)/Updates/" "/System/\\1/" ${FINDPERL_VARNAME} ${${FINDPERL_VARNAME}})
177
      endif ()
178

179
    endif ()
180 181
  endmacro()

182 183 184 185 186 187 188 189
  ### PERL_ARCHLIB
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:installarchlib
      OUTPUT_VARIABLE
        PERL_ARCHLIB_OUTPUT_VARIABLE
      RESULT_VARIABLE
        PERL_ARCHLIB_RESULT_VARIABLE
190
  )
191 192
  if (NOT PERL_ARCHLIB_RESULT_VARIABLE)
    string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE})
193
    perl_adjust_darwin_lib_variable( ARCHLIB )
194
    file(TO_CMAKE_PATH "${PERL_ARCHLIB}" PERL_ARCHLIB)
195
  endif ()
196 197 198 199 200 201 202 203 204 205 206 207

  ### PERL_PRIVLIB
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:installprivlib
    OUTPUT_VARIABLE
      PERL_PRIVLIB_OUTPUT_VARIABLE
    RESULT_VARIABLE
      PERL_PRIVLIB_RESULT_VARIABLE
  )
  if (NOT PERL_PRIVLIB_RESULT_VARIABLE)
    string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE})
208
    perl_adjust_darwin_lib_variable( PRIVLIB )
209
    file(TO_CMAKE_PATH "${PERL_PRIVLIB}" PERL_PRIVLIB)
210
  endif ()
211

212
  ### PERL_POSSIBLE_LIBRARY_NAMES
213 214 215 216 217 218 219 220 221
  execute_process(
    COMMAND
      ${PERL_EXECUTABLE} -V:libperl
    OUTPUT_VARIABLE
      PERL_LIBRARY_OUTPUT_VARIABLE
    RESULT_VARIABLE
      PERL_LIBRARY_RESULT_VARIABLE
  )
  if (NOT PERL_LIBRARY_RESULT_VARIABLE)
222
    string(REGEX REPLACE "libperl='([^']+)'.*" "\\1" PERL_POSSIBLE_LIBRARY_NAMES ${PERL_LIBRARY_OUTPUT_VARIABLE})
223
  else ()
224
    set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl)
225
  endif ()
226 227 228 229 230 231

  ### PERL_INCLUDE_PATH
  find_path(PERL_INCLUDE_PATH
    NAMES
      perl.h
    PATHS
232 233 234 235 236
      ${PERL_ARCHLIB}/CORE
      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
      /usr/lib/perl/${PERL_VERSION_STRING}/CORE
237
  )
238

239 240 241
  ### PERL_LIBRARY
  find_library(PERL_LIBRARY
    NAMES
242
      ${PERL_POSSIBLE_LIBRARY_NAMES}
243
    PATHS
244 245 246 247 248
      ${PERL_ARCHLIB}/CORE
      /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
      /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
      /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
      /usr/lib/perl/${PERL_VERSION_STRING}/CORE
249 250
  )

251
endif ()
252

253
# handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if
254
# all listed variables are TRUE
255
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
256
find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
257
                                           VERSION_VAR PERL_VERSION_STRING)
258

259 260 261 262
# Introduced after CMake 2.6.4 to bring module into compliance
set(PERL_INCLUDE_DIR  ${PERL_INCLUDE_PATH})
set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
set(PERL_LIBRARIES    ${PERL_LIBRARY})
263
# For backward compatibility with CMake before 2.8.8
264
set(PERL_VERSION ${PERL_VERSION_STRING})
265

266
mark_as_advanced(
267 268
  PERL_INCLUDE_PATH
  PERL_LIBRARY
269
)