FindPerl.cmake 2.9 KB

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