FindPerlLibs.cmake 8.7 KB

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