/Modules/FindPerlLibs.cmake

https://github.com/okuoku/CMake · CMake · 275 lines · 189 code · 30 blank · 56 comment · 15 complexity · 9b93f522c3cfca9a2180e12e483f3d6f MD5 · raw file

  1. # - Find Perl libraries
  2. # This module finds if PERL is installed and determines where the include files
  3. # and libraries are. It also determines what the name of the library is. This
  4. # code sets the following variables:
  5. #
  6. # PERLLIBS_FOUND = True if perl.h & libperl were found
  7. # PERL_INCLUDE_PATH = path to where perl.h is found
  8. # PERL_LIBRARY = path to libperl
  9. # PERL_EXECUTABLE = full path to the perl binary
  10. #
  11. # The minimum required version of Perl can be specified using the
  12. # standard syntax, e.g. FIND_PACKAGE(PerlLibs 6.0)
  13. #
  14. # The following variables are also available if needed
  15. # (introduced after CMake 2.6.4)
  16. #
  17. # PERL_SITESEARCH = path to the sitesearch install dir
  18. # PERL_SITELIB = path to the sitelib install directory
  19. # PERL_VENDORARCH = path to the vendor arch install directory
  20. # PERL_VENDORLIB = path to the vendor lib install directory
  21. # PERL_ARCHLIB = path to the arch lib install directory
  22. # PERL_PRIVLIB = path to the priv lib install directory
  23. # PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
  24. #
  25. #=============================================================================
  26. # Copyright 2004-2009 Kitware, Inc.
  27. # Copyright 2008 Andreas Schneider <asn@cryptomilk.org>
  28. #
  29. # Distributed under the OSI-approved BSD License (the "License");
  30. # see accompanying file Copyright.txt for details.
  31. #
  32. # This software is distributed WITHOUT ANY WARRANTY; without even the
  33. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  34. # See the License for more information.
  35. #=============================================================================
  36. # (To distribute this file outside of CMake, substitute the full
  37. # License text for the above reference.)
  38. # find the perl executable
  39. include(FindPerl)
  40. if (PERL_EXECUTABLE)
  41. ### PERL_PREFIX
  42. execute_process(
  43. COMMAND
  44. ${PERL_EXECUTABLE} -V:prefix
  45. OUTPUT_VARIABLE
  46. PERL_PREFIX_OUTPUT_VARIABLE
  47. RESULT_VARIABLE
  48. PERL_PREFIX_RESULT_VARIABLE
  49. )
  50. if (NOT PERL_PREFIX_RESULT_VARIABLE)
  51. string(REGEX REPLACE "prefix='([^']+)'.*" "\\1" PERL_PREFIX ${PERL_PREFIX_OUTPUT_VARIABLE})
  52. endif (NOT PERL_PREFIX_RESULT_VARIABLE)
  53. ### PERL_VERSION
  54. execute_process(
  55. COMMAND
  56. ${PERL_EXECUTABLE} -V:version
  57. OUTPUT_VARIABLE
  58. PERL_VERSION_OUTPUT_VARIABLE
  59. RESULT_VARIABLE
  60. PERL_VERSION_RESULT_VARIABLE
  61. )
  62. if (NOT PERL_VERSION_RESULT_VARIABLE)
  63. string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION ${PERL_VERSION_OUTPUT_VARIABLE})
  64. endif (NOT PERL_VERSION_RESULT_VARIABLE)
  65. ### PERL_ARCHNAME
  66. execute_process(
  67. COMMAND
  68. ${PERL_EXECUTABLE} -V:archname
  69. OUTPUT_VARIABLE
  70. PERL_ARCHNAME_OUTPUT_VARIABLE
  71. RESULT_VARIABLE
  72. PERL_ARCHNAME_RESULT_VARIABLE
  73. )
  74. if (NOT PERL_ARCHNAME_RESULT_VARIABLE)
  75. string(REGEX REPLACE "archname='([^']+)'.*" "\\1" PERL_ARCHNAME ${PERL_ARCHNAME_OUTPUT_VARIABLE})
  76. endif (NOT PERL_ARCHNAME_RESULT_VARIABLE)
  77. ### PERL_EXTRA_C_FLAGS
  78. execute_process(
  79. COMMAND
  80. ${PERL_EXECUTABLE} -V:cppflags
  81. OUTPUT_VARIABLE
  82. PERL_CPPFLAGS_OUTPUT_VARIABLE
  83. RESULT_VARIABLE
  84. PERL_CPPFLAGS_RESULT_VARIABLE
  85. )
  86. if (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
  87. string(REGEX REPLACE "cppflags='([^']+)'.*" "\\1" PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE})
  88. endif (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
  89. ### PERL_SITESEARCH
  90. execute_process(
  91. COMMAND
  92. ${PERL_EXECUTABLE} -V:installsitesearch
  93. OUTPUT_VARIABLE
  94. PERL_SITESEARCH_OUTPUT_VARIABLE
  95. RESULT_VARIABLE
  96. PERL_SITESEARCH_RESULT_VARIABLE
  97. )
  98. if (NOT PERL_SITESEARCH_RESULT_VARIABLE)
  99. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITESEARCH ${PERL_SITESEARCH_OUTPUT_VARIABLE})
  100. endif (NOT PERL_SITESEARCH_RESULT_VARIABLE)
  101. ### PERL_SITELIB
  102. execute_process(
  103. COMMAND
  104. ${PERL_EXECUTABLE} -V:installsitelib
  105. OUTPUT_VARIABLE
  106. PERL_SITELIB_OUTPUT_VARIABLE
  107. RESULT_VARIABLE
  108. PERL_SITELIB_RESULT_VARIABLE
  109. )
  110. if (NOT PERL_SITELIB_RESULT_VARIABLE)
  111. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITELIB ${PERL_SITELIB_OUTPUT_VARIABLE})
  112. endif (NOT PERL_SITELIB_RESULT_VARIABLE)
  113. ### PERL_VENDORARCH
  114. execute_process(
  115. COMMAND
  116. ${PERL_EXECUTABLE} -V:installvendorarch
  117. OUTPUT_VARIABLE
  118. PERL_VENDORARCH_OUTPUT_VARIABLE
  119. RESULT_VARIABLE
  120. PERL_VENDORARCH_RESULT_VARIABLE
  121. )
  122. if (NOT PERL_VENDORARCH_RESULT_VARIABLE)
  123. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORARCH ${PERL_VENDORARCH_OUTPUT_VARIABLE})
  124. endif (NOT PERL_VENDORARCH_RESULT_VARIABLE)
  125. ### PERL_VENDORLIB
  126. execute_process(
  127. COMMAND
  128. ${PERL_EXECUTABLE} -V:installvendorlib
  129. OUTPUT_VARIABLE
  130. PERL_VENDORLIB_OUTPUT_VARIABLE
  131. RESULT_VARIABLE
  132. PERL_VENDORLIB_RESULT_VARIABLE
  133. )
  134. if (NOT PERL_VENDORLIB_RESULT_VARIABLE)
  135. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORLIB ${PERL_VENDORLIB_OUTPUT_VARIABLE})
  136. endif (NOT PERL_VENDORLIB_RESULT_VARIABLE)
  137. macro(perl_adjust_darwin_lib_variable varname)
  138. string( TOUPPER PERL_${varname} FINDPERL_VARNAME )
  139. string( TOLOWER install${varname} PERL_VARNAME )
  140. if (NOT PERL_MINUSV_OUTPUT_VARIABLE)
  141. execute_process(
  142. COMMAND
  143. ${PERL_EXECUTABLE} -V
  144. OUTPUT_VARIABLE
  145. PERL_MINUSV_OUTPUT_VARIABLE
  146. RESULT_VARIABLE
  147. PERL_MINUSV_RESULT_VARIABLE
  148. )
  149. endif()
  150. if (NOT PERL_MINUSV_RESULT_VARIABLE)
  151. string(REGEX MATCH "(${PERL_VARNAME}.*points? to the Updates directory)"
  152. PERL_NEEDS_ADJUSTMENT ${PERL_MINUSV_OUTPUT_VARIABLE})
  153. if (PERL_NEEDS_ADJUSTMENT)
  154. string(REGEX REPLACE "(.*)/Updates/" "/System/\\1/" ${FINDPERL_VARNAME} ${${FINDPERL_VARNAME}})
  155. endif (PERL_NEEDS_ADJUSTMENT)
  156. endif (NOT PERL_MINUSV_RESULT_VARIABLE)
  157. endmacro()
  158. ### PERL_ARCHLIB
  159. execute_process(
  160. COMMAND
  161. ${PERL_EXECUTABLE} -V:installarchlib
  162. OUTPUT_VARIABLE
  163. PERL_ARCHLIB_OUTPUT_VARIABLE
  164. RESULT_VARIABLE
  165. PERL_ARCHLIB_RESULT_VARIABLE
  166. )
  167. if (NOT PERL_ARCHLIB_RESULT_VARIABLE)
  168. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE})
  169. perl_adjust_darwin_lib_variable( ARCHLIB )
  170. endif (NOT PERL_ARCHLIB_RESULT_VARIABLE)
  171. ### PERL_PRIVLIB
  172. execute_process(
  173. COMMAND
  174. ${PERL_EXECUTABLE} -V:installprivlib
  175. OUTPUT_VARIABLE
  176. PERL_PRIVLIB_OUTPUT_VARIABLE
  177. RESULT_VARIABLE
  178. PERL_PRIVLIB_RESULT_VARIABLE
  179. )
  180. if (NOT PERL_PRIVLIB_RESULT_VARIABLE)
  181. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE})
  182. perl_adjust_darwin_lib_variable( PRIVLIB )
  183. endif (NOT PERL_PRIVLIB_RESULT_VARIABLE)
  184. ### PERL_POSSIBLE_INCLUDE_PATHS
  185. set(PERL_POSSIBLE_INCLUDE_PATHS
  186. ${PERL_ARCHLIB}/CORE
  187. /usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  188. /usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  189. /usr/lib/perl5/${PERL_VERSION}/CORE
  190. /usr/lib/perl/${PERL_VERSION}/CORE
  191. )
  192. ### PERL_POSSIBLE_LIB_PATHS
  193. set(PERL_POSSIBLE_LIB_PATHS
  194. ${PERL_ARCHLIB}/CORE
  195. /usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  196. /usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  197. /usr/lib/perl5/${PERL_VERSION}/CORE
  198. /usr/lib/perl/${PERL_VERSION}/CORE
  199. )
  200. ### PERL_POSSIBLE_LIBRARY_NAME
  201. execute_process(
  202. COMMAND
  203. ${PERL_EXECUTABLE} -V:libperl
  204. OUTPUT_VARIABLE
  205. PERL_LIBRARY_OUTPUT_VARIABLE
  206. RESULT_VARIABLE
  207. PERL_LIBRARY_RESULT_VARIABLE
  208. )
  209. if (NOT PERL_LIBRARY_RESULT_VARIABLE)
  210. foreach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS})
  211. string(REGEX REPLACE "libperl='([^']+)'" "\\1" PERL_LIBRARY_OUTPUT_VARIABLE ${PERL_LIBRARY_OUTPUT_VARIABLE})
  212. set(PERL_POSSIBLE_LIBRARY_NAME ${PERL_POSSIBLE_LIBRARY_NAME} "${_perl_lib_path}/${PERL_LIBRARY_OUTPUT_VARIABLE}")
  213. endforeach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS})
  214. endif (NOT PERL_LIBRARY_RESULT_VARIABLE)
  215. ### PERL_INCLUDE_PATH
  216. find_path(PERL_INCLUDE_PATH
  217. NAMES
  218. perl.h
  219. PATHS
  220. ${PERL_POSSIBLE_INCLUDE_PATHS}
  221. )
  222. ### PERL_LIBRARY
  223. find_library(PERL_LIBRARY
  224. NAMES
  225. ${PERL_POSSIBLE_LIBRARY_NAME}
  226. perl${PERL_VERSION}
  227. perl
  228. PATHS
  229. ${PERL_POSSIBLE_LIB_PATHS}
  230. )
  231. endif (PERL_EXECUTABLE)
  232. # handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if
  233. # all listed variables are TRUE
  234. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  235. find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
  236. VERSION_VAR PERL_VERSION)
  237. # Introduced after CMake 2.6.4 to bring module into compliance
  238. set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
  239. set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
  240. set(PERL_LIBRARIES ${PERL_LIBRARY})
  241. mark_as_advanced(
  242. PERL_INCLUDE_PATH
  243. PERL_EXECUTABLE
  244. PERL_LIBRARY
  245. )