Skip to content
This repository was archived by the owner on Nov 28, 2025. It is now read-only.

Commit a97950c

Browse files
committed
[CMake] clean: keep minimal required instructions
1 parent 65fd0c4 commit a97950c

22 files changed

+145
-215
lines changed

CMakeLists.txt

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,74 @@
22

33
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
44

5-
SET(PROJECT_NAMESPACE stack-of-tasks)
5+
# Project properties
6+
SET(PROJECT_ORG stack-of-tasks)
67
SET(PROJECT_NAME dynamic-graph-python)
78
SET(PROJECT_DESCRIPTION "Dynamic graph library Python bindings")
8-
SET(PROJECT_URL "http://github.com/${PROJECT_NAMESPACE}/${PROJECT_NAME}")
9+
SET(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}")
910

11+
# Project options
12+
OPTION(SUFFIX_SO_VERSION "Suffix library name with its version" ON)
13+
14+
# Project configuration
1015
SET(PROJECT_USE_CMAKE_EXPORT TRUE)
1116
SET(CUSTOM_HEADER_DIR "dynamic-graph/python")
1217
SET(CXX_DISABLE_WERROR TRUE)
1318
SET(DOXYGEN_USE_MATHJAX YES)
1419

20+
# JRL-cmakemodule setup
1521
INCLUDE(cmake/base.cmake)
1622
INCLUDE(cmake/boost.cmake)
17-
INCLUDE(cmake/eigen.cmake)
1823
INCLUDE(cmake/python.cmake)
19-
INCLUDE(cmake/test.cmake)
2024
INCLUDE(cmake/sphinx.cmake)
2125

22-
SET(PKG_CONFIG_ADDITIONAL_VARIABLES plugindir ${PKG_CONFIG_ADDITIONAL_VARIABLES})
23-
24-
OPTION(SUFFIX_SO_VERSION
25-
"Suffix shared library name by a string depending on git status of project"
26-
ON)
27-
26+
# Project definition
2827
COMPUTE_PROJECT_ARGS(PROJECT_ARGS LANGUAGES CXX)
2928
PROJECT(${PROJECT_NAME} ${PROJECT_ARGS})
3029

30+
# Project dependencies
3131
FINDPYTHON()
32-
INCLUDE_DIRECTORIES(SYSTEM ${PYTHON_INCLUDE_DIRS})
3332

34-
ADD_PROJECT_DEPENDENCY(Eigen3 REQUIRED PKG_CONFIG_REQUIRES eigen3)
3533
ADD_PROJECT_DEPENDENCY(dynamic-graph REQUIRED PKG_CONFIG_REQUIRES dynamic-graph)
36-
37-
PKG_CONFIG_APPEND_LIBS("dynamic-graph-python")
38-
3934
SET(BOOST_COMPONENTS filesystem system thread program_options unit_test_framework python)
4035
SEARCH_FOR_BOOST()
4136

