Skip to content

Commit 483597f

Browse files
authored
[CMake] Improve package granularity + Clean (#242)
* [CMake] Improve package granularity + Clean Adds the possibility to do: find_package(SofaPython3 REQUIRED COMPONENTS Plugin Bindings.Modules Bindings.Sofa Bindings.SofaGui Bindings.SofaRuntime Bindings.SofaTypes ) And thus to not depend on Bindings.SofaGui if not needed. * [CMake] FIX SP3_add_python_module DESTINATION * [CMake] Fix compatibility with old CMake
1 parent 571e470 commit 483597f

25 files changed

Lines changed: 236 additions & 100 deletions

CMake/SofaPython3Tools.cmake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,13 @@ function(SP3_add_python_module)
342342
LIBRARY DESTINATION "lib/${SP3_PYTHON_PACKAGES_DIRECTORY}/${DESTINATION}" COMPONENT libraries
343343
ARCHIVE DESTINATION "lib/${SP3_PYTHON_PACKAGES_DIRECTORY}/${DESTINATION}" COMPONENT libraries
344344
)
345+
elseif (DESTINATION)
346+
install(
347+
TARGETS ${A_TARGET}
348+
RUNTIME DESTINATION "lib/${SP3_PYTHON_PACKAGES_DIRECTORY}/${DESTINATION}" COMPONENT applications
349+
LIBRARY DESTINATION "lib/${SP3_PYTHON_PACKAGES_DIRECTORY}/${DESTINATION}" COMPONENT libraries
350+
ARCHIVE DESTINATION "lib/${SP3_PYTHON_PACKAGES_DIRECTORY}/${DESTINATION}" COMPONENT libraries
351+
)
345352
endif()
346353

347354
foreach(header ${A_HEADERS})

