qpid-proton: build as C++17 to fix jsoncpp link failure (#33025)

jsoncpp >= 1.9.6 (MacPorts ships 1.9.7) only exports its std::string_view
overloads when built as C++17, e.g. Json::Value::get(std::string_view,
const Value&). qpid-proton 0.39.0 hardcodes CMAKE_CXX_STANDARD 11, so its
C++ binding compiles against the removed const char* overloads and fails
to link:

  Undefined symbols for architecture arm64:
    "Json::Value::get(char const*, Json::Value const&) const",
        referenced from: proton::parse(...) in connect_config.cpp.o

Patch the bundled CMakeLists.txt to build as C++17 and bump
compiler.cxx_standard to 2017 so the binding matches the jsoncpp ABI.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
David Nichols
2026-06-07 05:35:11 +02:00
committed by GitHub
parent 587d06662b
commit ae8ab48a05
2 changed files with 20 additions and 2 deletions
+7 -2
View File
@@ -8,7 +8,7 @@ PortGroup cmake 1.1
github.setup apache qpid-proton 0.39.0
# Change github.tarball_from to 'releases' or 'archive' next update
github.tarball_from tarball
revision 1
revision 2
description Qpid Proton is a high-performance, lightweight AMQP \
1.0 messaging library.
@@ -36,7 +36,7 @@ depends_lib-append port:jsoncpp \
cmake.build_type RelWithDebInfo
compiler.c_standard 1999
compiler.cxx_standard 2011
compiler.cxx_standard 2017
# Enabling lto may break the build, avoid it by default.
configure.args-append \
@@ -57,6 +57,11 @@ configure.args-append \
# https://github.com/apache/qpid-proton/commit/6f2fdeb633575114c5f92f1387a21eba992b422a
patchfiles-append patch-fix-macOS-build.diff
# Build as C++17: jsoncpp (>= 1.9.6) only exports its std::string_view ABI when
# built as C++17, but qpid-proton 0.39.0 hardcodes C++11, which references the
# removed const char* Json::Value::get() overloads and fails to link.
patchfiles-append patch-cxx17-jsoncpp.diff
test.cmd ${filespath}/runtests.sh
test.run yes
@@ -0,0 +1,13 @@
--- CMakeLists.txt.orig
+++ CMakeLists.txt
@@ -76,7 +76,9 @@
enable_language(CXX)
# This effectively checks for cmake version 3.1 or later
- set(CMAKE_CXX_STANDARD 11)
+ # jsoncpp (>= 1.9.6) exposes a std::string_view ABI under C++17; building the
+ # C++ binding as C++11 references removed const char* overloads -> link errors.
+ set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()