mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-07 14:20:06 -06:00
Merge topic 'findmatlab'
103dbb2fd2FindMatlab: Windows -wait is only for -r, not -batch1932ae0284FindMatlab: refactor: use string(APPENDc4cacdc7ebFindMatlab: use modern foreach()af05544c49FindMatlab: document function input/output257a3e870eFindMatlab: add Matlab_VERSION and document. Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !8286
This commit is contained in:
@@ -137,6 +137,12 @@ Result variables
|
||||
``Matlab_FOUND``
|
||||
``TRUE`` if the Matlab installation is found, ``FALSE``
|
||||
otherwise. All variable below are defined if Matlab is found.
|
||||
``Matlab_VERSION``
|
||||
.. versionadded:: 3.27
|
||||
|
||||
the numerical version (e.g. 9.13) of Matlab found. Not to be confused with
|
||||
Matlab release name (e.g. R2022b) that can be obtained with
|
||||
:command:`matlab_get_release_name_from_version`.
|
||||
``Matlab_ROOT_DIR``
|
||||
the final root of the Matlab installation determined by the FindMatlab
|
||||
module.
|
||||
@@ -336,7 +342,14 @@ endif()
|
||||
#[=======================================================================[.rst:
|
||||
.. command:: matlab_get_version_from_release_name
|
||||
|
||||
Returns the version of Matlab (17.58) from a release name (R2017k)
|
||||
.. code-block:: cmake
|
||||
|
||||
matlab_get_version_from_release_name(release version)
|
||||
|
||||
* Input: ``release`` is the release name (R2022b)
|
||||
* Output: ``version`` is the version of Matlab (9.13)
|
||||
|
||||
Returns the version of Matlab from a release name
|
||||
#]=======================================================================]
|
||||
macro(matlab_get_version_from_release_name release_name version_name)
|
||||
|
||||
@@ -353,13 +366,17 @@ macro(matlab_get_version_from_release_name release_name version_name)
|
||||
endmacro()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
.. command:: matlab_get_release_name_from_version
|
||||
|
||||
Returns the release name (R2017k) from the version of Matlab (17.58)
|
||||
.. code-block:: cmake
|
||||
|
||||
matlab_get_release_name_from_version(version release_name)
|
||||
|
||||
* Input: ``version`` is the version of Matlab (9.13)
|
||||
* Output: ``release_name`` is the release name (R2022b)
|
||||
|
||||
Returns the release name from the version of Matlab
|
||||
#]=======================================================================]
|
||||
macro(matlab_get_release_name_from_version version release_name)
|
||||
|
||||
@@ -370,7 +387,7 @@ macro(matlab_get_release_name_from_version version release_name)
|
||||
set(${release_name} ${CMAKE_MATCH_1})
|
||||
break()
|
||||
endif()
|
||||
endforeach(_var)
|
||||
endforeach()
|
||||
|
||||
unset(_var)
|
||||
unset(_matched)
|
||||
@@ -381,10 +398,7 @@ macro(matlab_get_release_name_from_version version release_name)
|
||||
endmacro()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# extracts all the supported release names (R2017k...) of Matlab
|
||||
# extracts all the supported release names (R2022b...) of Matlab
|
||||
# internal use
|
||||
macro(matlab_get_supported_releases list_releases)
|
||||
set(${list_releases})
|
||||
@@ -395,7 +409,7 @@ macro(matlab_get_supported_releases list_releases)
|
||||
endif()
|
||||
unset(_matched)
|
||||
unset(CMAKE_MATCH_1)
|
||||
endforeach(_var)
|
||||
endforeach()
|
||||
unset(_var)
|
||||
endmacro()
|
||||
|
||||
@@ -412,7 +426,7 @@ macro(matlab_get_supported_versions list_versions)
|
||||
endif()
|
||||
unset(_matched)
|
||||
unset(CMAKE_MATCH_1)
|
||||
endforeach(_var)
|
||||
endforeach()
|
||||
unset(_var)
|
||||
endmacro()
|
||||
|
||||
@@ -420,8 +434,15 @@ endmacro()
|
||||
#[=======================================================================[.rst:
|
||||
.. command:: matlab_extract_all_installed_versions_from_registry
|
||||
|
||||
This function parses the registry and founds the Matlab versions that are
|
||||
installed. The found versions are returned in `matlab_versions`.
|
||||
.. code-block:: cmake
|
||||
|
||||
matlab_extract_all_installed_versions_from_registry(win64 matlab_versions)
|
||||
|
||||
* Input: ``win64`` is a boolean to search for the 64 bit version of Matlab
|
||||
* Output: ``matlab_versions`` is a list of all the versions of Matlab found
|
||||
|
||||
This function parses the Windows registry and founds the Matlab versions that
|
||||
are installed. The found versions are returned in `matlab_versions`.
|
||||
Set `win64` to `TRUE` if the 64 bit version of Matlab should be looked for
|
||||
The returned list contains all versions under
|
||||
``HKLM\\SOFTWARE\\Mathworks\\MATLAB`` and
|
||||
@@ -504,31 +525,6 @@ macro(extract_matlab_versions_from_registry_brute_force matlab_versions)
|
||||
set(matlab_supported_versions)
|
||||
matlab_get_supported_versions(matlab_supported_versions)
|
||||
|
||||
|
||||
# this is a manual population of the versions we want to look for
|
||||
# this can be done as is, but preferably with the call to
|
||||
# matlab_get_supported_versions and variable
|
||||
|
||||
# populating the versions we want to look for
|
||||
# set(matlab_supported_versions)
|
||||
|
||||
# # Matlab 7
|
||||
# set(matlab_major 7)
|
||||
# foreach(current_matlab_minor RANGE 4 20)
|
||||
# list(APPEND matlab_supported_versions "${matlab_major}.${current_matlab_minor}")
|
||||
# endforeach(current_matlab_minor)
|
||||
|
||||
# # Matlab 8
|
||||
# set(matlab_major 8)
|
||||
# foreach(current_matlab_minor RANGE 0 5)
|
||||
# list(APPEND matlab_supported_versions "${matlab_major}.${current_matlab_minor}")
|
||||
# endforeach(current_matlab_minor)
|
||||
|
||||
# # taking into account the possible additional versions provided by the user
|
||||
# if(DEFINED MATLAB_ADDITIONAL_VERSIONS)
|
||||
# list(APPEND matlab_supported_versions MATLAB_ADDITIONAL_VERSIONS)
|
||||
# endif()
|
||||
|
||||
# we order from more recent to older
|
||||
if(matlab_supported_versions)
|
||||
list(REMOVE_DUPLICATES matlab_supported_versions)
|
||||
@@ -540,8 +536,6 @@ macro(extract_matlab_versions_from_registry_brute_force matlab_versions)
|
||||
endmacro()
|
||||
|
||||
|
||||
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
.. command:: matlab_get_all_valid_matlab_roots_from_registry
|
||||
|
||||
@@ -551,16 +545,12 @@ endmacro()
|
||||
``(type,version_number,matlab_root_path)``, where ``type``
|
||||
indicates either ``MATLAB`` or ``MCR``.
|
||||
|
||||
::
|
||||
.. code-block:: cmake
|
||||
|
||||
matlab_get_all_valid_matlab_roots_from_registry(
|
||||
matlab_versions
|
||||
matlab_roots)
|
||||
matlab_get_all_valid_matlab_roots_from_registry(matlab_versions matlab_roots)
|
||||
|
||||
``matlab_versions``
|
||||
the versions of each of the Matlab or MCR installations
|
||||
``matlab_roots``
|
||||
the location of each of the Matlab or MCR installations
|
||||
* Input: ``matlab_versions`` of each of the Matlab or MCR installations
|
||||
* Output: ``matlab_roots`` location of each of the Matlab or MCR installations
|
||||
#]=======================================================================]
|
||||
function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_roots)
|
||||
|
||||
@@ -570,7 +560,7 @@ function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_
|
||||
|
||||
set(_matlab_roots_list )
|
||||
# check for Matlab installations
|
||||
foreach(_matlab_current_version ${matlab_versions})
|
||||
foreach(_matlab_current_version IN LISTS matlab_versions)
|
||||
get_filename_component(
|
||||
current_MATLAB_ROOT
|
||||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${_matlab_current_version};MATLABROOT]"
|
||||
@@ -583,7 +573,7 @@ function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_
|
||||
endforeach()
|
||||
|
||||
# Check for MCR installations
|
||||
foreach(_matlab_current_version ${matlab_versions})
|
||||
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]"
|
||||
@@ -599,7 +589,7 @@ function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_
|
||||
endforeach()
|
||||
|
||||
# Check for old MCR installations
|
||||
foreach(_matlab_current_version ${matlab_versions})
|
||||
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]"
|
||||
@@ -623,16 +613,12 @@ endfunction()
|
||||
This function should not be called before the appropriate Matlab root has
|
||||
been found.
|
||||
|
||||
::
|
||||
.. code-block:: cmake
|
||||
|
||||
matlab_get_mex_suffix(
|
||||
matlab_root
|
||||
mex_suffix)
|
||||
matlab_get_mex_suffix(matlab_root mex_suffix)
|
||||
|
||||
``matlab_root``
|
||||
the root of the Matlab/MCR installation
|
||||
``mex_suffix``
|
||||
the variable name in which the suffix will be returned.
|
||||
* Input: ``matlab_root`` root of Matlab/MCR install e.g. ``Matlab_ROOT_DIR``
|
||||
* Output: ``mex_suffix`` variable name in which the suffix will be returned.
|
||||
#]=======================================================================]
|
||||
function(matlab_get_mex_suffix matlab_root mex_suffix)
|
||||
|
||||
@@ -710,8 +696,6 @@ function(matlab_get_mex_suffix matlab_root mex_suffix)
|
||||
endfunction()
|
||||
|
||||
|
||||
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
.. command:: matlab_get_version_from_matlab_run
|
||||
|
||||
@@ -719,16 +703,12 @@ endfunction()
|
||||
version. If the path provided for the Matlab installation points to an MCR
|
||||
installation, the version is extracted from the installed files.
|
||||
|
||||
::
|
||||
.. code-block:: cmake
|
||||
|
||||
matlab_get_version_from_matlab_run(
|
||||
matlab_binary_path
|
||||
matlab_list_versions)
|
||||
matlab_get_version_from_matlab_run(matlab_binary_path matlab_list_versions)
|
||||
|
||||
``matlab_binary_path``
|
||||
the location of the `matlab` binary executable
|
||||
``matlab_list_versions``
|
||||
the version extracted from Matlab
|
||||
* Input: ``matlab_binary_path`` path of the `matlab` binary executable
|
||||
* Output: ``matlab_list_versions`` the version extracted from Matlab
|
||||
#]=======================================================================]
|
||||
function(matlab_get_version_from_matlab_run matlab_binary_program matlab_list_versions)
|
||||
|
||||
@@ -898,7 +878,7 @@ endfunction()
|
||||
non 0 failure). Additional arguments accepted by :command:`add_test` can be
|
||||
passed through ``TEST_ARGS`` (eg. ``CONFIGURATION <config> ...``).
|
||||
|
||||
::
|
||||
.. code-block:: cmake
|
||||
|
||||
matlab_add_unit_test(
|
||||
NAME <name>
|
||||
@@ -912,7 +892,7 @@ endfunction()
|
||||
[NO_UNITTEST_FRAMEWORK]
|
||||
)
|
||||
|
||||
The function arguments are:
|
||||
Function Parameters:
|
||||
|
||||
``NAME``
|
||||
name of the unittest in ctest.
|
||||
@@ -1010,7 +990,7 @@ endfunction()
|
||||
for the MEX file. Remaining arguments of the call are passed to the
|
||||
:command:`add_library` or :command:`add_executable` command.
|
||||
|
||||
::
|
||||
.. code-block:: cmake
|
||||
|
||||
matlab_add_mex(
|
||||
NAME <name>
|
||||
@@ -1025,6 +1005,8 @@ endfunction()
|
||||
[...]
|
||||
)
|
||||
|
||||
Function Parameters:
|
||||
|
||||
``NAME``
|
||||
name of the target.
|
||||
``SRC``
|
||||
@@ -1209,18 +1191,17 @@ function(matlab_add_mex)
|
||||
|
||||
if (MSVC)
|
||||
|
||||
set(_link_flags "${_link_flags} /EXPORT:mexFunction")
|
||||
string(APPEND _link_flags " /EXPORT:mexFunction")
|
||||
if(NOT Matlab_VERSION_STRING VERSION_LESS "9.1") # For 9.1 (R2016b) and newer, export version
|
||||
set(_link_flags "${_link_flags} /EXPORT:mexfilerequiredapiversion")
|
||||
string(APPEND _link_flags " /EXPORT:mexfilerequiredapiversion")
|
||||
endif()
|
||||
|
||||
set_property(TARGET ${${prefix}_NAME} APPEND PROPERTY LINK_FLAGS ${_link_flags})
|
||||
|
||||
endif() # No other compiler currently supported on Windows.
|
||||
|
||||
set_target_properties(${${prefix}_NAME}
|
||||
PROPERTIES
|
||||
DEFINE_SYMBOL "DLL_EXPORT_SYM=__declspec(dllexport)")
|
||||
set_property(TARGET ${${prefix}_NAME} PROPERTY
|
||||
DEFINE_SYMBOL "DLL_EXPORT_SYM=__declspec(dllexport)")
|
||||
|
||||
else()
|
||||
|
||||
@@ -1246,7 +1227,7 @@ function(matlab_add_mex)
|
||||
|
||||
if(Matlab_HAS_CPP_API)
|
||||
list(APPEND _ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/cppMexFunction.map) # This one doesn't exist on Linux
|
||||
set(_link_flags "${_link_flags} -Wl,-U,_mexCreateMexFunction -Wl,-U,_mexDestroyMexFunction -Wl,-U,_mexFunctionAdapter")
|
||||
string(APPEND _link_flags " -Wl,-U,_mexCreateMexFunction -Wl,-U,_mexDestroyMexFunction -Wl,-U,_mexFunctionAdapter")
|
||||
# On MacOS, the MEX command adds the above, without it the link breaks
|
||||
# because we indiscriminately use "cppMexFunction.map" even for C API MEX-files.
|
||||
endif()
|
||||
@@ -1261,14 +1242,14 @@ function(matlab_add_mex)
|
||||
target_compile_options(${${prefix}_NAME} PRIVATE "-pthread")
|
||||
endif()
|
||||
|
||||
set(_link_flags "${_link_flags} -Wl,--as-needed")
|
||||
string(APPEND _link_flags " -Wl,--as-needed")
|
||||
|
||||
set(_export_flag_name --version-script)
|
||||
|
||||
endif()
|
||||
|
||||
foreach(_file ${_ver_map_files})
|
||||
set(_link_flags "${_link_flags} -Wl,${_export_flag_name},${_file}")
|
||||
foreach(_file IN LISTS _ver_map_files)
|
||||
string(APPEND _link_flags " -Wl,${_export_flag_name},${_file}")
|
||||
endforeach()
|
||||
|
||||
# The `mex` command doesn't add this define. It is specified here in order
|
||||
@@ -2020,11 +2001,13 @@ _Matlab_add_imported_target(MAT mat)
|
||||
_Matlab_add_imported_target(ENGINE MatlabEngine)
|
||||
_Matlab_add_imported_target(DATAARRAY MatlabDataArray)
|
||||
|
||||
set(Matlab_VERSION ${Matlab_VERSION_STRING})
|
||||
|
||||
find_package_handle_standard_args(
|
||||
Matlab
|
||||
FOUND_VAR Matlab_FOUND
|
||||
REQUIRED_VARS ${_matlab_required_variables}
|
||||
VERSION_VAR Matlab_VERSION_STRING
|
||||
VERSION_VAR Matlab_VERSION
|
||||
HANDLE_COMPONENTS)
|
||||
|
||||
unset(_matlab_required_variables)
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
# -P FindMatlab_TestsRedirect.cmake
|
||||
|
||||
set(Matlab_UNIT_TESTS_CMD -nosplash -nodesktop -nodisplay ${Matlab_ADDITIONAL_STARTUP_OPTIONS})
|
||||
if(WIN32)
|
||||
set(Matlab_UNIT_TESTS_CMD ${Matlab_UNIT_TESTS_CMD} -wait)
|
||||
if(WIN32 AND maut_BATCH_OPTION STREQUAL "-r")
|
||||
list(APPEND Matlab_UNIT_TESTS_CMD -wait)
|
||||
endif()
|
||||
|
||||
if(NOT test_timeout)
|
||||
|
||||
Reference in New Issue
Block a user