123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- # - this module looks for Matlab
- # Defines:
- # MATLAB_INCLUDE_DIR: include path for mex.h, engine.h
- # MATLAB_LIBRARIES: required libraries: libmex, etc
- # MATLAB_MEX_LIBRARY: path to libmex.lib
- # MATLAB_MX_LIBRARY: path to libmx.lib
- # MATLAB_MAT_LIBRARY: path to libmat.lib # added
- # MATLAB_ENG_LIBRARY: path to libeng.lib
- # MATLAB_ROOT: path to Matlab's root directory
- # This file is part of Gerardus
- #
- # This is a derivative work of file FindMatlab.cmake released with
- # CMake v2.8, because the original seems to be a bit outdated and
- # doesn't work with my Windows XP and Visual Studio 10 install
- #
- # (Note that the original file does work for Ubuntu Natty)
- #
- # Author: Ramon Casero <rcasero@gmail.com>, Tom Doel
- # Version: 0.2.3
- # $Rev$
- # $Date$
- #
- # The original file was copied from an Ubuntu Linux install
- # /usr/share/cmake-2.8/Modules/FindMatlab.cmake
- #=============================================================================
- # Copyright 2005-2009 Kitware, Inc.
- #
- # Distributed under the OSI-approved BSD License (the "License");
- # see accompanying file Copyright.txt for details.
- #
- # This software is distributed WITHOUT ANY WARRANTY; without even the
- # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- # See the License for more information.
- #=============================================================================
- # (To distribute this file outside of CMake, substitute the full
- # License text for the above reference.)
- SET(MATLAB_FOUND 0)
- IF(WIN32)
- # Search for a version of Matlab available, starting from the most modern one to older versions
- FOREACH(MATVER "7.14" "7.11" "7.17" "7.10" "7.9" "7.8" "7.7" "7.6" "7.5" "7.4" "8.0" "8.1" "8.2" "8.3" "8.4" "8.5")
- IF((NOT DEFINED MATLAB_ROOT)
- OR ("${MATLAB_ROOT}" STREQUAL "")
- OR ("${MATLAB_ROOT}" STREQUAL "/registry"))
- GET_FILENAME_COMPONENT(MATLAB_ROOT
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${MATVER};MATLABROOT]"
- ABSOLUTE)
- SET(MATLAB_VERSION ${MATVER})
- ENDIF((NOT DEFINED MATLAB_ROOT)
- OR ("${MATLAB_ROOT}" STREQUAL "")
- OR ("${MATLAB_ROOT}" STREQUAL "/registry"))
- ENDFOREACH(MATVER)
- # Directory name depending on whether the Windows architecture is 32
- # bit or 64 bit
- set(CMAKE_SIZEOF_VOID_P 8) # Note: For some weird reason this variable is undefined in my system...
- IF(CMAKE_SIZEOF_VOID_P MATCHES "4")
- SET(WINDIR "win32")
- ELSEIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
- SET(WINDIR "win64")
- ELSE(CMAKE_SIZEOF_VOID_P MATCHES "4")
- MESSAGE(FATAL_ERROR
- "CMAKE_SIZEOF_VOID_P (${CMAKE_SIZEOF_VOID_P}) doesn't indicate a valid platform")
- ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "4")
- # Folder where the MEX libraries are, depending of the Windows compiler
- IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
- SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc60")
- ELSEIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 7")
- # Assume people are generally using Visual Studio 7.1,
- # if using 7.0 need to link to: ../extern/lib/${WINDIR}/microsoft/msvc70
- SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc71")
- # SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc70")
- ELSEIF(${CMAKE_GENERATOR} MATCHES "Borland")
- # Assume people are generally using Borland 5.4,
- # if using 7.0 need to link to: ../extern/lib/${WINDIR}/microsoft/msvc70
- SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc54")
- # SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc50")
- # SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc51")
- ELSEIF(${CMAKE_GENERATOR} MATCHES "Visual Studio*")
- # If the compiler is Visual Studio, but not any of the specific
- # versions above, we try our luck with the microsoft directory
- SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/")
- ELSE(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
- MESSAGE(FATAL_ERROR "Generator not compatible: ${CMAKE_GENERATOR}")
- ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
- # Get paths to the Matlab MEX libraries
- FIND_LIBRARY(MATLAB_MEX_LIBRARY
- libmex
- ${MATLAB_LIBRARIES_DIR}
- )
- FIND_LIBRARY(MATLAB_MX_LIBRARY
- libmx
- ${MATLAB_LIBRARIES_DIR}
- )
- FIND_LIBRARY(MATLAB_MAT_LIBRARY
- libmat
- ${MATLAB_LIBRARIES_DIR}
- )
- FIND_LIBRARY(MATLAB_ENG_LIBRARY
- libeng
- ${MATLAB_LIBRARIES_DIR}
- )
- # Get path to the include directory
- FIND_PATH(MATLAB_INCLUDE_DIR
- "mex.h"
- "${MATLAB_ROOT}/extern/include"
- )
- ELSE(WIN32)
- IF((NOT DEFINED MATLAB_ROOT)
- OR ("${MATLAB_ROOT}" STREQUAL ""))
- # get path to the Matlab root directory
- EXECUTE_PROCESS(
- COMMAND which matlab
- COMMAND xargs readlink
- COMMAND xargs dirname
- COMMAND xargs dirname
- COMMAND xargs echo -n
- OUTPUT_VARIABLE MATLAB_ROOT
- )
- ENDIF((NOT DEFINED MATLAB_ROOT)
- OR ("${MATLAB_ROOT}" STREQUAL ""))
- # Check if this is a Mac
- IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- SET(LIBRARY_EXTENSION .dylib)
- # If this is a Mac and the attempts to find MATLAB_ROOT have so far failed,
- # we look in the applications folder
- IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
- # Search for a version of Matlab available, starting from the most modern one to older versions
- FOREACH(MATVER "R2015b" "R2015a" "R2014b" "R2014a" "R2014a" "R2013b" "R2013a" "R2012b" "R2012a" "R2011b" "R2011a" "R2010b" "R2010a" "R2009b" "R2009a" "R2008b")
- IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
- IF(EXISTS /Applications/MATLAB_${MATVER}.app)
- SET(MATLAB_ROOT /Applications/MATLAB_${MATVER}.app)
- ENDIF(EXISTS /Applications/MATLAB_${MATVER}.app)
- ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
- ENDFOREACH(MATVER)
- ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
- ELSE(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- SET(LIBRARY_EXTENSION .so)
- ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- # Get path to the MEX libraries
- EXECUTE_PROCESS(
- #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmex${LIBRARY_EXTENSION} # Peter
- COMMAND find "${MATLAB_ROOT}/bin" -name libmex${LIBRARY_EXTENSION} # Standard
- COMMAND xargs echo -n
- OUTPUT_VARIABLE MATLAB_MEX_LIBRARY
- )
- EXECUTE_PROCESS(
- #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmx${LIBRARY_EXTENSION} # Peter
- COMMAND find "${MATLAB_ROOT}/bin" -name libmx${LIBRARY_EXTENSION} # Standard
- COMMAND xargs echo -n
- OUTPUT_VARIABLE MATLAB_MX_LIBRARY
- )
- EXECUTE_PROCESS(
- #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmat${LIBRARY_EXTENSION} # Peter
- COMMAND find "${MATLAB_ROOT}/bin" -name libmat${LIBRARY_EXTENSION} # Standard
- COMMAND xargs echo -n
- OUTPUT_VARIABLE MATLAB_MAT_LIBRARY
- )
- EXECUTE_PROCESS(
- #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libeng${LIBRARY_EXTENSION} # Peter
- COMMAND find "${MATLAB_ROOT}/bin" -name libeng${LIBRARY_EXTENSION} # Standard
- COMMAND xargs echo -n
- OUTPUT_VARIABLE MATLAB_ENG_LIBRARY
- )
- # Get path to the include directory
- FIND_PATH(MATLAB_INCLUDE_DIR
- "mex.h"
- PATHS "${MATLAB_ROOT}/extern/include"
- )
- ENDIF(WIN32)
- if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
- set(MATLAB_LIBSTDCPP "-lstdc++")
- endif ()
- # This is common to UNIX and Win32:
- SET(MATLAB_LIBRARIES
- ${MATLAB_LIBSTDCPP}
- ${MATLAB_MAT_LIBRARY}
- ${MATLAB_MEX_LIBRARY}
- ${MATLAB_MX_LIBRARY}
- ${MATLAB_ENG_LIBRARY}
- )
- IF(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES)
- SET(MATLAB_FOUND 1)
- ENDIF(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES)
- MARK_AS_ADVANCED(
- MATLAB_LIBRARIES
- MATLAB_MEX_LIBRARY
- MATLAB_MX_LIBRARY
- MATLAB_ENG_LIBRARY
- MATLAB_INCLUDE_DIR
- MATLAB_FOUND
- MATLAB_ROOT
- )
|