FindPerlLibs.cmake 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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. ### PERL_ARCHLIB
  137. execute_process(
  138. COMMAND
  139. ${PERL_EXECUTABLE} -V:installarchlib
  140. OUTPUT_VARIABLE
  141. PERL_ARCHLIB_OUTPUT_VARIABLE
  142. RESULT_VARIABLE
  143. PERL_ARCHLIB_RESULT_VARIABLE
  144. )
  145. if (NOT PERL_ARCHLIB_RESULT_VARIABLE)
  146. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE})
  147. endif (NOT PERL_ARCHLIB_RESULT_VARIABLE)
  148. ### PERL_PRIVLIB
  149. execute_process(
  150. COMMAND
  151. ${PERL_EXECUTABLE} -V:installprivlib
  152. OUTPUT_VARIABLE
  153. PERL_PRIVLIB_OUTPUT_VARIABLE
  154. RESULT_VARIABLE
  155. PERL_PRIVLIB_RESULT_VARIABLE
  156. )
  157. if (NOT PERL_PRIVLIB_RESULT_VARIABLE)
  158. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE})
  159. endif (NOT PERL_PRIVLIB_RESULT_VARIABLE)
  160. ### PERL_POSSIBLE_INCLUDE_PATHS
  161. set(PERL_POSSIBLE_INCLUDE_PATHS
  162. ${PERL_ARCHLIB}/CORE
  163. /usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  164. /usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  165. /usr/lib/perl5/${PERL_VERSION}/CORE
  166. /usr/lib/perl/${PERL_VERSION}/CORE
  167. )
  168. ### PERL_POSSIBLE_LIB_PATHS
  169. set(PERL_POSSIBLE_LIB_PATHS
  170. ${PERL_ARCHLIB}/CORE
  171. /usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  172. /usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  173. /usr/lib/perl5/${PERL_VERSION}/CORE
  174. /usr/lib/perl/${PERL_VERSION}/CORE
  175. )
  176. ### PERL_POSSIBLE_LIBRARY_NAME
  177. execute_process(
  178. COMMAND
  179. ${PERL_EXECUTABLE} -V:libperl
  180. OUTPUT_VARIABLE
  181. PERL_LIBRARY_OUTPUT_VARIABLE
  182. RESULT_VARIABLE
  183. PERL_LIBRARY_RESULT_VARIABLE
  184. )
  185. if (NOT PERL_LIBRARY_RESULT_VARIABLE)
  186. foreach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS})
  187. string(REGEX REPLACE "libperl='([^']+)'" "\\1" PERL_LIBRARY_OUTPUT_VARIABLE ${PERL_LIBRARY_OUTPUT_VARIABLE})
  188. set(PERL_POSSIBLE_LIBRARY_NAME ${PERL_POSSIBLE_LIBRARY_NAME} "${_perl_lib_path}/${PERL_LIBRARY_OUTPUT_VARIABLE}")
  189. endforeach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS})
  190. endif (NOT PERL_LIBRARY_RESULT_VARIABLE)
  191. ### PERL_INCLUDE_PATH
  192. find_path(PERL_INCLUDE_PATH
  193. NAMES
  194. perl.h
  195. PATHS
  196. ${PERL_POSSIBLE_INCLUDE_PATHS}
  197. )
  198. ### PERL_LIBRARY
  199. find_library(PERL_LIBRARY
  200. NAMES
  201. ${PERL_POSSIBLE_LIBRARY_NAME}
  202. perl${PERL_VERSION}
  203. perl
  204. PATHS
  205. ${PERL_POSSIBLE_LIB_PATHS}
  206. )
  207. endif (PERL_EXECUTABLE)
  208. # handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if
  209. # all listed variables are TRUE
  210. include("${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake")
  211. find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
  212. VERSION_VAR PERL_VERSION)
  213. # Introduced after CMake 2.6.4 to bring module into compliance
  214. set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
  215. set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
  216. set(PERL_LIBRARIES ${PERL_LIBRARY})
  217. mark_as_advanced(
  218. PERL_INCLUDE_PATH
  219. PERL_EXECUTABLE
  220. PERL_LIBRARY
  221. )