FindPerl.cmake 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. #
  7. # Find perl
  8. #
  9. # this module looks for Perl
  10. #
  11. # ::
  12. #
  13. # PERL_EXECUTABLE - the full path to perl
  14. # PERL_FOUND - If false, don't attempt to use perl.
  15. # PERL_VERSION_STRING - version of perl found (since CMake 2.8.8)
  16. include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake)
  17. set(PERL_POSSIBLE_BIN_PATHS
  18. ${CYGWIN_INSTALL_PATH}/bin
  19. )
  20. if(WIN32)
  21. get_filename_component(
  22. ActivePerl_CurrentVersion
  23. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
  24. NAME)
  25. set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
  26. "C:/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. FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl
  67. REQUIRED_VARS PERL_EXECUTABLE
  68. VERSION_VAR PERL_VERSION_STRING)
  69. mark_as_advanced(PERL_EXECUTABLE)