Plugin/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ add_library(SofaPython3::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
4848

4949
target_compile_definitions(${PROJECT_NAME} PRIVATE "-DSOFA_BUILD_SOFAPYTHON3")
5050

51-
target_link_libraries(${PROJECT_NAME} PUBLIC SofaCore SofaDefaultType SofaSimulationCore SofaSimulationGraph Sofa.Helper)
51+
target_link_libraries(${PROJECT_NAME} PUBLIC Sofa.Core Sofa.DefaultType Sofa.SimulationCore SofaSimulationGraph Sofa.Helper)
5252
target_link_libraries(${PROJECT_NAME} PUBLIC pybind11::module pybind11::embed)
5353

5454
if(SP3_BUILD_TEST AND Sofa.Testing_FOUND)

Plugin/PluginConfig.cmake.in

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
# CMake package configuration file for the @PROJECT_NAME@ module
1+
# CMake package configuration file for @PROJECT_NAME@
2+
23
@PACKAGE_GUARD@
34
@PACKAGE_INIT@
45

56
set(SP3_BUILD_TEST @SP3_BUILD_TEST@)
67

7-
find_package(pybind11 CONFIG REQUIRED)
8-
find_package(SofaFramework REQUIRED)
9-
find_package(SofaSimulationGraph REQUIRED)
10-
8+
find_package(pybind11 QUIET REQUIRED CONFIG)
9+
find_package(SofaFramework QUIET REQUIRED)
10+
find_package(SofaSimulationGraph QUIET REQUIRED)
1111
if(SP3_BUILD_TEST)
12-
find_package(Sofa.Testing REQUIRED)
12+
find_package(Sofa.Testing QUIET REQUIRED)
1313
endif()
1414

1515
# If we are importing this config file and the target is not yet there this is indicating that
1616
# target is an imported one. So we include it
1717
if(NOT TARGET @PROJECT_NAME@)
18-
include("${CMAKE_CURRENT_LIST_DIR}/PluginTargets.cmake")
18+
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
1919
endif()
2020

2121
# Check that the component/target is there.

SofaPython3Config.cmake.in

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
# CMake package configuration file for the @PROJECT_NAME@ module
1+
# CMake package configuration file for @PROJECT_NAME@
22

3-
@PACKAGE_GUARD@
43
@PACKAGE_INIT@
54

65
set(SP3_WITH_SOFAEXPORTER @SP3_WITH_SOFAEXPORTER@)
@@ -10,44 +9,49 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
109
include(SofaPython3Tools)
1110

1211
# Find Python3
13-
find_package(Python @PYBIND11_PYTHON_VERSION@ COMPONENTS Interpreter Development REQUIRED)
12+
if(NOT Python_FOUND)
13+
find_package(Python @Python_VERSION@ QUIET REQUIRED COMPONENTS Interpreter Development)
14+
endif()
1415

15-
# Save PYTHON_* vars
16-
set(PYTHON_VERSION_RESET "${PYTHON_VERSION}")
17-
set(PYTHON_EXECUTABLE_RESET "${PYTHON_EXECUTABLE}")
18-
set(PYTHON_LIBRARIES_RESET "${PYTHON_LIBRARIES}")
19-
set(PYTHON_INCLUDE_DIRS_RESET "${PYTHON_INCLUDE_DIRS}")
20-
set(PYTHON_LIBRARY_RESET "${PYTHON_LIBRARY}")
21-
set(PYTHON_INCLUDE_DIR_RESET "${PYTHON_INCLUDE_DIR}")
16+
# Find pybind11
17+
if(NOT pybind11_FOUND)
18+
# Save PYTHON_* vars
19+
set(PYTHON_VERSION_RESET "${PYTHON_VERSION}")
20+
set(PYTHON_EXECUTABLE_RESET "${PYTHON_EXECUTABLE}")
21+
set(PYTHON_LIBRARIES_RESET "${PYTHON_LIBRARIES}")
22+
set(PYTHON_INCLUDE_DIRS_RESET "${PYTHON_INCLUDE_DIRS}")
23+
set(PYTHON_LIBRARY_RESET "${PYTHON_LIBRARY}")
24+
set(PYTHON_INCLUDE_DIR_RESET "${PYTHON_INCLUDE_DIR}")
2225

23-
# Change PYTHON_* vars before pybind11 find_package
24-
# to be sure that pybind11 relies on the right Python version
25-
set(PYTHON_VERSION "${Python_VERSION}" CACHE STRING "" FORCE)
26-
set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}" CACHE FILEPATH "" FORCE)
27-
set(PYTHON_LIBRARIES "${Python_LIBRARIES}" CACHE STRING "" FORCE)
28-
set(PYTHON_INCLUDE_DIRS "${Python_INCLUDE_DIRS}" CACHE STRING "" FORCE)
29-
if(EXISTS "${Python_LIBRARY}")
30-
set(PYTHON_LIBRARY "${Python_LIBRARY}" CACHE INTERNAL "" FORCE)
31-
elseif(EXISTS "${Python_LIBRARIES}")
32-
set(PYTHON_LIBRARY "${Python_LIBRARIES}" CACHE INTERNAL "" FORCE)
33-
endif()
34-
if(EXISTS "${Python_INCLUDE_DIR}")
35-
set(PYTHON_INCLUDE_DIR "${Python_INCLUDE_DIR}" CACHE INTERNAL "" FORCE)
36-
elseif(EXISTS "${Python_INCLUDE_DIRS}")
37-
set(PYTHON_INCLUDE_DIR "${Python_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE)
38-
endif()
26+
# Change PYTHON_* vars before pybind11 find_package
27+
# to be sure that pybind11 relies on the right Python version
28+
set(PYTHON_VERSION "${Python_VERSION}" CACHE STRING "" FORCE)
29+
set(PYTHON_EXECUTABLE "${Python_EXECUTABLE}" CACHE FILEPATH "" FORCE)
30+
set(PYTHON_LIBRARIES "${Python_LIBRARIES}" CACHE STRING "" FORCE)
31+
set(PYTHON_INCLUDE_DIRS "${Python_INCLUDE_DIRS}" CACHE STRING "" FORCE)
32+
if(EXISTS "${Python_LIBRARY}")
33+
set(PYTHON_LIBRARY "${Python_LIBRARY}" CACHE INTERNAL "" FORCE)
34+
elseif(EXISTS "${Python_LIBRARIES}")
35+
set(PYTHON_LIBRARY "${Python_LIBRARIES}" CACHE INTERNAL "" FORCE)
36+
endif()
37+
if(EXISTS "${Python_INCLUDE_DIR}")
38+
set(PYTHON_INCLUDE_DIR "${Python_INCLUDE_DIR}" CACHE INTERNAL "" FORCE)
39+
elseif(EXISTS "${Python_INCLUDE_DIRS}")
40+
set(PYTHON_INCLUDE_DIR "${Python_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE)
41+
endif()
3942

40-
# Set the minimum pybind11 version to 2.3 (before that the pybind11::embed target did not exist)
41-
find_package(pybind11 2.3 CONFIG QUIET REQUIRED)
43+
find_package(pybind11 @pybind11_VERSION@ QUIET REQUIRED CONFIG)
4244

43-
# Reset PYTHON_* vars
44-
set(PYTHON_VERSION "${PYTHON_VERSION_RESET}" CACHE STRING "" FORCE)
45-
set(PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE_RESET}" CACHE FILEPATH "" FORCE)
46-
set(PYTHON_LIBRARIES "${PYTHON_LIBRARIES_RESET}" CACHE STRING "" FORCE)
47-
set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIRS_RESET}" CACHE STRING "" FORCE)
48-
set(PYTHON_LIBRARY "${PYTHON_LIBRARY_RESET}" CACHE INTERNAL "" FORCE)
49-
set(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_DIR_RESET}" CACHE INTERNAL "" FORCE)
45+
# Reset PYTHON_* vars
46+
set(PYTHON_VERSION "${PYTHON_VERSION_RESET}" CACHE STRING "" FORCE)
47+
set(PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE_RESET}" CACHE FILEPATH "" FORCE)
48+
set(PYTHON_LIBRARIES "${PYTHON_LIBRARIES_RESET}" CACHE STRING "" FORCE)
49+
set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIRS_RESET}" CACHE STRING "" FORCE)
50+
set(PYTHON_LIBRARY "${PYTHON_LIBRARY_RESET}" CACHE INTERNAL "" FORCE)
51+
set(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_DIR_RESET}" CACHE INTERNAL "" FORCE)
52+
endif()
5053

