FindPerlLibs.cmake 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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 <[email protected]>
  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_ARCHNAME
  54. execute_process(
  55. COMMAND
  56. ${PERL_EXECUTABLE} -V:archname
  57. OUTPUT_VARIABLE
  58. PERL_ARCHNAME_OUTPUT_VARIABLE
  59. RESULT_VARIABLE
  60. PERL_ARCHNAME_RESULT_VARIABLE
  61. )
  62. if (NOT PERL_ARCHNAME_RESULT_VARIABLE)
  63. string(REGEX REPLACE "archname='([^']+)'.*" "\\1" PERL_ARCHNAME ${PERL_ARCHNAME_OUTPUT_VARIABLE})
  64. endif (NOT PERL_ARCHNAME_RESULT_VARIABLE)
  65. ### PERL_EXTRA_C_FLAGS
  66. execute_process(
  67. COMMAND
  68. ${PERL_EXECUTABLE} -V:cppflags
  69. OUTPUT_VARIABLE
  70. PERL_CPPFLAGS_OUTPUT_VARIABLE
  71. RESULT_VARIABLE
  72. PERL_CPPFLAGS_RESULT_VARIABLE
  73. )
  74. if (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
  75. string(REGEX REPLACE "cppflags='([^']+)'.*" "\\1" PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE})
  76. endif (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
  77. ### PERL_SITESEARCH
  78. execute_process(
  79. COMMAND
  80. ${PERL_EXECUTABLE} -V:installsitesearch
  81. OUTPUT_VARIABLE
  82. PERL_SITESEARCH_OUTPUT_VARIABLE
  83. RESULT_VARIABLE
  84. PERL_SITESEARCH_RESULT_VARIABLE
  85. )
  86. if (NOT PERL_SITESEARCH_RESULT_VARIABLE)
  87. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITESEARCH ${PERL_SITESEARCH_OUTPUT_VARIABLE})
  88. file(TO_CMAKE_PATH "${PERL_SITESEARCH}" PERL_SITESEARCH)
  89. endif (NOT PERL_SITESEARCH_RESULT_VARIABLE)
  90. ### PERL_SITELIB
  91. execute_process(
  92. COMMAND
  93. ${PERL_EXECUTABLE} -V:installsitelib
  94. OUTPUT_VARIABLE
  95. PERL_SITELIB_OUTPUT_VARIABLE
  96. RESULT_VARIABLE
  97. PERL_SITELIB_RESULT_VARIABLE
  98. )
  99. if (NOT PERL_SITELIB_RESULT_VARIABLE)
  100. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITELIB ${PERL_SITELIB_OUTPUT_VARIABLE})
  101. file(TO_CMAKE_PATH "${PERL_SITELIB}" PERL_SITELIB)
  102. endif (NOT PERL_SITELIB_RESULT_VARIABLE)
  103. ### PERL_VENDORARCH
  104. execute_process(
  105. COMMAND
  106. ${PERL_EXECUTABLE} -V:installvendorarch
  107. OUTPUT_VARIABLE
  108. PERL_VENDORARCH_OUTPUT_VARIABLE
  109. RESULT_VARIABLE
  110. PERL_VENDORARCH_RESULT_VARIABLE
  111. )
  112. if (NOT PERL_VENDORARCH_RESULT_VARIABLE)
  113. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORARCH ${PERL_VENDORARCH_OUTPUT_VARIABLE})
  114. file(TO_CMAKE_PATH "${PERL_VENDORARCH}" PERL_VENDORARCH)
  115. endif (NOT PERL_VENDORARCH_RESULT_VARIABLE)
  116. ### PERL_VENDORLIB
  117. execute_process(
  118. COMMAND
  119. ${PERL_EXECUTABLE} -V:installvendorlib
  120. OUTPUT_VARIABLE
  121. PERL_VENDORLIB_OUTPUT_VARIABLE
  122. RESULT_VARIABLE
  123. PERL_VENDORLIB_RESULT_VARIABLE
  124. )
  125. if (NOT PERL_VENDORLIB_RESULT_VARIABLE)
  126. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORLIB ${PERL_VENDORLIB_OUTPUT_VARIABLE})
  127. file(TO_CMAKE_PATH "${PERL_VENDORLIB}" PERL_VENDORLIB)
  128. endif (NOT PERL_VENDORLIB_RESULT_VARIABLE)
  129. macro(perl_adjust_darwin_lib_variable varname)
  130. string( TOUPPER PERL_${varname} FINDPERL_VARNAME )
  131. string( TOLOWER install${varname} PERL_VARNAME )
  132. if (NOT PERL_MINUSV_OUTPUT_VARIABLE)
  133. execute_process(
  134. COMMAND
  135. ${PERL_EXECUTABLE} -V
  136. OUTPUT_VARIABLE
  137. PERL_MINUSV_OUTPUT_VARIABLE
  138. RESULT_VARIABLE
  139. PERL_MINUSV_RESULT_VARIABLE
  140. )
  141. endif()
  142. if (NOT PERL_MINUSV_RESULT_VARIABLE)
  143. string(REGEX MATCH "(${PERL_VARNAME}.*points? to the Updates directory)"
  144. PERL_NEEDS_ADJUSTMENT ${PERL_MINUSV_OUTPUT_VARIABLE})
  145. if (PERL_NEEDS_ADJUSTMENT)
  146. string(REGEX REPLACE "(.*)/Updates/" "/System/\\1/" ${FINDPERL_VARNAME} ${${FINDPERL_VARNAME}})
  147. endif (PERL_NEEDS_ADJUSTMENT)
  148. endif (NOT PERL_MINUSV_RESULT_VARIABLE)
  149. endmacro()
  150. ### PERL_ARCHLIB
  151. execute_process(
  152. COMMAND
  153. ${PERL_EXECUTABLE} -V:installarchlib
  154. OUTPUT_VARIABLE
  155. PERL_ARCHLIB_OUTPUT_VARIABLE
  156. RESULT_VARIABLE
  157. PERL_ARCHLIB_RESULT_VARIABLE
  158. )
  159. if (NOT PERL_ARCHLIB_RESULT_VARIABLE)
  160. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE})
  161. perl_adjust_darwin_lib_variable( ARCHLIB )
  162. file(TO_CMAKE_PATH "${PERL_ARCHLIB}" PERL_ARCHLIB)
  163. endif (NOT PERL_ARCHLIB_RESULT_VARIABLE)
  164. ### PERL_PRIVLIB
  165. execute_process(
  166. COMMAND
  167. ${PERL_EXECUTABLE} -V:installprivlib
  168. OUTPUT_VARIABLE
  169. PERL_PRIVLIB_OUTPUT_VARIABLE
  170. RESULT_VARIABLE
  171. PERL_PRIVLIB_RESULT_VARIABLE
  172. )
  173. if (NOT PERL_PRIVLIB_RESULT_VARIABLE)
  174. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE})
  175. perl_adjust_darwin_lib_variable( PRIVLIB )
  176. file(TO_CMAKE_PATH "${PERL_PRIVLIB}" PERL_PRIVLIB)
  177. endif (NOT PERL_PRIVLIB_RESULT_VARIABLE)
  178. ### PERL_POSSIBLE_LIBRARY_NAMES
  179. execute_process(
  180. COMMAND
  181. ${PERL_EXECUTABLE} -V:libperl
  182. OUTPUT_VARIABLE
  183. PERL_LIBRARY_OUTPUT_VARIABLE
  184. RESULT_VARIABLE
  185. PERL_LIBRARY_RESULT_VARIABLE
  186. )
  187. if (NOT PERL_LIBRARY_RESULT_VARIABLE)
  188. string(REGEX REPLACE "libperl='([^']+)'.*" "\\1" PERL_POSSIBLE_LIBRARY_NAMES ${PERL_LIBRARY_OUTPUT_VARIABLE})
  189. else (NOT PERL_LIBRARY_RESULT_VARIABLE)
  190. set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl)
  191. endif (NOT PERL_LIBRARY_RESULT_VARIABLE)
  192. ### PERL_INCLUDE_PATH
  193. find_path(PERL_INCLUDE_PATH
  194. NAMES
  195. perl.h
  196. PATHS
  197. ${PERL_ARCHLIB}/CORE
  198. /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  199. /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  200. /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
  201. /usr/lib/perl/${PERL_VERSION_STRING}/CORE
  202. )
  203. ### PERL_LIBRARY
  204. find_library(PERL_LIBRARY
  205. NAMES
  206. ${PERL_POSSIBLE_LIBRARY_NAMES}
  207. PATHS
  208. ${PERL_ARCHLIB}/CORE
  209. /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  210. /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  211. /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
  212. /usr/lib/perl/${PERL_VERSION_STRING}/CORE
  213. )
  214. endif (PERL_EXECUTABLE)
  215. # handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if
  216. # all listed variables are TRUE
  217. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  218. find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
  219. VERSION_VAR PERL_VERSION_STRING)
  220. # Introduced after CMake 2.6.4 to bring module into compliance
  221. set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
  222. set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
  223. set(PERL_LIBRARIES ${PERL_LIBRARY})
  224. # For backward compatibility with CMake before 2.8.8
  225. set(PERL_VERSION ${PERL_VERSION_STRING})
  226. mark_as_advanced(
  227. PERL_INCLUDE_PATH
  228. PERL_LIBRARY
  229. )