From 60d7acb4fc8d09e8996c0a675d4f6dfae3bf0a10 Mon Sep 17 00:00:00 2001 From: Hilton Bristow <hilton.bristow@gmail.com> Date: Tue, 12 Mar 2013 12:26:49 +1000 Subject: [PATCH] Added Windows functionality to FindMatlab. Untested --- cmake/OpenCVFindMatlab.cmake | 60 ++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/cmake/OpenCVFindMatlab.cmake b/cmake/OpenCVFindMatlab.cmake index d18742314..391eae718 100644 --- a/cmake/OpenCVFindMatlab.cmake +++ b/cmake/OpenCVFindMatlab.cmake @@ -36,6 +36,9 @@ MACRO(locate_matlab_root) foreach (DIR_ ${SEARCH_DIRS_}) file(GLOB MATLAB_ROOT_DIR ${DIR_}/*matlab*) if (MATLAB_ROOT_DIR) + list(SORT MATLAB_ROOT_DIR) + list(REVERSE MATLAB_ROOT_DIR) + list(GET MATLAB_ROOT_DIR 0 MATLAB_ROOT_DIR) break() endif() endforeach() @@ -47,12 +50,30 @@ MACRO(locate_matlab_root) foreach (DIR_ ${SEARCH_DIRS_}) file(GLOB MATLAB_ROOT_DIR ${DIR_}/*matlab*) if (MATLAB_ROOT_DIR) + list(SORT MATLAB_ROOT_DIR) + list(REVERSE MATLAB_ROOT_DIR) + list(GET MATLAB_ROOT_DIR 0 MATLAB_ROOT_DIR) break() endif() endforeach() # --- WINDOWS --- elseif (WIN32) + # query the registry + set(REG_ROOTS_ "HKEY_LOCAL_MACHINE" "HKEY_CURRENT_USER") + foreach(REG_ROOT_ REG_ROOTS_) + execute_process(COMMAND reg query ${REG_ROOT_}\\SOFTWARE\\MathWorks\\MATLAB /f * /k OUTPUT_VARIABLE VERSIONS_) + if (VERSIONS_) + # sort in order from highest to lowest + list(SORT VERSIONS_) + list(REVERSE VERSIONS_) + list(GET VERSIONS_ 0 VERSION_) + get_filename_component(MATLAB_ROOT_DIR [${REG_ROOT_}\\SOFTWARE\\MathWorks\\MATLAB\\${VERSION_};Install_Dir] ABSOLUTE PATH) + if (MATLAB_ROOT_DIR) + break() + endif() + endif() + endforeach() endif() # unset local variables unset(SEARCH_DIRS_) @@ -67,30 +88,31 @@ endMACRO() # (include directory and libraries) under the root. If everything is found, # sets the variable MATLAB_FOUND to TRUE MACRO(locate_matlab_components MATLAB_ROOT_DIR) + # get the mex extension if (UNIX) - # get the mex extension execute_process(COMMAND ${MATLAB_ROOT_DIR}/bin/mexext OUTPUT_VARIABLE MATLAB_MEXEXT) - string(STRIP ${MATLAB_MEXEXT} MATLAB_MEXEXT) - string(REPLACE "mex" "" MATLAB_ARCH ${MATLAB_MEXEXT}) - - # get the path to the libraries - set(MATLAB_LIBRARY_DIRS ${MATLAB_ROOT_DIR}/bin/${MATLAB_ARCH}) - - # get the libraries - find_library(MATLAB_LIB_MX mx PATHS ${MATLAB_LIBRARY_DIRS} NO_DEFAULT_PATH) - find_library(MATLAB_LIB_MEX mex PATHS ${MATLAB_LIBRARY_DIRS} NO_DEFAULT_PATH) - find_library(MATLAB_LIB_MAT mat PATHS ${MATLAB_LIBRARY_DIRS} NO_DEFAULT_PATH) - set(MATLAB_LIBS ${MATLAB_LIB_MX} ${MATLAB_LIB_MEX} ${MATLAB_LIB_MAT}) - - # get the include path - find_path(MATLAB_INCLUDE_DIRS mex.h ${MATLAB_ROOT_DIR}/extern/include) - - # get the mex shell script - find_file(MATLAB_MEX_SCRIPT NAMES mex mex.bat PATHS ${MATLAB_ROOT_DIR}/bin NO_DEFAULT_PATH) - elseif (WIN32) + execute_process(COMMAND ${MATLAB_ROOT_DIR}/bin/mexext.bat OUTPUT_VARIABLE MATLAB_MEXEXT) endif() + + string(STRIP ${MATLAB_MEXEXT} MATLAB_MEXEXT) + string(REPLACE "mex" "" MATLAB_ARCH ${MATLAB_MEXEXT}) + # get the path to the libraries + set(MATLAB_LIBRARY_DIRS ${MATLAB_ROOT_DIR}/bin/${MATLAB_ARCH}) + + # get the libraries + find_library(MATLAB_LIB_MX mx PATHS ${MATLAB_LIBRARY_DIRS} NO_DEFAULT_PATH) + find_library(MATLAB_LIB_MEX mex PATHS ${MATLAB_LIBRARY_DIRS} NO_DEFAULT_PATH) + find_library(MATLAB_LIB_MAT mat PATHS ${MATLAB_LIBRARY_DIRS} NO_DEFAULT_PATH) + set(MATLAB_LIBS ${MATLAB_LIB_MX} ${MATLAB_LIB_MEX} ${MATLAB_LIB_MAT}) + + # get the include path + find_path(MATLAB_INCLUDE_DIRS mex.h ${MATLAB_ROOT_DIR}/extern/include) + + # get the mex shell script + find_file(MATLAB_MEX_SCRIPT NAMES mex mex.bat PATHS ${MATLAB_ROOT_DIR}/bin NO_DEFAULT_PATH) + # verify that everything has been found successfully if (MATLAB_LIB_MX AND MATLAB_LIB_MEX AND MATLAB_LIB_MAT AND MATLAB_INCLUDE_DIRS AND MATLAB_MEX_SCRIPT) set(MATLAB_FOUND TRUE)