54+
# Find SofaPython3::XXXXX
5155
if(NOT SofaPython3_FIND_COMPONENTS)
5256
set(SofaPython3_FIND_COMPONENTS Plugin Bindings)
5357
endif()

bindings/BindingsConfig.cmake.in

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,25 @@
1-
# CMake package configuration file for the @PROJECT_NAME@ module
1+
# CMake package configuration file for @PROJECT_NAME@
22

33
@PACKAGE_GUARD@
44
@PACKAGE_INIT@
55

6-
# Required by all targets
7-
find_package(pybind11 CONFIG REQUIRED)
6+
set(SP3_WITH_SOFAEXPORTER @SP3_WITH_SOFAEXPORTER@)
87

9-
# Required by Modules.SofaBaseTopology, Sofa.Components, Sofa.Core, Sofa.Helper, Sofa.Types, SofaExporter, SofaGui, SofaRuntime, SofaTypes
10-
find_package(SofaPython3 COMPONENTS Plugin)
11-
12-
# Required by the bindings Modules.SofaBaseTopology
13-
find_package(SofaBaseTopology REQUIRED)
14-
15-
# Required by the bindings Modules.SofaDeformable
16-
find_package(SofaDeformable REQUIRED)
17-
18-
# Required by the bindings Sofa.Components, Sofa.Core, Sofa.Helper, Sofa.Simulation, Sofa.Types, SofaGui
19-
find_package(SofaFramework REQUIRED)
20-
21-
# Required by the bindings Sofa.Simulation, SofaRuntime
22-
find_package(SofaSimulationGraph REQUIRED)
23-
24-
# Required by the bindings SofaRuntime
25-
find_package(SofaSimulationCommon REQUIRED)
26-
27-
# Required by the bindings SofaGui
28-
find_package(Sofa.GL QUIET)
29-
find_package(SofaGui REQUIRED)
30-
31-
# Required by the bindings Sofa.Core
32-
find_package(SofaBaseVisual REQUIRED)
33-
34-
# Required by the bindings SofaExporter
8+
find_package(SofaPython3 QUIET REQUIRED COMPONENTS
9+
Bindings.Modules
10+
Bindings.Sofa
11+
Bindings.SofaGui
12+
Bindings.SofaRuntime
13+
Bindings.SofaTypes
14+
)
3515
if(SP3_WITH_SOFAEXPORTER)
36-
find_package(SofaExporter REQUIRED)
16+
find_package(SofaPython3 QUIET REQUIRED COMPONENTS Bindings.SofaExporter)
3717
endif()
3818

