1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
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()
|