| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- include(RunCMake)
- # System Ruby tests
- run_cmake(System/Ruby)
- run_cmake(System/Fail)
- run_cmake(System/FailExact)
- # RBENV specific tests
- if(CMake_TEST_FindRuby_RBENV)
- set(RBENV_ROOT "$ENV{RBENV_ROOT}")
- if(NOT IS_DIRECTORY "${RBENV_ROOT}")
- message(FATAL_ERROR "RBENV_ROOT should be set to a valid rbenv ruby location")
- endif()
- # Test environment has RBENV_ROOT setup
- find_program(rbenv
- NAMES rbenv
- NAMES_PER_DIR
- PATHS "$ENV{HOME}/.rbenv/bin" ENV RBENV_ROOT
- PATH_SUFFIXES bin Scripts
- NO_CACHE)
- execute_process(COMMAND "${rbenv}" which ruby
- RESULT_VARIABLE result
- OUTPUT_VARIABLE RBENV_RUBY
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- # Make sure we found a valid Ruby interpreter
- if(NOT RBENV_RUBY)
- message(FATAL_ERROR "Unable to find rbenv Ruby using RBENV_ROOT=${RBENV_ROOT}")
- endif()
- # Get the version of rbenv Ruby
- execute_process(COMMAND "${RBENV_RUBY}" -e "puts RUBY_VERSION"
- RESULT_VARIABLE result
- OUTPUT_VARIABLE RBENV_RUBY_VERSION
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(result)
- message(FATAL_ERROR "Unable to detect rbenv ruby version from '${RBENV_RUBY}': ${RBENV_RUBY_VERSION}")
- endif()
- # Find system Ruby
- execute_process(COMMAND "${CMAKE_COMMAND}" -E env PATH=/usr/bin:/bin which ruby
- RESULT_VARIABLE result
- OUTPUT_VARIABLE SYSTEM_RUBY
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(SYSTEM_RUBY STREQUAL RBENV_RUBY)
- message(FATAL_ERROR "System Ruby (${SYSTEM_RUBY}) matches rbenv Ruby (${RBENV_RUBY})")
- endif()
- # Get version of the system Ruby
- execute_process(COMMAND "${SYSTEM_RUBY}" -e "puts RUBY_VERSION"
- RESULT_VARIABLE result
- OUTPUT_VARIABLE SYSTEM_RUBY_VERSION
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(result)
- message(FATAL_ERROR "Unable to detect system ruby version from '${SYSTEM_RUBY}': ${SYSTEM_RUBY_VERSION}")
- endif()
- if(SYSTEM_RUBY_VERSION VERSION_EQUAL RBENV_RUBY_VERSION)
- message(FATAL_ERROR "Your rbenv Ruby version and system Ruby version are the same (${RBENV_RUBY_VERSION}).")
- endif()
- message(STATUS "Found system Ruby (${SYSTEM_RUBY_VERSION}): ${SYSTEM_RUBY}")
- message(STATUS "Found rbenv Ruby (${RBENV_RUBY_VERSION}): ${RBENV_RUBY}")
- set(RunCMake_TEST_OPTIONS
- "-DRBENV_RUBY=${RBENV_RUBY}"
- "-DSYSTEM_RUBY=${SYSTEM_RUBY}"
- "-DRBENV_RUBY_VERSION=${RBENV_RUBY_VERSION}"
- "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
- run_cmake(Rbenv/RbenvDefault)
- run_cmake(Rbenv/RbenvOnly)
- run_cmake(Rbenv/RbenvStandard)
- unset(RunCMake_TEST_OPTIONS)
- endif()
- # RVM specific tests
- if(CMake_TEST_FindRuby_RVM)
- # Properly using rvm would require sourcing a shell script, eg `source "$HOME/.rvm/scripts/rvm"`
- # Instead, we just rely on the env variable MY_RUBY_HOME
- set(MY_RUBY_HOME "$ENV{MY_RUBY_HOME}")
- if(NOT IS_DIRECTORY "${MY_RUBY_HOME}")
- 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")
- endif()
- execute_process(COMMAND "${MY_RUBY_HOME}/bin/ruby" -e "puts RUBY_VERSION"
- RESULT_VARIABLE result
- OUTPUT_VARIABLE RVM_RUBY_VERSION
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(result)
- message(FATAL_ERROR "Unable to detect RVM ruby version from '${MY_RUBY_HOME}/bin/ruby': ${RVM_RUBY_VERSION}")
- endif()
- execute_process(COMMAND "${CMAKE_COMMAND}" -E env --unset=MY_RUBY_HOME PATH=/usr/bin:/bin which ruby
- RESULT_VARIABLE result
- OUTPUT_VARIABLE SYSTEM_RUBY
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(SYSTEM_RUBY MATCHES "^${MY_RUBY_HOME}")
- message(FATAL_ERROR "Unable to find system ruby, found ${SYSTEM_RUBY} which is part of MY_RUBY_HOME=${MY_RUBY_HOME}")
- endif()
- # Check version of the system ruby executable.
- execute_process(COMMAND "${SYSTEM_RUBY}" -e "puts RUBY_VERSION"
- RESULT_VARIABLE result
- OUTPUT_VARIABLE SYSTEM_RUBY_VERSION
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- if(result)
- message(FATAL_ERROR "Unable to detect system ruby version from '${SYSTEM_RUBY}': ${SYSTEM_RUBY_VERSION}")
- endif()
- if(SYSTEM_RUBY_VERSION VERSION_EQUAL RVM_RUBY_VERSION)
- message(FATAL_ERROR "Your RVM Ruby version and system Ruby version are the same (${RVM_RUBY_VERSION}).")
- endif()
- message(STATUS "Found system Ruby (${SYSTEM_RUBY_VERSION}): ${SYSTEM_RUBY}")
- message(STATUS "Found RVM Ruby (${RVM_RUBY_VERSION}): ${MY_RUBY_HOME}/bin/ruby")
- set(ORIGINAL_PATH "$ENV{PATH}")
- # RvmDefault - just MY_RUBY_HOME set
- set(RunCMake_TEST_OPTIONS "-DMY_RUBY_HOME=${MY_RUBY_HOME}")
- run_cmake(Rvm/RvmDefault)
- # RvmOnly - PATH unset, MY_RUBY_HOME set
- unset(ENV{PATH})
- set(RunCMake_TEST_OPTIONS
- "-DMY_RUBY_HOME=${MY_RUBY_HOME}"
- "-DRVM_RUBY_VERSION=${RVM_RUBY_VERSION}"
- "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
- run_cmake(Rvm/RvmOnly)
- # UnsetRvmOnly - MY_RUBY_HOME unset, PATH set to minimal
- unset(ENV{MY_RUBY_HOME})
- set(ENV{PATH} "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
- set(RunCMake_TEST_OPTIONS
- "-DRVM_RUBY_VERSION=${RVM_RUBY_VERSION}"
- "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
- run_cmake(Rvm/UnsetRvmOnly)
- # RvmStandard - PATH minimal, MY_RUBY_HOME set
- set(ENV{MY_RUBY_HOME} "${MY_RUBY_HOME}")
- set(RunCMake_TEST_OPTIONS "-DMY_RUBY_HOME=${MY_RUBY_HOME}")
- run_cmake(Rvm/RvmStandard)
- # Restore PATH
- set(ENV{PATH} "${ORIGINAL_PATH}")
- unset(RunCMake_TEST_OPTIONS)
- endif()
|