Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv_contrib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv_contrib
Commits
136baab9
Commit
136baab9
authored
Sep 17, 2018
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
parents
da989664
ff59193d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
229 additions
and
0 deletions
+229
-0
CMakeLists.txt
modules/matlab/CMakeLists.txt
+3
-0
OpenCVFindMatlab.cmake
modules/matlab/cmake/OpenCVFindMatlab.cmake
+197
-0
STATUS_DUMP_EXTRA.cmake
modules/matlab/cmake/hooks/STATUS_DUMP_EXTRA.cmake
+9
-0
init.cmake
modules/matlab/cmake/init.cmake
+20
-0
No files found.
modules/matlab/CMakeLists.txt
View file @
136baab9
...
...
@@ -75,6 +75,9 @@ macro(WARN_MIXED_PRECISION COMPILER_BITNESS MATLAB_BITNESS)
message
(
WARNING
${
MSG
}
)
endmacro
()
ocv_assert
(
DEFINED MATLAB_ARCH
)
ocv_assert
(
DEFINED MATLAB_MEX_SCRIPT
)
ocv_assert
(
DEFINED MATLAB_MEXEXT
)
# If the user built OpenCV as X-bit, but they have a Y-bit version of Matlab,
# attempting to link to OpenCV during binding generation will fail, since
...
...
modules/matlab/cmake/OpenCVFindMatlab.cmake
0 → 100644
View file @
136baab9
# ----- Find Matlab/Octave -----
#
# OpenCVFindMatlab.cmake attempts to locate the install path of Matlab in order
# to extract the mex headers, libraries and shell scripts. If found
# successfully, the following variables will be defined
#
# MATLAB_FOUND: true/false
# MATLAB_ROOT_DIR: Root of Matlab installation
# MATLAB_BIN: The main Matlab "executable" (shell script)
# MATLAB_MEX_SCRIPT: The mex script used to compile mex files
# MATLAB_INCLUDE_DIRS:Path to "mex.h"
# MATLAB_LIBRARY_DIRS:Path to mex and matrix libraries
# MATLAB_LIBRARIES: The Matlab libs, usually mx, mex, mat
# MATLAB_MEXEXT: The mex library extension. It will be one of:
# mexwin32, mexwin64, mexglx, mexa64, mexmac,
# mexmaci, mexmaci64, mexsol, mexs64
# MATLAB_ARCH: The installation architecture. It is **usually**
# the MEXEXT with the preceding "mex" removed,
# though it's different for linux distros.
#
# There doesn't appear to be an elegant way to detect all versions of Matlab
# across different platforms. If you know the matlab path and want to avoid
# the search, you can define the path to the Matlab root when invoking cmake:
#
# cmake -DMATLAB_ROOT_DIR='/PATH/TO/ROOT_DIR' ..
# ----- set_library_presuffix -----
#
# Matlab tends to use some non-standard prefixes and suffixes on its libraries.
# For example, libmx.dll on Windows (Windows does not add prefixes) and
# mkl.dylib on OS X (OS X uses "lib" prefixes).
# On some versions of Windows the .dll suffix also appears to not be checked.
#
# This function modifies the library prefixes and suffixes used by
# find_library when finding Matlab libraries. It does not affect scopes
# outside of this file.
function
(
set_libarch_prefix_suffix
)
if
(
UNIX AND NOT APPLE
)
set
(
CMAKE_FIND_LIBRARY_PREFIXES
"lib"
PARENT_SCOPE
)
set
(
CMAKE_FIND_LIBRARY_SUFFIXES
".so"
".a"
PARENT_SCOPE
)
elseif
(
APPLE
)
set
(
CMAKE_FIND_LIBRARY_PREFIXES
"lib"
PARENT_SCOPE
)
set
(
CMAKE_FIND_LIBRARY_SUFFIXES
".dylib"
".a"
PARENT_SCOPE
)
elseif
(
WIN32
)
set
(
CMAKE_FIND_LIBRARY_PREFIXES
"lib"
PARENT_SCOPE
)
set
(
CMAKE_FIND_LIBRARY_SUFFIXES
".lib"
".dll"
PARENT_SCOPE
)
endif
()
endfunction
()
# ----- locate_matlab_root -----
#
# Attempt to find the path to the Matlab installation. If successful, sets
# the absolute path in the variable MATLAB_ROOT_DIR
function
(
locate_matlab_root
)
# --- UNIX/APPLE ---
if
(
UNIX
)
# possible root locations, in order of likelihood
set
(
SEARCH_DIRS_ /Applications /usr/local /opt/local /usr /opt
)
foreach
(
DIR_
${
SEARCH_DIRS_
}
)
file
(
GLOB MATLAB_ROOT_DIR_
${
DIR_
}
/MATLAB/R*
${
DIR_
}
/MATLAB_R*
)
if
(
MATLAB_ROOT_DIR_
)
# sort in order from highest to lowest
# normally it's in the format MATLAB_R[20XX][A/B]
# TODO: numerical rather than lexicographic sort. However,
# CMake does not support floating-point MATH(EXPR ...) at this time.
list
(
SORT MATLAB_ROOT_DIR_
)
list
(
REVERSE MATLAB_ROOT_DIR_
)
list
(
GET MATLAB_ROOT_DIR_ 0 MATLAB_ROOT_DIR_
)
set
(
MATLAB_ROOT_DIR
${
MATLAB_ROOT_DIR_
}
PARENT_SCOPE
)
return
()
endif
()
endforeach
()
# --- WINDOWS ---
elseif
(
WIN32
)
# 1. search the path environment variable
find_program
(
MATLAB_ROOT_DIR_ matlab PATHS ENV PATH
)
if
(
MATLAB_ROOT_DIR_
)
# get the root directory from the full path
# /path/to/matlab/rootdir/bin/matlab.exe
get_filename_component
(
MATLAB_ROOT_DIR_
${
MATLAB_ROOT_DIR_
}
PATH
)
get_filename_component
(
MATLAB_ROOT_DIR_
${
MATLAB_ROOT_DIR_
}
PATH
)
set
(
MATLAB_ROOT_DIR
${
MATLAB_ROOT_DIR_
}
PARENT_SCOPE
)
return
()
endif
()
# 2. search the registry
# determine the available Matlab versions
set
(
REG_EXTENSION_
"SOFTWARE
\\
Mathworks
\\
MATLAB"
)
set
(
REG_ROOTS_
"HKEY_LOCAL_MACHINE"
"HKEY_CURRENT_USER"
)
foreach
(
REG_ROOT_
${
REG_ROOTS_
}
)
execute_process
(
COMMAND reg query
"
${
REG_ROOT_
}
\\
${
REG_EXTENSION_
}
"
OUTPUT_VARIABLE QUERY_RESPONSE_ ERROR_VARIABLE UNUSED_
)
if
(
QUERY_RESPONSE_
)
string
(
REGEX MATCHALL
"[0-9]
\\
.[0-9]"
VERSION_STRINGS_
${
QUERY_RESPONSE_
}
)
list
(
APPEND VERSIONS_
${
VERSION_STRINGS_
}
)
endif
()
endforeach
()
# select the highest version
list
(
APPEND VERSIONS_
"0.0"
)
list
(
SORT VERSIONS_
)
list
(
REVERSE VERSIONS_
)
list
(
GET VERSIONS_ 0 VERSION_
)
# request the MATLABROOT from the registry
foreach
(
REG_ROOT_
${
REG_ROOTS_
}
)
get_filename_component
(
QUERY_RESPONSE_ [
${
REG_ROOT_
}
\\
${
REG_EXTENSION_
}
\\
${
VERSION_
}
;MATLABROOT] ABSOLUTE
)
if
(
NOT
${
QUERY_RESPONSE_
}
MATCHES
"registry$"
)
set
(
MATLAB_ROOT_DIR
${
QUERY_RESPONSE_
}
PARENT_SCOPE
)
return
()
endif
()
endforeach
()
endif
()
endfunction
()
# ----- locate_matlab_components -----
#
# Given a directory MATLAB_ROOT_DIR, attempt to find the Matlab components
# (include directory and libraries) under the root. If everything is found,
# sets the variable MATLAB_FOUND to TRUE
function
(
locate_matlab_components MATLAB_ROOT_DIR
)
# get the mex extension
find_file
(
MATLAB_MEXEXT_SCRIPT_ NAMES mexext mexext.bat PATHS
${
MATLAB_ROOT_DIR
}
/bin NO_DEFAULT_PATH
)
execute_process
(
COMMAND
${
MATLAB_MEXEXT_SCRIPT_
}
OUTPUT_VARIABLE MATLAB_MEXEXT_
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if
(
NOT MATLAB_MEXEXT_
)
return
()
endif
()
# map the mexext to an architecture extension
set
(
ARCHITECTURES_
"maci64"
"maci"
"glnxa64"
"glnx64"
"sol64"
"sola64"
"win32"
"win64"
)
foreach
(
ARCHITECTURE_
${
ARCHITECTURES_
}
)
if
(
EXISTS
${
MATLAB_ROOT_DIR
}
/bin/
${
ARCHITECTURE_
}
)
set
(
MATLAB_ARCH_
${
ARCHITECTURE_
}
)
break
()
endif
()
endforeach
()
# get the path to the libraries
set
(
MATLAB_LIBRARY_DIRS_
${
MATLAB_ROOT_DIR
}
/bin/
${
MATLAB_ARCH_
}
)
# get the libraries
set_libarch_prefix_suffix
()
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_LIBRARIES_
${
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_program
(
MATLAB_MEX_SCRIPT_ NAMES mex mex.bat PATHS
${
MATLAB_ROOT_DIR
}
/bin NO_DEFAULT_PATH
)
# get the Matlab executable
find_program
(
MATLAB_BIN_ NAMES matlab PATHS
${
MATLAB_ROOT_DIR
}
/bin NO_DEFAULT_PATH
)
# export into parent scope
if
(
MATLAB_MEX_SCRIPT_ AND MATLAB_LIBRARIES_ AND MATLAB_INCLUDE_DIRS_
)
set
(
MATLAB_BIN
${
MATLAB_BIN_
}
PARENT_SCOPE
)
set
(
MATLAB_MEX_SCRIPT
${
MATLAB_MEX_SCRIPT_
}
PARENT_SCOPE
)
set
(
MATLAB_INCLUDE_DIRS
${
MATLAB_INCLUDE_DIRS_
}
PARENT_SCOPE
)
set
(
MATLAB_LIBRARIES
${
MATLAB_LIBRARIES_
}
PARENT_SCOPE
)
set
(
MATLAB_LIBRARY_DIRS
${
MATLAB_LIBRARY_DIRS_
}
PARENT_SCOPE
)
set
(
MATLAB_MEXEXT
${
MATLAB_MEXEXT_
}
PARENT_SCOPE
)
set
(
MATLAB_ARCH
${
MATLAB_ARCH_
}
PARENT_SCOPE
)
endif
()
endfunction
()
# ----------------------------------------------------------------------------
# FIND MATLAB COMPONENTS
# ----------------------------------------------------------------------------
if
(
NOT MATLAB_FOUND
)
# attempt to find the Matlab root folder
if
(
NOT MATLAB_ROOT_DIR
)
locate_matlab_root
()
endif
()
# given the matlab root folder, find the library locations
if
(
MATLAB_ROOT_DIR
)
locate_matlab_components
(
${
MATLAB_ROOT_DIR
}
)
endif
()
find_package_handle_standard_args
(
Matlab DEFAULT_MSG
MATLAB_MEX_SCRIPT MATLAB_INCLUDE_DIRS
MATLAB_ROOT_DIR MATLAB_LIBRARIES
MATLAB_LIBRARY_DIRS MATLAB_MEXEXT
MATLAB_ARCH MATLAB_BIN
)
endif
()
modules/matlab/cmake/hooks/STATUS_DUMP_EXTRA.cmake
0 → 100644
View file @
136baab9
# ========================= matlab =========================
if
(
WITH_MATLAB OR MATLAB_FOUND
)
status
(
""
)
status
(
" Matlab:"
MATLAB_FOUND THEN
"YES"
ELSE
"NO"
)
if
(
MATLAB_FOUND
)
status
(
" mex:"
MATLAB_MEX_SCRIPT THEN
"
${
MATLAB_MEX_SCRIPT
}
"
ELSE NO
)
status
(
" Compiler/generator:"
MEX_WORKS THEN
"Working"
ELSE
"Not working (bindings will not be generated)"
)
endif
()
endif
()
modules/matlab/cmake/init.cmake
0 → 100644
View file @
136baab9
OCV_OPTION
(
WITH_MATLAB
"Include Matlab support (opencv_contrib)"
OFF
IF
(
NOT ANDROID AND NOT IOS AND NOT WINRT
))
ocv_assert
(
OPENCV_INITIAL_PASS
)
if
(
WITH_MATLAB OR DEFINED MATLAB_FOUND
)
ocv_cmake_hook_append
(
STATUS_DUMP_EXTRA
"
${
CMAKE_CURRENT_LIST_DIR
}
/hooks/STATUS_DUMP_EXTRA.cmake"
)
endif
()
# --- Matlab/Octave ---
if
(
WITH_MATLAB AND NOT DEFINED MATLAB_FOUND
)
include
(
${
CMAKE_CURRENT_LIST_DIR
}
/OpenCVFindMatlab.cmake
)
if
(
NOT MATLAB_FOUND
)
message
(
WARNING
"Matlab or compiler (mex) was not found. Disabling Matlab bindings..."
)
ocv_module_disable
(
matlab
)
endif
()
# publish vars for status() dumper
set
(
MATLAB_FOUND
"
${
MATLAB_FOUND
}
"
PARENT_SCOPE
)
set
(
MATLAB_MEX_SCRIPT
"
${
MATLAB_MEX_SCRIPT
}
"
PARENT_SCOPE
)
endif
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment