diff --git a/CHANGELOG.md b/CHANGELOG.md index b9710af4..493bdc43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/VERSION b/VERSION index ca222b7c..610e2872 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.23.0 +0.23.1 diff --git a/conanfile.py b/conanfile.py index 871d76ea..867e5492 100644 --- a/conanfile.py +++ b/conanfile.py @@ -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 --- @@ -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"] diff --git a/pj_base/src/parser_module_abi.cpp b/pj_base/src/parser_module_abi.cpp index 73734c2a..c4cce005 100644 --- a/pj_base/src/parser_module_abi.cpp +++ b/pj_base/src/parser_module_abi.cpp @@ -46,6 +46,16 @@ Expected malformed(std::string message) { return true; } +// GCC 15 at -O3 reports a -Wfree-nonheap-object false positive when +// std::vector::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) { @@ -588,4 +598,8 @@ Expected readOutputDescriptorV1(Span bytes) { return OutputDescriptorV1(std::move(scalar)); } +#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 15 +#pragma GCC diagnostic pop +#endif + } // namespace PJ::parser_module