From 9a48a94ec7bf6723d7c52fa4981cc99d1c9c1e65 Mon Sep 17 00:00:00 2001 From: Christopher Dembia Date: Sun, 29 Mar 2020 11:25:47 -0700 Subject: [PATCH 1/3] Export the ezc3d target. --- CMakeLists.txt | 35 +++++++++++++++++++++++------------ share/ezc3dConfig.cmake.in | 14 ++++---------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 571d54e1..93392368 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,13 +45,15 @@ set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "_debug") set(EZC3D_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) # Create the configuration header file associated with the asked options -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/ezc3dConfig.h.in ${EZC3D_BINARY_DIR}/include/ezc3dConfig.h) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/ezc3dConfig.h.in + ${EZC3D_BINARY_DIR}/include/ezc3dConfig.h) # Add headers -target_include_directories(${PROJECT_NAME} PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${EZC3D_BINARY_DIR}/include -) +# Include directories when building the library: +target_include_directories(${PROJECT_NAME} PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/include" + "${EZC3D_BINARY_DIR}/include" + ) # Install target if(WIN32) @@ -59,25 +61,34 @@ if(WIN32) set(${PROJECT_NAME}_BIN_FOLDER bin) set(${PROJECT_NAME}_INCLUDE_FOLDER include/${PROJECT_NAME}) else() - set(${PROJECT_NAME}_LIB_FOLDER ${CMAKE_INSTALL_PREFIX}/lib/${PROJECT_NAME}) - set(${PROJECT_NAME}_BIN_FOLDER ${CMAKE_INSTALL_PREFIX}/lib/${PROJECT_NAME}) - set(${PROJECT_NAME}_INCLUDE_FOLDER ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME}) + set(${PROJECT_NAME}_LIB_FOLDER lib/${PROJECT_NAME}) + set(${PROJECT_NAME}_BIN_FOLDER lib/${PROJECT_NAME}) + set(${PROJECT_NAME}_INCLUDE_FOLDER include/${PROJECT_NAME}) endif() -install(TARGETS ${PROJECT_NAME} +install(TARGETS ${PROJECT_NAME} EXPORT ezc3dTargets ARCHIVE DESTINATION ${${PROJECT_NAME}_LIB_FOLDER} RUNTIME DESTINATION ${${PROJECT_NAME}_BIN_FOLDER} LIBRARY DESTINATION ${${PROJECT_NAME}_LIB_FOLDER} ) -install(DIRECTORY include/ DESTINATION ${${PROJECT_NAME}_INCLUDE_FOLDER}) -install(FILES ${EZC3D_BINARY_DIR}/include/ezc3dConfig.h DESTINATION ${${PROJECT_NAME}_INCLUDE_FOLDER}) +install(DIRECTORY include/ DESTINATION ${${PROJECT_NAME}_INCLUDE_FOLDER} + # Exclude ezc3dConfig.h.in. + PATTERN "*.h.in" EXCLUDE) +# Include directories when a client uses the library from an installed ezc3d: +target_include_directories(${PROJECT_NAME} INTERFACE + $) +install(FILES "${EZC3D_BINARY_DIR}/include/ezc3dConfig.h" + DESTINATION "${${PROJECT_NAME}_INCLUDE_FOLDER}") # Prepare share include(CMakePackageConfigHelpers) configure_package_config_file( share/${PROJECT_NAME}Config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION ${PROJECT_NAME}_LIB_FOLDER/cmake + INSTALL_DESTINATION ${${PROJECT_NAME}_LIB_FOLDER}/cmake + PATH_VARS + CMAKE_INSTALL_PREFIX ) +install(EXPORT ezc3dTargets DESTINATION ${${PROJECT_NAME}_LIB_FOLDER}/cmake) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake DESTINATION ${${PROJECT_NAME}_LIB_FOLDER}/cmake diff --git a/share/ezc3dConfig.cmake.in b/share/ezc3dConfig.cmake.in index a258862e..ce0ab6f5 100644 --- a/share/ezc3dConfig.cmake.in +++ b/share/ezc3dConfig.cmake.in @@ -2,17 +2,11 @@ set(ezc3d_VERSION @PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSI @PACKAGE_INIT@ -set_and_check(ezc3d_INCLUDE_DIR "@ezc3d_INCLUDE_FOLDER@") -set_and_check(ezc3d_LIBRARY_DIR "@ezc3d_LIB_FOLDER@") +set_and_check(ezc3d_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_PREFIX@/@ezc3d_INCLUDE_FOLDER@") +set_and_check(ezc3d_LIBRARY_DIR "@PACKAGE_CMAKE_INSTALL_PREFIX@/@ezc3d_LIB_FOLDER@") -find_library (ezc3d_LIBRARY NAMES ezc3d ezc3d_debug PATHS ${ezc3d_LIBRARY_DIR}) +set(ezc3d_LIBRARY ezc3d) -# handle the QUIETLY and REQUIRED arguments and set ezc3d_FOUND to TRUE if -# all listed variables are TRUE -include (FindPackageHandleStandardArgs) -find_package_handle_standard_args (ezc3d DEFAULT_MSG - ezc3d_INCLUDE_DIR - ezc3d_LIBRARY -) +include("${CMAKE_CURRENT_LIST_DIR}/@CMAKE_PROJECT_NAME@Targets.cmake") check_required_components(ezc3d) From 0996662e5cf27bd9db0e123342eebae63c34ad34 Mon Sep 17 00:00:00 2001 From: Christopher Dembia Date: Sun, 29 Mar 2020 12:15:39 -0700 Subject: [PATCH 2/3] Fix bindings for changes to CMakeLists and exporting the ezc3d target. --- CMakeLists.txt | 5 +++++ binding/ezc3d.i | 2 +- binding/matlab/CMakeLists.txt | 4 ++-- binding/matlab/ezc3dWrite.cpp | 8 ++++++-- binding/python3/CMakeLists.txt | 5 ----- include/Vector3d.h | 2 +- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 93392368..3510b347 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,11 @@ target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include" "${EZC3D_BINARY_DIR}/include" ) +# Include directories when other targets in this project use this library: +target_include_directories(${PROJECT_NAME} INTERFACE + $ + $ + ) # Install target if(WIN32) diff --git a/binding/ezc3d.i b/binding/ezc3d.i index 3a35cd5c..87cc31c5 100644 --- a/binding/ezc3d.i +++ b/binding/ezc3d.i @@ -50,7 +50,7 @@ namespace std { } } -// Includes all neceressary files from the API +// Includes all necessary files from the API %include "ezc3dConfig.h" %include "ezc3d.h" %include "Matrix.h" diff --git a/binding/matlab/CMakeLists.txt b/binding/matlab/CMakeLists.txt index 87d148b5..6e6bbbf4 100644 --- a/binding/matlab/CMakeLists.txt +++ b/binding/matlab/CMakeLists.txt @@ -15,6 +15,8 @@ foreach(SUFFIXES Read Write) # Add project add_library(${PROJECT_NAME}_${SUFFIXES} SHARED ${CPP_FILE_${SUFFIXES}} ${CMAKE_CURRENT_SOURCE_DIR}/Matlabdef.def) + target_link_libraries(${PROJECT_NAME}_${SUFFIXES} ezc3d) + # Reset the name of the output if(WIN32) SET_TARGET_PROPERTIES(${PROJECT_NAME}_${SUFFIXES} PROPERTIES OUTPUT_NAME ${MASTER_PROJECT_NAME}${SUFFIXES}) @@ -25,8 +27,6 @@ foreach(SUFFIXES Read Write) # Add headers target_include_directories(${PROJECT_NAME}_${SUFFIXES} PUBLIC ${Matlab_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CUREENT_SOURCE_DIR}/../../include ${EZC3D_BINARY_DIR}/include ) diff --git a/binding/matlab/ezc3dWrite.cpp b/binding/matlab/ezc3dWrite.cpp index 518e9945..fde58054 100644 --- a/binding/matlab/ezc3dWrite.cpp +++ b/binding/matlab/ezc3dWrite.cpp @@ -371,7 +371,9 @@ void mexFunction( } else if (type == ezc3d::DATA_TYPE::FLOAT) { std::vector data; parseParam(mxGetDoubles(valueField), dimension, data); - newParam.set(data, dimension); + newParam.set( + std::vector(data.begin(), data.end()), + dimension); } else if (type == ezc3d::DATA_TYPE::CHAR) { std::vector data; parseParam(valueField, dimension, data); @@ -386,7 +388,9 @@ void mexFunction( if (!valueField || mxIsDouble(valueField)) { std::vector data; parseParam(mxGetDoubles(valueField), dimension, data); - newParam.set(data, dimension); + newParam.set( + std::vector(data.begin(), data.end()), + dimension); } else if (mxIsCell(valueField)) { std::vector data; parseParam(valueField, dimension, data); diff --git a/binding/python3/CMakeLists.txt b/binding/python3/CMakeLists.txt index fbba6b53..7bd6240c 100644 --- a/binding/python3/CMakeLists.txt +++ b/binding/python3/CMakeLists.txt @@ -12,7 +12,6 @@ if(WIN32) endif() # For some reasons, target_include_directories later in the file sometime fails include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/../../include ${EZC3D_BINARY_DIR}/include ) @@ -25,10 +24,6 @@ SWIG_ADD_LIBRARY(${PROJECT_NAME} TYPE MODULE LANGUAGE python SOURCES ${I_SOURCE_ swig_link_libraries(${PROJECT_NAME} ${PROJECT_NAME} ${PYTHON_LIBRARIES} ${NUMPY_LIBRARIES}) # Add headers -target_include_directories(_${PROJECT_NAME} PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/../../include - ${EZC3D_BINARY_DIR}/include -) set_target_properties(_${PROJECT_NAME} PROPERTIES SWIG_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/../../include) if(APPLE) diff --git a/include/Vector3d.h b/include/Vector3d.h index 685d2590..1e51d8e7 100644 --- a/include/Vector3d.h +++ b/include/Vector3d.h @@ -8,7 +8,7 @@ /// \date March 25th, 2020 /// -#include +#include "Matrix.h" /// /// \brief 3D data From 950a20a90a2df363970799fdbee5ddf32b888487 Mon Sep 17 00:00:00 2001 From: Christopher Dembia Date: Sun, 29 Mar 2020 14:36:03 -0700 Subject: [PATCH 3/3] Use absolute RPATH for ezc3d. --- binding/python3/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/binding/python3/CMakeLists.txt b/binding/python3/CMakeLists.txt index 7bd6240c..08f20a1c 100644 --- a/binding/python3/CMakeLists.txt +++ b/binding/python3/CMakeLists.txt @@ -27,12 +27,12 @@ swig_link_libraries(${PROJECT_NAME} ${PROJECT_NAME} ${PYTHON_LIBRARIES} ${NUMPY_ set_target_properties(_${PROJECT_NAME} PROPERTIES SWIG_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/../../include) if(APPLE) - SET_TARGET_PROPERTIES(_${PROJECT_NAME} PROPERTIES SUFFIX ".so" INSTALL_RPATH ${${PROJECT_NAME}_BIN_FOLDER}) + set_target_properties(_${PROJECT_NAME} PROPERTIES SUFFIX ".so") set_property(TARGET _${PROJECT_NAME} APPEND PROPERTY LINK_FLAGS "-flat_namespace -undefined suppress") -else() - SET_TARGET_PROPERTIES(_${PROJECT_NAME} PROPERTIES INSTALL_RPATH ${${PROJECT_NAME}_BIN_FOLDER}) endif() -SET_TARGET_PROPERTIES(_${PROJECT_NAME} PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) +set_target_properties(_${PROJECT_NAME} PROPERTIES + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${${PROJECT_NAME}_BIN_FOLDER}") +set_target_properties(_${PROJECT_NAME} PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) # Install to the proper directories INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.py