Back-ported cmake from the 2.0prep branch

release/4.3a0
Alex Cunningham 2012-02-24 15:53:50 +00:00
parent 8e41e032b0
commit 59b1197c9f
12 changed files with 134 additions and 237 deletions

View File

@ -40,8 +40,6 @@ option(GTSAM_BUILD_TIMING "Enable/Disable building of timing scripts" ON)
option(GTSAM_BUILD_EXAMPLES "Enable/Disable building of examples" ON)
option(GTSAM_BUILD_WRAP "Enable/Disable building of matlab wrap utility (necessary for matlab interface)" ON)
option(GTSAM_USE_QUATERNIONS "Enable/Disable using an internal Quaternion representation for rotations instead of rotation matrices" OFF)
option(GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS
"Enable/Disable linking tests against the convenience libraries for faster debugging" ON)
# Add the Quaternion Build Flag if requested
if (GTSAM_USE_QUATERNIONS)
@ -53,10 +51,16 @@ endif(GTSAM_USE_QUATERNIONS)
# FIXME: breaks generation and install of matlab toolbox
#set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY TRUE)
# Pull in tests
enable_testing()
include(Dart)
include(CTest)
# Pull in infrastructure
if (GTSAM_BUILD_TESTS)
enable_testing()
include(Dart)
include(CTest)
endif()
# Use macros for creating tests/timing scripts
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include(GtsamTesting)
# Enable make check (http://www.cmake.org/Wiki/CMakeEmulateMakeCheck)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
@ -71,7 +75,7 @@ include_directories(
gtsam/3rdparty/CCOLAMD/Include
${CMAKE_SOURCE_DIR}
CppUnitLite
${BOOST_INCLUDE_DIR})
${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIRS})
# Build CppUnitLite

65
cmake/GtsamTesting.cmake Normal file
View File

@ -0,0 +1,65 @@
# Build macros for using tests
# Collects all tests in an adjacent tests folder and builds them
macro(gtsam_add_tests subdir libs)
add_custom_target(check.${subdir} COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB tests_srcs "tests/test*.cpp")
foreach(test_src ${tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin ${subdir}.${test_base} )
message(STATUS "Adding Test ${test_bin}")
add_executable(${test_bin} ${test_src})
add_dependencies(check.${subdir} ${test_bin})
add_dependencies(check ${test_bin})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin} )
if (GTSAM_BUILD_CONVENIENCE_LIBRARIES)
add_dependencies(${test_bin} ${libs} CppUnitLite)
target_link_libraries(${test_bin} ${libs} ${Boost_LIBRARIES} CppUnitLite)
else()
add_dependencies(${test_bin} gtsam-static)
target_link_libraries(${test_bin} ${Boost_LIBRARIES} gtsam-static CppUnitLite)
endif()
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
endmacro()
# Collects all tests in an adjacent tests folder and builds them
# This version forces the use of libs, as necessary for wrap/tests
macro(gtsam_add_external_tests subdir libs)
add_custom_target(check.${subdir} COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB tests_srcs "tests/test*.cpp")
foreach(test_src ${tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin ${subdir}.${test_base} )
message(STATUS "Adding Test ${test_bin}")
add_executable(${test_bin} ${test_src})
add_dependencies(check.${subdir} ${test_bin})
add_dependencies(check ${test_bin})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin} )
add_dependencies(${test_bin} ${libs} CppUnitLite)
target_link_libraries(${test_bin} ${libs} ${Boost_LIBRARIES} CppUnitLite)
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
endmacro()
# Collects timing scripts and builds them
macro(gtsam_add_timing subdir libs)
add_custom_target(timing.${subdir})
file(GLOB base_timing_srcs "tests/time*.cpp")
foreach(time_src ${base_timing_srcs})
get_filename_component(time_base ${time_src} NAME_WE)
set( time_bin ${subdir}.${time_base} )
message(STATUS "Adding Timing Benchmark ${time_bin}")
add_executable(${time_bin} ${time_src})
add_dependencies(timing.${subdir} ${time_bin})
add_dependencies(timing ${time_bin})
if (GTSAM_BUILD_CONVENIENCE_LIBRARIES)
add_dependencies(${time_bin} ${libs})
target_link_libraries(${time_bin} ${libs} ${Boost_LIBRARIES} CppUnitLite)
else()
add_dependencies(${time_bin} gtsam-static)
target_link_libraries(${time_bin} ${Boost_LIBRARIES} gtsam-static CppUnitLite)
endif()
add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN})
endforeach(time_src)
endmacro()

