FindPerl.cmake 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. FindPerl
  5. --------
  6. Find a Perl interpreter.
  7. This module defines the following variables:
  8. ``PERL_EXECUTABLE``
  9. The full path to Perl.
  10. ``PERL_FOUND``
  11. True if the Perl executable was found.
  12. ``PERL_VERSION_STRING``
  13. .. versionadded:: 2.8.8
  14. The version of Perl found.
  15. #]=======================================================================]
  16. include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
  17. include(${CMAKE_CURRENT_LIST_DIR}/FindMsys.cmake)
  18. set(PERL_POSSIBLE_BIN_PATHS
  19. ${CYGWIN_INSTALL_PATH}/bin
  20. ${MSYS_INSTALL_PATH}/usr/bin
  21. )
  22. if(WIN32)
  23. get_filename_component(
  24. ActivePerl_CurrentVersion
  25. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
  26. NAME)
  27. set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
  28. "C:/Perl/bin"
  29. "C:/Strawberry/perl/bin"
  30. [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin
  31. )
  32. endif()
  33. find_program(PERL_EXECUTABLE
  34. NAMES perl
  35. PATHS ${PERL_POSSIBLE_BIN_PATHS}
  36. )
  37. if(PERL_EXECUTABLE)
  38. ### PERL_VERSION
  39. execute_process(
  40. COMMAND
  41. ${PERL_EXECUTABLE} -V:version
  42. OUTPUT_VARIABLE
  43. PERL_VERSION_OUTPUT_VARIABLE
  44. RESULT_VARIABLE
  45. PERL_VERSION_RESULT_VARIABLE
  46. ERROR_QUIET
  47. OUTPUT_STRIP_TRAILING_WHITESPACE
  48. )
  49. if(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'")
  50. string(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE})
  51. else()
  52. execute_process(
  53. COMMAND ${PERL_EXECUTABLE} -v
  54. OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE
  55. RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE
  56. ERROR_QUIET
  57. OUTPUT_STRIP_TRAILING_WHITESPACE
  58. )
  59. if(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]")
  60. set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
  61. elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
  62. set(PERL_VERSION_STRING "${CMAKE_MATCH_1}")
  63. endif()
  64. endif()
  65. endif()
  66. # Deprecated settings for compatibility with CMake1.4
  67. set(PERL ${PERL_EXECUTABLE})
  68. include(FindPackageHandleStandardArgs)
  69. if (CMAKE_FIND_PACKAGE_NAME STREQUAL "PerlLibs")
  70. # FindPerlLibs include()'s this module. It's an old pattern, but rather than
  71. # trying to suppress this from outside the module (which is then sensitive to
  72. # the contents, detect the case in this module and suppress it explicitly.
  73. set(FPHSA_NAME_MISMATCHED 1)
  74. endif ()
  75. find_package_handle_standard_args(Perl
  76. REQUIRED_VARS PERL_EXECUTABLE
  77. VERSION_VAR PERL_VERSION_STRING)
  78. unset(FPHSA_NAME_MISMATCHED)
  79. mark_as_advanced(PERL_EXECUTABLE)