@@ -51,24 +51,32 @@ set(CAPNP_SCHEMA_COPY "${CAPNP_OUT_DIR}/driver.capnp")
5151set (CAPNP_GEN_HDR "${CAPNP_OUT_DIR} /driver.capnp.h" )
5252set (CAPNP_GEN_SRC "${CAPNP_OUT_DIR} /driver.capnp.c++" )
5353
54- # Resolve capnp compiler path
54+ # Resolve capnp compiler path and its directory (for plugin discovery)
5555set (CAPNP_COMPILER capnp)
56+ set (CAPNP_DIR "" )
5657if (TARGET CapnProto::capnp_tool)
5758 set (CAPNP_COMPILER $<TARGET_FILE:CapnProto::capnp_tool>)
59+ set (CAPNP_DIR $<TARGET_FILE_DIR:CapnProto::capnp_tool>)
5860elseif (DEFINED CAPNP_EXECUTABLE)
5961 set (CAPNP_COMPILER "${CAPNP_EXECUTABLE} " )
60- endif ()
61-
62- # Set up the capnp compile command with PATH modification on Linux
63- if (UNIX AND NOT APPLE )
64- if (TARGET CapnProto::capnp_tool)
65- set (CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=$<TARGET_FILE_DIR:CapnProto::capnp_tool>:$ENV{PATH} " ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
66- elseif (DEFINED CAPNP_EXECUTABLE)
62+ get_filename_component (CAPNP_DIR "${CAPNP_EXECUTABLE} " DIRECTORY )
63+ else ()
64+ find_program (CAPNP_EXECUTABLE capnp)
65+ if (CAPNP_EXECUTABLE)
66+ set (CAPNP_COMPILER "${CAPNP_EXECUTABLE} " )
6767 get_filename_component (CAPNP_DIR "${CAPNP_EXECUTABLE} " DIRECTORY )
68- set (CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=${CAPNP_DIR} :$ENV{PATH} " ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
69- else ()
70- set (CAPNP_COMPILE_COMMAND ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
7168 endif ()
69+ endif ()
70+
71+ # Compose PATH modification for capnpc-c++ plugin resolution on all platforms
72+ if (WIN32 )
73+ set (_PATH_SEP ";" )
74+ else ()
75+ set (_PATH_SEP ":" )
76+ endif ()
77+
78+ if (CAPNP_DIR)
79+ set (CAPNP_COMPILE_COMMAND ${CMAKE_COMMAND} -E env "PATH=${CAPNP_DIR}${_PATH_SEP}$ENV{PATH} " ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
7280else ()
7381 set (CAPNP_COMPILE_COMMAND ${CAPNP_COMPILER} compile -o c++:. "driver.capnp" )
7482endif ()
0 commit comments