FindPerlLibs.cmake 7.6 KB

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