View File

@ -15,10 +15,3 @@ foreach(eigen_dir ${eigen_dir_headers_all})
install(FILES Eigen/Eigen/${filename} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gtsam/3rdparty/Eigen/Eigen)
endif()
endforeach(eigen_dir)
## build convenience library
#set (3rdparty_srcs
# CCOLAMD/Source/ccolamd.c
# CCOLAMD/Source/ccolamd_global.c
# UFconfig/UFconfig.c)
#add_library(ccolamd STATIC ${3rdparty_srcs})

View File

@ -20,14 +20,20 @@ set (3rdparty_srcs
3rdparty/CCOLAMD/Source/ccolamd.c
3rdparty/CCOLAMD/Source/ccolamd_global.c
3rdparty/UFconfig/UFconfig.c)
add_library(ccolamd STATIC ${3rdparty_srcs})
if (GTSAM_BUILD_CONVENIENCE_LIBRARIES)
message(STATUS "Building Convenience Library: ccolamd")
add_library(ccolamd STATIC ${3rdparty_srcs})
endif()
# assemble core libaries
foreach(subdir ${gtsam_subdirs})
# Build convenience libraries
file(GLOB subdir_srcs "${subdir}/*.cpp")
add_library(${subdir} STATIC ${subdir_srcs})
set(${subdir}_srcs ${subdir_srcs})
if (GTSAM_BUILD_CONVENIENCE_LIBRARIES)
message(STATUS "Building Convenience Library: ${subdir}")
add_library(${subdir} STATIC ${subdir_srcs})
endif()
# Build local library and tests
message(STATUS "Building ${subdir}")

View File

@ -4,40 +4,16 @@ install(FILES ${base_headers} DESTINATION include/gtsam/base)
# Components to link tests in this subfolder against
set(base_local_libs
CppUnitLite
base
)
# Build tests
if (GTSAM_BUILD_TESTS)
add_custom_target(check.base COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB base_tests_srcs "tests/test*.cpp")
foreach(test_src ${base_tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin base.${test_base} )
message(STATUS "Adding Test ${test_bin}")
add_executable(${test_bin} ${test_src})
add_dependencies(check.base ${test_bin})
add_dependencies(check ${test_bin})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin})
target_link_libraries(${test_bin} ${base_local_libs})
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
gtsam_add_tests(base "${base_local_libs}")
endif(GTSAM_BUILD_TESTS)
# Build timing scripts
if (GTSAM_BUILD_TIMING)
add_custom_target(timing.base)
file(GLOB base_timing_srcs "tests/time*.cpp")
foreach(time_src ${base_timing_srcs})
get_filename_component(time_base ${time_src} NAME_WE)
set( time_bin base.${time_base} )
message(STATUS "Adding Timing Benchmark ${time_bin}")
add_executable(${time_bin} ${time_src})
add_dependencies(timing.base ${time_bin})
add_dependencies(timing ${time_bin})
target_link_libraries(${time_bin} ${base_local_libs})
add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN})
endforeach(time_src)
gtsam_add_timing(base "${base_local_libs}")
endif(GTSAM_BUILD_TIMING)

View File

