mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-01-26 11:04:33 +00:00
Merge topic 'FindRuby-tests'
a9ded64779 FindRuby: Convert tests to RunCMake Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !11605
This commit is contained in:
commit
b98b6b847f
@ -1585,10 +1585,6 @@ if(BUILD_TESTING)
|
||||
add_subdirectory(UseSWIG)
|
||||
endif()
|
||||
|
||||
if(CMake_TEST_FindRuby)
|
||||
add_subdirectory(FindRuby)
|
||||
endif()
|
||||
|
||||
add_subdirectory(FindThreads)
|
||||
|
||||
# Matlab module
|
||||
|
||||
@ -1,71 +0,0 @@
|
||||
if(CMake_TEST_FindRuby)
|
||||
|
||||
# Looks for ruby >=1.9.9, which is true on any Ubuntu (that installs it) or macOS (> 10.9)
|
||||
add_test(NAME FindRuby.Test COMMAND
|
||||
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/FindRuby/Test"
|
||||
"${CMake_BINARY_DIR}/Tests/FindRuby/Test"
|
||||
${build_generator_args}
|
||||
--build-project TestRuby
|
||||
--build-options ${build_options}
|
||||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
|
||||
)
|
||||
|
||||
# Looks for ruby >= 50.1.0, which should logically fail
|
||||
add_test(NAME FindRuby.Fail COMMAND
|
||||
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/FindRuby/Fail"
|
||||
"${CMake_BINARY_DIR}/Tests/FindRuby/Fail"
|
||||
${build_generator_args}
|
||||
--build-project TestRubyFail
|
||||
--build-options ${build_options}
|
||||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
|
||||
)
|
||||
set_tests_properties(FindRuby.Fail PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "Could NOT find Ruby.*(Required[ \n]+is[ \n]+at[ \n]+least[ \n]+version[ \n]*\"[0-9]+\\.[0-9]+\\.[0-9]+\")")
|
||||
|
||||
# Looks for 1.9.9 EXACTLY, which unlike the "FindRuby" test above will fail on every machine
|
||||
# since this version doesn't exist (ruby goes from 1.9.3 to 2.0.0)
|
||||
add_test(NAME FindRuby.FailExact COMMAND
|
||||
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/FindRuby/FailExact"
|
||||
"${CMake_BINARY_DIR}/Tests/FindRuby/FailExact"
|
||||
${build_generator_args}
|
||||
--build-project TestRubyFailExact
|
||||
--build-options ${build_options}
|
||||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
|
||||
)
|
||||
set_tests_properties(FindRuby.FailExact PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "Could NOT find Ruby.*Required[ \n]+is[ \n]+exact[ \n]+version[ \n]+\"1\\.9\\.9\"")
|
||||
|
||||
# RBENV specific test
|
||||
if(CMake_TEST_FindRuby_RBENV)
|
||||
add_test(NAME FindRuby.Rbenv COMMAND
|
||||
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/FindRuby/Rbenv"
|
||||
"${CMake_BINARY_DIR}/Tests/FindRuby/Rbenv"
|
||||
${build_generator_args}
|
||||
--build-project TestRBENV
|
||||
--build-options ${build_options}
|
||||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
|
||||
)
|
||||
endif()
|
||||
|
||||
# RVM specific test
|
||||
if(CMake_TEST_FindRuby_RVM)
|
||||
add_test(NAME FindRuby.Rvm COMMAND
|
||||
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/FindRuby/Rvm"
|
||||
"${CMake_BINARY_DIR}/Tests/FindRuby/Rvm"
|
||||
${build_generator_args}
|
||||
--build-project TestRVM
|
||||
--build-options ${build_options}
|
||||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@ -1,8 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.17)
|
||||
project(TestRubyFailExact LANGUAGES NONE)
|
||||
|
||||
# Should always fail since there is NO ruby 1.9.9 (goes from 1.9.3 to 2.0.0)
|
||||
find_package(Ruby 1.9.9 EXACT REQUIRED)
|
||||
if (NOT Ruby_FOUND)
|
||||
message (FATAL_ERROR "Failed to find Ruby 1.9.9")
|
||||
endif()
|
||||
@ -1,77 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.31)
|
||||
project(TestRBENV LANGUAGES NONE)
|
||||
|
||||
include(CTest)
|
||||
|
||||
# Test environment has RBENV_ROOT setup
|
||||
find_program (rbenv
|
||||
NAMES rbenv
|
||||
NAMES_PER_DIR
|
||||
PATHS "$ENV{HOME}/.rbenv/bin/rbenv" 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 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 MATCHES "${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 standard ruby version are the same (${RBENV_RUBY_VERSION}).")
|
||||
endif()
|
||||
|
||||
message(STATUS "Found standard Ruby (${SYSTEM_RUBY_VERSION}): ${SYSTEM_RUBY}")
|
||||
message(STATUS "Found rbenv Ruby (${RBENV_RUBY_VERSION}): ${RBENV_RUBY}")
|
||||
|
||||
add_test(NAME FindRuby.RbenvDefault
|
||||
COMMAND "${CMAKE_COMMAND}" -E env "RBENV_ROOT=$ENV{RBENV_ROOT}"
|
||||
"${CMAKE_COMMAND}" "-DRBENV_RUBY=${RBENV_RUBY}" "-DSYSTEM_RUBY=${SYSTEM_RUBY}" "-DRBENV_RUBY_VERSION=${RBENV_RUBY_VERSION}" "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/RbenvDefault.cmake")
|
||||
|
||||
add_test(NAME FindRuby.RbenvOnly
|
||||
COMMAND "${CMAKE_COMMAND}" -E env "RBENV_ROOT=$ENV{RBENV_ROOT}"
|
||||
"${CMAKE_COMMAND}" "-DRBENV_RUBY=${RBENV_RUBY}" "-DSYSTEM_RUBY=${SYSTEM_RUBY}" "-DRBENV_RUBY_VERSION=${RBENV_RUBY_VERSION}" "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/RbenvOnly.cmake")
|
||||
|
||||
add_test(NAME FindRuby.RbenvStandard
|
||||
COMMAND "${CMAKE_COMMAND}" -E env "RBENV_ROOT=$ENV{RBENV_ROOT}"
|
||||
"${CMAKE_COMMAND}" "-DRBENV_RUBY=${RBENV_RUBY}" "-DSYSTEM_RUBY=${SYSTEM_RUBY}" "-DRBENV_RUBY_VERSION=${RBENV_RUBY_VERSION}" "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/RbenvStandard.cmake")
|
||||
@ -1,75 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.17)
|
||||
project(TestRVM LANGUAGES NONE)
|
||||
|
||||
include(CTest)
|
||||
|
||||
# To run this test, you need to have at least one RVM ruby installed
|
||||
# and to ensure that the env variable 'MY_RUBY_HOME' is set to a valid RVM ruby when you run the test
|
||||
# (which is the case if you have done `rvm use x.y.z`, but could be manually set too)
|
||||
|
||||
# Properly using rvm would require sourcing a shell script, eg `source "$HOME/.rvm/scripts/rvm"`
|
||||
# Instead, I'll just rely on the env variable MY_RUBY_HOME
|
||||
set(MY_RUBY_HOME "$ENV{MY_RUBY_HOME}")
|
||||
if(NOT MY_RUBY_HOME)
|
||||
message(FATAL_ERROR "Env variable 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 your System ruby version are the same (${RVM_RUBY_VERSION}).")
|
||||
endif()
|
||||
|
||||
message("Found System Ruby (${SYSTEM_RUBY_VERSION}): ${SYSTEM_RUBY}")
|
||||
message("Found RVM Ruby (${RVM_RUBY_VERSION}): ${MY_RUBY_HOME}/bin/ruby")
|
||||
|
||||
add_test(NAME FindRuby.RvmDefault
|
||||
COMMAND "${CMAKE_COMMAND}" -E env "MY_RUBY_HOME=${MY_RUBY_HOME}"
|
||||
"${CMAKE_COMMAND}" "-DRUBY_HOME=${MY_RUBY_HOME}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/RvmDefault.cmake")
|
||||
|
||||
add_test(NAME FindRuby.RvmOnly
|
||||
COMMAND "${CMAKE_COMMAND}" -E env --unset=PATH
|
||||
"MY_RUBY_HOME=${MY_RUBY_HOME}"
|
||||
"${CMAKE_COMMAND}" "-DRUBY_HOME=${MY_RUBY_HOME}"
|
||||
"-DRVM_RUBY_VERSION=${RVM_RUBY_VERSION}" "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/RvmOnly.cmake")
|
||||
add_test(NAME FindRuby.UnsetRvmOnly
|
||||
COMMAND "${CMAKE_COMMAND}" -E env --unset=MY_RUBY_HOME "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
|
||||
"${CMAKE_COMMAND}" "-DRVM_RUBY_VERSION=${RVM_RUBY_VERSION}" "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/RvmOnly.cmake")
|
||||
|
||||
add_test(NAME FindRuby.RvmStandard
|
||||
COMMAND "${CMAKE_COMMAND}" -E env "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
|
||||
"MY_RUBY_HOME=${MY_RUBY_HOME}"
|
||||
"${CMAKE_COMMAND}" "-DRUBY_HOME=${MY_RUBY_HOME}"
|
||||
-P "${CMAKE_CURRENT_LIST_DIR}/RvmStandard.cmake")
|
||||
@ -1,17 +0,0 @@
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "")
|
||||
|
||||
find_package (Ruby 2.1.1 REQUIRED)
|
||||
if (NOT RUBY_EXECUTABLE MATCHES "^${RUBY_HOME}/.+")
|
||||
message (FATAL_ERROR "Failed to use RVM environment: ${RUBY_EXECUTABLE}, ${RUBY_HOME}")
|
||||
endif()
|
||||
|
||||
find_package (Ruby 2.1 REQUIRED)
|
||||
if (NOT RUBY_EXECUTABLE MATCHES "^${RUBY_HOME}/.+")
|
||||
message (FATAL_ERROR "Failed to use RVM environment: ${RUBY_EXECUTABLE}, ${RUBY_HOME}")
|
||||
endif()
|
||||
|
||||
find_package (Ruby REQUIRED)
|
||||
if (NOT RUBY_EXECUTABLE MATCHES "^${RUBY_HOME}/.+")
|
||||
message (FATAL_ERROR "Failed to use RVM environment: ${RUBY_EXECUTABLE}, ${RUBY_HOME}")
|
||||
endif()
|
||||
@ -1,9 +0,0 @@
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "")
|
||||
|
||||
set (Ruby_FIND_VIRTUALENV STANDARD)
|
||||
find_package (Ruby REQUIRED)
|
||||
|
||||
if (RUBY_EXECUTABLE MATCHES "^${RUBY_HOME}/.+")
|
||||
message (FATAL_ERROR "RVM ruby unexpectedly found at ${RUBY_EXECUTABLE}, matches ${RUBY_HOME}")
|
||||
endif()
|
||||
@ -1,7 +0,0 @@
|
||||
#include "ruby.h"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
ruby_show_version();
|
||||
return 0;
|
||||
}
|
||||
@ -499,6 +499,13 @@ if(CMake_TEST_FindPython2 OR CMake_TEST_FindPython2_SABIModule OR CMake_TEST_Fin
|
||||
endif()
|
||||
add_RunCMake_test(FindBoost)
|
||||
add_RunCMake_test(FindLua)
|
||||
if(CMake_TEST_FindRuby)
|
||||
add_RunCMake_test(FindRuby
|
||||
-DCMake_TEST_FindRuby_RBENV=${CMake_TEST_FindRuby_RBENV}
|
||||
-DCMake_TEST_FindRuby_RVM=${CMake_TEST_FindRuby_RVM}
|
||||
-DRBENV_ROOT=$ENV{RBENV_ROOT}
|
||||
-DMY_RUBY_HOME=$ENV{MY_RUBY_HOME})
|
||||
endif()
|
||||
add_RunCMake_test(FindOpenGL)
|
||||
add_RunCMake_test(InitialFlags)
|
||||
if(CMake_TEST_FindOpenSSL)
|
||||
|
||||
3
Tests/RunCMake/FindRuby/CMakeLists.txt
Normal file
3
Tests/RunCMake/FindRuby/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
||||
cmake_minimum_required(VERSION 3.20...4.1)
|
||||
project(${RunCMake_TEST} NONE)
|
||||
include(${RunCMake_TEST}.cmake)
|
||||
@ -1,7 +1,7 @@
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "")
|
||||
|
||||
set (Ruby_FIND_VIRTUALENV STANDARD)
|
||||
set(Ruby_FIND_VIRTUALENV STANDARD)
|
||||
unset(ENV{MY_RUBY_HOME}) # Suppress RVM code path for this test.
|
||||
|
||||
# We should find the standard Ruby
|
||||
159
Tests/RunCMake/FindRuby/RunCMakeTest.cmake
Normal file
159
Tests/RunCMake/FindRuby/RunCMakeTest.cmake
Normal file
@ -0,0 +1,159 @@
|
||||
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(ENV{RBENV_ROOT} "${RBENV_ROOT}")
|
||||
|
||||
# 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
|
||||
if(NOT 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()
|
||||
|
||||
set(ENV{MY_RUBY_HOME} "${MY_RUBY_HOME}")
|
||||
|
||||
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()
|
||||
17
Tests/RunCMake/FindRuby/Rvm/RvmDefault.cmake
Normal file
17
Tests/RunCMake/FindRuby/Rvm/RvmDefault.cmake
Normal file
@ -0,0 +1,17 @@
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "")
|
||||
|
||||
find_package (Ruby 2.1.1 REQUIRED)
|
||||
if (NOT Ruby_EXECUTABLE MATCHES "^${RUBY_HOME}")
|
||||
message (FATAL_ERROR "Failed to use RVM environment: ${Ruby_EXECUTABLE}, ${RUBY_HOME}")
|
||||
endif()
|
||||
|
||||
find_package (Ruby 2.1 REQUIRED)
|
||||
if (NOT Ruby_EXECUTABLE MATCHES "^${RUBY_HOME}")
|
||||
message (FATAL_ERROR "Failed to use RVM environment: ${Ruby_EXECUTABLE}, ${RUBY_HOME}")
|
||||
endif()
|
||||
|
||||
find_package (Ruby REQUIRED)
|
||||
if (NOT Ruby_EXECUTABLE MATCHES "^${MY_RUBY_HOME}")
|
||||
message (FATAL_ERROR "Failed to use RVM environment: ${Ruby_EXECUTABLE}, ${MY_RUBY_HOME}")
|
||||
endif()
|
||||
@ -5,7 +5,7 @@ set(Ruby_FIND_VIRTUALENV ONLY)
|
||||
set(Ruby_RBENV_EXECUTABLE "") # Suppress rbenv code path for this test.
|
||||
|
||||
# Test: FindRuby.RvmOnly
|
||||
if (RUBY_HOME)
|
||||
if (MY_RUBY_HOME)
|
||||
# => Trying to find exactly system ruby using ONLY virtual environment should fail
|
||||
find_package (Ruby ${SYSTEM_RUBY_VERSION} EXACT QUIET)
|
||||
if(Ruby_FOUND)
|
||||
@ -20,7 +20,7 @@ endif()
|
||||
|
||||
|
||||
# Test: FindRuby.UnsetRvmOnly
|
||||
if (NOT RUBY_HOME)
|
||||
if (NOT MY_RUBY_HOME)
|
||||
|
||||
# If ENV{MY_RUBY_HOME} isn't defined and Ruby_FIND_VIRTUALENV is set to ONLY
|
||||
# then Ruby should not be found
|
||||
9
Tests/RunCMake/FindRuby/Rvm/RvmStandard.cmake
Normal file
9
Tests/RunCMake/FindRuby/Rvm/RvmStandard.cmake
Normal file
@ -0,0 +1,9 @@
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "")
|
||||
|
||||
set (Ruby_FIND_VIRTUALENV STANDARD)
|
||||
find_package (Ruby REQUIRED)
|
||||
|
||||
if (Ruby_EXECUTABLE MATCHES "^${MY_RUBY_HOME}")
|
||||
message (FATAL_ERROR "RVM ruby unexpectedly found at ${Ruby_EXECUTABLE}, matches ${MY_RUBY_HOME}")
|
||||
endif()
|
||||
37
Tests/RunCMake/FindRuby/Rvm/UnsetRvmOnly.cmake
Normal file
37
Tests/RunCMake/FindRuby/Rvm/UnsetRvmOnly.cmake
Normal file
@ -0,0 +1,37 @@
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "")
|
||||
|
||||
set(Ruby_FIND_VIRTUALENV ONLY)
|
||||
set(Ruby_RBENV_EXECUTABLE "") # Suppress rbenv code path for this test.
|
||||
|
||||
# Test: FindRuby.RvmOnly
|
||||
if (MY_RUBY_HOME)
|
||||
# => Trying to find exactly system ruby using ONLY virtual environment should fail
|
||||
find_package (Ruby ${SYSTEM_RUBY_VERSION} EXACT QUIET)
|
||||
if(Ruby_FOUND)
|
||||
message (FATAL_ERROR "Ruby unexpectedly found.")
|
||||
endif()
|
||||
# And should work to find the rvm version
|
||||
find_package (Ruby ${RVM_RUBY_VERSION} EXACT QUIET)
|
||||
if(Ruby_FOUND)
|
||||
message (FATAL_ERROR "Ruby unexpectedly found.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
# Test: FindRuby.UnsetRvmOnly
|
||||
if (NOT MY_RUBY_HOME)
|
||||
# If ENV{MY_RUBY_HOME} isn't defined and Ruby_FIND_VIRTUALENV is set to ONLY
|
||||
# then Ruby should not be found
|
||||
|
||||
find_package (Ruby ${RVM_RUBY_VERSION} EXACT QUIET)
|
||||
if(Ruby_FOUND)
|
||||
message (FATAL_ERROR "RVM Ruby unexpectedly found.")
|
||||
endif()
|
||||
|
||||
# it should *not* find the system ruby
|
||||
find_package (Ruby ${SYSTEM_RUBY_VERSION} EXACT QUIET)
|
||||
if(Ruby_FOUND)
|
||||
message (FATAL_ERROR "Ruby unexpectedly found.")
|
||||
endif()
|
||||
endif()
|
||||
1
Tests/RunCMake/FindRuby/System/Fail-result.txt
Normal file
1
Tests/RunCMake/FindRuby/System/Fail-result.txt
Normal file
@ -0,0 +1 @@
|
||||
1
|
||||
1
Tests/RunCMake/FindRuby/System/Fail-stderr.txt
Normal file
1
Tests/RunCMake/FindRuby/System/Fail-stderr.txt
Normal file
@ -0,0 +1 @@
|
||||
Could NOT find Ruby \(missing:[^)]*\) \(Required[^)]*"50\.1\.0"\)
|
||||
@ -1,5 +1,2 @@
|
||||
cmake_minimum_required(VERSION 3.17)
|
||||
project(TestRubyFail LANGUAGES NONE)
|
||||
|
||||
# Should always fail since there is NO ruby 50.1.0 yet.
|
||||
find_package(Ruby 50.1.0 REQUIRED)
|
||||
1
Tests/RunCMake/FindRuby/System/FailExact-result.txt
Normal file
1
Tests/RunCMake/FindRuby/System/FailExact-result.txt
Normal file
@ -0,0 +1 @@
|
||||
1
|
||||
1
Tests/RunCMake/FindRuby/System/FailExact-stderr.txt
Normal file
1
Tests/RunCMake/FindRuby/System/FailExact-stderr.txt
Normal file
@ -0,0 +1 @@
|
||||
Could NOT find Ruby \(missing:[^)]*\) \(Required[^)]*"1\.9\.9"\)
|
||||
2
Tests/RunCMake/FindRuby/System/FailExact.cmake
Normal file
2
Tests/RunCMake/FindRuby/System/FailExact.cmake
Normal file
@ -0,0 +1,2 @@
|
||||
# Should always fail since there is NO ruby 1.9.9 (goes from 1.9.3 to 2.0.0)
|
||||
find_package(Ruby 1.9.9 EXACT REQUIRED)
|
||||
@ -1,9 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.17)
|
||||
project(TestRuby LANGUAGES C)
|
||||
include(CTest)
|
||||
enable_language(C)
|
||||
|
||||
cmake_policy(SET CMP0185 NEW)
|
||||
|
||||
set(Ruby_RBENV_EXECUTABLE "") # Suppress rbenv code path for this test.
|
||||
|
||||
find_package(Ruby 1.9.9 REQUIRED)
|
||||
if (NOT Ruby_FOUND)
|
||||
message (FATAL_ERROR "Failed to find Ruby >=1.9.9")
|
||||
@ -19,9 +19,3 @@ foreach(var_CMP0185
|
||||
message(FATAL_ERROR "Pre-CMP0185 result variable is set: ${var_CMP0185}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
add_executable(ruby_version ruby_version.c)
|
||||
target_include_directories(ruby_version PRIVATE ${Ruby_INCLUDE_DIRS})
|
||||
target_link_libraries(ruby_version PRIVATE ${Ruby_LIBRARIES})
|
||||
|
||||
add_test(NAME ruby_version COMMAND ruby_version)
|
||||
Loading…
x
Reference in New Issue
Block a user