diff --git a/CMakeLists.txt b/CMakeLists.txt index 39bf343c87325c8bb65d3aa904d6c9eeb0646e14..521afec5d1fcc6ad7ba56a85e26bcc383078ef08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,163 +1,156 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.1) +cmake_minimum_required(VERSION 3.1) # Project properties -SET(PROJECT_ORG stack-of-tasks) -SET(PROJECT_NAME dynamic-graph) -SET(PROJECT_DESCRIPTION "Dynamic graph library") -SET(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}") +set(PROJECT_ORG stack-of-tasks) +set(PROJECT_NAME dynamic-graph) +set(PROJECT_DESCRIPTION "Dynamic graph library") +set(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}") # Project options -OPTION(SUFFIX_SO_VERSION "Suffix library name with its version" ON) +option(SUFFIX_SO_VERSION "Suffix library name with its version" ON) # Project configuration -SET(PROJECT_USE_CMAKE_EXPORT TRUE) -SET(CUSTOM_HEADER_DIR ${PROJECT_NAME}) -SET(CXX_DISABLE_WERROR TRUE) +set(PROJECT_USE_CMAKE_EXPORT TRUE) +set(CUSTOM_HEADER_DIR ${PROJECT_NAME}) +set(CXX_DISABLE_WERROR TRUE) # Doxygen setup -SET(DOXYGEN_USE_MATHJAX YES) -SET(DOXYGEN_USE_TEMPLATE_CSS YES) +set(DOXYGEN_USE_MATHJAX YES) +set(DOXYGEN_USE_TEMPLATE_CSS YES) # JRL-cmakemodule setup -INCLUDE(cmake/base.cmake) -INCLUDE(cmake/boost.cmake) +include(cmake/base.cmake) +include(cmake/boost.cmake) # Project definition -COMPUTE_PROJECT_ARGS(PROJECT_ARGS LANGUAGES CXX) -PROJECT(${PROJECT_NAME} ${PROJECT_ARGS}) -CHECK_MINIMAL_CXX_STANDARD(14 ENFORCE) +compute_project_args(PROJECT_ARGS LANGUAGES CXX) +project(${PROJECT_NAME} ${PROJECT_ARGS}) +check_minimal_cxx_standard(14 ENFORCE) -INCLUDE(cmake/pthread.cmake) # needs to be included after the CXX definition +include(cmake/pthread.cmake) # needs to be included after the CXX definition # Project dependencies -IF(BUILD_TESTING) - FIND_PACKAGE(Boost REQUIRED COMPONENTS unit_test_framework) -ENDIF() -ADD_PROJECT_DEPENDENCY(Boost REQUIRED COMPONENTS serialization system thread) -ADD_PROJECT_DEPENDENCY(Eigen3 REQUIRED) -SEARCH_FOR_PTHREAD() - -IF(Boost_VERSION GREATER 107299 OR Boost_VERSION_MACRO GREATER 107299) +if(BUILD_TESTING) + find_package(Boost REQUIRED COMPONENTS unit_test_framework) +endif() +add_project_dependency(Boost REQUIRED COMPONENTS serialization system thread) +add_project_dependency(Eigen3 REQUIRED) +search_for_pthread() + +if(Boost_VERSION GREATER 107299 OR Boost_VERSION_MACRO GREATER 107299) # Silence a warning about a deprecated use of boost bind by boost >= 1.73 # without dropping support for boost < 1.73 - ADD_DEFINITIONS(-DBOOST_BIND_GLOBAL_PLACEHOLDERS) -ENDIF() + add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS) +endif() # Add configuration headers for plug-ins. -GENERATE_CONFIGURATION_HEADER( - ${HEADER_DIR} config-tracer.hh DG_TRACER tracer_EXPORTS) -GENERATE_CONFIGURATION_HEADER( - ${HEADER_DIR} - config-tracer-real-time.hh DG_TRACERREALTIME tracer_real_time_EXPORTS) +generate_configuration_header(${HEADER_DIR} config-tracer.hh DG_TRACER + tracer_EXPORTS) +generate_configuration_header(${HEADER_DIR} config-tracer-real-time.hh + DG_TRACERREALTIME tracer_real_time_EXPORTS) # Verbosity level -IF(NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\")) - ADD_DEFINITIONS(-DVP_DEBUG_MODE=${CMAKE_VERBOSITY_LEVEL} -DVP_DEBUG) -ENDIF(NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\")) +if(NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\")) + add_definitions(-DVP_DEBUG_MODE=${CMAKE_VERBOSITY_LEVEL} -DVP_DEBUG) +endif(NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\")) # Main Library -SET(${PROJECT_NAME}_HEADERS - include/${CUSTOM_HEADER_DIR}/fwd.hh - include/${CUSTOM_HEADER_DIR}/debug.h - include/${CUSTOM_HEADER_DIR}/real-time-logger.h - include/${CUSTOM_HEADER_DIR}/real-time-logger-def.h - - include/${CUSTOM_HEADER_DIR}/dynamic-graph-api.h - - include/${CUSTOM_HEADER_DIR}/entity.h - include/${CUSTOM_HEADER_DIR}/factory.h - include/${CUSTOM_HEADER_DIR}/pool.h - - include/${CUSTOM_HEADER_DIR}/exception-abstract.h - include/${CUSTOM_HEADER_DIR}/exception-factory.h - include/${CUSTOM_HEADER_DIR}/exception-signal.h - include/${CUSTOM_HEADER_DIR}/exception-traces.h - - include/${CUSTOM_HEADER_DIR}/signal.h - include/${CUSTOM_HEADER_DIR}/signal-array.h - include/${CUSTOM_HEADER_DIR}/signal-base.h - include/${CUSTOM_HEADER_DIR}/signal-ptr.h - include/${CUSTOM_HEADER_DIR}/signal-time-dependent.h - include/${CUSTOM_HEADER_DIR}/signal-ptr.t.cpp - include/${CUSTOM_HEADER_DIR}/signal.t.cpp - include/${CUSTOM_HEADER_DIR}/time-dependency.h - include/${CUSTOM_HEADER_DIR}/time-dependency.t.cpp - # Kept for a brittle backward compatiblity. - include/${CUSTOM_HEADER_DIR}/signal-caster.h - include/${CUSTOM_HEADER_DIR}/signal-cast-helper.h - include/${CUSTOM_HEADER_DIR}/all-signals.h - include/${CUSTOM_HEADER_DIR}/signal-helper.h - include/${CUSTOM_HEADER_DIR}/entity-helper.h - - include/${CUSTOM_HEADER_DIR}/tracer.h - include/${CUSTOM_HEADER_DIR}/tracer-real-time.h - - include/${CUSTOM_HEADER_DIR}/command.h - include/${CUSTOM_HEADER_DIR}/eigen-io.h - include/${CUSTOM_HEADER_DIR}/linear-algebra.h - include/${CUSTOM_HEADER_DIR}/value.h - - include/${CUSTOM_HEADER_DIR}/command-setter.h - include/${CUSTOM_HEADER_DIR}/command-setter.t.cpp - include/${CUSTOM_HEADER_DIR}/command-getter.h - include/${CUSTOM_HEADER_DIR}/command-getter.t.cpp - include/${CUSTOM_HEADER_DIR}/command-direct-getter.h - include/${CUSTOM_HEADER_DIR}/command-direct-setter.h - include/${CUSTOM_HEADER_DIR}/command-bind.h - include/${CUSTOM_HEADER_DIR}/all-commands.h - - include/${CUSTOM_HEADER_DIR}/logger.h - ) - -SET(${PROJECT_NAME}_SOURCES - src/debug/debug.cpp - src/debug/real-time-logger.cpp - src/debug/logger.cpp - - src/dgraph/entity.cpp - src/dgraph/factory.cpp - src/dgraph/pool.cpp - - src/exception/exception-abstract.cpp - src/exception/exception-factory.cpp - src/exception/exception-signal.cpp - src/exception/exception-traces.cpp - - src/mt/process-list.cpp - - src/signal/signal-array.cpp - - src/command/value.cpp - src/command/command.cpp - ) - -ADD_LIBRARY(${PROJECT_NAME} SHARED - ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS}) -MODERNIZE_TARGET_LINK_LIBRARIES(${PROJECT_NAME} SCOPE PUBLIC - TARGETS Eigen3::Eigen - INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR}) -TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:include>) -TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC Boost::serialization Boost::system Boost::thread) - -IF(UNIX) - TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${CMAKE_DL_LIBS} pthread) -ENDIF(UNIX) - -IF(SUFFIX_SO_VERSION) - SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION}) -ENDIF(SUFFIX_SO_VERSION) - -INSTALL(TARGETS ${PROJECT_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION lib) - - -SET(DYNAMIC_GRAPH_PLUGINDIR "lib/${PROJECT_NAME}-plugins") -SET(PACKAGE_EXTRA_MACROS "set(DYNAMIC_GRAPH_PLUGINDIR ${DYNAMIC_GRAPH_PLUGINDIR})") -SET(PKG_CONFIG_EXTRA "plugindir=${DYNAMIC_GRAPH_PLUGINDIR}") - -ADD_SUBDIRECTORY(src) -IF(BUILD_TESTING) - ADD_SUBDIRECTORY(tests) -ENDIF(BUILD_TESTING) - -PKG_CONFIG_APPEND_LIBS(${PROJECT_NAME}) -INSTALL(FILES package.xml DESTINATION share/${PROJECT_NAME}) +set(${PROJECT_NAME}_HEADERS + include/${CUSTOM_HEADER_DIR}/fwd.hh + include/${CUSTOM_HEADER_DIR}/debug.h + include/${CUSTOM_HEADER_DIR}/real-time-logger.h + include/${CUSTOM_HEADER_DIR}/real-time-logger-def.h + include/${CUSTOM_HEADER_DIR}/dynamic-graph-api.h + include/${CUSTOM_HEADER_DIR}/entity.h + include/${CUSTOM_HEADER_DIR}/factory.h + include/${CUSTOM_HEADER_DIR}/pool.h + include/${CUSTOM_HEADER_DIR}/exception-abstract.h + include/${CUSTOM_HEADER_DIR}/exception-factory.h + include/${CUSTOM_HEADER_DIR}/exception-signal.h + include/${CUSTOM_HEADER_DIR}/exception-traces.h + include/${CUSTOM_HEADER_DIR}/signal.h + include/${CUSTOM_HEADER_DIR}/signal-array.h + include/${CUSTOM_HEADER_DIR}/signal-base.h + include/${CUSTOM_HEADER_DIR}/signal-ptr.h + include/${CUSTOM_HEADER_DIR}/signal-time-dependent.h + include/${CUSTOM_HEADER_DIR}/signal-ptr.t.cpp + include/${CUSTOM_HEADER_DIR}/signal.t.cpp + include/${CUSTOM_HEADER_DIR}/time-dependency.h + include/${CUSTOM_HEADER_DIR}/time-dependency.t.cpp + # Kept for a brittle backward compatiblity. + include/${CUSTOM_HEADER_DIR}/signal-caster.h + include/${CUSTOM_HEADER_DIR}/signal-cast-helper.h + include/${CUSTOM_HEADER_DIR}/all-signals.h + include/${CUSTOM_HEADER_DIR}/signal-helper.h + include/${CUSTOM_HEADER_DIR}/entity-helper.h + include/${CUSTOM_HEADER_DIR}/tracer.h + include/${CUSTOM_HEADER_DIR}/tracer-real-time.h + include/${CUSTOM_HEADER_DIR}/command.h + include/${CUSTOM_HEADER_DIR}/eigen-io.h + include/${CUSTOM_HEADER_DIR}/linear-algebra.h + include/${CUSTOM_HEADER_DIR}/value.h + include/${CUSTOM_HEADER_DIR}/command-setter.h + include/${CUSTOM_HEADER_DIR}/command-setter.t.cpp + include/${CUSTOM_HEADER_DIR}/command-getter.h + include/${CUSTOM_HEADER_DIR}/command-getter.t.cpp + include/${CUSTOM_HEADER_DIR}/command-direct-getter.h + include/${CUSTOM_HEADER_DIR}/command-direct-setter.h + include/${CUSTOM_HEADER_DIR}/command-bind.h + include/${CUSTOM_HEADER_DIR}/all-commands.h + include/${CUSTOM_HEADER_DIR}/logger.h) + +set(${PROJECT_NAME}_SOURCES + src/debug/debug.cpp + src/debug/real-time-logger.cpp + src/debug/logger.cpp + src/dgraph/entity.cpp + src/dgraph/factory.cpp + src/dgraph/pool.cpp + src/exception/exception-abstract.cpp + src/exception/exception-factory.cpp + src/exception/exception-signal.cpp + src/exception/exception-traces.cpp + src/mt/process-list.cpp + src/signal/signal-array.cpp + src/command/value.cpp + src/command/command.cpp) + +add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} + ${${PROJECT_NAME}_HEADERS}) +modernize_target_link_libraries( + ${PROJECT_NAME} + SCOPE + PUBLIC + TARGETS + Eigen3::Eigen + INCLUDE_DIRS + ${EIGEN3_INCLUDE_DIR}) +target_include_directories(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:include>) +target_link_libraries(${PROJECT_NAME} PUBLIC Boost::serialization Boost::system + Boost::thread) + +if(UNIX) + target_link_libraries(${PROJECT_NAME} PUBLIC ${CMAKE_DL_LIBS} pthread) +endif(UNIX) + +if(SUFFIX_SO_VERSION) + set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION}) +endif(SUFFIX_SO_VERSION) + +install( + TARGETS ${PROJECT_NAME} + EXPORT ${TARGETS_EXPORT_NAME} + DESTINATION lib) + +set(DYNAMIC_GRAPH_PLUGINDIR "lib/${PROJECT_NAME}-plugins") +set(PACKAGE_EXTRA_MACROS + "set(DYNAMIC_GRAPH_PLUGINDIR ${DYNAMIC_GRAPH_PLUGINDIR})") +set(PKG_CONFIG_EXTRA "plugindir=${DYNAMIC_GRAPH_PLUGINDIR}") + +add_subdirectory(src) +if(BUILD_TESTING) + add_subdirectory(tests) +endif(BUILD_TESTING) + +pkg_config_append_libs(${PROJECT_NAME}) +install(FILES package.xml DESTINATION share/${PROJECT_NAME}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index aefe1153853ac8e99079af16cdd4dec3ccf727f6..59a0b0c35eb4f6be4f87a46f602f07162e59dae3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,23 +1,24 @@ -SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) -SET(plugins - traces/tracer - traces/tracer-real-time - ) +set(plugins traces/tracer traces/tracer-real-time) -SET(tracer-real-time_deps tracer) +set(tracer-real-time_deps tracer) -FOREACH(plugin ${plugins}) - GET_FILENAME_COMPONENT(LIBRARY_NAME ${plugin} NAME) - ADD_LIBRARY(${LIBRARY_NAME} SHARED "${plugin}.cpp") +foreach(plugin ${plugins}) + get_filename_component(LIBRARY_NAME ${plugin} NAME) + add_library(${LIBRARY_NAME} SHARED "${plugin}.cpp") - IF(SUFFIX_SO_VERSION) - SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION}) - ENDIF(SUFFIX_SO_VERSION) - SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES INSTALL_RPATH $ORIGIN) + if(SUFFIX_SO_VERSION) + set_target_properties(${LIBRARY_NAME} PROPERTIES SOVERSION + ${PROJECT_VERSION}) + endif(SUFFIX_SO_VERSION) + set_target_properties(${LIBRARY_NAME} PROPERTIES INSTALL_RPATH $ORIGIN) - TARGET_LINK_LIBRARIES(${LIBRARY_NAME} PUBLIC ${PROJECT_NAME} ${${LIBRARY_NAME}_deps}) + target_link_libraries(${LIBRARY_NAME} PUBLIC ${PROJECT_NAME} + ${${LIBRARY_NAME}_deps}) - INSTALL(TARGETS ${LIBRARY_NAME} EXPORT ${TARGETS_EXPORT_NAME} + install( + TARGETS ${LIBRARY_NAME} + EXPORT ${TARGETS_EXPORT_NAME} DESTINATION ${DYNAMIC_GRAPH_PLUGINDIR}) -ENDFOREACH(plugin) +endforeach(plugin) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b323c6c7adb8db4d08ba55b41c95b79942c9261c..5fed2f9f489e901ec3ead199ffc273e159124650 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,46 +1,47 @@ # Copyright 2010-2020, Olivier Stasse, Guilhem Saurel, JRL, CNRS/AIST, LAAS-CNRS -ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN) +add_definitions(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN) -ADD_DEFINITIONS(-DTESTS_DATADIR="${CMAKE_CURRENT_SOURCE_DIR}/data") -ADD_DEFINITIONS(-DTESTS_PLUGINDIR="${LIBRARY_OUTPUT_PATH}") -ADD_DEFINITIONS(-DTESTS_DYNLIBSUFFIX="${CMAKE_SHARED_LIBRARY_SUFFIX}") +add_definitions(-DTESTS_DATADIR="${CMAKE_CURRENT_SOURCE_DIR}/data") +add_definitions(-DTESTS_PLUGINDIR="${LIBRARY_OUTPUT_PATH}") +add_definitions(-DTESTS_DYNLIBSUFFIX="${CMAKE_SHARED_LIBRARY_SUFFIX}") -MACRO(DYNAMIC_GRAPH_TEST NAME) - ADD_UNIT_TEST(${NAME} "${NAME}.cpp") - TARGET_LINK_LIBRARIES(${NAME} PRIVATE ${PROJECT_NAME} Boost::unit_test_framework) -ENDMACRO(DYNAMIC_GRAPH_TEST) +macro(DYNAMIC_GRAPH_TEST NAME) + add_unit_test(${NAME} "${NAME}.cpp") + target_link_libraries(${NAME} PRIVATE ${PROJECT_NAME} + Boost::unit_test_framework) +endmacro(DYNAMIC_GRAPH_TEST) # Signal cast test. -SET(signalcast_libs signal-cast-registerer-libA signal-cast-registerer-libB) +set(signalcast_libs signal-cast-registerer-libA signal-cast-registerer-libB) -FOREACH(lib ${signalcast_libs}) - ADD_LIBRARY(${lib} SHARED "${lib}.cpp") - TARGET_LINK_LIBRARIES(${lib} PRIVATE ${PROJECT_NAME}) -ENDFOREACH() +foreach(lib ${signalcast_libs}) + add_library(${lib} SHARED "${lib}.cpp") + target_link_libraries(${lib} PRIVATE ${PROJECT_NAME}) +endforeach() -DYNAMIC_GRAPH_TEST(signal-cast-registerer) +dynamic_graph_test(signal-cast-registerer) # Unit testing. -IF(NOT APPLE) - DYNAMIC_GRAPH_TEST(entity) -ENDIF(NOT APPLE) -DYNAMIC_GRAPH_TEST(custom-entity) -DYNAMIC_GRAPH_TEST(factory) -DYNAMIC_GRAPH_TEST(pool) -DYNAMIC_GRAPH_TEST(signal-time-dependent) -DYNAMIC_GRAPH_TEST(value) -DYNAMIC_GRAPH_TEST(signal-ptr) -DYNAMIC_GRAPH_TEST(real-time-logger) -DYNAMIC_GRAPH_TEST(debug-trace) -DYNAMIC_GRAPH_TEST(debug-tracer) -TARGET_LINK_LIBRARIES(debug-tracer PRIVATE tracer) -DYNAMIC_GRAPH_TEST(debug-real-time-tracer) -TARGET_LINK_LIBRARIES(debug-real-time-tracer PRIVATE tracer-real-time tracer) -DYNAMIC_GRAPH_TEST(debug-logger) -DYNAMIC_GRAPH_TEST(debug-logger-winit) -DYNAMIC_GRAPH_TEST(signal-all) -DYNAMIC_GRAPH_TEST(command-test) -DYNAMIC_GRAPH_TEST(test-mt) -TARGET_LINK_LIBRARIES(test-mt PRIVATE tracer) -DYNAMIC_GRAPH_TEST(exceptions) +if(NOT APPLE) + dynamic_graph_test(entity) +endif(NOT APPLE) +dynamic_graph_test(custom-entity) +dynamic_graph_test(factory) +dynamic_graph_test(pool) +dynamic_graph_test(signal-time-dependent) +dynamic_graph_test(value) +dynamic_graph_test(signal-ptr) +dynamic_graph_test(real-time-logger) +dynamic_graph_test(debug-trace) +dynamic_graph_test(debug-tracer) +target_link_libraries(debug-tracer PRIVATE tracer) +dynamic_graph_test(debug-real-time-tracer) +target_link_libraries(debug-real-time-tracer PRIVATE tracer-real-time tracer) +dynamic_graph_test(debug-logger) +dynamic_graph_test(debug-logger-winit) +dynamic_graph_test(signal-all) +dynamic_graph_test(command-test) +dynamic_graph_test(test-mt) +target_link_libraries(test-mt PRIVATE tracer) +dynamic_graph_test(exceptions)