FindPerlLibs.cmake 7.5 KB

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