@ -1,47 +1,20 @@
# link back to base
add_dependencies(geometry base)
# Install headers
file(GLOB geometry_headers "*.h")
install(FILES ${geometry_headers} DESTINATION include/gtsam/geometry)
# Components to link tests in this subfolder against
set(geometry_local_libs
geometry
base
CppUnitLite
base
geometry
)
# Build tests
if (GTSAM_BUILD_TESTS)
add_custom_target(check.geometry COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB geometry_tests_srcs "tests/test*.cpp")
foreach(test_src ${geometry_tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin geometry.${test_base} )
message(STATUS "Adding Test ${test_bin}")
add_executable(${test_bin} ${test_src})
add_dependencies(check.geometry ${test_bin})
add_dependencies(check ${test_bin})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin})
target_link_libraries(${test_bin} ${geometry_local_libs})
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
gtsam_add_tests(geometry "${geometry_local_libs}")
endif(GTSAM_BUILD_TESTS)
# Build timing scripts
if (GTSAM_BUILD_TIMING)
add_custom_target(timing.geometry)
file(GLOB geometry_timing_srcs "tests/time*.cpp")
foreach(time_src ${geometry_timing_srcs})
get_filename_component(time_base ${time_src} NAME_WE)
set( time_bin geometry.${time_base} )
message(STATUS "Adding Timing Benchmark ${time_bin}")
add_executable(${time_bin} ${time_src})
add_dependencies(timing.geometry ${time_bin})
add_dependencies(timing ${time_bin})
target_link_libraries(${time_bin} ${geometry_local_libs})
add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN})
endforeach(time_src)
gtsam_add_timing(geometry "${geometry_local_libs}")
endif(GTSAM_BUILD_TIMING)

View File

@ -1,6 +1,3 @@
# link back to previous convenience library
add_dependencies(inference base)
# Install headers
file(GLOB inference_headers "*.h")
install(FILES ${inference_headers} DESTINATION include/gtsam/inference)
@ -11,39 +8,15 @@ set(inference_local_libs
geometry
base
ccolamd
CppUnitLite
)
# Build tests
if(GTSAM_BUILD_TESTS)
add_custom_target(check.inference COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB inference_tests_srcs "tests/test*.cpp")
foreach(test_src ${inference_tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin inference.${test_base} )
message(STATUS "Adding Test ${test_bin}")
add_executable(${test_bin} ${test_src})
add_dependencies(check.inference ${test_bin})
add_dependencies(check ${test_bin})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin})
target_link_libraries(${test_bin} ${inference_local_libs})
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
if (GTSAM_BUILD_TESTS)
gtsam_add_tests(inference "${inference_local_libs}")
endif(GTSAM_BUILD_TESTS)
# Build timing scripts
if(GTSAM_BUILD_TIMING)
add_custom_target(timing.inference)
file(GLOB inference_timing_srcs "tests/time*.cpp")
foreach(time_src ${inference_timing_srcs})
get_filename_component(time_base ${time_src} NAME_WE)
set( time_bin inference.${time_base} )
message(STATUS "Adding Timing Benchmark ${time_bin}")
add_executable(${time_bin} ${time_src})
add_dependencies(timing.inference ${time_bin})
add_dependencies(timing ${time_bin})
target_link_libraries(${time_bin} ${inference_local_libs})
add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN})
endforeach(time_src)
if (GTSAM_BUILD_TIMING)
gtsam_add_timing(inference "${inference_local_libs}")
endif(GTSAM_BUILD_TIMING)

View File

@ -1,6 +1,3 @@
# link back to base
add_dependencies(linear inference)
# Install headers
file(GLOB linear_headers "*.h")
install(FILES ${linear_headers} DESTINATION include/gtsam/linear)
@ -12,38 +9,14 @@ set(linear_local_libs
geometry
base
ccolamd
CppUnitLite
)
# Build tests
if (GTSAM_BUILD_TESTS)
add_custom_target(check.linear COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB linear_tests_srcs "tests/test*.cpp")
foreach(test_src ${linear_tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin linear.${test_base} )
message(STATUS "Adding Test ${test_bin}")
add_executable(${test_bin} ${test_src})
add_dependencies(check.linear ${test_bin})
add_dependencies(check ${test_bin})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin})
target_link_libraries(${test_bin} ${linear_local_libs})
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
endif (GTSAM_BUILD_TESTS)
gtsam_add_tests(linear "${linear_local_libs}")
endif(GTSAM_BUILD_TESTS)
# Build timing scripts
if (GTSAM_BUILD_TIMING)
add_custom_target(timing.linear)
file(GLOB linear_timing_srcs "tests/time*.cpp")
foreach(time_src ${linear_timing_srcs})
get_filename_component(time_base ${time_src} NAME_WE)
set( time_bin linear.${time_base} )
message(STATUS "Adding Timing Benchmark ${time_bin}")
add_executable(${time_bin} ${time_src})
add_dependencies(timing.linear ${time_bin})
add_dependencies(timing ${time_bin})
target_link_libraries(${time_bin} ${linear_local_libs})
add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN})
endforeach(time_src)
endif (GTSAM_BUILD_TIMING)
gtsam_add_timing(linear "${linear_local_libs}")
endif(GTSAM_BUILD_TIMING)

