From ec1e1c14577d2c47043512430cb0d872238b4356 Mon Sep 17 00:00:00 2001 From: d2weber Date: Fri, 12 Jun 2026 22:44:35 +0200 Subject: [PATCH 01/34] Use yerpc from my branch --- CMakeLists.txt | 22 +++++++ Cargo.lock | 8 +-- Cargo.toml | 2 +- deltachat-jsonrpc/qt/.gitignore | 1 + deltachat-jsonrpc/qt/transport.hpp | 96 ++++++++++++++++++++++++++++++ deltachat-jsonrpc/src/api.rs | 2 +- 6 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 deltachat-jsonrpc/qt/.gitignore create mode 100644 deltachat-jsonrpc/qt/transport.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f0f2e4501..7b47b2f697 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,28 @@ add_custom_target( "${CMAKE_BINARY_DIR}/target/release/pkgconfig/deltachat.pc" ) +add_custom_command( + OUTPUT + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/types.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/client.hpp" + COMMAND ${CARGO} test -p deltachat-jsonrpc + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target( + rpc_headers + DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/types.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/client.hpp" +) + +install(FILES + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/types.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/client.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/transport.hpp" + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc +) + install(FILES "deltachat-ffi/deltachat.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(FILES "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release/libdeltachat.a" DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release/libdeltachat.${DYNAMIC_EXT}" DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/Cargo.lock b/Cargo.lock index c8d5e8bca3..3fdabc343c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7443,8 +7443,7 @@ dependencies = [ [[package]] name = "yerpc" version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dc24983fbe850227bfc1de89bf8cbfb3e2463afc322e0de2f155c4c23d06445" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#9805617aa38fcfcacf00c601c7a267cd5aa2c8a2" dependencies = [ "anyhow", "async-channel 1.9.0", @@ -7462,9 +7461,8 @@ dependencies = [ [[package]] name = "yerpc_derive" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d8560d021437420316370db865e44c000bf86380b47cf05e49be9d652042bf5" +version = "0.6.4" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#9805617aa38fcfcacf00c601c7a267cd5aa2c8a2" dependencies = [ "convert_case", "darling", diff --git a/Cargo.toml b/Cargo.toml index 978269b726..8fe742696a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -203,7 +203,7 @@ thiserror = "2" tokio = "1" tokio-util = "0.7.18" tracing-subscriber = "0.3" -yerpc = "0.6.4" +yerpc = { git="https://github.com/d2weber/yerpc.git", branch="qt_bindings" } [features] default = ["vendored"] diff --git a/deltachat-jsonrpc/qt/.gitignore b/deltachat-jsonrpc/qt/.gitignore new file mode 100644 index 0000000000..86d4c2dd38 --- /dev/null +++ b/deltachat-jsonrpc/qt/.gitignore @@ -0,0 +1 @@ +generated diff --git a/deltachat-jsonrpc/qt/transport.hpp b/deltachat-jsonrpc/qt/transport.hpp new file mode 100644 index 0000000000..aab96a3da0 --- /dev/null +++ b/deltachat-jsonrpc/qt/transport.hpp @@ -0,0 +1,96 @@ +#pragma once + +#include "deltachat-jsonrpc/types.hpp" +#include "deltachat-jsonrpc/client.hpp" +#include "deltachat.h" + +#include +#include + +#include +#include + +class CffiTransport : public Transport { +public: + explicit CffiTransport(dc_accounts_t* accounts) + : jsonrpc_(dc_jsonrpc_init(accounts)) + { + if (!jsonrpc_) std::abort(); + thread_ = std::thread([this] { run(); }); + } + + virtual ~CffiTransport() { + done_ = true; + // Unblock dc_jsonrpc_next_response by sending a dummy request + if (jsonrpc_) dc_jsonrpc_request(jsonrpc_, "{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"get_system_info\"}"); + if (thread_.joinable()) thread_.join(); + QMutexLocker lk(&mu_); + for (auto& [id, prom] : pending_) { + prom.set_value({{}, "Transport destructed", -32060}); + } + pending_.clear(); + if (jsonrpc_) dc_jsonrpc_unref(jsonrpc_); + } + + virtual std::future> send(const QString method, const QJsonValue params) override { + uint32_t id = next_id_++; + QJsonObject envelope{ + {"jsonrpc", "2.0"}, + {"id", static_cast(id)}, + {"method", method}, + {"params", params}, + }; + + std::promise> prom; + std::future> fut = prom.get_future(); + + { + QMutexLocker lk(&mu_); + pending_[id] = std::move(prom); + } + + QByteArray json = QJsonDocument(envelope).toJson(QJsonDocument::Compact); + dc_jsonrpc_request(jsonrpc_, json.constData()); + return fut; + } +private: + void run() { + while (!done_) { + char* raw_json = dc_jsonrpc_next_response(jsonrpc_); + if (!raw_json) { + break; + } + QByteArray json{raw_json}; + dc_str_unref(raw_json); + if (done_) break; + + QJsonObject obj = QJsonDocument::fromJson(json).object(); + + if (!obj["id"].isDouble()) { + qCritical() << "No valid rpc id in" << QString{json}; + continue; + } + uint32_t id = static_cast(obj["id"].toInt()); + + std::promise> prom; + { + QMutexLocker lk(&mu_); + if (auto nh = pending_.extract(id)) { + prom = std::move(nh.mapped()); + } else { + qCritical() << "Could not map response" << QString{json}; + continue; + } + } + prom.set_value(parseResult(obj)); + } + } + +private: + dc_jsonrpc_instance_t* jsonrpc_; + std::thread thread_; + QMutex mu_; + std::atomic next_id_{1}; + std::atomic done_{false}; + std::unordered_map>> pending_; +}; diff --git a/deltachat-jsonrpc/src/api.rs b/deltachat-jsonrpc/src/api.rs index e70c2771b8..c52dbf8e45 100644 --- a/deltachat-jsonrpc/src/api.rs +++ b/deltachat-jsonrpc/src/api.rs @@ -157,7 +157,7 @@ impl CommandApi { } } -#[rpc(all_positional, ts_outdir = "typescript/generated")] +#[rpc(all_positional, ts_outdir = "typescript/generated", qt_outdir = "qt/generated")] impl CommandApi { /// Test function. async fn sleep(&self, delay: f64) { From 4ae6c59d19da755c55a46a67683126b3a7177465 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Mon, 15 Jun 2026 20:21:57 +0200 Subject: [PATCH 02/34] move bindings generation to build.rs --- CMakeLists.txt | 16 ++++++++-------- Cargo.lock | 7 +++++++ Cargo.toml | 1 + .../qt => deltachat-jsonrpc-bindings}/.gitignore | 0 deltachat-jsonrpc-bindings/Cargo.toml | 13 +++++++++++++ deltachat-jsonrpc-bindings/build.rs | 6 ++++++ deltachat-jsonrpc-bindings/src/main.rs | 3 +++ .../transport.hpp | 0 flake.nix | 1 + 9 files changed, 39 insertions(+), 8 deletions(-) rename {deltachat-jsonrpc/qt => deltachat-jsonrpc-bindings}/.gitignore (100%) create mode 100644 deltachat-jsonrpc-bindings/Cargo.toml create mode 100644 deltachat-jsonrpc-bindings/build.rs create mode 100644 deltachat-jsonrpc-bindings/src/main.rs rename {deltachat-jsonrpc/qt => deltachat-jsonrpc-bindings}/transport.hpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b47b2f697..185d3126b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,23 +42,23 @@ add_custom_target( add_custom_command( OUTPUT - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/types.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/client.hpp" - COMMAND ${CARGO} test -p deltachat-jsonrpc + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" + COMMAND ${CARGO} build -p deltachat-jsonrpc-bindings WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) add_custom_target( rpc_headers DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/types.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/client.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" ) install(FILES - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/types.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/generated/client.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc/qt/transport.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/transport.hpp" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc ) diff --git a/Cargo.lock b/Cargo.lock index 3fdabc343c..9a2b2765a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1444,6 +1444,13 @@ dependencies = [ "yerpc", ] +[[package]] +name = "deltachat-jsonrpc-bindings" +version = "2.51.0" +dependencies = [ + "deltachat-jsonrpc", +] + [[package]] name = "deltachat-repl" version = "2.51.0" diff --git a/Cargo.toml b/Cargo.toml index 8fe742696a..f06c5b597c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -130,6 +130,7 @@ members = [ "deltachat-ffi", "deltachat_derive", "deltachat-jsonrpc", + "deltachat-jsonrpc-bindings", "deltachat-rpc-server", "deltachat-ratelimit", "deltachat-repl", diff --git a/deltachat-jsonrpc/qt/.gitignore b/deltachat-jsonrpc-bindings/.gitignore similarity index 100% rename from deltachat-jsonrpc/qt/.gitignore rename to deltachat-jsonrpc-bindings/.gitignore diff --git a/deltachat-jsonrpc-bindings/Cargo.toml b/deltachat-jsonrpc-bindings/Cargo.toml new file mode 100644 index 0000000000..14691136f4 --- /dev/null +++ b/deltachat-jsonrpc-bindings/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "deltachat-jsonrpc-bindings" +version = "2.51.0" +edition = "2024" + +[dependencies] + +[build-dependencies] +deltachat-jsonrpc.workspace = true + +[features] +default = ["vendored"] +vendored = ["deltachat-jsonrpc/vendored"] diff --git a/deltachat-jsonrpc-bindings/build.rs b/deltachat-jsonrpc-bindings/build.rs new file mode 100644 index 0000000000..6712d45764 --- /dev/null +++ b/deltachat-jsonrpc-bindings/build.rs @@ -0,0 +1,6 @@ +use deltachat_jsonrpc::api::{generate_qt_bindings, generate_ts_bindings}; + +fn main() { + generate_ts_bindings(); + generate_qt_bindings(); +} diff --git a/deltachat-jsonrpc-bindings/src/main.rs b/deltachat-jsonrpc-bindings/src/main.rs new file mode 100644 index 0000000000..e7a11a969c --- /dev/null +++ b/deltachat-jsonrpc-bindings/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/deltachat-jsonrpc/qt/transport.hpp b/deltachat-jsonrpc-bindings/transport.hpp similarity index 100% rename from deltachat-jsonrpc/qt/transport.hpp rename to deltachat-jsonrpc-bindings/transport.hpp diff --git a/flake.nix b/flake.nix index 615a99c24a..c04821979d 100644 --- a/flake.nix +++ b/flake.nix @@ -51,6 +51,7 @@ ./deltachat-contact-tools ./deltachat-ffi ./deltachat-jsonrpc + ./deltachat-jsonrpc-bindings ./deltachat-ratelimit ./deltachat-repl ./deltachat-rpc-client From 434995705dff83b5a28847f0a35f1ddbfcf1bffa Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Tue, 16 Jun 2026 18:27:04 +0200 Subject: [PATCH 03/34] fixup: CMakeLists bindings with correct target dir --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 185d3126b8..d41aaeea68 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,8 +44,8 @@ add_custom_command( OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" - COMMAND ${CARGO} build -p deltachat-jsonrpc-bindings - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) add_custom_target( From ccaedca9056f526b1688d176676c19723be538cd Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Tue, 16 Jun 2026 18:55:27 +0200 Subject: [PATCH 04/34] fixup: cmake: add missing COMMAND --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d41aaeea68..c8fee4bec4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ add_custom_command( OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" + COMMAND ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) From bc1afdce3153a64f1d50ca08ca2469112aa70745 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Tue, 16 Jun 2026 19:41:32 +0200 Subject: [PATCH 05/34] fixup: update Cargo.lock --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9a2b2765a1..f695af1199 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7450,7 +7450,7 @@ dependencies = [ [[package]] name = "yerpc" version = "0.6.4" -source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#9805617aa38fcfcacf00c601c7a267cd5aa2c8a2" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#fd75deb91bf8c4e6bbbd6f1b133f26d448dcac26" dependencies = [ "anyhow", "async-channel 1.9.0", @@ -7469,7 +7469,7 @@ dependencies = [ [[package]] name = "yerpc_derive" version = "0.6.4" -source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#9805617aa38fcfcacf00c601c7a267cd5aa2c8a2" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#fd75deb91bf8c4e6bbbd6f1b133f26d448dcac26" dependencies = [ "convert_case", "darling", From bc8f2bf4baa44c2994cde7fd25f2944099156306 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Tue, 16 Jun 2026 20:05:20 +0200 Subject: [PATCH 06/34] Move transport to qt subdir --- deltachat-jsonrpc-bindings/{ => qt}/transport.hpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename deltachat-jsonrpc-bindings/{ => qt}/transport.hpp (100%) diff --git a/deltachat-jsonrpc-bindings/transport.hpp b/deltachat-jsonrpc-bindings/qt/transport.hpp similarity index 100% rename from deltachat-jsonrpc-bindings/transport.hpp rename to deltachat-jsonrpc-bindings/qt/transport.hpp From d14782bb13cfb95b978eaf52804053e73c2b2f64 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Tue, 16 Jun 2026 20:22:49 +0200 Subject: [PATCH 07/34] fixup: Add env variables --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8fee4bec4..135031a515 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,9 @@ add_custom_command( "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" COMMAND + PREFIX=${CMAKE_INSTALL_PREFIX} + LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} + INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) From c8fda2e595f2b913531008b5e9a2b273dc0c0bd3 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Tue, 16 Jun 2026 20:58:41 +0200 Subject: [PATCH 08/34] fix paths in CMakeLists.txt --- CMakeLists.txt | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 135031a515..51a1d49237 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,11 +18,13 @@ else() set(ARCH_DIR "./") endif() +set(CARGO_TARGET_DIR "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release") + add_custom_command( OUTPUT - "${CMAKE_BINARY_DIR}/target/release/libdeltachat.a" - "${CMAKE_BINARY_DIR}/target/release/libdeltachat.${DYNAMIC_EXT}" - "${CMAKE_BINARY_DIR}/target/release/pkgconfig/deltachat.pc" + "${CARGO_TARGET_DIR}/libdeltachat.a" + "${CARGO_TARGET_DIR}/libdeltachat.${DYNAMIC_EXT}" + "${CARGO_TARGET_DIR}/pkgconfig/deltachat.pc" COMMAND PREFIX=${CMAKE_INSTALL_PREFIX} LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} @@ -35,9 +37,9 @@ add_custom_target( lib_deltachat ALL DEPENDS - "${CMAKE_BINARY_DIR}/target/release/libdeltachat.a" - "${CMAKE_BINARY_DIR}/target/release/libdeltachat.${DYNAMIC_EXT}" - "${CMAKE_BINARY_DIR}/target/release/pkgconfig/deltachat.pc" + "${CARGO_TARGET_DIR}/libdeltachat.a" + "${CARGO_TARGET_DIR}/libdeltachat.${DYNAMIC_EXT}" + "${CARGO_TARGET_DIR}/pkgconfig/deltachat.pc" ) add_custom_command( @@ -67,6 +69,6 @@ install(FILES ) install(FILES "deltachat-ffi/deltachat.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -install(FILES "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release/libdeltachat.a" DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(FILES "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release/libdeltachat.${DYNAMIC_EXT}" DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(FILES "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release/pkgconfig/deltachat.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +install(FILES "${CARGO_TARGET_DIR}/libdeltachat.a" DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(FILES "${CARGO_TARGET_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(FILES "${CARGO_TARGET_DIR}/pkgconfig/deltachat.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) From bfc4ed53edd1284bf787ea4665af0dc87a5d29a3 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:17:16 +0200 Subject: [PATCH 09/34] dbg env --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 51a1d49237..ca503db06b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,8 @@ add_custom_command( PREFIX=${CMAKE_INSTALL_PREFIX} LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} - ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release + # ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release + sh -c "echo CARGO_BUILD_TARGET=\$CARGO_BUILD_TARGET && ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) From 54391c4058f520f880d1fef25939c4f397411b3f Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:39:42 +0200 Subject: [PATCH 10/34] vendor dc --- deltachat-jsonrpc-bindings/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deltachat-jsonrpc-bindings/Cargo.toml b/deltachat-jsonrpc-bindings/Cargo.toml index 14691136f4..dc3bbc8b76 100644 --- a/deltachat-jsonrpc-bindings/Cargo.toml +++ b/deltachat-jsonrpc-bindings/Cargo.toml @@ -10,4 +10,4 @@ deltachat-jsonrpc.workspace = true [features] default = ["vendored"] -vendored = ["deltachat-jsonrpc/vendored"] +vendored = ["deltachat/vendored", "deltachat-jsonrpc/vendored"] From bf11cc3e3b35566668b33797053f640f72104a20 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:41:17 +0200 Subject: [PATCH 11/34] Debug env only --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca503db06b..fcb9c5e16f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ add_custom_command( LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} # ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release - sh -c "echo CARGO_BUILD_TARGET=\$CARGO_BUILD_TARGET && ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release" + printenv WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) From 1c1097cc7cecc26d378540477f143811ee5ad53d Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:43:40 +0200 Subject: [PATCH 12/34] fixup vendor --- deltachat-jsonrpc-bindings/Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deltachat-jsonrpc-bindings/Cargo.toml b/deltachat-jsonrpc-bindings/Cargo.toml index dc3bbc8b76..b54f856cb4 100644 --- a/deltachat-jsonrpc-bindings/Cargo.toml +++ b/deltachat-jsonrpc-bindings/Cargo.toml @@ -6,7 +6,8 @@ edition = "2024" [dependencies] [build-dependencies] -deltachat-jsonrpc.workspace = true +deltachat = { workspace = true, default-features = false } +deltachat-jsonrpc = { workspace = true } [features] default = ["vendored"] From 9faeb1e225fb08e2c07a8568e882541a8af1cb93 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:44:11 +0200 Subject: [PATCH 13/34] Revert "Debug env only" This reverts commit bf11cc3e3b35566668b33797053f640f72104a20. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fcb9c5e16f..ca503db06b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ add_custom_command( LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} # ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release - printenv + sh -c "echo CARGO_BUILD_TARGET=\$CARGO_BUILD_TARGET && ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) From f7d6d488fe945a26fd7551723e069553a3d89cbb Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:46:10 +0200 Subject: [PATCH 14/34] Revert "dbg env" This reverts commit bfc4ed53edd1284bf787ea4665af0dc87a5d29a3. --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca503db06b..51a1d49237 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,8 +50,7 @@ add_custom_command( PREFIX=${CMAKE_INSTALL_PREFIX} LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} - # ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release - sh -c "echo CARGO_BUILD_TARGET=\$CARGO_BUILD_TARGET && ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release" + ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) From d085ca32e715357d3aaf8d35e2104c5853bfed7f Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:46:36 +0200 Subject: [PATCH 15/34] update lockfile --- Cargo.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.lock b/Cargo.lock index f695af1199..826fc8cad2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1448,6 +1448,7 @@ dependencies = [ name = "deltachat-jsonrpc-bindings" version = "2.51.0" dependencies = [ + "deltachat", "deltachat-jsonrpc", ] From f1141b35bf249b277e2c57e003e21d6707ea59c4 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 20:04:06 +0200 Subject: [PATCH 16/34] Edition 2018 --- deltachat-jsonrpc-bindings/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deltachat-jsonrpc-bindings/Cargo.toml b/deltachat-jsonrpc-bindings/Cargo.toml index b54f856cb4..45843f7a26 100644 --- a/deltachat-jsonrpc-bindings/Cargo.toml +++ b/deltachat-jsonrpc-bindings/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "deltachat-jsonrpc-bindings" version = "2.51.0" -edition = "2024" +edition = "2018" [dependencies] From 479cf0755f79c40953f12e29ee3edb60656ed795 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 20:31:46 +0200 Subject: [PATCH 17/34] Add HOST_CC=gcc --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 51a1d49237..fb668fcc29 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,7 @@ add_custom_command( PREFIX=${CMAKE_INSTALL_PREFIX} LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} + HOST_CC=gcc ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) From 911cacb2c07ef357c9d97d40e54975687dd32e65 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 21:05:03 +0200 Subject: [PATCH 18/34] Revert "Add HOST_CC=gcc" This reverts commit 479cf0755f79c40953f12e29ee3edb60656ed795. --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb668fcc29..51a1d49237 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,6 @@ add_custom_command( PREFIX=${CMAKE_INSTALL_PREFIX} LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} - HOST_CC=gcc ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings ) From e7c4a9d590037d284ffda868864ac6237dab0935 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Wed, 17 Jun 2026 21:33:53 +0200 Subject: [PATCH 19/34] Refactor CMakeLists.txt and rename target --- CMakeLists.txt | 81 +++++++++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 51a1d49237..23026ff57c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,70 +5,75 @@ include(GNUInstallDirs) find_program(CARGO cargo) if(APPLE) - set(DYNAMIC_EXT "dylib") + set(DYNAMIC_EXT "dylib") elseif(UNIX) - set(DYNAMIC_EXT "so") + set(DYNAMIC_EXT "so") else() - set(DYNAMIC_EXT "dll") + set(DYNAMIC_EXT "dll") endif() if(DEFINED ENV{CARGO_BUILD_TARGET}) - set(ARCH_DIR "$ENV{CARGO_BUILD_TARGET}") + set(ARCH_DIR "$ENV{CARGO_BUILD_TARGET}") else() - set(ARCH_DIR "./") + set(ARCH_DIR "./") endif() -set(CARGO_TARGET_DIR "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release") +# Keep same env for all cargo calls to enable cachin +set(ENV{CARGO_TARGET_DIR} "${CMAKE_BINARY_DIR}/target") +set(ENV{PREFIX} ${CMAKE_INSTALL_PREFIX}) +set(ENV{LIBDIR} ${CMAKE_INSTALL_FULL_LIBDIR}) +set(ENV{INCLUDEDIR} ${CMAKE_INSTALL_FULL_INCLUDEDIR}) + +set(CARGO_OUT_DIR "$ENV{CARGO_TARGET_DIR}/${ARCH_DIR}/release") add_custom_command( - OUTPUT - "${CARGO_TARGET_DIR}/libdeltachat.a" - "${CARGO_TARGET_DIR}/libdeltachat.${DYNAMIC_EXT}" - "${CARGO_TARGET_DIR}/pkgconfig/deltachat.pc" - COMMAND - PREFIX=${CMAKE_INSTALL_PREFIX} - LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} - INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} - ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-ffi + OUTPUT + "${CARGO_OUT_DIR}/libdeltachat.a" + "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" + "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" + COMMAND + ${CARGO} build --release + WORKING_DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-ffi" ) add_custom_target( - lib_deltachat - ALL - DEPENDS - "${CARGO_TARGET_DIR}/libdeltachat.a" - "${CARGO_TARGET_DIR}/libdeltachat.${DYNAMIC_EXT}" - "${CARGO_TARGET_DIR}/pkgconfig/deltachat.pc" + lib_deltachat + ALL + DEPENDS + "${CARGO_OUT_DIR}/libdeltachat.a" + "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" + "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" ) add_custom_command( - OUTPUT + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" - COMMAND - PREFIX=${CMAKE_INSTALL_PREFIX} - LIBDIR=${CMAKE_INSTALL_FULL_LIBDIR} - INCLUDEDIR=${CMAKE_INSTALL_FULL_INCLUDEDIR} - ${CARGO} build --target-dir=${CMAKE_BINARY_DIR}/target --release - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings + COMMAND + ${CARGO} build --release + WORKING_DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings" ) +install(FILES "deltachat-ffi/deltachat.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") +install(FILES "${CARGO_OUT_DIR}/libdeltachat.a" DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + add_custom_target( - rpc_headers - DEPENDS + deltachat_jsonrpc_bindings + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" ) -install(FILES +install( + FILES "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/transport.hpp" - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc + DESTINATION + "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc" ) - -install(FILES "deltachat-ffi/deltachat.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -install(FILES "${CARGO_TARGET_DIR}/libdeltachat.a" DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(FILES "${CARGO_TARGET_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(FILES "${CARGO_TARGET_DIR}/pkgconfig/deltachat.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) From fe349bb111ad74a27b44b6b85cfc962a1d4f5e31 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 07:08:34 +0200 Subject: [PATCH 20/34] cmake: Fix env vars --- CMakeLists.txt | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 23026ff57c..5a6f72949c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,13 +18,17 @@ else() set(ARCH_DIR "./") endif() -# Keep same env for all cargo calls to enable cachin -set(ENV{CARGO_TARGET_DIR} "${CMAKE_BINARY_DIR}/target") -set(ENV{PREFIX} ${CMAKE_INSTALL_PREFIX}) -set(ENV{LIBDIR} ${CMAKE_INSTALL_FULL_LIBDIR}) -set(ENV{INCLUDEDIR} ${CMAKE_INSTALL_FULL_INCLUDEDIR}) +# Keep same env for all cargo calls to enable caching +set(CARGO_BUILD ${CMAKE_COMMAND} + -E env + CARGO_TARGET_DIR="${CMAKE_BINARY_DIR}/target" + PREFIX="${CMAKE_INSTALL_PREFIX}" + LIBDIR="${CMAKE_INSTALL_FULL_LIBDIR}" + INCLUDEDIR="${CMAKE_INSTALL_FULL_INCLUDEDIR}" + ${CARGO} build --release +) -set(CARGO_OUT_DIR "$ENV{CARGO_TARGET_DIR}/${ARCH_DIR}/release") +set(CARGO_OUT_DIR "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release") add_custom_command( OUTPUT @@ -32,7 +36,7 @@ add_custom_command( "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" COMMAND - ${CARGO} build --release + ${CARGO_BUILD} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-ffi" ) @@ -46,22 +50,22 @@ add_custom_target( "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" ) +install(FILES "deltachat-ffi/deltachat.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") +install(FILES "${CARGO_OUT_DIR}/libdeltachat.a" DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + add_custom_command( OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" COMMAND - ${CARGO} build --release + ${CARGO_BUILD} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings" ) -install(FILES "deltachat-ffi/deltachat.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") -install(FILES "${CARGO_OUT_DIR}/libdeltachat.a" DESTINATION "${CMAKE_INSTALL_LIBDIR}") -install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAKE_INSTALL_LIBDIR}") -install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - - add_custom_target( deltachat_jsonrpc_bindings DEPENDS From 772b0a6a6a5f14c049ceed7d4232663b676995f8 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 07:11:53 +0200 Subject: [PATCH 21/34] cmake: rework, remove commands --- CMakeLists.txt | 38 +++++++++----------------------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a6f72949c..abab9d5ec7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,24 +30,13 @@ set(CARGO_BUILD ${CMAKE_COMMAND} set(CARGO_OUT_DIR "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release") -add_custom_command( - OUTPUT - "${CARGO_OUT_DIR}/libdeltachat.a" - "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" - "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" - COMMAND - ${CARGO_BUILD} - WORKING_DIRECTORY - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-ffi" -) - add_custom_target( - lib_deltachat + deltachat_ffi ALL - DEPENDS - "${CARGO_OUT_DIR}/libdeltachat.a" - "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" - "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" + COMMAND + ${CARGO_BUILD} --package deltachat_ffi + WORKING_DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}" ) install(FILES "deltachat-ffi/deltachat.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") @@ -56,21 +45,12 @@ install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAK install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") -add_custom_command( - OUTPUT - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" - COMMAND - ${CARGO_BUILD} - WORKING_DIRECTORY - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings" -) - add_custom_target( deltachat_jsonrpc_bindings - DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" + COMMAND + ${CARGO_BUILD} --package deltachat-jsonrpc-bindings + WORKING_DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}" ) install( From ff15e02bd513133f8bef100b77130488d8410429 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 08:14:12 +0200 Subject: [PATCH 22/34] cmake: make headers optional --- CMakeLists.txt | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index abab9d5ec7..41d89a6c4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.16) project(deltachat LANGUAGES C) include(GNUInstallDirs) +option(BUILD_JSONRPC_BINDINGS "Build jsonrpc bindings" OFF) + find_program(CARGO cargo) if(APPLE) @@ -13,12 +15,11 @@ else() endif() if(DEFINED ENV{CARGO_BUILD_TARGET}) - set(ARCH_DIR "$ENV{CARGO_BUILD_TARGET}") + set(CARGO_OUT_DIR "${CMAKE_BINARY_DIR}/target/$ENV{CARGO_BUILD_TARGET}/release") else() - set(ARCH_DIR "./") + set(CARGO_OUT_DIR "${CMAKE_BINARY_DIR}/target/release") endif() -# Keep same env for all cargo calls to enable caching set(CARGO_BUILD ${CMAKE_COMMAND} -E env CARGO_TARGET_DIR="${CMAKE_BINARY_DIR}/target" @@ -28,10 +29,8 @@ set(CARGO_BUILD ${CMAKE_COMMAND} ${CARGO} build --release ) -set(CARGO_OUT_DIR "${CMAKE_BINARY_DIR}/target/${ARCH_DIR}/release") - add_custom_target( - deltachat_ffi + lib_deltachat ALL COMMAND ${CARGO_BUILD} --package deltachat_ffi @@ -45,19 +44,24 @@ install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAK install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") -add_custom_target( - deltachat_jsonrpc_bindings - COMMAND - ${CARGO_BUILD} --package deltachat-jsonrpc-bindings - WORKING_DIRECTORY - "${CMAKE_CURRENT_SOURCE_DIR}" -) +if(BUILD_JSONRPC_BINDINGS) + add_custom_target( + jsonrpc_bindings + ALL + COMMAND + ${CARGO_BUILD} --package deltachat-jsonrpc-bindings + WORKING_DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}" + ) -install( - FILES - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/transport.hpp" - DESTINATION - "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc" -) + install( + FILES + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/transport.hpp" + DESTINATION + "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc" + COMPONENT + jsonrpc_bindings + ) +endif() From a5a58d0aed417418e43f13a905a359829e6c33cc Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 08:14:27 +0200 Subject: [PATCH 23/34] Update bindings Cargo.toml --- Cargo.lock | 1 - deltachat-jsonrpc-bindings/Cargo.toml | 7 ++----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 826fc8cad2..f695af1199 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1448,7 +1448,6 @@ dependencies = [ name = "deltachat-jsonrpc-bindings" version = "2.51.0" dependencies = [ - "deltachat", "deltachat-jsonrpc", ] diff --git a/deltachat-jsonrpc-bindings/Cargo.toml b/deltachat-jsonrpc-bindings/Cargo.toml index 45843f7a26..8c3ba22749 100644 --- a/deltachat-jsonrpc-bindings/Cargo.toml +++ b/deltachat-jsonrpc-bindings/Cargo.toml @@ -1,14 +1,11 @@ [package] name = "deltachat-jsonrpc-bindings" version = "2.51.0" -edition = "2018" - -[dependencies] +edition = "2024" [build-dependencies] -deltachat = { workspace = true, default-features = false } deltachat-jsonrpc = { workspace = true } [features] default = ["vendored"] -vendored = ["deltachat/vendored", "deltachat-jsonrpc/vendored"] +vendored = ["deltachat-jsonrpc/vendored"] From ea866a12ee50baea1c9c2f020f30f0807e8eee33 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 08:21:51 +0200 Subject: [PATCH 24/34] cmake fixup --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 41d89a6c4f..aaa6a8bdf9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16) project(deltachat LANGUAGES C) include(GNUInstallDirs) -option(BUILD_JSONRPC_BINDINGS "Build jsonrpc bindings" OFF) +option(WITH_JSONRPC_BINDINGS "Generate jsonrpc bindings" OFF) find_program(CARGO cargo) @@ -44,7 +44,7 @@ install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAK install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") -if(BUILD_JSONRPC_BINDINGS) +if(WITH_JSONRPC_BINDINGS) add_custom_target( jsonrpc_bindings ALL From 5451b78e553bd87bd71dd0dd7c38b583f9967202 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 12:12:55 +0200 Subject: [PATCH 25/34] cmake: simplify --- CMakeLists.txt | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aaa6a8bdf9..2739388c7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,20 +20,20 @@ else() set(CARGO_OUT_DIR "${CMAKE_BINARY_DIR}/target/release") endif() -set(CARGO_BUILD ${CMAKE_COMMAND} - -E env - CARGO_TARGET_DIR="${CMAKE_BINARY_DIR}/target" - PREFIX="${CMAKE_INSTALL_PREFIX}" - LIBDIR="${CMAKE_INSTALL_FULL_LIBDIR}" - INCLUDEDIR="${CMAKE_INSTALL_FULL_INCLUDEDIR}" - ${CARGO} build --release -) +if(WITH_JSONRPC_BINDINGS) + set(JSONRPC_ARGS --package deltachat-jsonrpc-bindings) +endif() add_custom_target( lib_deltachat ALL COMMAND - ${CARGO_BUILD} --package deltachat_ffi + ${CMAKE_COMMAND} -E env + CARGO_TARGET_DIR="${CMAKE_BINARY_DIR}/target" + PREFIX="${CMAKE_INSTALL_PREFIX}" + LIBDIR="${CMAKE_INSTALL_FULL_LIBDIR}" + INCLUDEDIR="${CMAKE_INSTALL_FULL_INCLUDEDIR}" + ${CARGO} build --release --package deltachat_ffi ${JSONRPC_ARGS} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ) @@ -43,17 +43,7 @@ install(FILES "${CARGO_OUT_DIR}/libdeltachat.a" DESTINATION "${CMAKE_INSTALL_LIB install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAKE_INSTALL_LIBDIR}") install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - if(WITH_JSONRPC_BINDINGS) - add_custom_target( - jsonrpc_bindings - ALL - COMMAND - ${CARGO_BUILD} --package deltachat-jsonrpc-bindings - WORKING_DIRECTORY - "${CMAKE_CURRENT_SOURCE_DIR}" - ) - install( FILES "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" @@ -61,7 +51,5 @@ if(WITH_JSONRPC_BINDINGS) "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/transport.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc" - COMPONENT - jsonrpc_bindings ) endif() From 7c8c880a20d3a1666816f2ce3011789cd3cd8ed2 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:08:04 +0200 Subject: [PATCH 26/34] Add CffiDeltaChat wrapper --- CMakeLists.txt | 13 +++++-------- .../cffi_client.hpp} | 10 ++++++++-- deltachat-jsonrpc/src/api.rs | 6 +++++- 3 files changed, 18 insertions(+), 11 deletions(-) rename deltachat-jsonrpc-bindings/qt/{transport.hpp => deltachat-jsonrpc/cffi_client.hpp} (91%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2739388c7a..808f7d6d30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,12 +44,9 @@ install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAK install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") if(WITH_JSONRPC_BINDINGS) - install( - FILES - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/types.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/generated/client.hpp" - "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/transport.hpp" - DESTINATION - "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc" - ) + set(JSONRPC_HPP "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/deltachat-jsonrpc qt") + install(FILES "${DC_JSONRPC_DIR}/generated/types.hpp" "${JSONRPC_HPP}/generated/client.hpp" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc/generated") + install(FILES "${{JSONRPC_HPP}/cffi_client.hpp" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc") endif() diff --git a/deltachat-jsonrpc-bindings/qt/transport.hpp b/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp similarity index 91% rename from deltachat-jsonrpc-bindings/qt/transport.hpp rename to deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp index aab96a3da0..03322f288c 100644 --- a/deltachat-jsonrpc-bindings/qt/transport.hpp +++ b/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp @@ -1,7 +1,7 @@ #pragma once -#include "deltachat-jsonrpc/types.hpp" -#include "deltachat-jsonrpc/client.hpp" +#include "deltachat-jsonrpc/generated/types.hpp" +#include "deltachat-jsonrpc/generated/client.hpp" #include "deltachat.h" #include @@ -94,3 +94,9 @@ class CffiTransport : public Transport { std::atomic done_{false}; std::unordered_map>> pending_; }; + +class CffiDeltaChat : public RawClient { +public: + explicit CffiDeltaChat(dc_accounts_t* accounts) + : RawClient(std::make_unique(accounts)) {} +}; diff --git a/deltachat-jsonrpc/src/api.rs b/deltachat-jsonrpc/src/api.rs index c52dbf8e45..422afa9bf3 100644 --- a/deltachat-jsonrpc/src/api.rs +++ b/deltachat-jsonrpc/src/api.rs @@ -157,7 +157,11 @@ impl CommandApi { } } -#[rpc(all_positional, ts_outdir = "typescript/generated", qt_outdir = "qt/generated")] +#[rpc( + all_positional, + ts_outdir = "typescript/generated", + qt_outdir = "qt/deltachat-jsonrpc/generated" +)] impl CommandApi { /// Test function. async fn sleep(&self, delay: f64) { From 8f30506a0d0e58a7214a3f19138558340a1f6cf3 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:11:35 +0200 Subject: [PATCH 27/34] Use std::mutex --- .../qt/deltachat-jsonrpc/cffi_client.hpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp b/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp index 03322f288c..1b06ce3b34 100644 --- a/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp +++ b/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp @@ -4,11 +4,9 @@ #include "deltachat-jsonrpc/generated/client.hpp" #include "deltachat.h" -#include -#include - -#include #include +#include +#include class CffiTransport : public Transport { public: @@ -24,7 +22,7 @@ class CffiTransport : public Transport { // Unblock dc_jsonrpc_next_response by sending a dummy request if (jsonrpc_) dc_jsonrpc_request(jsonrpc_, "{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"get_system_info\"}"); if (thread_.joinable()) thread_.join(); - QMutexLocker lk(&mu_); + std::lock_guard lk(mu_); for (auto& [id, prom] : pending_) { prom.set_value({{}, "Transport destructed", -32060}); } @@ -45,7 +43,7 @@ class CffiTransport : public Transport { std::future> fut = prom.get_future(); { - QMutexLocker lk(&mu_); + std::lock_guard lk(mu_); pending_[id] = std::move(prom); } @@ -74,7 +72,7 @@ class CffiTransport : public Transport { std::promise> prom; { - QMutexLocker lk(&mu_); + std::lock_guard lk(mu_); if (auto nh = pending_.extract(id)) { prom = std::move(nh.mapped()); } else { @@ -89,7 +87,7 @@ class CffiTransport : public Transport { private: dc_jsonrpc_instance_t* jsonrpc_; std::thread thread_; - QMutex mu_; + std::mutex mu_; std::atomic next_id_{1}; std::atomic done_{false}; std::unordered_map>> pending_; From be55c15f130978916a7168fdac53e0d5903aa755 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:55:07 +0200 Subject: [PATCH 28/34] Add root namespace --- deltachat-jsonrpc-bindings/build.rs | 2 +- .../qt/deltachat-jsonrpc/cffi_client.hpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/deltachat-jsonrpc-bindings/build.rs b/deltachat-jsonrpc-bindings/build.rs index 6712d45764..bedbd04b1f 100644 --- a/deltachat-jsonrpc-bindings/build.rs +++ b/deltachat-jsonrpc-bindings/build.rs @@ -2,5 +2,5 @@ use deltachat_jsonrpc::api::{generate_qt_bindings, generate_ts_bindings}; fn main() { generate_ts_bindings(); - generate_qt_bindings(); + generate_qt_bindings("deltachat"); } diff --git a/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp b/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp index 1b06ce3b34..be19f8d99e 100644 --- a/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp +++ b/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc/cffi_client.hpp @@ -8,6 +8,8 @@ #include #include +namespace deltachat { + class CffiTransport : public Transport { public: explicit CffiTransport(dc_accounts_t* accounts) @@ -98,3 +100,5 @@ class CffiDeltaChat : public RawClient { explicit CffiDeltaChat(dc_accounts_t* accounts) : RawClient(std::make_unique(accounts)) {} }; + +} From 97675a52dbec3ab035d3aaecf01b8f80f1f90f22 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:58:02 +0200 Subject: [PATCH 29/34] update yerpc commit --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f695af1199..eb3396f31b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7450,7 +7450,7 @@ dependencies = [ [[package]] name = "yerpc" version = "0.6.4" -source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#fd75deb91bf8c4e6bbbd6f1b133f26d448dcac26" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#564c4ccc75e03731a923a30e9d6c2a271deaa715" dependencies = [ "anyhow", "async-channel 1.9.0", @@ -7469,7 +7469,7 @@ dependencies = [ [[package]] name = "yerpc_derive" version = "0.6.4" -source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#fd75deb91bf8c4e6bbbd6f1b133f26d448dcac26" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#564c4ccc75e03731a923a30e9d6c2a271deaa715" dependencies = [ "convert_case", "darling", From da4de6ec6a04e24bd510e7f34008e94d1d630231 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 18:04:04 +0200 Subject: [PATCH 30/34] cmake fixup --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 808f7d6d30..7b05e4a58c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,8 +45,8 @@ install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INS if(WITH_JSONRPC_BINDINGS) set(JSONRPC_HPP "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/deltachat-jsonrpc qt") - install(FILES "${DC_JSONRPC_DIR}/generated/types.hpp" "${JSONRPC_HPP}/generated/client.hpp" + install(FILES "${JSONRPC_HPP}/generated/types.hpp" "${JSONRPC_HPP}/generated/client.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc/generated") - install(FILES "${{JSONRPC_HPP}/cffi_client.hpp" + install(FILES "${JSONRPC_HPP}/cffi_client.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc") endif() From 051644034ccf9c0943460ea4c4f3626c713d7cbc Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 18:09:17 +0200 Subject: [PATCH 31/34] cmake fixup 2 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b05e4a58c..696bc349e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,7 @@ install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAK install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") if(WITH_JSONRPC_BINDINGS) - set(JSONRPC_HPP "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/deltachat-jsonrpc qt") + set(JSONRPC_HPP "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/deltachat-jsonrpc/qt") install(FILES "${JSONRPC_HPP}/generated/types.hpp" "${JSONRPC_HPP}/generated/client.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc/generated") install(FILES "${JSONRPC_HPP}/cffi_client.hpp" From c5535f0dd6133ef07d4896a8ccdde4c1e31fdfd0 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 18:14:30 +0200 Subject: [PATCH 32/34] cmake fixup 3 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 696bc349e9..acc585abdf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,7 @@ install(FILES "${CARGO_OUT_DIR}/libdeltachat.${DYNAMIC_EXT}" DESTINATION "${CMAK install(FILES "${CARGO_OUT_DIR}/pkgconfig/deltachat.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") if(WITH_JSONRPC_BINDINGS) - set(JSONRPC_HPP "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/deltachat-jsonrpc/qt") + set(JSONRPC_HPP "${CMAKE_CURRENT_SOURCE_DIR}/deltachat-jsonrpc-bindings/qt/deltachat-jsonrpc") install(FILES "${JSONRPC_HPP}/generated/types.hpp" "${JSONRPC_HPP}/generated/client.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/deltachat-jsonrpc/generated") install(FILES "${JSONRPC_HPP}/cffi_client.hpp" From cb590eb82fecdd1447592c0ea3e56bf58a4515e6 Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 18:28:00 +0200 Subject: [PATCH 33/34] add nodiscard --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eb3396f31b..44109d0347 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7450,7 +7450,7 @@ dependencies = [ [[package]] name = "yerpc" version = "0.6.4" -source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#564c4ccc75e03731a923a30e9d6c2a271deaa715" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#6fa9bb1d9d71c76d4ce1fa02bc1c1a9b34d8c416" dependencies = [ "anyhow", "async-channel 1.9.0", @@ -7469,7 +7469,7 @@ dependencies = [ [[package]] name = "yerpc_derive" version = "0.6.4" -source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#564c4ccc75e03731a923a30e9d6c2a271deaa715" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#6fa9bb1d9d71c76d4ce1fa02bc1c1a9b34d8c416" dependencies = [ "convert_case", "darling", From a76868e7c46cc0fc6c6de83bad89c2bf759f700d Mon Sep 17 00:00:00 2001 From: d2weber <29163905+d2weber@users.noreply.github.com> Date: Thu, 18 Jun 2026 18:38:29 +0200 Subject: [PATCH 34/34] more nodiscard --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 44109d0347..3cc870f339 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7450,7 +7450,7 @@ dependencies = [ [[package]] name = "yerpc" version = "0.6.4" -source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#6fa9bb1d9d71c76d4ce1fa02bc1c1a9b34d8c416" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#9e4cfb963b1c113a0c0701ea29865a9099b45949" dependencies = [ "anyhow", "async-channel 1.9.0", @@ -7469,7 +7469,7 @@ dependencies = [ [[package]] name = "yerpc_derive" version = "0.6.4" -source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#6fa9bb1d9d71c76d4ce1fa02bc1c1a9b34d8c416" +source = "git+https://github.com/d2weber/yerpc.git?branch=qt_bindings#9e4cfb963b1c113a0c0701ea29865a9099b45949" dependencies = [ "convert_case", "darling",