Skip to content

Commit 414542f

Browse files
committed
Merge #88: Fix current deprecation warnings as of capnproto-1.0.1
962e681 mpgen: Avoid deprecated SchemaParser::parseDiskFile call (Ryan Ofsky) e8e89df Remove deprecated kj::mvCapture calls to avoid warnings (Ryan Ofsky) Pull request description: This drops compatibility with capnproto versions before 0.7.0 and also adds a hard dependency on the kj/filesystem.h library which was previously optional Fixes #87 and #39 Top commit has no ACKs. Tree-SHA512: fcfce7ec96c44eebba9e59f9d00c1a05f1c5189ecafa7331da87c130eb077d5c5c2cb92c57b00df9f16fd72a88d74a2f4c2604069e358e1783bc321635a0d5d1
2 parents 61d5a0e + 962e681 commit 414542f

File tree

4 files changed

+43
-31
lines changed

4 files changed

+43
-31
lines changed

cmake/capnp_compat.cmake

+6-10
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22
# Distributed under the MIT software license, see the accompanying
33
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

5-
# CMake target definitions for backwards compatibility with Ubuntu bionic
6-
# capnproto 0.6.1 package (https://packages.ubuntu.com/bionic/libcapnp-dev)
7-
8-
include(CheckIncludeFileCXX)
9-
include(CMakePushCheckState)
5+
# Define capnp_PREFIX if not defined to avoid issue on macos
6+
# https://github.com/chaincodelabs/libmultiprocess/issues/26
107

118
if (NOT DEFINED capnp_PREFIX AND DEFINED CAPNP_INCLUDE_DIRS)
129
get_filename_component(capnp_PREFIX "${CAPNP_INCLUDE_DIRS}" DIRECTORY)
@@ -16,6 +13,10 @@ if (NOT DEFINED CAPNPC_OUTPUT_DIR)
1613
set(CAPNPC_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
1714
endif()
1815

16+
# CMake target definitions for backwards compatibility with Ubuntu bionic
17+
# capnproto 0.6.1 package (https://packages.ubuntu.com/bionic/libcapnp-dev)
18+
# https://github.com/chaincodelabs/libmultiprocess/issues/27
19+
1920
if (NOT DEFINED CAPNP_LIB_CAPNPC AND DEFINED CAPNP_LIB_CAPNP-RPC)
2021
string(REPLACE "-rpc" "c" CAPNP_LIB_CAPNPC "${CAPNP_LIB_CAPNP-RPC}")
2122
endif()
@@ -53,8 +54,3 @@ if (NOT TARGET CapnProto::kj-async AND DEFINED CAPNP_LIB_KJ-ASYNC)
5354
add_library(CapnProto::kj-async SHARED IMPORTED)
5455
set_target_properties(CapnProto::kj-async PROPERTIES IMPORTED_LOCATION "${CAPNP_LIB_KJ-ASYNC}")
5556
endif()
56-
57-
cmake_push_check_state()
58-
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${CAPNP_INCLUDE_DIRS})
59-
check_include_file_cxx("kj/filesystem.h" HAVE_KJ_FILESYSTEM)
60-
cmake_pop_check_state()

include/mp/proxy-io.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ class Connection
312312
// to the EventLoop TaskSet to avoid "Promise callback destroyed itself"
313313
// error in cases where f deletes this Connection object.
314314
m_on_disconnect.add(m_network.onDisconnect().then(
315-
kj::mvCapture(f, [this](F&& f) { m_loop.m_task_set->add(kj::evalLater(kj::mv(f))); })));
315+
[this, f = std::move(f)]() mutable { m_loop.m_task_set->add(kj::evalLater(kj::mv(f))); }));
316316
}
317317

318318
EventLoop& m_loop;
@@ -547,11 +547,11 @@ template <typename InitInterface, typename InitImpl>
547547
void _Listen(EventLoop& loop, kj::Own<kj::ConnectionReceiver>&& listener, InitImpl& init)
548548
{
549549
auto* ptr = listener.get();
550-
loop.m_task_set->add(ptr->accept().then(kj::mvCapture(kj::mv(listener),
551-
[&loop, &init](kj::Own<kj::ConnectionReceiver>&& listener, kj::Own<kj::AsyncIoStream>&& stream) {
550+
loop.m_task_set->add(ptr->accept().then(
551+
[&loop, &init, listener = kj::mv(listener)](kj::Own<kj::AsyncIoStream>&& stream) mutable {
552552
_Serve<InitInterface>(loop, kj::mv(stream), init);
553553
_Listen<InitInterface>(loop, kj::mv(listener), init);
554-
})));
554+
}));
555555
}
556556

557557
//! Given stream file descriptor and an init object, handle requests on the