View File

@ -1,6 +1,3 @@
# link back to base
add_dependencies(nonlinear linear)
# Install headers
file(GLOB nonlinear_headers "*.h")
install(FILES ${nonlinear_headers} DESTINATION include/gtsam/nonlinear)
@ -13,39 +10,15 @@ set(nonlinear_local_libs
geometry
base
ccolamd
CppUnitLite
)
# Build tests
if (GTSAM_BUILD_TESTS)
add_custom_target(check.nonlinear COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB nonlinear_tests_srcs "tests/test*.cpp")
foreach(test_src ${nonlinear_tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin nonlinear.${test_base} )
message(STATUS "Adding Test ${test_bin}")
add_executable(${test_bin} ${test_src})
add_dependencies(check.nonlinear ${test_bin})
add_dependencies(check ${test_bin})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin})
target_link_libraries(${test_bin} ${nonlinear_local_libs})
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
endif (GTSAM_BUILD_TESTS)
gtsam_add_tests(nonlinear "${nonlinear_local_libs}")
endif(GTSAM_BUILD_TESTS)
# Build timing scripts
if (GTSAM_BUILD_TIMING)
add_custom_target(timing.nonlinear)
file(GLOB nonlinear_timing_srcs "tests/time*.cpp")
foreach(time_src ${nonlinear_timing_srcs})
get_filename_component(time_base ${time_src} NAME_WE)
set( time_bin nonlinear.${time_base} )
message(STATUS "Adding Timing Benchmark ${time_bin}")
add_executable(${time_bin} ${time_src})
add_dependencies(timing.nonlinear ${time_bin})
add_dependencies(timing ${time_bin})
target_link_libraries(${time_bin} ${nonlinear_local_libs})
add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN})
endforeach(time_src)
endif (GTSAM_BUILD_TIMING)
gtsam_add_timing(nonlinear "${nonlinear_local_libs}")
endif(GTSAM_BUILD_TIMING)

View File

@ -1,6 +1,3 @@
# link back to base
add_dependencies(slam nonlinear)
# Install headers
file(GLOB slam_headers "*.h")
install(FILES ${slam_headers} DESTINATION include/gtsam/slam)
@ -14,38 +11,14 @@ set(slam_local_libs
geometry
base
ccolamd
CppUnitLite
)
# Build tests
if (GTSAM_BUILD_TESTS)
add_custom_target(check.slam COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB slam_tests_srcs "tests/test*.cpp")
foreach(test_src ${slam_tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin slam.${test_base} )
message(STATUS "Adding Test ${test_bin}")
add_executable(${test_bin} ${test_src})
add_dependencies(check.slam ${test_bin})
add_dependencies(check ${test_bin})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin})
target_link_libraries(${test_bin} ${slam_local_libs})
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
endif (GTSAM_BUILD_TESTS)
gtsam_add_tests(slam "${slam_local_libs}")
endif(GTSAM_BUILD_TESTS)
# Build timing scripts
if (GTSAM_BUILD_TIMING)
add_custom_target(timing.slam)
file(GLOB slam_timing_srcs "tests/time*.cpp")
foreach(time_src ${slam_timing_srcs})
get_filename_component(time_base ${time_src} NAME_WE)
set( time_bin slam.${time_base} )
message(STATUS "Adding Timing Benchmark ${time_bin}")
add_executable(${time_bin} ${time_src})
add_dependencies(timing.slam ${time_bin})
add_dependencies(timing ${time_bin})
target_link_libraries(${time_bin} ${slam_local_libs})
add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN})
endforeach(time_src)
endif (GTSAM_BUILD_TIMING)
gtsam_add_timing(slam "${slam_local_libs}")
endif(GTSAM_BUILD_TIMING)