37+
38+
# Main Library
39+
SET(${PROJECT_NAME}_HEADERS
40+
include/${CUSTOM_HEADER_DIR}/api.hh
41+
include/${CUSTOM_HEADER_DIR}/convert-dg-to-py.hh
42+
include/${CUSTOM_HEADER_DIR}/dynamic-graph-py.hh
43+
include/${CUSTOM_HEADER_DIR}/exception.hh
44+
include/${CUSTOM_HEADER_DIR}/exception-python.hh
45+
include/${CUSTOM_HEADER_DIR}/interpreter.hh
46+
include/${CUSTOM_HEADER_DIR}/python-compat.hh
47+
include/${CUSTOM_HEADER_DIR}/signal-wrapper.hh
48+
)
49+
50+
SET(${PROJECT_NAME}_SOURCES
51+
src/interpreter.cc
52+
src/dynamic_graph/python-compat.cc
53+
)
54+
55+
ADD_LIBRARY(${PROJECT_NAME} SHARED
56+
${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS})
57+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${PYTHON_INCLUDE_DIRS})
58+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:include>)
59+
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${Boost_LIBRARIES}
60+
${PYTHON_LIBRARY} ${Boost_PYTHON_LIBRARIES} dynamic-graph::dynamic-graph)
61+
62+
IF(SUFFIX_SO_VERSION)
63+
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
64+
ENDIF(SUFFIX_SO_VERSION)
65+
66+
TARGET_COMPILE_DEFINITIONS(${PROJECT_NAME} PRIVATE PYTHON_LIBRARY="${PYTHON_LIBRARY}")
67+
68+
INSTALL(TARGETS ${PROJECT_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION lib)
69+
4270
ADD_SUBDIRECTORY(src)
43-
ADD_SUBDIRECTORY(include/${CUSTOM_HEADER_DIR})
4471
ADD_SUBDIRECTORY(doc)
45-
ADD_SUBDIRECTORY(unitTesting)
72+
ADD_SUBDIRECTORY(tests)
4673

74+
PKG_CONFIG_APPEND_LIBS(${PROJECT_NAME})
4775
INSTALL(FILES package.xml DESTINATION share/${PROJECT_NAME})

include/dynamic-graph/python/CMakeLists.txt

Lines changed: 0 additions & 17 deletions
This file was deleted.

include/dynamic-graph/python/link-to-python.hh.in

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/CMakeLists.txt

Lines changed: 14 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,21 @@
1-
# Copyright 2010-2020, Florent Lamiraux, Thomas Moulard, Olivier Stasse, Guilhem Saurel, JRL, CNRS/AIST, LAAS-CNRS
2-
3-
#
4-
#
5-
# Python interpreter
6-
#
7-
#
8-
9-
SET(LIBRARY_NAME ${PROJECT_NAME})
10-
ADD_LIBRARY(${LIBRARY_NAME} SHARED interpreter.cc dynamic_graph/python-compat.cc)
11-
12-
TARGET_INCLUDE_DIRECTORIES(${LIBRARY_NAME}
13-
PUBLIC
14-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
15-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
16-
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include>
17-
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/>
18-
INTERFACE
19-
$<INSTALL_INTERFACE:include>
20-
)
21-
22-
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${PYTHON_LIBRARY})
23-
24-
IF(UNIX)
25-
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${Boost_LIBRARIES})
26-
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${Boost_PYTHON_LIBRARIES})
27-
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${CMAKE_DL_LIBS})
28-
ENDIF(UNIX)
29-
30-
IF (SUFFIX_SO_VERSION)
31-
SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
32-
ENDIF ()
33-
34-
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} dynamic-graph::dynamic-graph)
35-
36-
INSTALL(TARGETS ${LIBRARY_NAME}
37-
EXPORT ${TARGETS_EXPORT_NAME}
38-
PUBLIC_HEADER
39-
INCLUDES DESTINATION include
40-
LIBRARY DESTINATION lib
41-
ARCHIVE DESTINATION lib
42-
)
43-
44-
#
45-
#
461
# Python bindings
47-
#
48-
#
492

503
ADD_SUBDIRECTORY(dynamic_graph)
514

52-
SET (PYTHON_SOURCES
53-
__init__.py
54-
attrpath.py
55-
entity.py
56-
signal_base.py
57-
script_shortcuts.py
58-
tools.py
59-
)
5+
SET(PYTHON_SOURCES
6+
__init__.py
7+
attrpath.py
8+
entity.py
9+
signal_base.py
10+
script_shortcuts.py
11+
tools.py
12+
)
6013

61-
FOREACH (SOURCE ${PYTHON_SOURCES})
62-
PYTHON_INSTALL_ON_SITE(dynamic_graph ${SOURCE})
63-
ENDFOREACH (SOURCE)
14+
FOREACH(source ${PYTHON_SOURCES})
15+
PYTHON_INSTALL_ON_SITE(dynamic_graph ${source})
16+
ENDFOREACH(source)
6417

