FindPerlLibs.cmake 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. if (CMAKE_SYSTEM_NAME MATCHES "MSYS|CYGWIN")
  91. # on MSYS and CYGWIN environments, current perl -V:libperl gives shared library name
  92. # rather than the import library. So, extends possible library names
  93. list (APPEND PERL_POSSIBLE_LIBRARY_NAMES perl)
  94. endif()
  95. ### PERL_INCLUDE_PATH
  96. find_path(PERL_INCLUDE_PATH
  97. NAMES
  98. perl.h
  99. PATHS
  100. "${PERL_UPDATE_ARCHLIB}/CORE"
  101. "${PERL_ARCHLIB}/CORE"
  102. /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  103. /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  104. /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
  105. /usr/lib/perl/${PERL_VERSION_STRING}/CORE
  106. )
  107. ### PERL_LIBRARY
  108. find_library(PERL_LIBRARY
  109. NAMES
  110. ${PERL_POSSIBLE_LIBRARY_NAMES}
  111. PATHS
  112. "${PERL_UPDATE_ARCHLIB}/CORE"
  113. "${PERL_ARCHLIB}/CORE"
  114. /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  115. /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE
  116. /usr/lib/perl5/${PERL_VERSION_STRING}/CORE
  117. /usr/lib/perl/${PERL_VERSION_STRING}/CORE
  118. )
  119. endif ()
  120. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  121. find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH
  122. VERSION_VAR PERL_VERSION_STRING)
  123. # Introduced after CMake 2.6.4 to bring module into compliance
  124. set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH})
  125. set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH})
  126. set(PERL_LIBRARIES ${PERL_LIBRARY})
  127. # For backward compatibility with CMake before 2.8.8
  128. set(PERL_VERSION ${PERL_VERSION_STRING})
  129. mark_as_advanced(
  130. PERL_INCLUDE_PATH
  131. PERL_LIBRARY
  132. )