diff options
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/Compiler/LCC-C.cmake | 2 | ||||
-rw-r--r-- | Modules/FindMatlab.cmake | 126 | ||||
-rw-r--r-- | Modules/FindX11.cmake | 12 |
3 files changed, 78 insertions, 62 deletions
diff --git a/Modules/Compiler/LCC-C.cmake b/Modules/Compiler/LCC-C.cmake index 99f791f..52c3bf3 100644 --- a/Modules/Compiler/LCC-C.cmake +++ b/Modules/Compiler/LCC-C.cmake @@ -33,4 +33,4 @@ if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 1.26) set(CMAKE_C17_EXTENSION_COMPILE_OPTION "-std=gnu17") endif() -__compiler_check_default_language_standard(C 1.23 90 1.20 11 1.26 17) +__compiler_check_default_language_standard(C 1.17 89 1.23 99 1.26 17) diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake index b90a45f..609cd4e 100644 --- a/Modules/FindMatlab.cmake +++ b/Modules/FindMatlab.cmake @@ -378,32 +378,21 @@ endmacro() Returns the release name from the version of Matlab #]=======================================================================] -macro(matlab_get_release_name_from_version version release_name) +function(matlab_get_release_name_from_version version release_name) # only the major.minor version is used - string(REGEX MATCH "([0-9]+\\.[0-9]+)" _match ${version}) - if(CMAKE_MATCH_1) - set(short_version ${CMAKE_MATCH_1}) - else() - set(short_version ${version}) - endif() + string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*" "\\1" version "${version}") - set(${release_name} "") foreach(_var IN LISTS MATLAB_VERSIONS_MAPPING) - string(REGEX MATCHALL "(.+)=${short_version}" _matched ${_var}) - if(NOT _matched STREQUAL "") - set(${release_name} ${CMAKE_MATCH_1}) - break() + if(_var MATCHES "(.+)=${version}") + set(${release_name} ${CMAKE_MATCH_1} PARENT_SCOPE) + return() endif() endforeach() - unset(_var) - unset(_matched) - if(${release_name} STREQUAL "") - message(WARNING "[MATLAB] The version ${short_version} is not registered") - endif() + message(WARNING "[MATLAB] The version ${version} is not registered") -endmacro() +endfunction() # extracts all the supported release names (R2022b...) of Matlab @@ -485,24 +474,22 @@ function(matlab_extract_all_installed_versions_from_registry win64 matlab_versio ) if(_reg) - string(REGEX MATCHALL "([0-9]+\\.[0-9]+)" _versions_regex "${_reg}") - foreach(match IN LISTS _versions_regex) - string(REGEX MATCH "([0-9]+\\.[0-9]+)" current_match "${match}") - - if(NOT CMAKE_MATCH_1) - continue() - endif() - - cmake_host_system_information(RESULT _reg - QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Mathworks/${_installation_type}/${CMAKE_MATCH_1}" - VALUE "MATLABROOT" - ) - - _Matlab_VersionInfoXML("${_reg}" _matlab_version_tmp) - if(NOT "${_matlab_version_tmp}" STREQUAL "unknown") - list(APPEND matlabs_from_registry ${_matlab_version_tmp}) + foreach(_match IN LISTS _versions_regex) + if(_match MATCHES "([0-9]+\\.[0-9]+)") + cmake_host_system_information(RESULT _reg + QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Mathworks/${_installation_type}/${CMAKE_MATCH_1}" + VALUE "MATLABROOT" + VIEW ${_view} + ) + + _Matlab_VersionInfoXML("${_reg}" _matlab_version_tmp) + if("${_matlab_version_tmp}" STREQUAL "unknown") + list(APPEND matlabs_from_registry ${_match}) + else() + list(APPEND matlabs_from_registry ${_matlab_version_tmp}) + endif() endif() endforeach() @@ -558,42 +545,58 @@ function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_ # extract_matlab_versions_from_registry_brute_force or # matlab_extract_all_installed_versions_from_registry. + # only the major.minor version is used in Mathworks Windows Registry keys + list(TRANSFORM matlab_versions REPLACE "^([0-9]+\\.[0-9]+).*" "\\1") + set(_matlab_roots_list ) # check for Matlab installations foreach(_matlab_current_version IN LISTS matlab_versions) - get_filename_component( - current_MATLAB_ROOT - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${_matlab_current_version};MATLABROOT]" - ABSOLUTE) + cmake_host_system_information(RESULT current_MATLAB_ROOT + QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Mathworks/MATLAB/${_matlab_current_version}" + VALUE "MATLABROOT" + ) + cmake_path(CONVERT "${current_MATLAB_ROOT}" TO_CMAKE_PATH_LIST current_MATLAB_ROOT) if(IS_DIRECTORY "${current_MATLAB_ROOT}") - list(APPEND _matlab_roots_list "MATLAB" ${_matlab_current_version} ${current_MATLAB_ROOT}) + _Matlab_VersionInfoXML("${current_MATLAB_ROOT}" _matlab_version_tmp) + if("${_matlab_version_tmp}" STREQUAL "unknown") + list(APPEND _matlab_roots_list "MATLAB" ${_matlab_current_version} ${current_MATLAB_ROOT}) + else() + list(APPEND _matlab_roots_list "MATLAB" ${_matlab_version_tmp} ${current_MATLAB_ROOT}) + endif() endif() endforeach() # Check for MCR installations foreach(_matlab_current_version IN LISTS matlab_versions) - get_filename_component( - current_MATLAB_ROOT - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB Runtime\\${_matlab_current_version};MATLABROOT]" - ABSOLUTE) + cmake_host_system_information(RESULT current_MATLAB_ROOT + QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Mathworks/MATLAB Runtime/${_matlab_current_version}" + VALUE "MATLABROOT" + ) + cmake_path(CONVERT "${current_MATLAB_ROOT}" TO_CMAKE_PATH_LIST current_MATLAB_ROOT) # remove the dot string(REPLACE "." "" _matlab_current_version_without_dot "${_matlab_current_version}") if(IS_DIRECTORY "${current_MATLAB_ROOT}") - list(APPEND _matlab_roots_list "MCR" ${_matlab_current_version} "${current_MATLAB_ROOT}/v${_matlab_current_version_without_dot}") + _Matlab_VersionInfoXML("${current_MATLAB_ROOT}" _matlab_version_tmp) + if("${_matlab_version_tmp}" STREQUAL "unknown") + list(APPEND _matlab_roots_list "MCR" ${_matlab_current_version} "${current_MATLAB_ROOT}/v${_matlab_current_version_without_dot}") + else() + list(APPEND _matlab_roots_list "MCR" ${_matlab_version_tmp} "${current_MATLAB_ROOT}/v${_matlab_current_version_without_dot}") + endif() endif() endforeach() # Check for old MCR installations foreach(_matlab_current_version IN LISTS matlab_versions) - get_filename_component( - current_MATLAB_ROOT - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB Compiler Runtime\\${_matlab_current_version};MATLABROOT]" - ABSOLUTE) + cmake_host_system_information(RESULT current_MATLAB_ROOT + QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Mathworks/MATLAB Compiler Runtime/${_matlab_current_version}" + VALUE "MATLABROOT" + ) + cmake_path(CONVERT "${current_MATLAB_ROOT}" TO_CMAKE_PATH_LIST current_MATLAB_ROOT) # remove the dot string(REPLACE "." "" _matlab_current_version_without_dot "${_matlab_current_version}") @@ -1409,20 +1412,11 @@ function(_Matlab_VersionInfoXML matlab_root _version) set(_ver "unknown") set(_XMLfile ${matlab_root}/VersionInfo.xml) - if(NOT EXISTS ${_XMLfile}) - return() - endif() + if(EXISTS ${_XMLfile}) + file(READ ${_XMLfile} versioninfo_string) - file(READ ${_XMLfile} versioninfo_string) - - if(versioninfo_string) # parses "<version>23.2.0.2365128</version>" - string(REGEX MATCH "<version>([0-9]+(\\.[0-9]+)+)</version>" - version_reg_match - ${versioninfo_string} - ) - - if(CMAKE_MATCH_1) + if(versioninfo_string MATCHES "<version>([0-9]+(\\.[0-9]+)+)</version>") set(_ver "${CMAKE_MATCH_1}") endif() endif() @@ -1634,7 +1628,17 @@ set(Matlab_VERSION_STRING "NOTFOUND") set(Matlab_Or_MCR "UNKNOWN") if(_numbers_of_matlab_roots GREATER 0) if(Matlab_FIND_VERSION_EXACT) - list(FIND _matlab_possible_roots ${Matlab_FIND_VERSION} _list_index) + set(_list_index -1) + foreach(_matlab_root_index RANGE 1 ${_numbers_of_matlab_roots} 3) + list(GET _matlab_possible_roots ${_matlab_root_index} _matlab_root_version) + # only the major.minor version is used + string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*" "\\1" _matlab_root_version "${_matlab_root_version}") + if(_matlab_root_version VERSION_EQUAL Matlab_FIND_VERSION) + set(_list_index ${_matlab_root_index}) + break() + endif() + endforeach() + if(_list_index LESS 0) set(_list_index 1) endif() diff --git a/Modules/FindX11.cmake b/Modules/FindX11.cmake index 1047e4f..491ea46 100644 --- a/Modules/FindX11.cmake +++ b/Modules/FindX11.cmake @@ -89,6 +89,7 @@ and also the following more fine grained variables and targets: X11_Xutil_INCLUDE_PATH, X11_Xutil_FOUND, X11::Xutil X11_Xv_INCLUDE_PATH, X11_Xv_LIB, X11_Xv_FOUND, X11::Xv X11_dpms_INCLUDE_PATH, (in X11_Xext_LIB), X11_dpms_FOUND + X11_Xdbe_INCLUDE_PATH, (in X11_Xext_LIB), X11_Xdbe_FOUND X11_XShm_INCLUDE_PATH, (in X11_Xext_LIB), X11_XShm_FOUND X11_Xshape_INCLUDE_PATH, (in X11_Xext_LIB), X11_Xshape_FOUND X11_XSync_INCLUDE_PATH, (in X11_Xext_LIB), X11_XSync_FOUND @@ -121,6 +122,10 @@ and also the following more fine grained variables and targets: ``xcb_shm``, ``xcb_sync``, ``xcb_xf86dri``, ``xcb_xinerama``, ``xcb_xinput``, ``xcb_xrm``, ``xcb_xvmc``, and ``xcb_xv`` libraries. +.. versionadded:: 3.29 + Added coverage of double buffer extension (variables + ``X11_Xdbe_INCLUDE_PATH`` and ``X11_Xdbe_FOUND``). + #]=======================================================================] if (UNIX) @@ -200,6 +205,7 @@ if (UNIX) find_path(X11_Xcomposite_INCLUDE_PATH X11/extensions/Xcomposite.h ${X11_INC_SEARCH_PATH}) find_path(X11_Xcursor_INCLUDE_PATH X11/Xcursor/Xcursor.h ${X11_INC_SEARCH_PATH}) find_path(X11_Xdamage_INCLUDE_PATH X11/extensions/Xdamage.h ${X11_INC_SEARCH_PATH}) + find_path(X11_Xdbe_INCLUDE_PATH X11/extensions/Xdbe.h ${X11_INC_SEARCH_PATH}) find_path(X11_Xdmcp_INCLUDE_PATH X11/Xdmcp.h ${X11_INC_SEARCH_PATH}) find_path(X11_Xext_INCLUDE_PATH X11/extensions/Xext.h ${X11_INC_SEARCH_PATH}) find_path(X11_dpms_INCLUDE_PATH X11/extensions/dpms.h ${X11_INC_SEARCH_PATH}) @@ -643,6 +649,11 @@ if (UNIX) set(X11_Xaw_FOUND TRUE) endif() + if (X11_Xdbe_INCLUDE_PATH) + set(X11_Xdbe_FOUND TRUE) + list(APPEND X11_INCLUDE_DIR ${X11_Xdbe_INCLUDE_PATH}) + endif () + # Most of the X11 headers will be in the same directories, avoid # creating a huge list of duplicates. if (X11_INCLUDE_DIR) @@ -1358,6 +1369,7 @@ if (UNIX) X11_XSync_INCLUDE_PATH X11_Xaw_LIB X11_Xaw_INCLUDE_PATH + X11_Xdbe_INCLUDE_PATH ) set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_SAVE}) set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE}) |