From b0285d92b4f81cbe1aceafbfa663a2fe2fe55d82 Mon Sep 17 00:00:00 2001 From: hbristow Date: Sun, 23 Jun 2013 13:34:01 -0700 Subject: [PATCH] Improved file installation --- modules/matlab/CMakeLists.txt | 36 ++++++++++++++++++-------- modules/matlab/generator/gen_matlab.py | 28 +++++++++++++++----- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/modules/matlab/CMakeLists.txt b/modules/matlab/CMakeLists.txt index 8a7bd2ca6..94d580a12 100644 --- a/modules/matlab/CMakeLists.txt +++ b/modules/matlab/CMakeLists.txt @@ -40,10 +40,10 @@ if (IOS OR ANDROID OR NOT MATLAB_FOUND OR NOT PYTHONLIBS_FOUND) return() endif() -# TODO: matlab bindings should depend on python (maybe) set(the_description "The Matlab/Octave bindings") -ocv_add_module(matlab BINDINGS opencv_core #TODO: does it actually NEED to depend on core? - OPTIONAL opencv_objdetect opencv_features2d opencv_video +ocv_add_module(matlab BINDINGS #TODO: does it actually NEED to depend on core? + OPTIONAL opencv_core + opencv_objdetect opencv_features2d opencv_video opencv_highgui opencv_ml opencv_calib3d opencv_photo opencv_nonfree opencv_calib opencv_imgproc) @@ -54,6 +54,7 @@ set(HDR_PARSER_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../python/src2) # set mex compiler options prepend("-I" MEX_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include) prepend("-L" MEX_LIB_DIR ${CMAKE_BINARY_DIR}/lib) +prepend("-l" MEX_LIBS opencv_core) set(MEX_OPTS "-largeArrayDims") if (ENABLE_SOLUTION_FOLDERS) @@ -74,7 +75,9 @@ foreach(opencv_module ${MATLAB_DEPS}) list(APPEND opencv_hdrs "${OPENCV_MODULE_${opencv_module}_LOCATION}/include/opencv2/${module}.hpp") list(APPEND ${the_module}_ACTUAL_DEPS ${opencv_module}) prepend("-I" MEX_INCLUDE_DIRS "${OPENCV_MODULE_${opencv_module}_LOCATION}/include") - prepend("-l" MEX_LIBS ${opencv_module}) + if (NOT ${module} STREQUAL "core") + prepend("-l" MEX_LIBS ${opencv_module}) + endif() endif() endforeach() @@ -91,7 +94,7 @@ if (NOT MEX_WORKS) execute_process( COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_SOURCE_DIR}/test/trigger.cpp COMMAND ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/generator/gen_matlab_caller.py ${HDR_PARSER_PATH} + ${CMAKE_CURRENT_SOURCE_DIR}/generator/gen_matlab.py ${HDR_PARSER_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/test/test_generator.hpp ${CMAKE_BINARY_DIR}/junk ERROR_VARIABLE GEN_ERROR OUTPUT_QUIET @@ -143,7 +146,7 @@ set(COMPILE_PROXY ${CMAKE_CURRENT_BINARY_DIR}/compile.proxy) add_custom_command( OUTPUT ${GENERATE_PROXY} COMMAND ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/generator/gen_matlab_caller.py ${HDR_PARSER_PATH} + ${CMAKE_CURRENT_SOURCE_DIR}/generator/gen_matlab.py ${HDR_PARSER_PATH} ${opencv_hdrs} ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E touch ${GENERATE_PROXY} COMMENT "Generating matlab source files" @@ -166,7 +169,7 @@ add_custom_command( ) # targets -# opencv_matlab_sources --> opencv_matlab_compile +# opencv_matlab_sources --> opencv_matlab add_custom_target(${the_module}_sources ALL DEPENDS ${GENERATE_PROXY}) add_custom_target(${the_module} ALL DEPENDS ${COMPILE_PROXY}) add_dependencies(${the_module} ${the_module}_sources ${${the_module}_ACTUAL_DEPS}) @@ -174,8 +177,19 @@ add_dependencies(${the_module} ${the_module}_sources ${${the_module}_ACTUAL_DEPS # ---------------------------------------------------------------------------- # Install time components # ---------------------------------------------------------------------------- -file(GLOB MATLAB_FUNCTIONS "${CMAKE_CURRENT_BINARY_DIR}/src/*.mex*") -file(GLOB MATLAB_CLASSES "${CMAKE_CURRENT_BINARY_DIR}/src/private/*.mex*" "${CMAKE_CURRENT_BINARY_DIR}/+cv/*.m") -install(FILES ${MATLAB_FUNCTIONS} ${MATLAB_CLASSES} - DESTINATION ${CMAKE_INSTALL_PREFIX}/matlab/+cv +# NOTE: Trailing slashes on the DIRECTORY paths are important! +file(GLOB MATLAB_FUNCTIONS "${CMAKE_CURRENT_BINARY_DIR}/src/*.${MATLAB_MEXEXT}") +file(GLOB MATLAB_CLASSES "${CMAKE_CURRENT_BINARY_DIR}/+cv/*.m") +file(GLOB MATLAB_PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/src/private/*.${MATLAB_MEXEXT}") +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/ + DESTINATION ${CMAKE_INSTALL_PREFIX}/matlab/+cv + FILES_MATCHING PATTERN "*.${MATLAB_MEXEXT}" +) +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/+cv/ + DESTINATION ${CMAKE_INSTALL_PREFIX}/matlab/+cv + FILES_MATCHING PATTERN "*.m" +) +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/private/ + DESTINATION ${CMAKE_INSTALL_PREFIX}/matlab/+cv/private + FILES_MATCHING PATTERN "*.${MATLAB_MEXEXT}" ) diff --git a/modules/matlab/generator/gen_matlab.py b/modules/matlab/generator/gen_matlab.py index 49c60d47d..06bfa04f5 100644 --- a/modules/matlab/generator/gen_matlab.py +++ b/modules/matlab/generator/gen_matlab.py @@ -1,12 +1,5 @@ #/usr/bin/env python -import sys, re, os, time -from string import Template -from hdr_parser import CppHeaderParser -from parse_tree import ParseTree, todict -from filters import * -from jinja2 import Environment, PackageLoader - class MatlabWrapperGenerator(object): def gen(self, input_files, output_dir): @@ -74,3 +67,24 @@ class MatlabWrapperGenerator(object): populated = tclassm.render(clss=clss, time=time) with open(output_class_dir+'/'+clss.name+'.m', 'wb') as f: f.write(populated) + + + +if __name__ == "__main__": + + # add the hdr_parser to the path + import sys, re, os, time + sys.path.append(sys.argv[1]) + from string import Template + from hdr_parser import CppHeaderParser + from parse_tree import ParseTree, todict + from filters import * + from jinja2 import Environment, PackageLoader + + # get the IO from the command line arguments + input_files = sys.argv[2:-1] + output_dir = sys.argv[-1] + + # create the generator + mwg = MatlabWrapperGenerator() + mwg.gen(input_files, output_dir)