RunCMakeTest.cmake 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. include(RunCMake)
  2. # System Ruby tests
  3. run_cmake(System/Ruby)
  4. run_cmake(System/Fail)
  5. run_cmake(System/FailExact)
  6. # RBENV specific tests
  7. if(CMake_TEST_FindRuby_RBENV)
  8. set(RBENV_ROOT "$ENV{RBENV_ROOT}")
  9. if(NOT IS_DIRECTORY "${RBENV_ROOT}")
  10. message(FATAL_ERROR "RBENV_ROOT should be set to a valid rbenv ruby location")
  11. endif()
  12. # Test environment has RBENV_ROOT setup
  13. find_program(rbenv
  14. NAMES rbenv
  15. NAMES_PER_DIR
  16. PATHS "$ENV{HOME}/.rbenv/bin" ENV RBENV_ROOT
  17. PATH_SUFFIXES bin Scripts
  18. NO_CACHE)
  19. execute_process(COMMAND "${rbenv}" which ruby
  20. RESULT_VARIABLE result
  21. OUTPUT_VARIABLE RBENV_RUBY
  22. ERROR_QUIET
  23. OUTPUT_STRIP_TRAILING_WHITESPACE)
  24. # Make sure we found a valid Ruby interpreter
  25. if(NOT RBENV_RUBY)
  26. message(FATAL_ERROR "Unable to find rbenv Ruby using RBENV_ROOT=${RBENV_ROOT}")
  27. endif()
  28. # Get the version of rbenv Ruby
  29. execute_process(COMMAND "${RBENV_RUBY}" -e "puts RUBY_VERSION"
  30. RESULT_VARIABLE result
  31. OUTPUT_VARIABLE RBENV_RUBY_VERSION
  32. ERROR_QUIET
  33. OUTPUT_STRIP_TRAILING_WHITESPACE)
  34. if(result)
  35. message(FATAL_ERROR "Unable to detect rbenv ruby version from '${RBENV_RUBY}': ${RBENV_RUBY_VERSION}")
  36. endif()
  37. # Find system Ruby
  38. execute_process(COMMAND "${CMAKE_COMMAND}" -E env PATH=/usr/bin:/bin which ruby
  39. RESULT_VARIABLE result
  40. OUTPUT_VARIABLE SYSTEM_RUBY
  41. ERROR_QUIET
  42. OUTPUT_STRIP_TRAILING_WHITESPACE)
  43. if(SYSTEM_RUBY STREQUAL RBENV_RUBY)
  44. message(FATAL_ERROR "System Ruby (${SYSTEM_RUBY}) matches rbenv Ruby (${RBENV_RUBY})")
  45. endif()
  46. # Get version of the system Ruby
  47. execute_process(COMMAND "${SYSTEM_RUBY}" -e "puts RUBY_VERSION"
  48. RESULT_VARIABLE result
  49. OUTPUT_VARIABLE SYSTEM_RUBY_VERSION
  50. ERROR_QUIET
  51. OUTPUT_STRIP_TRAILING_WHITESPACE)
  52. if(result)
  53. message(FATAL_ERROR "Unable to detect system ruby version from '${SYSTEM_RUBY}': ${SYSTEM_RUBY_VERSION}")
  54. endif()
  55. if(SYSTEM_RUBY_VERSION VERSION_EQUAL RBENV_RUBY_VERSION)
  56. message(FATAL_ERROR "Your rbenv Ruby version and system Ruby version are the same (${RBENV_RUBY_VERSION}).")
  57. endif()
  58. message(STATUS "Found system Ruby (${SYSTEM_RUBY_VERSION}): ${SYSTEM_RUBY}")
  59. message(STATUS "Found rbenv Ruby (${RBENV_RUBY_VERSION}): ${RBENV_RUBY}")
  60. set(RunCMake_TEST_OPTIONS
  61. "-DRBENV_RUBY=${RBENV_RUBY}"
  62. "-DSYSTEM_RUBY=${SYSTEM_RUBY}"
  63. "-DRBENV_RUBY_VERSION=${RBENV_RUBY_VERSION}"
  64. "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
  65. run_cmake(Rbenv/RbenvDefault)
  66. run_cmake(Rbenv/RbenvOnly)
  67. run_cmake(Rbenv/RbenvStandard)
  68. unset(RunCMake_TEST_OPTIONS)
  69. endif()
  70. # RVM specific tests
  71. if(CMake_TEST_FindRuby_RVM)
  72. # Properly using rvm would require sourcing a shell script, eg `source "$HOME/.rvm/scripts/rvm"`
  73. # Instead, we just rely on the env variable MY_RUBY_HOME
  74. set(MY_RUBY_HOME "$ENV{MY_RUBY_HOME}")
  75. if(NOT IS_DIRECTORY "${MY_RUBY_HOME}")
  76. message(FATAL_ERROR "MY_RUBY_HOME should be set to a valid RVM ruby location, or you should call `rvm use x.y.z` before")
  77. endif()
  78. execute_process(COMMAND "${MY_RUBY_HOME}/bin/ruby" -e "puts RUBY_VERSION"
  79. RESULT_VARIABLE result
  80. OUTPUT_VARIABLE RVM_RUBY_VERSION
  81. ERROR_QUIET
  82. OUTPUT_STRIP_TRAILING_WHITESPACE)
  83. if(result)
  84. message(FATAL_ERROR "Unable to detect RVM ruby version from '${MY_RUBY_HOME}/bin/ruby': ${RVM_RUBY_VERSION}")
  85. endif()
  86. execute_process(COMMAND "${CMAKE_COMMAND}" -E env --unset=MY_RUBY_HOME PATH=/usr/bin:/bin which ruby
  87. RESULT_VARIABLE result
  88. OUTPUT_VARIABLE SYSTEM_RUBY
  89. ERROR_QUIET
  90. OUTPUT_STRIP_TRAILING_WHITESPACE)
  91. if(SYSTEM_RUBY MATCHES "^${MY_RUBY_HOME}")
  92. message(FATAL_ERROR "Unable to find system ruby, found ${SYSTEM_RUBY} which is part of MY_RUBY_HOME=${MY_RUBY_HOME}")
  93. endif()
  94. # Check version of the system ruby executable.
  95. execute_process(COMMAND "${SYSTEM_RUBY}" -e "puts RUBY_VERSION"
  96. RESULT_VARIABLE result
  97. OUTPUT_VARIABLE SYSTEM_RUBY_VERSION
  98. ERROR_QUIET
  99. OUTPUT_STRIP_TRAILING_WHITESPACE)
  100. if(result)
  101. message(FATAL_ERROR "Unable to detect system ruby version from '${SYSTEM_RUBY}': ${SYSTEM_RUBY_VERSION}")
  102. endif()
  103. if(SYSTEM_RUBY_VERSION VERSION_EQUAL RVM_RUBY_VERSION)
  104. message(FATAL_ERROR "Your RVM Ruby version and system Ruby version are the same (${RVM_RUBY_VERSION}).")
  105. endif()
  106. message(STATUS "Found system Ruby (${SYSTEM_RUBY_VERSION}): ${SYSTEM_RUBY}")
  107. message(STATUS "Found RVM Ruby (${RVM_RUBY_VERSION}): ${MY_RUBY_HOME}/bin/ruby")
  108. set(ORIGINAL_PATH "$ENV{PATH}")
  109. # RvmDefault - just MY_RUBY_HOME set
  110. set(RunCMake_TEST_OPTIONS "-DMY_RUBY_HOME=${MY_RUBY_HOME}")
  111. run_cmake(Rvm/RvmDefault)
  112. # RvmOnly - PATH unset, MY_RUBY_HOME set
  113. unset(ENV{PATH})
  114. set(RunCMake_TEST_OPTIONS
  115. "-DMY_RUBY_HOME=${MY_RUBY_HOME}"
  116. "-DRVM_RUBY_VERSION=${RVM_RUBY_VERSION}"
  117. "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
  118. run_cmake(Rvm/RvmOnly)
  119. # UnsetRvmOnly - MY_RUBY_HOME unset, PATH set to minimal
  120. unset(ENV{MY_RUBY_HOME})
  121. set(ENV{PATH} "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
  122. set(RunCMake_TEST_OPTIONS
  123. "-DRVM_RUBY_VERSION=${RVM_RUBY_VERSION}"
  124. "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
  125. run_cmake(Rvm/UnsetRvmOnly)
  126. # RvmStandard - PATH minimal, MY_RUBY_HOME set
  127. set(ENV{MY_RUBY_HOME} "${MY_RUBY_HOME}")
  128. set(RunCMake_TEST_OPTIONS "-DMY_RUBY_HOME=${MY_RUBY_HOME}")
  129. run_cmake(Rvm/RvmStandard)
  130. # Restore PATH
  131. set(ENV{PATH} "${ORIGINAL_PATH}")
  132. unset(RunCMake_TEST_OPTIONS)
  133. endif()