FindPerlLibs.cmake 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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. Boolean indicating whether the (requested version of) Perl library
  18. (``perl.h`` and ``libperl``) is found. For backward compatibility, the
  19. ``PERLLIBS_FOUND`` variable is also set to the same value.
  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. Examples
  53. ^^^^^^^^
  54. Finding Perl libraries and specifying the minimum required version:
  55. .. code-block:: cmake
  56. find_package(PerlLibs 6.0)
  57. See Also
  58. ^^^^^^^^
  59. * The :module:`FindPerl` module to find the Perl interpreter.
  60. #]=======================================================================]
  61. # find the perl executable
  62. include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake)
  63. set(PerlLibs_VERSION "${Perl_VERSION}")
  64. if (PERL_EXECUTABLE)
  65. function (perl_get_info _pgi_info tag)
  66. cmake_parse_arguments(_PGI "IS_PATH" "" "" ${ARGN})
  67. set (${_pgi_info} NOTFOUND PARENT_SCOPE)
  68. execute_process(COMMAND "${PERL_EXECUTABLE}" -V:${tag}
  69. OUTPUT_VARIABLE result
  70. RESULT_VARIABLE status)
  71. if (NOT status)
  72. string(REGEX REPLACE "${tag}='([^']*)'.*" "\\1" result "${result}")
  73. if (_PGI_IS_PATH)
  74. file(TO_CMAKE_PATH "${result}" result)
  75. endif()
  76. set (${_pgi_info} "${result}" PARENT_SCOPE)
  77. endif ()
  78. endfunction()
  79. ### PERL_PREFIX
  80. perl_get_info(PERL_PREFIX prefix IS_PATH)
  81. ### PERL_ARCHNAME
  82. perl_get_info(PERL_ARCHNAME archname)
  83. ### PERL_EXTRA_C_FLAGS
  84. perl_get_info(PERL_EXTRA_C_FLAGS cppflags)
  85. ### PERL_SITESEARCH
  86. perl_get_info(PERL_SITESEARCH installsitesearch IS_PATH)
  87. ### PERL_SITEARCH
  88. perl_get_info(PERL_SITEARCH installsitearch IS_PATH)
  89. ### PERL_SITELIB
  90. perl_get_info(PERL_SITELIB installsitelib IS_PATH)
  91. ### PERL_VENDORARCH
  92. perl_get_info(PERL_VENDORARCH installvendorarch IS_PATH)
  93. ### PERL_VENDORLIB
  94. perl_get_info(PERL_VENDORLIB installvendorlib IS_PATH)
  95. ### PERL_ARCHLIB
  96. perl_get_info(PERL_ARCHLIB archlib IS_PATH)
  97. ### PERL_PRIVLIB
  98. perl_get_info(PERL_PRIVLIB privlib IS_PATH)
  99. ### PERL_UPDATE_ARCHLIB
  100. perl_get_info(PERL_UPDATE_ARCHLIB installarchlib IS_PATH)
  101. ### PERL_UPDATE_PRIVLIB
  102. perl_get_info(PERL_UPDATE_PRIVLIB installprivlib IS_PATH)
  103. ### PERL_POSSIBLE_LIBRARY_NAMES
  104. perl_get_info(PERL_POSSIBLE_LIBRARY_NAMES libperl)
  105. if (NOT PERL_POSSIBLE_LIBRARY_NAMES)
  106. set(PERL_POSSIBLE_LIBRARY_NAMES perl${PerlLibs_VERSION} perl)
  107. endif()
  108. if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
  109. list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl${PerlLibs_VERSION})
  110. endif()
  111. if (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN")
  112. # On MSYS and CYGWIN environments, current perl -V:libperl gives shared
  113. # library name rather than the import library. So, extend possible library
  114. # names.
  115. list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl)
  116. endif()
  117. ### PERL_INCLUDE_PATH
  118. find_path(PERL_INCLUDE_PATH
  119. NAMES
  120. perl.h
  121. PATHS
  122. "${PERL_UPDATE_ARCHLIB}/CORE"
  123. "${PERL_ARCHLIB}/CORE"
  124. /usr/lib/perl5/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE
  125. /usr/lib/perl/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE
  126. /usr/lib/perl5/${PerlLibs_VERSION}/CORE
  127. /usr/lib/perl/${PerlLibs_VERSION}/CORE
  128. )
  129. ### PERL_LIBRARY
  130. find_library(PERL_LIBRARY
  131. NAMES
  132. ${PERL_POSSIBLE_LIBRARY_NAMES}
  133. PATHS
  134. "${PERL_UPDATE_ARCHLIB}/CORE"
  135. "${PERL_ARCHLIB}/CORE"
  136. /usr/lib/perl5/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE
  137. /usr/lib/perl/${PerlLibs_VERSION}/${PERL_ARCHNAME}/CORE
  138. /usr/lib/perl5/${PerlLibs_VERSION}/CORE
  139. /usr/lib/perl/${PerlLibs_VERSION}/CORE
  140. )
  141. endif ()
  142. include(FindPackageHandleStandardArgs)
  143. find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
  144. VERSION_VAR PerlLibs_VERSION)
  145. # Introduced after CMake 2.6.4 to bring module into compliance
  146. set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
  147. set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
  148. set(PERL_LIBRARIES ${PERL_LIBRARY})
  149. # For backward compatibility with CMake before 2.8.8
  150. set(PERL_VERSION ${PerlLibs_VERSION})
  151. mark_as_advanced(
  152. PERL_INCLUDE_PATH
  153. PERL_LIBRARY
  154. )