Files
mlpack/CMake/FindRModule.cmake
2021-11-01 19:00:34 -04:00

62 lines
2.8 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FindRModule.cmake: find a specific R module.
function(find_r_module module)
string(TOUPPER ${module} module_upper)
if (NOT R_${module_upper})
if (ARGC GREATER 1)
# Not required but we have version constraints.
set(VERSION_REQ ${ARGV1})
endif ()
# A module's location is usually a directory, but for binary modules
# it's a .so file.
execute_process(COMMAND ${RSCRIPT_EXECUTABLE} "-e" "find.package('${module}')"
RESULT_VARIABLE _${module}_status
OUTPUT_VARIABLE _${module}_location
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
# Some cleanup in location of R Module.
string(REGEX MATCHALL "\".*\"" _${module}_location "${_${module}_location}" )
string(REGEX REPLACE "\"" "" _${module}_location "${_${module}_location}" )
if (NOT _${module}_status)
# Now we have to check the version.
if (VERSION_REQ)
execute_process(COMMAND ${RSCRIPT_EXECUTABLE} "-e" "packageVersion('${module}')"
RESULT_VARIABLE _version_status
OUTPUT_VARIABLE _version_compare
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Different versions of R may enclose the version number in different
# delimiters. Sometimes, semicolons show up too.
string(REGEX MATCHALL "['][0-9._]*[']" _version_compare "${_version_compare}")
string(REGEX REPLACE ";" "" _version_compare "${_version_compare}")
string(REGEX REPLACE "[']" "" _version_compare "${_version_compare}")
string(REGEX REPLACE "[']" "" _version_compare "${_version_compare}")
# Compare the version of the package using compareVersion().
execute_process(COMMAND ${RSCRIPT_EXECUTABLE} "-e"
"compareVersion('${_version_compare}', '${VERSION_REQ}')"
RESULT_VARIABLE _compareVersion_status
OUTPUT_VARIABLE _compareVersion_result
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Extract compareVersion() result i.e. 1 -> Newer, 0 -> Equal and -1 -> Later.
string(REGEX REPLACE "\\[\\1\\]" "" _compareVersion_result "${_compareVersion_result}")
if ("${_compareVersion_result}" GREATER "-1")
set(R_${module_upper}
"${_${module}_location} (found suitable version \"${_version_compare}\", minimum required is \"${VERSION_REQ}\")"
CACHE STRING "Location of R module ${module}"
)
else ()
message(WARNING "Unsuitable version of R module ${module} (${VERSION_REQ} or greater required).")
endif ()
else ()
# No version requirement so we are done.
set(R_${module_upper} ${_${module}_location} CACHE STRING "Location of R module ${module}")
endif ()
endif ()
endif ()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(R_${module} DEFAULT_MSG R_${module_upper})
endfunction ()