FindPerlLibs.cmake 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file Copyright.txt or https://cmake.org/licensing for details.
  3. #.rst:
  4. # FindPerlLibs
  5. # ------------
  6. #
  7. # Find Perl libraries
  8. #
  9. # This module finds if PERL is installed and determines where the
  10. # include files and libraries are. It also determines what the name of
  11. # the library is. This code sets the following variables:
  12. #
  13. # ::
  14. #
  15. # PERLLIBS_FOUND = True if perl.h & libperl were found
  16. # PERL_INCLUDE_PATH = path to where perl.h is found
  17. # PERL_LIBRARY = path to libperl
  18. # PERL_EXECUTABLE = full path to the perl binary
  19. #
  20. #
  21. #
  22. # The minimum required version of Perl can be specified using the
  23. # standard syntax, e.g. find_package(PerlLibs 6.0)
  24. #
  25. # ::
  26. #
  27. # The following variables are also available if needed
  28. # (introduced after CMake 2.6.4)
  29. #
  30. #
  31. #
  32. # ::
  33. #
  34. # PERL_SITESEARCH = path to the sitesearch install dir (-V:installsitesearch)
  35. # PERL_SITEARCH = path to the sitelib install directory (-V:installsitearch)
  36. # PERL_SITELIB = path to the sitelib install directory (-V:installsitelib)
  37. # PERL_VENDORARCH = path to the vendor arch install directory (-V:installvendorarch)
  38. # PERL_VENDORLIB = path to the vendor lib install directory (-V:installvendorlib)
  39. # PERL_ARCHLIB = path to the core arch lib install directory (-V:archlib)
  40. # PERL_PRIVLIB = path to the core priv lib install directory (-V:privlib)
  41. # PERL_UPDATE_ARCHLIB = path to the update arch lib install directory (-V:installarchlib)
  42. # PERL_UPDATE_PRIVLIB = path to the update priv lib install directory (-V:installprivlib)
  43. # PERL_EXTRA_C_FLAGS = Compilation flags used to build perl
  44. # find the perl executable
  45. include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake)
  46. if (PERL_EXECUTABLE)
  47. function (perl_get_info _pgi_info tag)
  48. cmake_parse_arguments(_PGI "IS_PATH" "" "" ${ARGN})
  49. set (${_pgi_info} NOTFOUND PARENT_SCOPE)
  50. execute_process(COMMAND "${PERL_EXECUTABLE}" -V:${tag}
  51. OUTPUT_VARIABLE result
  52. RESULT_VARIABLE status)
  53. if (NOT status)
  54. string(REGEX REPLACE "${tag}='([^']*)'.*" "\\1" result "${result}")
  55. if (_PGI_IS_PATH)
  56. file(TO_CMAKE_PATH "${result}" result)
  57. endif()
  58. set (${_pgi_info} "${result}" PARENT_SCOPE)
  59. endif ()
  60. endfunction()
  61. ### PERL_PREFIX
  62. perl_get_info(PERL_PREFIX prefix IS_PATH)
  63. ### PERL_ARCHNAME
  64. perl_get_info(PERL_ARCHNAME archname)
  65. ### PERL_EXTRA_C_FLAGS
  66. perl_get_info(PERL_EXTRA_C_FLAGS cppflags)
  67. ### PERL_SITESEARCH
  68. perl_get_info(PERL_SITESEARCH installsitesearch IS_PATH)
  69. ### PERL_SITEARCH
  70. perl_get_info(PERL_SITEARCH installsitearch IS_PATH)
  71. ### PERL_SITELIB
  72. perl_get_info(PERL_SITELIB installsitelib IS_PATH)
  73. ### PERL_VENDORARCH
  74. perl_get_info(PERL_VENDORARCH installvendorarch IS_PATH)
  75. ### PERL_VENDORLIB
  76. perl_get_info(PERL_VENDORLIB installvendorlib IS_PATH)
  77. ### PERL_ARCHLIB
  78. perl_get_info(PERL_ARCHLIB archlib IS_PATH)
  79. ### PERL_PRIVLIB
  80. perl_get_info(PERL_PRIVLIB privlib IS_PATH)
  81. ### PERL_UPDATE_ARCHLIB
  82. perl_get_info(PERL_UPDATE_ARCHLIB installarchlib IS_PATH)
  83. ### PERL_UPDATE_PRIVLIB
  84. perl_get_info(PERL_UPDATE_PRIVLIB installprivlib IS_PATH)
  85. ### PERL_POSSIBLE_LIBRARY_NAMES
  86. perl_get_info(PERL_POSSIBLE_LIBRARY_NAMES libperl)
  87. if (NOT PERL_POSSIBLE_LIBRARY_NAMES)
  88. set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl)
  89. endif()
  90. ### PERL_INCLUDE_PATH
  91. find_path(PERL_INCLUDE_PATH
  92. NAMES
  93. perl.h
  94. PATHS
  95. "${PERL_UPDATE_ARCHLIB}/CORE"
  96. "${PERL_ARCHLIB}/CORE"
  97. /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  98. /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  99. /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
  100. /usr/lib/perl/${PERL_VERSION_STRING}/CORE
  101. )
  102. ### PERL_LIBRARY
  103. find_library(PERL_LIBRARY
  104. NAMES
  105. ${PERL_POSSIBLE_LIBRARY_NAMES}
  106. PATHS
  107. "${PERL_UPDATE_ARCHLIB}/CORE"
  108. "${PERL_ARCHLIB}/CORE"
  109. /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  110. /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  111. /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
  112. /usr/lib/perl/${PERL_VERSION_STRING}/CORE
  113. )
  114. endif ()
  115. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  116. find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
  117. VERSION_VAR PERL_VERSION_STRING)
  118. # Introduced after CMake 2.6.4 to bring module into compliance
  119. set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
  120. set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
  121. set(PERL_LIBRARIES ${PERL_LIBRARY})
  122. # For backward compatibility with CMake before 2.8.8
  123. set(PERL_VERSION ${PERL_VERSION_STRING})
  124. mark_as_advanced(
  125. PERL_INCLUDE_PATH
  126. PERL_LIBRARY
  127. )