From 8dcd14bb8725385a03418f030c7f4f77a9b4309f Mon Sep 17 00:00:00 2001 From: scivision Date: Thu, 12 Jan 2023 08:37:34 -0500 Subject: FindMatlab: simplify mexext find logic This eliminates an explicit for() loop --- Modules/FindMatlab.cmake | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) (limited to 'Modules/FindMatlab.cmake') diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake index 07a9adf2e3..9459e749bb 100644 --- a/Modules/FindMatlab.cmake +++ b/Modules/FindMatlab.cmake @@ -636,36 +636,20 @@ endfunction() #]=======================================================================] function(matlab_get_mex_suffix matlab_root mex_suffix) - # todo setup the extension properly. Currently I do not know if this is - # sufficient for all win32 distributions. - # there is also CMAKE_EXECUTABLE_SUFFIX that could be tweaked + # find_program does not consider script suffix .bat for Matlab mexext.bat on Windows set(mexext_suffix "") if(WIN32) - list(APPEND mexext_suffix ".bat") + set(mexext_suffix ".bat") endif() - # we first try without suffix, since cmake does not understand a list with - # one empty string element find_program( Matlab_MEXEXTENSIONS_PROG - NAMES mexext + NAMES mexext mexext${mexext_suffix} PATHS ${matlab_root}/bin DOC "Matlab MEX extension provider" NO_DEFAULT_PATH ) - foreach(current_mexext_suffix IN LISTS mexext_suffix) - if(NOT DEFINED Matlab_MEXEXTENSIONS_PROG OR NOT Matlab_MEXEXTENSIONS_PROG) - # this call should populate the cache automatically - find_program( - Matlab_MEXEXTENSIONS_PROG - "mexext${current_mexext_suffix}" - PATHS ${matlab_root}/bin - DOC "Matlab MEX extension provider" - NO_DEFAULT_PATH - ) - endif() - endforeach(current_mexext_suffix) if(MATLAB_FIND_DEBUG) message(STATUS "[MATLAB] Determining mex files extensions from '${matlab_root}/bin' with program '${Matlab_MEXEXTENSIONS_PROG}'") endif() -- cgit v1.2.1 From 1bc9b0f256dc65d43a994ac2307775151f194c72 Mon Sep 17 00:00:00 2001 From: scivision Date: Thu, 12 Jan 2023 09:37:46 -0500 Subject: FindMatlab: accommodate Matlab running under Rosetta fixes #24312 --- Modules/FindMatlab.cmake | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'Modules/FindMatlab.cmake') diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake index 9459e749bb..8bb402cd0b 100644 --- a/Modules/FindMatlab.cmake +++ b/Modules/FindMatlab.cmake @@ -655,7 +655,7 @@ function(matlab_get_mex_suffix matlab_root mex_suffix) endif() # the program has been found? - if((NOT Matlab_MEXEXTENSIONS_PROG) OR (NOT EXISTS ${Matlab_MEXEXTENSIONS_PROG})) + if(NOT Matlab_MEXEXTENSIONS_PROG) if(MATLAB_FIND_DEBUG) message(WARNING "[MATLAB] Cannot found mexext program. Matlab root is ${matlab_root}") endif() @@ -706,7 +706,6 @@ function(matlab_get_mex_suffix matlab_root mex_suffix) message(STATUS "[MATLAB] '${Matlab_MEXEXTENSIONS_PROG}' : determined extension '${_matlab_mex_extension}' and error string is '${_matlab_mex_extension_error}'") endif() - unset(Matlab_MEXEXTENSIONS_PROG CACHE) set(${mex_suffix} ${_matlab_mex_extension} PARENT_SCOPE) endfunction() @@ -1747,12 +1746,24 @@ else() set(_matlab_64Build TRUE) endif() + +if(NOT DEFINED Matlab_MEX_EXTENSION) + set(_matlab_mex_extension "") + matlab_get_mex_suffix("${Matlab_ROOT_DIR}" _matlab_mex_extension) + + # This variable goes to the cache. + set(Matlab_MEX_EXTENSION ${_matlab_mex_extension} CACHE STRING "Extensions for the mex targets (automatically given by Matlab)") + unset(_matlab_mex_extension) +endif() + if(APPLE) set(_matlab_bin_prefix "mac") # i should be for intel set(_matlab_bin_suffix_32bits "i") - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" AND Matlab_MEX_EXTENSION MATCHES "a64$") + # native Apple Silicon Matlab set(_matlab_bin_suffix_64bits "a64") else() + # Intel Mac OR Apple Silicon using Rosetta for Matlab set(_matlab_bin_suffix_64bits "i64") endif() elseif(UNIX) @@ -1796,16 +1807,6 @@ endif() unset(_matlab_64Build) -if(NOT DEFINED Matlab_MEX_EXTENSION) - set(_matlab_mex_extension "") - matlab_get_mex_suffix("${Matlab_ROOT_DIR}" _matlab_mex_extension) - - # This variable goes to the cache. - set(Matlab_MEX_EXTENSION ${_matlab_mex_extension} CACHE STRING "Extensions for the mex targets (automatically given by Matlab)") - unset(_matlab_mex_extension) -endif() - - if(MATLAB_FIND_DEBUG) message(STATUS "[MATLAB] [DEBUG]_matlab_lib_prefix_for_search = ${_matlab_lib_prefix_for_search} | _matlab_lib_dir_for_search = ${_matlab_lib_dir_for_search}") endif() -- cgit v1.2.1