include/mp/proxy-types.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void CustomBuildField(TypeList<>,
102102
template <typename T, typename U>
103103
kj::Promise<U> JoinPromises(kj::Promise<T>&& prom1, kj::Promise<U>&& prom2)
104104
{
105-
return prom1.then(kj::mvCapture(prom2, [](kj::Promise<U> prom2) { return prom2; }));
105+
return prom1.then([prom2 = kj::mv(prom2)]() mutable { return kj::mv(prom2); });
106106
}
107107

108108
//! PassField override for mp.Context arguments. Return asynchronously and call
@@ -118,10 +118,10 @@ auto PassField(Priority<1>, TypeList<>, ServerContext& server_context, const Fn&
118118
auto future = kj::newPromiseAndFulfiller<typename ServerContext::CallContext>();
119119
auto& server = server_context.proxy_server;
120120
int req = server_context.req;
121-
auto invoke = MakeAsyncCallable(kj::mvCapture(future.fulfiller,
122-
kj::mvCapture(server_context.call_context,
123-
[&server, req, fn, args...](typename ServerContext::CallContext call_context,
124-
kj::Own<kj::PromiseFulfiller<typename ServerContext::CallContext>> fulfiller) {
121+
auto invoke = MakeAsyncCallable(
122+
[&server, req, fn, args...,
123+
fulfiller = kj::mv(future.fulfiller),
124+
call_context = kj::mv(server_context.call_context)]() mutable {
125125
const auto& params = call_context.getParams();
126126
Context::Reader context_arg = Accessor::get(params);
127127
ServerContext server_context{server, call_context, req};
@@ -155,7 +155,7 @@ auto PassField(Priority<1>, TypeList<>, ServerContext& server_context, const Fn&
155155
fulfiller_dispose->reject(kj::mv(*exception));
156156
});
157157
}
158-
})));
158+
});
159159

160160
auto thread_client = context_arg.getThread();
161161
return JoinPromises(server.m_context.connection->m_threads.getLocalServer(thread_client)

src/mp/gen.cpp

+27-11
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ bool BoxedType(const ::capnp::Type& type)
126126
void Generate(kj::StringPtr src_prefix,
127127
kj::StringPtr include_prefix,
128128
kj::StringPtr src_file,
129-
kj::ArrayPtr<const kj::StringPtr> import_paths)
129+
const std::vector<kj::StringPtr>& import_paths,
130+
const kj::ReadableDirectory& src_dir,
131+
const std::vector<kj::Own<const kj::ReadableDirectory>>& import_dirs)
130132
{
131133
std::string output_path;
132134
if (src_prefix == ".") {
@@ -176,7 +178,11 @@ void Generate(kj::StringPtr src_prefix,
176178
}
177179

178180
capnp::SchemaParser parser;
179-
auto file_schema = parser.parseDiskFile(src_file, src_file, import_paths);
181+
auto directory_pointers = kj::heapArray<const kj::ReadableDirectory*>(import_dirs.size());
182+
for (size_t i = 0; i < import_dirs.size(); ++i) {
183+
directory_pointers[i] = import_dirs[i].get();
184+
}
185+
auto file_schema = parser.parseFromDirectory(src_dir, kj::Path::parse(output_path), directory_pointers);
180186

181187
std::ofstream cpp_server(output_path + ".proxy-server.c++");
182188
cpp_server << "// Generated by " PROXY_BIN " from " << src_file << "\n\n";
@@ -611,20 +617,30 @@ int main(int argc, char** argv)
611617
exit(1);
612618
}
613619
std::vector<kj::StringPtr> import_paths;
614-
#ifdef HAVE_KJ_FILESYSTEM
620+
std::vector<kj::Own<const kj::ReadableDirectory>> import_dirs;
615621
auto fs = kj::newDiskFilesystem();
616622
auto cwd = fs->getCurrentPath();
617-
#endif
623+
kj::Own<const kj::ReadableDirectory> src_dir;
624+
KJ_IF_MAYBE(dir, fs->getRoot().tryOpenSubdir(cwd.evalNative(argv[1]))) {
625+
src_dir = kj::mv(*dir);
626+
} else {
627+
throw std::runtime_error(std::string("Failed to open src_prefix prefix directory: ") + argv[1]);
628+
}
618629
for (size_t i = 4; i < argc; ++i) {
619-
import_paths.emplace_back(argv[i]);
630+
KJ_IF_MAYBE(dir, fs->getRoot().tryOpenSubdir(cwd.evalNative(argv[i]))) {
631+
import_paths.emplace_back(argv[i]);
632+
import_dirs.emplace_back(kj::mv(*dir));
633+
} else {
634+
throw std::runtime_error(std::string("Failed to open import directory: ") + argv[i]);
635+
}
620636
}
621637
for (const char* path : {CMAKE_INSTALL_PREFIX "/include", capnp_PREFIX "/include"}) {
622-
#ifdef HAVE_KJ_FILESYSTEM
623-
KJ_IF_MAYBE(dir, fs->getRoot().tryOpenSubdir(cwd.evalNative(path))) { import_paths.emplace_back(path); }
624-
#else
625-
import_paths.emplace_back(path);
626-
#endif
638+
KJ_IF_MAYBE(dir, fs->getRoot().tryOpenSubdir(cwd.evalNative(path))) {
639+
import_paths.emplace_back(path);
640+
import_dirs.emplace_back(kj::mv(*dir));
641+
}
642+
// No exception thrown if _PREFIX directories do not exist
627643
}
628-
Generate(argv[1], argv[2], argv[3], {import_paths.data(), import_paths.size()});
644+
Generate(argv[1], argv[2], argv[3], import_paths, *src_dir, import_dirs);
629645
return 0;
630646
}

0 commit comments

Comments
 (0)