Skip to content

Commit 4d78645

Browse files
committed
Merge #28: CMake workarounds for ubuntu capnproto 0.6.1 compatibility
b09973b CMake workarounds for ubuntu capnproto 0.6.1 compatibility (Russell Yanofsky) Pull request description: Top commit has no ACKs. Tree-SHA512: 2876a2ab918ab1cceda60cca72290aaaef353b2e8ccf4e4365c69cea125908ce0731af84c2e1288df03dcc0f14e3b9e33bcd34e08d11b962611712a626c35875
2 parents 097bce2 + b09973b commit 4d78645

File tree

4 files changed

+79
-3
lines changed

4 files changed

+79
-3
lines changed

CMakeLists.txt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ include(CMakePushCheckState)
88
include(CTest)
99
include(CheckCXXSourceCompiles)
1010
find_package(Boost)
11-
find_package(CapnProto)
11+
find_package(CapnProto REQUIRED)
1212
find_package(Threads REQUIRED)
1313

14+
include("cmake/capnp_compat.cmake")
15+
1416
cmake_push_check_state()
1517
set(CMAKE_REQUIRED_LIBRARIES Threads::Threads)
1618
check_cxx_source_compiles("
@@ -73,8 +75,11 @@ install(TARGETS multiprocess EXPORT Multiprocess ARCHIVE DESTINATION lib PUBLIC_
7375
add_executable(mpgen src/mp/gen.cpp)
7476
target_include_directories(mpgen PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>)
7577
target_include_directories(mpgen PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>)
78+
target_link_libraries(mpgen PRIVATE CapnProto::capnp)
7679
target_link_libraries(mpgen PRIVATE CapnProto::capnp-rpc)
77-
target_link_libraries(mpgen PRIVATE -L${capnp_LIBRARY_DIRS} capnpc)
80+
target_link_libraries(mpgen PRIVATE CapnProto::capnpc)
81+
target_link_libraries(mpgen PRIVATE CapnProto::kj)
82+
target_link_libraries(mpgen PRIVATE Threads::Threads)
7883
target_link_libraries(mpgen PRIVATE multiprocess)
7984
set_target_properties(mpgen PROPERTIES
8085
INSTALL_RPATH_USE_LINK_PATH TRUE
@@ -89,7 +94,7 @@ install(FILES "include/mpgen.mk" DESTINATION "include")
8994

9095
install(EXPORT Multiprocess DESTINATION lib/cmake/Multiprocess)
9196

92-
if(BUILD_TESTING)
97+
if(BUILD_TESTING AND TARGET CapnProto::kj-test)
9398
add_custom_command(
9499
OUTPUT
95100
src/mp/test/foo.capnp.h
@@ -122,8 +127,12 @@ if(BUILD_TESTING)
122127
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
123128
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src>
124129
)
130+
target_link_libraries(mptest PRIVATE CapnProto::capnp)
125131
target_link_libraries(mptest PRIVATE CapnProto::capnp-rpc)
132+
target_link_libraries(mptest PRIVATE CapnProto::kj)
133+
target_link_libraries(mptest PRIVATE CapnProto::kj-async)
126134
target_link_libraries(mptest PRIVATE CapnProto::kj-test)
135+
target_link_libraries(mptest PRIVATE Threads::Threads)
127136
target_link_libraries(mptest PRIVATE multiprocess)
128137
set_target_properties(mptest PROPERTIES
129138
CXX_STANDARD 14

cmake/capnp_compat.cmake

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Copyright (c) 2019 The Bitcoin Core developers
2+
# Distributed under the MIT software license, see the accompanying
3+
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
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)
10+
11+
if (NOT DEFINED capnp_PREFIX AND DEFINED CAPNP_INCLUDE_DIRS)
12+
get_filename_component(capnp_PREFIX "${CAPNP_INCLUDE_DIRS}" DIRECTORY)
13+
endif()
14+
15+
if (NOT DEFINED CAPNPC_OUTPUT_DIR)
16+
set(CAPNPC_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
17+
endif()
18+
19+
if (NOT DEFINED CAPNP_LIB_CAPNPC AND DEFINED CAPNP_LIB_CAPNP-RPC)
20+
string(REPLACE "-rpc" "c" CAPNP_LIB_CAPNPC "${CAPNP_LIB_CAPNP-RPC}")
21+
endif()
22+
23+
if (NOT DEFINED CapnProto_capnpc_IMPORTED_LOCATION AND DEFINED CapnProto_capnp-rpc_IMPORTED_LOCATION)
24+
string(REPLACE "-rpc" "c" CapnProto_capnpc_IMPORTED_LOCATION "${CapnProto_capnp-rpc_IMPORTED_LOCATION}")
25+
endif()
26+
27+
if (NOT TARGET CapnProto::capnp AND DEFINED CAPNP_LIB_CAPNP)
28+
add_library(CapnProto::capnp SHARED IMPORTED)
29+
set_target_properties(CapnProto::capnp PROPERTIES IMPORTED_LOCATION "${CAPNP_LIB_CAPNP}")
30+
endif()
31+
32+
if (NOT TARGET CapnProto::capnpc AND DEFINED CAPNP_LIB_CAPNPC)
33+
add_library(CapnProto::capnpc SHARED IMPORTED)
34+
set_target_properties(CapnProto::capnpc PROPERTIES IMPORTED_LOCATION "${CAPNP_LIB_CAPNPC}")
35+
endif()
36+
37+
if (NOT TARGET CapnProto::capnpc AND DEFINED CapnProto_capnpc_IMPORTED_LOCATION)
38+
add_library(CapnProto::capnpc SHARED IMPORTED)
39+
set_target_properties(CapnProto::capnpc PROPERTIES IMPORTED_LOCATION "${CapnProto_capnpc_IMPORTED_LOCATION}")
40+
endif()
41+
42+
if (NOT TARGET CapnProto::capnp-rpc AND DEFINED CAPNP_LIB_CAPNP-RPC)
43+
add_library(CapnProto::capnp-rpc SHARED IMPORTED)
44+
set_target_properties(CapnProto::capnp-rpc PROPERTIES IMPORTED_LOCATION "${CAPNP_LIB_CAPNP-RPC}")
45+
endif()
46+
47+
if (NOT TARGET CapnProto::kj AND DEFINED CAPNP_LIB_KJ)
48+
add_library(CapnProto::kj SHARED IMPORTED)
49+
set_target_properties(CapnProto::kj PROPERTIES IMPORTED_LOCATION "${CAPNP_LIB_KJ}")
50+
endif()
51+
52+
if (NOT TARGET CapnProto::kj-async AND DEFINED CAPNP_LIB_KJ-ASYNC)
53+
add_library(CapnProto::kj-async SHARED IMPORTED)
54+
set_target_properties(CapnProto::kj-async PROPERTIES IMPORTED_LOCATION "${CAPNP_LIB_KJ-ASYNC}")
55+
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/config.h.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#cmakedefine CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@"
99
#cmakedefine capnp_PREFIX "@capnp_PREFIX@"
10+
#cmakedefine HAVE_KJ_FILESYSTEM
1011

1112
#cmakedefine HAVE_PTHREAD_GETNAME_NP @HAVE_PTHREAD_GETNAME_NP@
1213
#cmakedefine HAVE_PTHREAD_THREADID_NP @HAVE_PTHREAD_THREADID_NP@

src/mp/gen.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,10 +550,16 @@ int main(int argc, char** argv)
550550
exit(1);
551551
}
552552
std::vector<kj::StringPtr> import_paths;
553+
#ifdef HAVE_KJ_FILESYSTEM
553554
auto fs = kj::newDiskFilesystem();
554555
auto cwd = fs->getCurrentPath();
556+
#endif
555557
for (const char* path : {CMAKE_INSTALL_PREFIX "/include", capnp_PREFIX "/include"}) {
558+
#ifdef HAVE_KJ_FILESYSTEM
556559
KJ_IF_MAYBE(dir, fs->getRoot().tryOpenSubdir(cwd.evalNative(path))) { import_paths.emplace_back(path); }
560+
#else
561+
import_paths.emplace_back(path);
562+
#endif
557563
}
558564
for (size_t i = 4; i < argc; ++i) {
559565
import_paths.push_back(argv[i]);

0 commit comments

Comments
 (0)