Skip to content

Commit ac8d40c

Browse files
authored
package rtm recorder via conan (#74)
1 parent 8ca7e8b commit ac8d40c

5 files changed

Lines changed: 54 additions & 5 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
if(NOT TARGET real-time-monitor::rtm_recorder)
2+
add_executable(real-time-monitor::rtm_recorder IMPORTED GLOBAL)
3+
set(_rtm_recorder_default_set FALSE)
4+
foreach(_cfg RELEASE DEBUG RELWITHDEBINFO MINSIZEREL)
5+
set(_pf "${real-time-monitor_PACKAGE_FOLDER_${_cfg}}")
6+
if(NOT _pf)
7+
continue()
8+
endif()
9+
set(_exe "${_pf}/bin/rtm_recorder${CMAKE_EXECUTABLE_SUFFIX}")
10+
set_property(TARGET real-time-monitor::rtm_recorder
11+
PROPERTY IMPORTED_LOCATION_${_cfg} "${_exe}")
12+
if(NOT _rtm_recorder_default_set)
13+
set_property(TARGET real-time-monitor::rtm_recorder
14+
PROPERTY IMPORTED_LOCATION "${_exe}")
15+
set(_rtm_recorder_default_set TRUE)
16+
endif()
17+
endforeach()
18+
unset(_rtm_recorder_default_set)
19+
unset(_pf)
20+
unset(_exe)
21+
endif()

conan/all/conanfile.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from conan import ConanFile
22
from conan.errors import ConanInvalidConfiguration
33
from conan.tools.build import check_min_cppstd
4-
from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout
4+
from conan.tools.cmake import CMakeDeps, CMakeToolchain, CMake, cmake_layout
55
from conan.tools.files import get, copy
66
from conan.tools.scm import Version
77
import os
@@ -22,7 +22,7 @@ class RealTimeMonitorRecipe(ConanFile):
2222
default_options = {"shared": False, "fPIC": True}
2323

2424
# Sources are located in the same place as this recipe, copy them to the recipe
25-
exports_sources = "CMakeLists.txt", "lib/*", "cmake/*", "py_bindings/*"
25+
exports_sources = "CMakeLists.txt", "lib/*", "cmake/*", "tools/*", "py_bindings/*"
2626

2727
def export_sources(self):
2828
# This method is used for local development to copy sources into the recipe
@@ -31,6 +31,7 @@ def export_sources(self):
3131
copy(self, "CMakeLists.txt", src=root, dst=self.export_sources_folder)
3232
copy(self, "lib/*", src=root, dst=self.export_sources_folder)
3333
copy(self, "cmake/*", src=root, dst=self.export_sources_folder)
34+
copy(self, "tools/*", src=root, dst=self.export_sources_folder)
3435
copy(self, "py_bindings/*", src=root, dst=self.export_sources_folder)
3536
copy(self, "LICENSE", src=root, dst=self.export_sources_folder)
3637

@@ -62,13 +63,14 @@ def validate(self):
6263
raise ConanInvalidConfiguration("Building requires GCC >= 11")
6364

6465
def requirements(self):
65-
pass
66-
66+
self.requires("argparse/3.2", visible=False)
6767

6868
def generate(self):
69+
deps = CMakeDeps(self)
70+
deps.generate()
6971
tc = CMakeToolchain(self)
7072
tc.cache_variables["BUILD_MONITOR"] = "OFF"
71-
tc.cache_variables["BUILD_TOOLS"] = "OFF"
73+
tc.cache_variables["BUILD_TOOLS"] = "ON"
7274
tc.cache_variables["BUILD_TESTS"] = "OFF"
7375
tc.generate()
7476

@@ -78,6 +80,9 @@ def build(self):
7880
cmake.build()
7981

8082
def package(self):
83+
cmake = CMake(self)
84+
cmake.install()
85+
8186
src_folders = ["lib/include"]
8287
for folder in src_folders:
8388
copy(self, "*.h", os.path.join(self.source_folder, folder),
@@ -87,8 +92,17 @@ def package(self):
8792
os.path.join(self.package_folder, "lib"), keep_path=False)
8893
copy(self, "*.so", self.build_folder,
8994
os.path.join(self.package_folder, "lib"), keep_path=False)
95+
96+
copy(self, "real_time_monitor_recorder_target.cmake",
97+
os.path.join(self.source_folder, "cmake"),
98+
os.path.join(self.package_folder, "cmake"))
99+
90100
copy(self, "LICENSE", self.source_folder,
91101
os.path.join(self.package_folder, "licenses"))
92102

93103
def package_info(self):
94104
self.cpp_info.libs = ["rtm"]
105+
self.cpp_info.bindirs = ["bin"]
106+
self.cpp_info.set_property(
107+
"cmake_build_modules",
108+
["cmake/real_time_monitor_recorder_target.cmake"])

test_package/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,11 @@ find_package(real-time-monitor REQUIRED)
55

66
add_executable(test_package test_package.cpp)
77
target_link_libraries(test_package PRIVATE real-time-monitor::real-time-monitor)
8+
9+
if(NOT TARGET real-time-monitor::rtm_recorder)
10+
message(FATAL_ERROR "Expected imported target real-time-monitor::rtm_recorder")
11+
endif()
12+
13+
add_custom_target(show_recorder ALL
14+
COMMAND ${CMAKE_COMMAND} -E echo
15+
"rtm_recorder: $<TARGET_FILE:real-time-monitor::rtm_recorder>")

test_package/conanfile.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,7 @@ def test(self):
2424
if can_run(self):
2525
cmd = os.path.join(self.cpp.build.bindir, "test_package")
2626
self.run(cmd, env="conanrun")
27+
recorder = os.path.join(
28+
self.dependencies["real-time-monitor"].package_folder,
29+
"bin", "rtm_recorder")
30+
self.run(f'"{recorder}" --help', env="conanrun")

tools/recorder/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ target_link_libraries(rtm_recorder PRIVATE rtm argparse::argparse)
55

66
if (SKBUILD)
77
install(TARGETS rtm_recorder DESTINATION ${SKBUILD_SCRIPTS_DIR})
8+
else()
9+
install(TARGETS rtm_recorder RUNTIME DESTINATION bin)
810
endif()

0 commit comments

Comments
 (0)