| # Find python module and version |
| # |
| # It sets the variables (given module called MODULE) |
| # unless MODULE is __FUTURE__. In that case |
| # it only checks if it has been found. |
| # |
| # MODULE_FOUND - has the module been found? |
| # MODULE_VERSION - module version as a string |
| # MODULE_VERSION_MAJOR - major version number |
| # MODULE_VERSION_MINOR - minor version number |
| # MODULE_VERSION_PATCH - patch version number |
| # MODULE_VERSION_DECIMAL - e.g. version 1.6.1 is 10601 |
| # |
| |
| |
| function(find_python_module module) |
| # Write module in upper and lower case |
| string(TOUPPER ${module} module_upper) |
| string(TOLOWER ${module} module_lower) |
| |
| unset(${module_upper}_VERSION) |
| # |
| # if(ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED") |
| # set(${module_upper}_FIND_REQUIRED TRUE) |
| # endif() |
| |
| if(PYTHONINTERP_FOUND) |
| if (NOT ${module} STREQUAL "__future__") |
| execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" |
| "import ${module_lower} as n; print(n.__version__);" |
| RESULT_VARIABLE __result |
| OUTPUT_VARIABLE __output |
| ERROR_QUIET |
| OUTPUT_STRIP_TRAILING_WHITESPACE) |
| |
| if(__result MATCHES 0) |
| string(REGEX REPLACE ";" "\\\\;" __values ${__output}) |
| string(REGEX REPLACE "\r?\n" ";" __values ${__values}) |
| list(GET __values 0 ${module_upper}_VERSION) |
| |
| string(REGEX MATCH "^([0-9])+\\.([0-9])+\\.([0-9])+" __ver_check "${${module_upper}_VERSION}") |
| |
| if(NOT "${__ver_check}" STREQUAL "") |
| set(${module_upper}_VERSION_MAJOR ${CMAKE_MATCH_1}) |
| set(${module_upper}_VERSION_MINOR ${CMAKE_MATCH_2}) |
| set(${module_upper}_VERSION_PATCH ${CMAKE_MATCH_3}) |
| math(EXPR ${module_upper}_VERSION_DECIMAL |
| "(${CMAKE_MATCH_1} * 10000) + (${CMAKE_MATCH_2} * 100) + ${CMAKE_MATCH_3}") |
| else() |
| unset(${module_upper}_VERSION) |
| message(STATUS "Requested ${module_lower} version, but got instead:\n${__output}\n") |
| endif() |
| |
| find_package_handle_standard_args(${module_upper} |
| FOUND_VAR ${module_upper}_FOUND |
| REQUIRED_VARS ${module_upper}_VERSION |
| VERSION_VAR ${module_upper}_VERSION) |
| |
| endif() |
| else() |
| execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" |
| "import ${module_lower} as n" |
| RESULT_VARIABLE __result |
| OUTPUT_VARIABLE __output |
| ERROR_QUIET |
| OUTPUT_STRIP_TRAILING_WHITESPACE) |
| if(NOT __result) |
| set(${module_upper}_FOUND ON) |
| endif() |
| message(STATUS "Found Python __FUTURE__") |
| endif() |
| |
| |
| else() |
| message(STATUS "Python interpreter not found. To find ${module} you need the Python interpreter.") |
| endif() |
| |
| |
| # Set variables in parent scope |
| if(${module_upper}_FOUND) |
| set(${module_upper}_FOUND ON PARENT_SCOPE) |
| if (NOT ${module} STREQUAL "__future__") |
| set(${module_upper}_VERSION ${${module_upper}_VERSION} PARENT_SCOPE) |
| set(${module_upper}_VERSION_MAJOR ${${module_upper}_VERSION_MAJOR} PARENT_SCOPE) |
| set(${module_upper}_VERSION_MINOR ${${module_upper}_VERSION_MINOR} PARENT_SCOPE) |
| set(${module_upper}_VERSION_PATCH ${${module_upper}_VERSION_PATCH} PARENT_SCOPE) |
| set(${module_upper}_VERSION_DECIMAL ${${module_upper}_VERSION_DECIMAL} PARENT_SCOPE) |
| endif() |
| endif() |
| |
| # Clear variables |
| osqp_clear_vars(__result __output __values __ver_check) |
| |
| endfunction(find_python_module) |