6518
# --- ADD the wrap on the dg modules
66-
# Tracer plugin
67-
IF(WIN32)
68-
SET(TRACER_PLUGIN ${DYNAMIC_GRAPH_PLUGINDIR}/tracer${CMAKE_STATIC_LIBRARY_SUFFIX})
69-
ELSE(WIN32)
70-
SET(TRACER_PLUGIN ${DYNAMIC_GRAPH_PLUGINDIR}/tracer${CMAKE_SHARED_LIBRARY_SUFFIX})
71-
ENDIF(WIN32)
72-
DYNAMIC_GRAPH_PYTHON_MODULE("tracer" ${TRACER_PLUGIN} tracer-wrap)
73-
74-
# TracerRealTime plugin
75-
IF(WIN32)
76-
SET(TRACERREALTIME_PLUGIN ${DYNAMIC_GRAPH_PLUGINDIR}/tracer-real-time${CMAKE_STATIC_LIBRARY_SUFFIX})
77-
ELSE(WIN32)
78-
SET(TRACERREALTIME_PLUGIN ${DYNAMIC_GRAPH_PLUGINDIR}/tracer-real-time${CMAKE_SHARED_LIBRARY_SUFFIX})
79-
ENDIF(WIN32)
80-
DYNAMIC_GRAPH_PYTHON_MODULE("tracer_real_time" ${TRACERREALTIME_PLUGIN} tracer_real_time-wrap)
19+
LINK_DIRECTORIES(${DYNAMIC_GRAPH_PLUGINDIR})
20+
DYNAMIC_GRAPH_PYTHON_MODULE("tracer" tracer tracer-wrap)
21+
DYNAMIC_GRAPH_PYTHON_MODULE("tracer_real_time" tracer-real-time tracer_real_time-wrap)

src/dynamic_graph/CMakeLists.txt

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,26 @@
22

33
SET(PYTHON_MODULE wrap)
44

5-
ADD_LIBRARY(${PYTHON_MODULE}
6-
MODULE
7-
convert-dg-to-py.cc
8-
debug-py.cc
9-
dynamic-graph-py.cc
10-
entity-py.cc
11-
exception-python.cc
12-
factory-py.cc
13-
pool-py.cc
14-
python-compat.cc
15-
signal-base-py.cc
16-
signal-caster-py.cc
17-
signal-wrapper.cc
18-
)
5+
ADD_LIBRARY(${PYTHON_MODULE} MODULE
6+
convert-dg-to-py.cc
7+
debug-py.cc
8+
dynamic-graph-py.cc
9+
entity-py.cc
10+
exception-python.cc
11+
factory-py.cc
12+
pool-py.cc
13+
python-compat.cc
14+
signal-base-py.cc
15+
signal-caster-py.cc
16+
signal-wrapper.cc
17+
)
1918

20-
TARGET_LINK_LIBRARIES(${PYTHON_MODULE} ${PYTHON_LIBRARY})
21-
TARGET_LINK_LIBRARIES(${PYTHON_MODULE} dynamic-graph::dynamic-graph)
19+
TARGET_INCLUDE_DIRECTORIES(${PYTHON_MODULE} SYSTEM PUBLIC ${PYTHON_INCLUDE_DIRS})
20+
TARGET_LINK_LIBRARIES(${PYTHON_MODULE} ${PYTHON_LIBRARY}
21+
dynamic-graph::dynamic-graph)
2222

2323
# Remove prefix lib
24-
SET_TARGET_PROPERTIES(${PYTHON_MODULE}
25-
PROPERTIES PREFIX "")
24+
SET_TARGET_PROPERTIES(${PYTHON_MODULE} PROPERTIES PREFIX "")
2625

