Skip to content

Commit cbd38e4

Browse files
authored
Merge pull request #36 from jorisv/topic/workspace
Enable jrl-cmakemodules workspace compatiblity
2 parents bb7d6b5 + ee1eab6 commit cbd38e4

File tree

4 files changed

+52
-15
lines changed

4 files changed

+52
-15
lines changed

CMakeLists.txt

+43-6
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ SET(PROJECT_DESCRIPTION "Python bindings for CppAD and CppADCodeGen using Boost.
99
SET(PROJECT_URL "https://github.com/simple-robotics/pycppad")
1010
SET(PROJECT_CUSTOM_HEADER_EXTENSION "hpp")
1111
SET(PROJECT_USE_CMAKE_EXPORT TRUE)
12+
# To enable jrl-cmakemodules compatibility with workspace we must define the two
13+
# following lines
14+
SET(PROJECT_AUTO_RUN_FINALIZE FALSE)
15+
SET(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR})
1216

1317

1418
# Project configuration
@@ -17,15 +21,44 @@ SET(CMAKE_VERBOSE_MAKEFILE TRUE)
1721
SET(CXX_DISABLE_WERROR TRUE)
1822

1923
# Check if the submodule cmake have been initialized
20-
IF(NOT EXISTS "${CMAKE_SOURCE_DIR}/cmake/base.cmake")
24+
SET(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake")
25+
IF(NOT EXISTS "${JRL_CMAKE_MODULES}/base.cmake")
2126
MESSAGE(FATAL_ERROR "\nPlease run the following command first:\ngit submodule update --init\n")
2227
ENDIF()
2328

24-
INCLUDE(cmake/base.cmake)
25-
INCLUDE(cmake/boost.cmake)
26-
INCLUDE(cmake/ide.cmake)
27-
28-
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/find-external/CppAD/" ${CMAKE_MODULE_PATH})
29+
if(EXISTS "${JRL_CMAKE_MODULES}/base.cmake")
30+
message(STATUS "JRL cmakemodules found in 'cmake/' git submodule")
31+
else()
32+
find_package(jrl-cmakemodules QUIET CONFIG)
33+
if(jrl-cmakemodules_FOUND)
34+
get_property(
35+
JRL_CMAKE_MODULES
36+
TARGET jrl-cmakemodules::jrl-cmakemodules
37+
PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
38+
message(STATUS "JRL cmakemodules found on system at ${JRL_CMAKE_MODULES}")
39+
elseif(${CMAKE_VERSION} VERSION_LESS "3.14.0")
40+
message(
41+
FATAL_ERROR
42+
"\nCan't find jrl-cmakemodules. Please either:\n"
43+
" - use git submodule: 'git submodule update --init'\n"
44+
" - or install https://github.com/jrl-umi3218/jrl-cmakemodules\n"
45+
" - or upgrade your CMake version to >= 3.14 to allow automatic fetching\n")
46+
else()
47+
message(STATUS "JRL cmakemodules not found. Let's fetch it.")
48+
include(FetchContent)
49+
FetchContent_Declare("jrl-cmakemodules"
50+
GIT_REPOSITORY "https://github.com/jrl-umi3218/jrl-cmakemodules.git")
51+
FetchContent_MakeAvailable("jrl-cmakemodules")
52+
FetchContent_GetProperties("jrl-cmakemodules" SOURCE_DIR JRL_CMAKE_MODULES)
53+
endif()
54+
endif()
55+
56+
INCLUDE(${JRL_CMAKE_MODULES}/base.cmake)
57+
INCLUDE(${JRL_CMAKE_MODULES}/boost.cmake)
58+
INCLUDE(${JRL_CMAKE_MODULES}/ide.cmake)
59+
INCLUDE(${JRL_CMAKE_MODULES}/python.cmake)
60+
61+
SET(CMAKE_MODULE_PATH "${JRL_CMAKE_MODULES}/find-external/CppAD/" ${CMAKE_MODULE_PATH})
2962

3063
# Project definition
3164
COMPUTE_PROJECT_ARGS(PROJECT_ARGS LANGUAGES CXX)
@@ -47,6 +80,8 @@ ENDIF(BUILD_WITH_CPPAD_CODEGEN_BINDINGS)
4780

4881
ADD_PROJECT_DEPENDENCY(cppad 20180000.0 REQUIRED PKG_CONFIG_REQUIRES "cppad >= 20180000.0")
4982
ADD_PROJECT_DEPENDENCY(Eigen3 REQUIRED PKG_CONFIG_REQUIRES "eigen3 >= 3.0.5")
83+
SET(PYTHON_COMPONENTS Interpreter Development NumPy)
84+
FINDPYTHON(REQUIRED)
5085
ADD_PROJECT_DEPENDENCY(eigenpy 2.7.14 REQUIRED)
5186

5287
SET(${PROJECT_NAME}_HEADERS
@@ -140,3 +175,5 @@ PKG_CONFIG_APPEND_BOOST_LIBS(${BOOST_COMPONENTS})
140175

141176
# Install catkin package.xml
142177
INSTALL(FILES package.xml DESTINATION share/${PROJECT_NAME})
178+
179+
setup_project_finalize()

example/CMakeLists.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ADD_PYTHON_UNIT_TEST("add_eq" "example/add_eq.py" "python")
1+
ADD_PYTHON_UNIT_TEST("${PROJECT_NAME}-add_eq" "example/add_eq.py" "python")
22
IF(BUILD_WITH_CPPAD_CODEGEN_BINDINGS)
3-
ADD_PYTHON_UNIT_TEST("cppadcg_c_codegen" "example/cppadcg_c_codegen.py" "python")
4-
ENDIF(BUILD_WITH_CPPAD_CODEGEN_BINDINGS)
3+
ADD_PYTHON_UNIT_TEST("${PROJECT_NAME}-cppadcg_c_codegen" "example/cppadcg_c_codegen.py" "python")
4+
ENDIF()

python/CMakeLists.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ SET(PYWRAP ${PYWRAP} PARENT_SCOPE)
88

99
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/python/${PROJECT_NAME}")
1010

11-
ADD_CUSTOM_TARGET(python)
12-
SET_TARGET_PROPERTIES(python PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True)
11+
ADD_CUSTOM_TARGET(${PROJECT_NAME}_python)
12+
SET_TARGET_PROPERTIES(${PROJECT_NAME}_python PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True)
1313

1414
ADD_LIBRARY(${PYWRAP} SHARED main.cpp)
15-
ADD_DEPENDENCIES(python ${PYWRAP})
15+
ADD_DEPENDENCIES(${PROJECT_NAME}_python ${PYWRAP})
1616
TARGET_LINK_LIBRARIES(${PYWRAP} PUBLIC ${PROJECT_NAME})
1717
TARGET_LINK_BOOST_PYTHON(${PYWRAP} PUBLIC)
1818
# BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS spews conversion warnings from int to long unsigned int.
@@ -35,9 +35,9 @@ SET_TARGET_PROPERTIES(${PYWRAP}
3535
PREFIX ""
3636
SUFFIX ${PYTHON_EXT_SUFFIX}
3737
OUTPUT_NAME "${PYWRAP}"
38-
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/python/${PROJECT_NAME}"
38+
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}"
3939
# On Windows, shared library are treated as binary
40-
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/python/${PROJECT_NAME}"
40+
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}"
4141
)
4242

4343
IF(UNIX AND NOT APPLE)

0 commit comments

Comments
 (0)