Skip to content
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
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,23 @@
All notable changes to `plotjuggler_sdk` are recorded here. Versioning policy is in
[`CLAUDE.md`](./CLAUDE.md) → "Release Versioning".

## [0.23.1]

### Fix: Conan `plugin_host` component links the parser-module host (PATCH)

The Conan recipe's `plugin_host` component omitted `pj_parser_module_host` and
`pj_parser_claim_catalog`, both part of the `plotjuggler_sdk::plugin_host`
umbrella since 0.22.0, so Conan consumers of the host umbrella could not link
the claim catalog, route resolver, or native parser-module loader. The recipe
also gains the `parser_module` component and ships `PjParserModule.cmake` as a
build module, so `find_package(plotjuggler_sdk COMPONENTS parser_module)` and
`pj_add_parser_module()` work from the Conan package exactly as from the
installed CMake package. No header, ABI, or behavior change.

Also silences a GCC 15 `-Wfree-nonheap-object` false positive in
`parser_module_abi.cpp` that made every `-O3 -Werror` (Release package) build
fail on that compiler; Debug and `-O2` builds were unaffected.

## [0.23.0]

### Fix: entry-point symbol provenance and modern platform loaders (MINOR)
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.23.0
0.23.1
13 changes: 13 additions & 0 deletions conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ def package_info(self):
# CMakeDeps actually include()s it after find_package() returns.
self.cpp_info.set_property("cmake_build_modules", [
os.path.join("lib", "cmake", "plotjuggler_sdk", "PjPluginManifest.cmake"),
os.path.join("lib", "cmake", "plotjuggler_sdk", "PjParserModule.cmake"),
])

# --- base ---
Expand All @@ -162,16 +163,28 @@ def package_info(self):
sdk.includedirs = ["include"]
sdk.requires = ["base", "nlohmann_json::nlohmann_json"]

# --- parser_module (header-only functional parser-module authoring kit;
# pj_add_parser_module() comes from the PjParserModule build module) ---
kit = self.cpp_info.components["parser_module"]
kit.set_property("cmake_target_name", "plotjuggler_sdk::parser_module")
kit.libs = [] # INTERFACE only: authored modules link no SDK library
kit.includedirs = ["include"]

# --- plugin_host (umbrella linking every host-side loader) ---
if self.options.with_host:
host = self.cpp_info.components["plugin_host"]
host.set_property("cmake_target_name", "plotjuggler_sdk::plugin_host")
# Static archives: dependents before their dependencies. The
# parser-module host and claim catalog joined the umbrella in 0.22
# (they were missing from this list until 0.23.1).
host.libs = [
"pj_data_source_host",
"pj_message_parser_host",
"pj_toolbox_host",
"pj_dialog_library",
"pj_plugin_catalog",
"pj_parser_module_host",
"pj_parser_claim_catalog",
"pj_plugin_loader_detail",
]
host.includedirs = ["include"]
Expand Down
14 changes: 14 additions & 0 deletions pj_base/src/parser_module_abi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@ Expected<T> malformed(std::string message) {
return true;
}

// GCC 15 at -O3 reports a -Wfree-nonheap-object false positive when
// std::vector<uint8_t>::push_back's reallocation path is inlined into the
// little-endian writer below (the freed pointer is the vector's own heap
// block). Debug and -O2 builds are clean, so this only surfaced in Release
// package builds. Clang has no such warning group.
#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 15
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
#endif

class ByteWriter {
public:
explicit ByteWriter(size_t reserve) {
Expand Down Expand Up @@ -588,4 +598,8 @@ Expected<OutputDescriptorV1> readOutputDescriptorV1(Span<const uint8_t> bytes) {
return OutputDescriptorV1(std::move(scalar));
}

#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 15
#pragma GCC diagnostic pop
#endif

} // namespace PJ::parser_module
Loading