FindPerl.cmake 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # - Find perl
  2. # this module looks for Perl
  3. #
  4. # PERL_EXECUTABLE - the full path to perl
  5. # PERL_FOUND - If false, don't attempt to use perl.
  6. # PERL_VERSION_STRING - version of perl found (since CMake 2.8.8)
  7. #=============================================================================
  8. # Copyright 2001-2009 Kitware, Inc.
  9. #
  10. # Distributed under the OSI-approved BSD License (the "License");
  11. # see accompanying file Copyright.txt for details.
  12. #
  13. # This software is distributed WITHOUT ANY WARRANTY; without even the
  14. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. # See the License for more information.
  16. #=============================================================================
  17. # (To distribute this file outside of CMake, substitute the full
  18. # License text for the above reference.)
  19. include(FindCygwin)
  20. set(PERL_POSSIBLE_BIN_PATHS
  21. ${CYGWIN_INSTALL_PATH}/bin
  22. )
  23. if(WIN32)
  24. get_filename_component(
  25. ActivePerl_CurrentVersion
  26. "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]"
  27. NAME)
  28. set(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS}
  29. "C:/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. string(REGEX REPLACE ".*This is perl.*[ \\(]v([0-9\\._]+)[ \\)].*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE})
  61. elseif(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +")
  62. string(REGEX REPLACE ".*This is perl, version ([0-9\\._]+) +.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE})
  63. endif()
  64. endif()
  65. endif()
  66. # Deprecated settings for compatibility with CMake1.4
  67. set(PERL ${PERL_EXECUTABLE})
  68. # handle the QUIETLY and REQUIRED arguments and set PERL_FOUND to TRUE if
  69. # all listed variables are TRUE
  70. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  71. FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl
  72. REQUIRED_VARS PERL_EXECUTABLE
  73. VERSION_VAR PERL_VERSION_STRING)
  74. mark_as_advanced(PERL_EXECUTABLE)