3919
# If we are importing this config file and the target is not yet there this is indicating that
4020
# target is an imported one. So we include it
4121
if(NOT TARGET @PROJECT_NAME@)
42-
include("${CMAKE_CURRENT_LIST_DIR}/BindingsTargets.cmake")
22+
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
4323
endif()
4424

4525
# Check that the component/target is there.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# CMake package configuration file for @PROJECT_NAME@
2+
3+
@PACKAGE_GUARD@
4+
@PACKAGE_INIT@
5+
6+
find_package(SofaPython3 QUIET REQUIRED COMPONENTS Plugin Bindings.Sofa)
7+
8+
# Required by Bindings.Modules.SofaBaseTopology
9+
find_package(SofaBaseTopology QUIET REQUIRED)
10+
# Required by Bindings.Modules.SofaDeformable
11+
find_package(SofaDeformable QUIET REQUIRED)
12+
13+
# If we are importing this config file and the target is not yet there this is indicating that
14+
# target is an imported one. So we include it
15+
if(NOT TARGET @PROJECT_NAME@)
16+
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
17+
endif()
18+
19+
# Check that the component/target is there.
20+
check_required_components(@PROJECT_NAME@)

bindings/Modules/CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,13 @@ foreach(modulebindings_module ${MODULEBINDINGS_MODULE_LIST})
2323
set_target_properties(${PROJECT_NAME}.${modulebindings_module} PROPERTIES FOLDER "Bindings/Modules")
2424
endforeach()
2525

26-
install(TARGETS ${PROJECT_NAME} EXPORT BindingsTargets)
27-
2826
if(SP3_BUILD_TEST)
2927
add_subdirectory(tests)
3028
endif()
29+
30+
sofa_create_component_in_package_with_targets(
31+
COMPONENT_NAME ${PROJECT_NAME}
32+
COMPONENT_VERSION ${SofaPython3_VERSION}
33+
PACKAGE_NAME SofaPython3
34+
TARGETS ${PROJECT_NAME}
35+
)

bindings/Modules/src/SofaPython3/SofaBaseTopology/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ find_package(SofaBaseTopology REQUIRED)
1717

1818
SP3_add_python_module(
1919
TARGET ${PROJECT_NAME}
20-
PACKAGE Bindings
20+
PACKAGE Bindings.Modules
2121
MODULE SofaBaseTopology
2222
DESTINATION Sofa
2323
SOURCES ${SOURCE_FILES}

bindings/Modules/src/SofaPython3/SofaDeformable/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ set(HEADER_FILES
1414
)
1515

1616
if (NOT TARGET SofaPython3::Plugin)
17-
find_package(SofaPython3 REQUIRED)
17+
find_package(SofaPython3 REQUIRED COMPONENTS Plugin Bindings.Sofa)
1818
endif()
1919

2020
find_package(SofaBase REQUIRED)
2121
find_package(SofaDeformable REQUIRED)
2222

2323
SP3_add_python_module(
2424
TARGET ${PROJECT_NAME}
25-
PACKAGE Bindings
25+
PACKAGE Bindings.Modules
2626
MODULE SofaDeformable
2727
DESTINATION Sofa
2828
SOURCES ${SOURCE_FILES}

bindings/Modules/src/SofaPython3/SofaGL/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ set(HEADER_FILES
1111
)
1212

1313
if (NOT TARGET SofaPython3::Plugin)
14-
find_package(SofaPython3 REQUIRED)
14+
find_package(SofaPython3 REQUIRED COMPONENTS Plugin Bindings.Sofa)
1515
endif()
1616

1717
find_package(Sofa.GL REQUIRED)
1818

1919
SP3_add_python_module(
2020
TARGET ${PROJECT_NAME}
21-
PACKAGE Bindings
21+
PACKAGE Bindings.Modules
2222
MODULE SofaGL
2323
DESTINATION Sofa
2424
SOURCES ${SOURCE_FILES}

0 commit comments

Comments
 (0)