FindPerlLibs.cmake 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file LICENSE.rst or https://cmake.org/licensing for details.
  3. #[=======================================================================[.rst:
  4. FindPerlLibs
  5. ------------
  6. Finds Perl libraries:
  7. .. code-block:: cmake
  8. find_package(PerlLibs [<version>] [...])
  9. Perl is a general-purpose, interpreted, dynamic programming language.
  10. This module detects whether Perl interpreter is installed via the
  11. :module:`FindPerl` module and determines the locations of Perl include paths,
  12. libraries, and the library name.
  13. Result Variables
  14. ^^^^^^^^^^^^^^^^
  15. This module defines the following variables:
  16. ``PerlLibs_FOUND``
  17. .. versionadded:: 3.3
  18. Boolean indicating whether (the requested version of) ``<perl.h>`` and
  19. ``libperl`` were found.
  20. ``PerlLibs_VERSION``
  21. .. versionadded:: 4.2
  22. The version of Perl library found.
  23. ``PERL_SITESEARCH``
  24. Path to the sitesearch install directory (``-V:installsitesearch``).
  25. ``PERL_SITEARCH``
  26. Path to the sitelib install directory (``-V:installsitearch``).
  27. ``PERL_SITELIB``
  28. Path to the sitelib install directory (``-V:installsitelib``).
  29. ``PERL_VENDORARCH``
  30. Path to the vendor arch install directory (``-V:installvendorarch``).
  31. ``PERL_VENDORLIB``
  32. Path to the vendor lib install directory (``-V:installvendorlib``).
  33. ``PERL_ARCHLIB``
  34. Path to the core arch lib install directory (``-V:archlib``).
  35. ``PERL_PRIVLIB``
  36. Path to the core priv lib install directory (``-V:privlib``).
  37. ``PERL_UPDATE_ARCHLIB``
  38. Path to the update arch lib install directory (``-V:installarchlib``).
  39. ``PERL_UPDATE_PRIVLIB``
  40. Path to the update priv lib install directory (``-V:installprivlib``).
  41. ``PERL_EXTRA_C_FLAGS``
  42. Compilation flags used to build Perl.
  43. Cache Variables
  44. ^^^^^^^^^^^^^^^
  45. The following cache variables may also be set:
  46. ``PERL_INCLUDE_PATH``
  47. Directory containing ``perl.h`` and other Perl header files.
  48. ``PERL_LIBRARY``
  49. Path to the ``libperl``.
  50. ``PERL_EXECUTABLE``
  51. Full path to the ``perl`` executable.
  52. Deprecated Variables
  53. ^^^^^^^^^^^^^^^^^^^^
  54. The following variables are provided for backward compatibility:
  55. ``PERLLIBS_FOUND``
  56. .. deprecated:: 4.2
  57. Use ``PerlLibs_FOUND``, which has the same value.
  58. Boolean indicating whether (the requested version of) ``<perl.h>`` and
  59. ``libperl`` were found.
  60. Examples
  61. ^^^^^^^^
  62. Finding Perl libraries and specifying the minimum required version:
  63. .. code-block:: cmake
  64. find_package(PerlLibs 6.0)
  65. See Also
  66. ^^^^^^^^
  67. * The :module:`FindPerl` module to find the Perl interpreter.
  68. #]=======================================================================]
  69. # find the perl executable
  70. include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake)
  71. set(PerlLibs_VERSION "${Perl_VERSION}")
  72. if (PERL_EXECUTABLE)
  73. function (perl_get_info _pgi_info tag)
  74. cmake_parse_arguments(_PGI "IS_PATH" "" "" ${ARGN})
  75. set (${_pgi_info} NOTFOUND PARENT_SCOPE)
  76. execute_process(COMMAND "${PERL_EXECUTABLE}" -V:${tag}
  77. OUTPUT_VARIABLE result
  78. RESULT_VARIABLE status)
  79. if (NOT status)
  80. string(REGEX REPLACE "${tag}='([^']*)'.*" "\\1" result "${result}")
  81. if (_PGI_IS_PATH)
  82. file(TO_CMAKE_PATH "${result}" result)
  83. endif()
  84. set (${_pgi_info} "${result}" PARENT_SCOPE)
  85. endif ()
  86. endfunction()
  87. ### PERL_PREFIX
  88. perl_get_info(PERL_PREFIX prefix IS_PATH)
  89. ### PERL_ARCHNAME
  90. perl_get_info(PERL_ARCHNAME archname)
  91. ### PERL_EXTRA_C_FLAGS
  92. perl_get_info(PERL_EXTRA_C_FLAGS cppflags)
  93. ### PERL_SITESEARCH
  94. perl_get_info(PERL_SITESEARCH installsitesearch IS_PATH)
  95. ### PERL_SITEARCH
  96. perl_get_info(PERL_SITEARCH installsitearch IS_PATH)
  97. ### PERL_SITELIB
  98. perl_get_info(PERL_SITELIB installsitelib IS_PATH)
  99. ### PERL_VENDORARCH
  100. perl_get_info(PERL_VENDORARCH installvendorarch IS_PATH)
  101. ### PERL_VENDORLIB
  102. perl_get_info(PERL_VENDORLIB installvendorlib IS_PATH)
  103. ### PERL_ARCHLIB
  104. perl_get_info(PERL_ARCHLIB archlib IS_PATH)
  105. ### PERL_PRIVLIB
  106. perl_get_info(PERL_PRIVLIB privlib IS_PATH)
  107. ### PERL_UPDATE_ARCHLIB
  108. perl_get_info(PERL_UPDATE_ARCHLIB installarchlib IS_PATH)
  109. ### PERL_UPDATE_PRIVLIB
  110. perl_get_info(PERL_UPDATE_PRIVLIB installprivlib IS_PATH)
  111. ### PERL_POSSIBLE_LIBRARY_NAMES
  112. perl_get_info(PERL_POSSIBLE_LIBRARY_NAMES libperl)
  113. if (NOT PERL_POSSIBLE_LIBRARY_NAMES)
  114. set(PERL_POSSIBLE_LIBRARY_NAMES perl${PerlLibs_VERSION} perl)
  115. endif()
  116. if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
  117. list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl${PerlLibs_VERSION})
  118. endif()
  119. if (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN")
  120. # On MSYS and CYGWIN environments, current perl -V:libperl gives shared
  121. # library name rather than the import library. So, extend possible library
  122. # names.
  123. list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl)
  124. endif()
  125. ### PERL_INCLUDE_PATH
  126. find_path(PERL_INCLUDE_PATH
  127. NAMES
  128. perl.h
  129. PATHS
  130. "${PERL_UPDATE_ARCHLIB}/CORE"
  131. "${PERL_ARCHLIB}/CORE"
  132. /usr/lib/perl5/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE
  133. /usr/lib/perl/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE
  134. /usr/lib/perl5/${PerlLibs_VERSION}/CORE
  135. /usr/lib/perl/${PerlLibs_VERSION}/CORE
  136. )
  137. ### PERL_LIBRARY
  138. find_library(PERL_LIBRARY
  139. NAMES
  140. ${PERL_POSSIBLE_LIBRARY_NAMES}
  141. PATHS
  142. "${PERL_UPDATE_ARCHLIB}/CORE"
  143. "${PERL_ARCHLIB}/CORE"
  144. /usr/lib/perl5/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE
  145. /usr/lib/perl/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE
  146. /usr/lib/perl5/${PerlLibs_VERSION}/CORE
  147. /usr/lib/perl/${PerlLibs_VERSION}/CORE
  148. )
  149. endif ()
  150. include(FindPackageHandleStandardArgs)
  151. find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
  152. VERSION_VAR PerlLibs_VERSION)
  153. # Introduced after CMake 2.6.4 to bring module into compliance
  154. set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
  155. set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
  156. set(PERL_LIBRARIES ${PERL_LIBRARY})
  157. # For backward compatibility with CMake before 2.8.8
  158. set(PERL_VERSION ${PerlLibs_VERSION})
  159. mark_as_advanced(
  160. PERL_INCLUDE_PATH
  161. PERL_LIBRARY
  162. )