2726
INSTALL(TARGETS ${PYTHON_MODULE}
2827
EXPORT ${TARGETS_EXPORT_NAME}

src/interpreter.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
// -*- mode: c++ -*-
22
// Copyright 2011, Florent Lamiraux, CNRS.
33

4+
#ifdef WIN32
5+
#include <Windows.h>
6+
#else
7+
#include <dlfcn.h>
8+
#endif
9+
410
#include <iostream>
511
#include "dynamic-graph/debug.h"
612
#include "dynamic-graph/python/interpreter.hh"
7-
#include "dynamic-graph/python/link-to-python.hh"
813

914
std::ofstream dg_debugfile("/tmp/dynamic-graph-traces.txt", std::ios::trunc& std::ios::out);
1015

@@ -61,7 +66,7 @@ Interpreter::Interpreter() {
6166
// load python dynamic library
6267
// this is silly, but required to be able to import dl module.
6368
#ifndef WIN32
64-
dlopen(libpython.c_str(), RTLD_LAZY | RTLD_GLOBAL);
69+
dlopen(PYTHON_LIBRARY, RTLD_LAZY | RTLD_GLOBAL);
6570
#endif
6671
Py_Initialize();
6772
PyEval_InitThreads();

tests/CMakeLists.txt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Copyright 2010-2020, Florent Lamiraux, Thomas Moulard, Olivier Stasse, Guilhem Saurel, JRL, CNRS/AIST, LAAS-CNRS
2+
3+
# Test the interpreter
4+
ADD_UNIT_TEST(interpreter-test interpreter-test.cc)
5+
TARGET_LINK_LIBRARIES(interpreter-test ${PROJECT_NAME})
6+
7+
# Test runfile
8+
ADD_UNIT_TEST(interpreter-test-runfile interpreter-test-runfile.cc)
9+
TARGET_LINK_LIBRARIES(interpreter-test-runfile ${PYTHON_LIBRARY} ${Boost_LIBRARIES} ${PROJECT_NAME})
10+
TARGET_COMPILE_DEFINITIONS(interpreter-test-runfile PRIVATE PATH="${CMAKE_CURRENT_LIST_DIR}/")
11+
12+
# Test the module generation
13+
## Create an entity
14+
15+
SET(LIBRARY_NAME "custom_entity")
16+
ADD_LIBRARY(${LIBRARY_NAME} SHARED "${LIBRARY_NAME}.cpp")
17+
IF(SUFFIX_SO_VERSION)
18+
SET_TARGET_PROPERTIES(${LIBRARY_NAME}
19+
PROPERTIES SOVERSION ${PROJECT_VERSION})
20+
ENDIF(SUFFIX_SO_VERSION)
21+
22+
target_link_libraries(${LIBRARY_NAME} dynamic-graph::dynamic-graph)
23+
24+
## Create its bindings
25+
## This mimics DYNAMIC_GRAPH_PYTHON_MODULE(${LIBRARY_NAME} ${LIBRARY_NAME} "${LIBRARY_NAME}-wrap")
26+
27+
CONFIGURE_FILE(
28+
${PROJECT_SOURCE_DIR}/cmake/dynamic_graph/submodule/__init__.py.cmake
29+
${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}/__init__.py
30+
)
31+
SET(PYTHON_MODULE "${LIBRARY_NAME}-wrap")
32+
SET(SOURCE_PYTHON_MODULE "cmake/dynamic_graph/python-module-py.cc")
33+
ADD_LIBRARY(${PYTHON_MODULE} MODULE ${PROJECT_SOURCE_DIR}/${SOURCE_PYTHON_MODULE})
34+
SET_TARGET_PROPERTIES(${PYTHON_MODULE} PROPERTIES
35+
PREFIX ""
36+
OUTPUT_NAME ${LIBRARY_NAME}/wrap)
37+
38+
TARGET_LINK_LIBRARIES(${PYTHON_MODULE} "-Wl,--no-as-needed")
39+
TARGET_LINK_LIBRARIES(${PYTHON_MODULE} ${LIBRARY_NAME} ${PYTHON_LIBRARY})
40+
TARGET_INCLUDE_DIRECTORIES(${PYTHON_MODULE} SYSTEM PUBLIC ${PYTHON_INCLUDE_DIRS})
41+
42+
## Test it
43+
ADD_PYTHON_UNIT_TEST("test-custom-entity" "tests/test_custom_entity.py" src tests)
44+
45+
# also test other bindings, using this custom entity
46+
ADD_PYTHON_UNIT_TEST("test-bindings" "tests/test_bindings.py" src tests)

0 commit comments

Comments
 (0)