View File

@ -1,4 +1,4 @@
if (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS)
if (GTSAM_BUILD_CONVENIENCE_LIBRARIES)
set(convenience_libs
slam
nonlinear
@ -7,15 +7,22 @@ if (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS)
geometry
base
ccolamd)
else (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS)
else (GTSAM_BUILD_CONVENIENCE_LIBRARIES)
set(convenience_libs
gtsam-static)
endif (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS)
endif (GTSAM_BUILD_CONVENIENCE_LIBRARIES)
# exclude certain files
# note the source dir on each
set (tests_exclude
# "${CMAKE_CURRENT_SOURCE_DIR}/testPose2SLAMwSPCG.cpp"
)
# Build tests
if (GTSAM_BUILD_TESTS)
add_custom_target(check.tests COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB tests_srcs "test*.cpp")
#list(REMOVE_ITEM tests_srcs ${tests_exclude}) #NOTE: uncomment if there are tests to exclude
foreach(test_src ${tests_srcs})
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin tests.${test_base} )
@ -33,6 +40,7 @@ endif (GTSAM_BUILD_TESTS)
if (GTSAM_BUILD_TIMING)
add_custom_target(timing.tests)
file(GLOB timing_srcs "time*.cpp")
#list(REMOVE_ITEM timing_srcs ${tests_exclude}) #NOTE: uncomment if there are tests to exclude
foreach(time_src ${timing_srcs})
get_filename_component(time_base ${time_src} NAME_WE)
set( time_bin tests.${time_base} )

View File

