Commit 71f1fa97 authored by Branislav Katreniak's avatar Branislav Katreniak

cmake/macros: use in-build capnp tools if capnroto is built in cmake

If CapnProto is part of cmake build, macro CAPNP_GENERATE_CPP
uses in-build capnp tools.

This change fixes `make check` target with cmake.

All tests pass except
1: [ FAIL ] exception-test.c++:30: legacy test:
    Exception/TrimSourceFilename
1: /home/brano/src/capnproto/c++/src/kj/exception-test.c++:31:
    failed: expected (trimSourceFilename(
    "/home/brano/src/capnproto/c++/src/kj/exception-test.c++"))
    == ("kj/exception-test.c++");

Not sure how to fix the test without disabling it.
parent 1fa72fde
......@@ -26,6 +26,14 @@ function(CAPNP_GENERATE_CPP SOURCES HEADERS)
if(NOT ARGN)
message(SEND_ERROR "CAPNP_GENERATE_CPP() called without any source files.")
endif()
set(tool_depends ${EMPTY_STRING})
#Use cmake targets available
if(TARGET capnp_tool)
set(CAPNP_EXECUTABLE capnp_tool)
GET_TARGET_PROPERTY(CAPNPC_CXX_EXECUTABLE capnpc_cpp CAPNPC_CXX_EXECUTABLE)
GET_TARGET_PROPERTY(CAPNP_INCLUDE_DIRECTORY capnp_tool CAPNP_INCLUDE_DIRECTORY)
list(APPEND tool_depends capnp_tool capnpc_cpp)
endif()
if(NOT CAPNP_EXECUTABLE)
message(SEND_ERROR "Could not locate capnp executable (CAPNP_EXECUTABLE).")
endif()
......@@ -92,7 +100,7 @@ function(CAPNP_GENERATE_CPP SOURCES HEADERS)
${include_path}
${CAPNPC_FLAGS}
${file_path}
DEPENDS "${schema_file}"
DEPENDS "${schema_file}" ${tool_depends}
COMMENT "Compiling Cap'n Proto schema ${schema_file}"
VERBATIM
)
......
......@@ -143,12 +143,20 @@ if(BUILD_TOOLS AND NOT CAPNP_LITE)
)
target_link_libraries(capnp_tool capnpc capnp kj)
set_target_properties(capnp_tool PROPERTIES OUTPUT_NAME capnp)
set_target_properties(capnp_tool PROPERTIES CAPNP_INCLUDE_DIRECTORY
$<JOIN:$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>,$<INSTALL_INTERFACE:${CMAKE_INSTALL_BINDIR}/..>>
)
add_executable(capnpc_cpp
compiler/capnpc-c++.c++
)
target_link_libraries(capnpc_cpp capnp kj)
set_target_properties(capnpc_cpp PROPERTIES OUTPUT_NAME capnpc-c++)
#Capnp tool needs capnpc_cpp location. But cmake deprecated LOCATION property.
#So we use custom property to pass location
set_target_properties(capnpc_cpp PROPERTIES CAPNPC_CXX_EXECUTABLE
$<JOIN:$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/capnpc-c++>,$<INSTALL_INTERFACE:${CMAKE_INSTALL_BINDIR}/capnpc-c++>>
)
add_executable(capnpc_capnp
compiler/capnpc-capnp.c++
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment