summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-01-17 14:34:36 (GMT)
committerKitware Robot <kwrobot@kitware.com>2024-01-17 14:34:59 (GMT)
commit10131f2c53495893eb63356b257a60558c617fdc (patch)
tree60c02c07777859855c0927594f16e7121b020c82 /Modules
parent69b562c8add4693862085c5700a9e66a5d25a361 (diff)
parent42fbe01ebaa3802a99fe2a03c9b98b17d24d0704 (diff)
downloadCMake-10131f2c53495893eb63356b257a60558c617fdc.zip
CMake-10131f2c53495893eb63356b257a60558c617fdc.tar.gz
CMake-10131f2c53495893eb63356b257a60558c617fdc.tar.bz2
Merge topic 'matlab-win'
42fbe01eba FindMatlab: Accept long version in matlab_get_release_name_from_version c608adc236 FindMatlab: Fix major.minor version lookups in Windows Registry Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !9148
Diffstat (limited to 'Modules')
-rw-r--r--Modules/FindMatlab.cmake114
1 files changed, 53 insertions, 61 deletions
diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake
index c5379d5..24703a3 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,26 +474,21 @@ 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})
- else()
- list(APPEND matlabs_from_registry ${match})
+ 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"
+ )
+
+ _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()
@@ -560,42 +544,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}")
@@ -1412,19 +1412,11 @@ function(_Matlab_VersionInfoXML matlab_root _version)
set(_XMLfile ${matlab_root}/VersionInfo.xml)
if(EXISTS ${_XMLfile})
-
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)
- set(_ver "${CMAKE_MATCH_1}")
- endif()
+ # parses "<version>23.2.0.2365128</version>"
+ if(versioninfo_string MATCHES "<version>([0-9]+(\\.[0-9]+)+)</version>")
+ set(_ver "${CMAKE_MATCH_1}")
endif()
endif()