@ -16,30 +16,10 @@ endif(GTSAM_INSTALL_WRAP)
# Install matlab header
install(FILES matlab.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/wrap)
if (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS)
set(convenience_libs
base
)
else (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS)
set(convenience_libs
gtsam-static)
endif (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS)
# Build tests
if (GTSAM_BUILD_TESTS)
add_custom_target(check.wrap COMMAND ${CMAKE_CTEST_COMMAND})
file(GLOB wrap_test_srcs "tests/test*.cpp")
add_definitions(-DTOPSRCDIR="${CMAKE_SOURCE_DIR}")
foreach(test_src ${wrap_test_srcs} )
get_filename_component(test_base ${test_src} NAME_WE)
set( test_bin wrap.${test_base} )
add_executable(${test_bin} EXCLUDE_FROM_ALL ${test_src})
add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin})
add_dependencies(check ${test_bin})
add_dependencies(check.wrap ${test_bin})
target_link_libraries(${test_bin} CppUnitLite ${convenience_libs} wrap_lib)
add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN})
endforeach(test_src)
add_definitions(-DTOPSRCDIR="${CMAKE_SOURCE_DIR}")
gtsam_add_external_tests(wrap wrap_lib)
endif(GTSAM_BUILD_TESTS)
# Wrap codegen
@ -63,7 +43,7 @@ set(moduleName gtsam)
# only support 64-bit apple
if(CMAKE_HOST_APPLE)
set(mex_bin_extension_default mexmaci64)
set(GTSAM_MEX_BIN_EXTENSION_default mexmaci64)
endif(CMAKE_HOST_APPLE)
if(NOT CMAKE_HOST_APPLE)
@ -79,56 +59,56 @@ if(NOT CMAKE_HOST_APPLE)
# Check for linux machines
if (CMAKE_HOST_UNIX)
if (HAVE_64_BIT)
set(mex_bin_extension_default mexa64)
set(GTSAM_MEX_BIN_EXTENSION_default mexa64)
else (HAVE_64_BIT)
set(mex_bin_extension_default mexglx)
set(GTSAM_MEX_BIN_EXTENSION_default mexglx)
endif (HAVE_64_BIT)
endif(CMAKE_HOST_UNIX)
# Check for windows machines
if (CMAKE_HOST_WIN32)
if (HAVE_64_BIT)
set(mex_bin_extension_default mexw64)
set(GTSAM_MEX_BIN_EXTENSION_default mexw64)
else (HAVE_64_BIT)
set(mex_bin_extension_default mexw32)
set(GTSAM_MEX_BIN_EXTENSION_default mexw32)
endif (HAVE_64_BIT)
endif(CMAKE_HOST_WIN32)
endif(NOT CMAKE_HOST_APPLE)
# Allow for setting mex extension manually
set(mex_bin_extension ${mex_bin_extension_default} CACHE DOCSTRING "Extension for matlab mex files")
message(STATUS "Detected Matlab mex extension: ${mex_bin_extension_default}")
message(STATUS "Current Matlab mex extension: ${mex_bin_extension}")
set(GTSAM_MEX_BIN_EXTENSION ${GTSAM_MEX_BIN_EXTENSION_default} CACHE DOCSTRING "Extension for matlab mex files")
message(STATUS "Detected Matlab mex extension: ${GTSAM_MEX_BIN_EXTENSION_default}")
message(STATUS "Current Matlab mex extension: ${GTSAM_MEX_BIN_EXTENSION}")
# Actual build commands - separated by OS
add_custom_target(wrap_gtsam ALL COMMAND
./wrap ${mex_bin_extension} ${CMAKE_SOURCE_DIR} ${moduleName} ${toolbox_path} "${mexFlags}"
./wrap ${GTSAM_MEX_BIN_EXTENSION} ${CMAKE_SOURCE_DIR} ${moduleName} ${toolbox_path} "${mexFlags}"
DEPENDS wrap)
option(GTSAM_INSTALL_MATLAB_TOOLBOX "Enable/Disable installation of matlab toolbox" ON)
option(GTSAM_INSTALL_MATLAB_EXAMPLES "Enable/Disable installation of matlab examples" ON)
option(GTSAM_INSTALL_MATLAB_TESTS "Enable/Disable installation of matlab tests" ON)
set(toolbox_install_path ${CMAKE_INSTALL_PREFIX}/borg/toolbox CACHE DOCSTRING "Path to install matlab toolbox")
set(GTSAM_TOOLBOX_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/borg/toolbox CACHE DOCSTRING "Path to install matlab toolbox")
if (GTSAM_INSTALL_MATLAB_TOOLBOX)
# Primary toolbox files
message(STATUS "Installing Matlab Toolbox to ${toolbox_install_path}")
install(DIRECTORY DESTINATION ${toolbox_install_path}) # make an empty folder
message(STATUS "Installing Matlab Toolbox to ${GTSAM_TOOLBOX_INSTALL_PATH}")
install(DIRECTORY DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}) # make an empty folder
# exploit need for trailing slash to specify a full folder, rather than just its contents to copy
install(DIRECTORY ${toolbox_path} DESTINATION ${toolbox_install_path})
install(DIRECTORY ${toolbox_path} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH})
# Examples
if (GTSAM_INSTALL_MATLAB_EXAMPLES)
message(STATUS "Installing Matlab Toolbox Examples")
file(GLOB matlab_examples "${CMAKE_SOURCE_DIR}/examples/matlab/*.m")
install(FILES ${matlab_examples} DESTINATION ${toolbox_install_path}/gtsam/examples)
install(FILES ${matlab_examples} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/examples)
endif (GTSAM_INSTALL_MATLAB_EXAMPLES)
# Tests
if (GTSAM_INSTALL_MATLAB_TESTS)
message(STATUS "Installing Matlab Toolbox Tests")
file(GLOB matlab_tests "${CMAKE_SOURCE_DIR}/tests/matlab/*.m")
install(FILES ${matlab_tests} DESTINATION ${toolbox_install_path}/gtsam/tests)
install(FILES ${matlab_tests} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/tests)
endif (GTSAM_INSTALL_MATLAB_TESTS)
endif (GTSAM_INSTALL_MATLAB_TOOLBOX)