FindPerlLibs.cmake 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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 following variables are also available if needed
  12. # (introduced after CMake 2.6.4)
  13. #
  14. # PERL_SITESEARCH = path to the sitesearch install dir
  15. # PERL_SITELIB = path to the sitelib install directory
  16. # PERL_VENDORARCH = path to the vendor arch install directory
  17. # PERL_VENDORLIB = path to the vendor lib install directory
  18. # PERL_ARCHLIB = path to the arch lib install directory
  19. # PERL_PRIVLIB = path to the priv lib install directory
  20. # PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
  21. #
  22. #=============================================================================
  23. # Copyright 2004-2009 Kitware, Inc.
  24. #
  25. # Distributed under the OSI-approved BSD License (the "License");
  26. # see accompanying file Copyright.txt for details.
  27. #
  28. # This software is distributed WITHOUT ANY WARRANTY; without even the
  29. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  30. # See the License for more information.
  31. #=============================================================================
  32. # (To distributed this file outside of CMake, substitute the full
  33. # License text for the above reference.)
  34. # find the perl executable
  35. include(FindPerl)
  36. if (PERL_EXECUTABLE)
  37. ### PERL_PREFIX
  38. execute_process(
  39. COMMAND
  40. ${PERL_EXECUTABLE} -V:prefix
  41. OUTPUT_VARIABLE
  42. PERL_PREFIX_OUTPUT_VARIABLE
  43. RESULT_VARIABLE
  44. PERL_PREFIX_RESULT_VARIABLE
  45. )
  46. if (NOT PERL_PREFIX_RESULT_VARIABLE)
  47. string(REGEX REPLACE "prefix='([^']+)'.*" "\\1" PERL_PREFIX ${PERL_PREFIX_OUTPUT_VARIABLE})
  48. endif (NOT PERL_PREFIX_RESULT_VARIABLE)
  49. ### PERL_VERSION
  50. execute_process(
  51. COMMAND
  52. ${PERL_EXECUTABLE} -V:version
  53. OUTPUT_VARIABLE
  54. PERL_VERSION_OUTPUT_VARIABLE
  55. RESULT_VARIABLE
  56. PERL_VERSION_RESULT_VARIABLE
  57. )
  58. if (NOT PERL_VERSION_RESULT_VARIABLE)
  59. string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION ${PERL_VERSION_OUTPUT_VARIABLE})
  60. endif (NOT PERL_VERSION_RESULT_VARIABLE)
  61. ### PERL_ARCHNAME
  62. execute_process(
  63. COMMAND
  64. ${PERL_EXECUTABLE} -V:archname
  65. OUTPUT_VARIABLE
  66. PERL_ARCHNAME_OUTPUT_VARIABLE
  67. RESULT_VARIABLE
  68. PERL_ARCHNAME_RESULT_VARIABLE
  69. )
  70. if (NOT PERL_ARCHNAME_RESULT_VARIABLE)
  71. string(REGEX REPLACE "archname='([^']+)'.*" "\\1" PERL_ARCHNAME ${PERL_ARCHNAME_OUTPUT_VARIABLE})
  72. endif (NOT PERL_ARCHNAME_RESULT_VARIABLE)
  73. ### PERL_EXTRA_C_FLAGS
  74. execute_process(
  75. COMMAND
  76. ${PERL_EXECUTABLE} -V:cppflags
  77. OUTPUT_VARIABLE
  78. PERL_CPPFLAGS_OUTPUT_VARIABLE
  79. RESULT_VARIABLE
  80. PERL_CPPFLAGS_RESULT_VARIABLE
  81. )
  82. if (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
  83. string(REGEX REPLACE "cppflags='([^']+)'.*" "\\1" PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE})
  84. endif (NOT PERL_CPPFLAGS_RESULT_VARIABLE)
  85. ### PERL_SITESEARCH
  86. execute_process(
  87. COMMAND
  88. ${PERL_EXECUTABLE} -V:installsitesearch
  89. OUTPUT_VARIABLE
  90. PERL_SITESEARCH_OUTPUT_VARIABLE
  91. RESULT_VARIABLE
  92. PERL_SITESEARCH_RESULT_VARIABLE
  93. )
  94. if (NOT PERL_SITESEARCH_RESULT_VARIABLE)
  95. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITESEARCH ${PERL_SITESEARCH_OUTPUT_VARIABLE})
  96. endif (NOT PERL_SITESEARCH_RESULT_VARIABLE)
  97. ### PERL_SITELIB
  98. execute_process(
  99. COMMAND
  100. ${PERL_EXECUTABLE} -V:installsitelib
  101. OUTPUT_VARIABLE
  102. PERL_SITELIB_OUTPUT_VARIABLE
  103. RESULT_VARIABLE
  104. PERL_SITELIB_RESULT_VARIABLE
  105. )
  106. if (NOT PERL_SITELIB_RESULT_VARIABLE)
  107. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITELIB ${PERL_SITELIB_OUTPUT_VARIABLE})
  108. endif (NOT PERL_SITELIB_RESULT_VARIABLE)
  109. ### PERL_VENDORARCH
  110. execute_process(
  111. COMMAND
  112. ${PERL_EXECUTABLE} -V:installvendorarch
  113. OUTPUT_VARIABLE
  114. PERL_VENDORARCH_OUTPUT_VARIABLE
  115. RESULT_VARIABLE
  116. PERL_VENDORARCH_RESULT_VARIABLE
  117. )
  118. if (NOT PERL_VENDORARCH_RESULT_VARIABLE)
  119. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORARCH ${PERL_VENDORARCH_OUTPUT_VARIABLE})
  120. endif (NOT PERL_VENDORARCH_RESULT_VARIABLE)
  121. ### PERL_VENDORLIB
  122. execute_process(
  123. COMMAND
  124. ${PERL_EXECUTABLE} -V:installvendorlib
  125. OUTPUT_VARIABLE
  126. PERL_VENDORLIB_OUTPUT_VARIABLE
  127. RESULT_VARIABLE
  128. PERL_VENDORLIB_RESULT_VARIABLE
  129. )
  130. if (NOT PERL_VENDORLIB_RESULT_VARIABLE)
  131. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORLIB ${PERL_VENDORLIB_OUTPUT_VARIABLE})
  132. endif (NOT PERL_VENDORLIB_RESULT_VARIABLE)
  133. ### PERL_ARCHLIB
  134. execute_process(
  135. COMMAND
  136. ${PERL_EXECUTABLE} -V:installarchlib
  137. OUTPUT_VARIABLE
  138. PERL_ARCHLIB_OUTPUT_VARIABLE
  139. RESULT_VARIABLE
  140. PERL_ARCHLIB_RESULT_VARIABLE
  141. )
  142. if (NOT PERL_ARCHLIB_RESULT_VARIABLE)
  143. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE})
  144. endif (NOT PERL_ARCHLIB_RESULT_VARIABLE)
  145. ### PERL_PRIVLIB
  146. execute_process(
  147. COMMAND
  148. ${PERL_EXECUTABLE} -V:installprivlib
  149. OUTPUT_VARIABLE
  150. PERL_PRIVLIB_OUTPUT_VARIABLE
  151. RESULT_VARIABLE
  152. PERL_PRIVLIB_RESULT_VARIABLE
  153. )
  154. if (NOT PERL_PRIVLIB_RESULT_VARIABLE)
  155. string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE})
  156. endif (NOT PERL_PRIVLIB_RESULT_VARIABLE)
  157. ### PERL_POSSIBLE_INCLUDE_PATHS
  158. set(PERL_POSSIBLE_INCLUDE_PATHS
  159. ${PERL_ARCHLIB}/CORE
  160. /usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  161. /usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  162. /usr/lib/perl5/${PERL_VERSION}/CORE
  163. /usr/lib/perl/${PERL_VERSION}/CORE
  164. )
  165. ### PERL_POSSIBLE_LIB_PATHS
  166. set(PERL_POSSIBLE_LIB_PATHS
  167. ${PERL_ARCHLIB}/CORE
  168. /usr/lib/perl5/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  169. /usr/lib/perl/${PERL_VERSION}/${PERL_ARCHNAME}/CORE
  170. /usr/lib/perl5/${PERL_VERSION}/CORE
  171. /usr/lib/perl/${PERL_VERSION}/CORE
  172. )
  173. ### PERL_POSSIBLE_LIBRARY_NAME
  174. execute_process(
  175. COMMAND
  176. ${PERL_EXECUTABLE} -V:libperl
  177. OUTPUT_VARIABLE
  178. PERL_LIBRARY_OUTPUT_VARIABLE
  179. RESULT_VARIABLE
  180. PERL_LIBRARY_RESULT_VARIABLE
  181. )
  182. if (NOT PERL_LIBRARY_RESULT_VARIABLE)
  183. foreach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS})
  184. string(REGEX REPLACE "libperl='([^']+)'" "\\1" PERL_LIBRARY_OUTPUT_VARIABLE ${PERL_LIBRARY_OUTPUT_VARIABLE})
  185. set(PERL_POSSIBLE_LIBRARY_NAME ${PERL_POSSIBLE_LIBRARY_NAME} "${_perl_lib_path}/${PERL_LIBRARY_OUTPUT_VARIABLE}")
  186. endforeach(_perl_lib_path ${PERL_POSSIBLE_LIB_PATHS})
  187. endif (NOT PERL_LIBRARY_RESULT_VARIABLE)
  188. ### PERL_INCLUDE_PATH
  189. find_path(PERL_INCLUDE_PATH
  190. NAMES
  191. perl.h
  192. PATHS
  193. ${PERL_POSSIBLE_INCLUDE_PATHS}
  194. )
  195. ### PERL_LIBRARY
  196. find_library(PERL_LIBRARY
  197. NAMES
  198. ${PERL_POSSIBLE_LIBRARY_NAME}
  199. perl${PERL_VERSION}
  200. perl
  201. PATHS
  202. ${PERL_POSSIBLE_LIB_PATHS}
  203. )
  204. endif (PERL_EXECUTABLE)
  205. # handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if
  206. # all listed variables are TRUE
  207. INCLUDE(FindPackageHandleStandardArgs)
  208. FIND_PACKAGE_HANDLE_STANDARD_ARGS(PerlLibs DEFAULT_MSG PERL_LIBRARY PERL_INCLUDE_PATH)
  209. # Introduced after CMake 2.6.4 to bring module into compliance
  210. set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
  211. set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
  212. set(PERL_LIBRARIES ${PERL_LIBRARY})
  213. mark_as_advanced(
  214. PERL_INCLUDE_PATH
  215. PERL_EXECUTABLE
  216. PERL_LIBRARY
  217. )