FindPerl.cmake 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. FindPerl
  5. --------
  6. Finds a Perl interpreter:
  7. .. code-block:: cmake
  8. find_package(Perl [<version>] [...])
  9. Perl is a general-purpose, interpreted, dynamic programming language.
  10. Result Variables
  11. ^^^^^^^^^^^^^^^^
  12. This module defines the following variables:
  13. ``Perl_FOUND``
  14. Boolean indicating whether the (requested version of) Perl executable is
  15. found. For backward compatibility, the ``PERL_FOUND`` variable is also
  16. set to the same value.
  17. ``Perl_VERSION``
  18. .. versionadded:: 4.2
  19. The version of Perl found.
  20. Cache Variables
  21. ^^^^^^^^^^^^^^^
  22. The following cache variables may also be set:
  23. ``PERL_EXECUTABLE``
  24. Full path to the ``perl`` executable.
  25. Deprecated Variables
  26. ^^^^^^^^^^^^^^^^^^^^
  27. The following variables are provided for backward compatibility:
  28. ``PERL_VERSION_STRING``
  29. .. deprecated:: 4.2
  30. Superseded by the ``Perl_VERSION``.
  31. The version of Perl found.
  32. Examples
  33. ^^^^^^^^
  34. Finding the Perl interpreter and executing it in a process:
  35. .. code-block:: cmake
  36. find_package(Perl)
  37. if(Perl_FOUND)
  38. execute_process(COMMAND ${PERL_EXECUTABLE} --help)
  39. endif()
  40. See Also
  41. ^^^^^^^^
  42. * The :module:`FindPerlLibs` to find Perl libraries.
  43. #]=======================================================================]
  44. include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
  45. include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
  46. set(PERL_POSSIBLE_BIN_PATHS
  47. ${CYGWIN_INSTALL_PATH}/bin
  48. ${MSYS_INSTALL_PATH}/usr/bin
  49. )
  50. if(WIN32)
  51. get_filename_component(
  52. ActivePerl_CurrentVersion
  53. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
  54. NAME)
  55. set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
  56. "C:/Perl/bin"
  57. "C:/Strawberry/perl/bin"
  58. [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin
  59. )
  60. endif()
  61. find_program(PERL_EXECUTABLE
  62. NAMES perl
  63. PATHS ${PERL_POSSIBLE_BIN_PATHS}
  64. )
  65. if(PERL_EXECUTABLE)
  66. execute_process(
  67. COMMAND
  68. ${PERL_EXECUTABLE} -V:version
  69. OUTPUT_VARIABLE
  70. PERL_VERSION_OUTPUT_VARIABLE
  71. RESULT_VARIABLE
  72. PERL_VERSION_RESULT_VARIABLE
  73. ERROR_QUIET
  74. OUTPUT_STRIP_TRAILING_WHITESPACE
  75. )
  76. if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'")
  77. string(REGEX REPLACE "version='([^']+)'.*" "\\1" Perl_VERSION ${PERL_VERSION_OUTPUT_VARIABLE})
  78. set(PERL_VERSION_STRING "${Perl_VERSION}")
  79. else()
  80. execute_process(
  81. COMMAND ${PERL_EXECUTABLE} -v
  82. OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE
  83. RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE
  84. ERROR_QUIET
  85. OUTPUT_STRIP_TRAILING_WHITESPACE
  86. )
  87. if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]")
  88. set(Perl_VERSION "${CMAKE_MATCH_1}")
  89. set(PERL_VERSION_STRING "${Perl_VERSION}")
  90. elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
  91. set(Perl_VERSION "${CMAKE_MATCH_1}")
  92. set(PERL_VERSION_STRING "${Perl_VERSION}")
  93. endif()
  94. endif()
  95. endif()
  96. # Deprecated settings for compatibility with CMake1.4
  97. set(PERL ${PERL_EXECUTABLE})
  98. include(FindPackageHandleStandardArgs)
  99. if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs")
  100. # FindPerlLibs include()'s this module. It's an old pattern, but rather than
  101. # trying to suppress this from outside the module (which is then sensitive to
  102. # the contents, detect the case in this module and suppress it explicitly.
  103. set(FPHSA_NAME_MISMATCHED 1)
  104. endif ()
  105. find_package_handle_standard_args(Perl
  106. REQUIRED_VARS PERL_EXECUTABLE
  107. VERSION_VAR Perl_VERSION)
  108. unset(FPHSA_NAME_MISMATCHED)
  109. mark_as_advanced(PERL_EXECUTABLE)