-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFindMatlabLatest.cmake
194 lines (169 loc) · 7.57 KB
/
FindMatlabLatest.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# - 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
# MATLAB_MEX_EXTENSION: appropriate extension to use
# This is a derivative work of file FindMatlab.cmake released with
# CMake v2.8
SET(MATLAB_FOUND 0)
IF(WIN32)
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
# Search default install directory
FILE(GLOB MATLAB_DIRS RELATIVE C:/Program\ Files/MATLAB/ C:/Program\ Files/MATLAB/*)
FOREACH(MATLAB_DIR ${MATLAB_DIRS})
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
IF(EXISTS "C:/Program Files/MATLAB/${MATLAB_DIR}")
SET(MATLAB_ROOT "C:/Program Files/MATLAB/${MATLAB_DIR}")
ENDIF(EXISTS "C:/Program Files/MATLAB/${MATLAB_DIR}")
ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
ENDFOREACH(MATLAB_DIR)
ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
# Search registry for Matlab
FOREACH(MATVER "8.14" "8.13" "8.12" "8.11" "8.10" "8.9" "8.8" "8.7" "8.6" "8.5" "8.4" "8.3" "8.2" "8.1" "8")
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)
ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
# Determine architecture
IF((DEFINED CMAKE_SIZEOF_VOID_P) AND (CMAKE_SIZEOF_VOID_P MATCHES "4"))
SET(MATLAB_ARCH "32")
ELSE((DEFINED CMAKE_SIZEOF_VOID_P) AND (CMAKE_SIZEOF_VOID_P MATCHES "4"))
SET(MATLAB_ARCH "64")
ENDIF((DEFINED CMAKE_SIZEOF_VOID_P) AND (CMAKE_SIZEOF_VOID_P MATCHES "4"))
IF((NOT DEFINED MATLAB_MEX_EXTENSION) OR ("${MATLAB_MEX_EXTENSION}" STREQUAL ""))
SET(MATLAB_MEX_EXTENSION "mexw${MATLAB_ARCH}")
ENDIF((NOT DEFINED MATLAB_MEX_EXTENSION) OR ("${MATLAB_MEX_EXTENSION}" STREQUAL ""))
IF((DEFINED MATLAB_ROOT) AND (NOT "${MATLAB_ROOT}" STREQUAL ""))
# Folder where the MEX libraries are, depending of the Windows compiler
IF((NOT DEFINED MATLAB_LIBRARIES_DIR) OR ("${MATLAB_LIBRARIES_DIR}" STREQUAL ""))
#SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/win${MATLAB_ARCH}/microsoft"
# "${MATLAB_ROOT}/bin/win${MATLAB_ARCH}")
SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/bin/win${MATLAB_ARCH}"
"${MATLAB_ROOT}/extern/lib/win${MATLAB_ARCH}/microsoft")
ENDIF((NOT DEFINED MATLAB_LIBRARIES_DIR) OR ("${MATLAB_LIBRARIES_DIR}" STREQUAL ""))
ENDIF((DEFINED MATLAB_ROOT) AND (NOT "${MATLAB_ROOT}" STREQUAL ""))
ELSEIF(APPLE)
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
# Find location using the 'which' command
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 ""))
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
# Search default install directory
FILE(GLOB MATLAB_DIRS RELATIVE /Applications /Applications/MATLAB_*.app)
FOREACH(MATLAB_DIR ${MATLAB_DIRS})
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
IF(EXISTS /Applications/{MATLAB_DIR})
SET(MATLAB_ROOT /Applications/${MATLAB_DIR})
ENDIF(EXISTS /Applications/${MATLAB_DIR})
ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
ENDFOREACH(MATLAB_DIR)
ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
IF((NOT DEFINED MATLAB_MEX_EXTENSION) OR ("${MATLAB_MEX_EXTENSION}" STREQUAL ""))
SET(MATLAB_MEX_EXTENSION "mexmaci64")
ENDIF((NOT DEFINED MATLAB_MEX_EXTENSION) OR ("${MATLAB_MEX_EXTENSION}" STREQUAL ""))
IF((DEFINED MATLAB_ROOT) AND (NOT "${MATLAB_ROOT}" STREQUAL ""))
# Folder where the MEX libraries are
IF((NOT DEFINED MATLAB_LIBRARIES_DIR) OR ("${MATLAB_LIBRARIES_DIR}" STREQUAL ""))
SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/maci64"
"${MATLAB_ROOT}/bin/maci64")
ENDIF((DEFINED MATLAB_LIBRARIES_DIR) AND (NOT "${MATLAB_LIBRARIES_DIR}" STREQUAL ""))
ENDIF((NOT DEFINED MATLAB_LIBRARIES_DIR) OR ("${MATLAB_LIBRARIES_DIR}" STREQUAL ""))
ELSEIF(UNIX)
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
# Find location using the 'which' command
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 ""))
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
# Search default install directory
FILE(GLOB MATLAB_DIRS RELATIVE /usr/local/MATLAB /usr/local/MATLAB/*)
FOREACH(MATLAB_DIR ${MATLAB_DIRS})
IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
IF(EXISTS /usr/local/MATLAB/${MATLAB_DIR})
SET(MATLAB_ROOT /usr/local/MATLAB/${MATLAB_DIR})
ENDIF(EXISTS /usr/local/MATLAB/${MATLAB_DIR})
ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
ENDFOREACH(MATLAB_DIR)
ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
IF((NOT DEFINED MATLAB_MEX_EXTENSION) OR ("${MATLAB_MEX_EXTENSION}" STREQUAL ""))
SET(MATLAB_MEX_EXTENSION "mexa64")
ENDIF((NOT DEFINED MATLAB_MEX_EXTENSION) OR ("${MATLAB_MEX_EXTENSION}" STREQUAL ""))
IF((DEFINED MATLAB_ROOT) AND (NOT "${MATLAB_ROOT}" STREQUAL ""))
# Folder where the MEX libraries are, depending of the Windows compiler
IF((NOT DEFINED MATLAB_LIBRARIES_DIR) OR ("${MATLAB_LIBRARIES_DIR}" STREQUAL ""))
SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/glnxa64"
"${MATLAB_ROOT}/bin/glnxa64")
ENDIF((DEFINED MATLAB_LIBRARIES_DIR) AND (NOT "${MATLAB_LIBRARIES_DIR}" STREQUAL ""))
ENDIF((NOT DEFINED MATLAB_LIBRARIES_DIR) OR ("${MATLAB_LIBRARIES_DIR}" STREQUAL ""))
ENDIF(WIN32)
# 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"
)
# This is common to UNIX and Win32:
SET(MATLAB_LIBRARIES
${MATLAB_MEX_LIBRARY}
${MATLAB_MX_LIBRARY}
${MATLAB_ENG_LIBRARY}
)
message("MATLAB root: ${MATLAB_ROOT}")
message("MATLAB libdir: ${MATLAB_LIBRARIES_DIR}")
message("MATLAB incdir: ${MATLAB_INCLUDE_DIR}")
message("MATLAB libs: ${MATLAB_LIBRARIES}")
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_MEX_EXTENSION
)