Skip to content
This repository has been archived by the owner on Feb 2, 2025. It is now read-only.

Add non-leaf implementation #1

Merged
merged 1 commit into from
Feb 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Override non-leaf packages

This is a repo with an example of two colcon workspaces: an underlay and an overlay.
The underlay contains packages **a** and **b**, where **b** depends on **a**.
The overlay contains packages **a** and **c** where **c** depends on **a**.

Since **a** is non-leaf and overridden, it's changes must be ABI compatible or undefined behavior will occurr in any package that depends on both **b** and **c**.

The packages here are pure CMake packages because I just want to see how colcon warns about them.

## Workspace graphs

This was generated with `colcon graph`.
Arrows point from packages to their dependencies.


### Overlay

```dot
digraph graphname {
"c";
"a";
"c" -> "a" [color="#0000ff:#ff0000"];
}
```


### Underlay

```dot
digraph graphname {
"b";
"a";
"b" -> "a" [color="#0000ff:#ff0000"];
}
```
20 changes: 20 additions & 0 deletions overlay/src/a/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
cmake_minimum_required(VERSION 3.12)

project(a VERSION 0.2.0 LANGUAGES C)

include(CMakePackageConfigHelpers)

set(LIB_INSTALL_DIR "lib" CACHE STRING "Where libs go")

configure_package_config_file(a-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/a-config.cmake
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/a/cmake)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/a-config-version.cmake
VERSION ${a_VERSION}
COMPATIBILITY SameMajorVersion)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/a-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/a-config-version.cmake
DESTINATION ${LIB_INSTALL_DIR}/a/cmake)
3 changes: 3 additions & 0 deletions overlay/src/a/a-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@PACKAGE_INIT@

check_required_components(a)
22 changes: 22 additions & 0 deletions overlay/src/c/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.12)

project(c VERSION 0.1.0 LANGUAGES C)

find_package(a REQUIRED)

include(CMakePackageConfigHelpers)

set(LIB_INSTALL_DIR "lib" CACHE STRING "Where libs go")

configure_package_config_file(c-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/c-config.cmake
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/c/cmake)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/c-config-version.cmake
VERSION ${b_VERSION}
COMPATIBILITY SameMajorVersion)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/c-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/c-config-version.cmake
DESTINATION ${LIB_INSTALL_DIR}/c/cmake)
3 changes: 3 additions & 0 deletions overlay/src/c/c-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@PACKAGE_INIT@

check_required_components(b)
20 changes: 20 additions & 0 deletions underlay/src/a/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
cmake_minimum_required(VERSION 3.12)

project(a VERSION 0.1.0 LANGUAGES C)

include(CMakePackageConfigHelpers)

set(LIB_INSTALL_DIR "lib" CACHE STRING "Where libs go")

configure_package_config_file(a-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/a-config.cmake
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/a/cmake)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/a-config-version.cmake
VERSION ${a_VERSION}
COMPATIBILITY SameMajorVersion)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/a-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/a-config-version.cmake
DESTINATION ${LIB_INSTALL_DIR}/a/cmake)
3 changes: 3 additions & 0 deletions underlay/src/a/a-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@PACKAGE_INIT@

check_required_components(a)
22 changes: 22 additions & 0 deletions underlay/src/b/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.12)

project(b VERSION 0.1.0 LANGUAGES C)

find_package(a REQUIRED)

include(CMakePackageConfigHelpers)

set(LIB_INSTALL_DIR "lib" CACHE STRING "Where libs go")

configure_package_config_file(b-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/b-config.cmake
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/b/cmake)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/b-config-version.cmake
VERSION ${b_VERSION}
COMPATIBILITY SameMajorVersion)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/b-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/b-config-version.cmake
DESTINATION ${LIB_INSTALL_DIR}/b/cmake)
3 changes: 3 additions & 0 deletions underlay/src/b/b-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@PACKAGE_INIT@

check_required_components(b)