mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-16 03:32:18 -06:00
FindProtobuf: Add PROTOC_EXE option to protobuf_generate
This option was added to protobuf's upstream cmake package.
This commit is contained in:
committed by
Brad King
parent
f4dc24b527
commit
53717488ea
5
Help/release/dev/FindProtobuf-protoc-exe-option.rst
Normal file
5
Help/release/dev/FindProtobuf-protoc-exe-option.rst
Normal file
@@ -0,0 +1,5 @@
|
||||
FindProtobuf-protoc-exe-option
|
||||
------------------------------
|
||||
|
||||
* The :module:`FindProtobuf` module :command:`protobuf_generate` command
|
||||
gained a ``PROTOC_EXE`` option to specify a custom ``protoc`` executable.
|
||||
@@ -164,6 +164,7 @@ Example:
|
||||
[IMPORT_DIRS <dir>...]
|
||||
[GENERATE_EXTENSIONS <extension>...]
|
||||
[PROTOC_OPTIONS <option>...]
|
||||
[PROTOC_EXE <executable>]
|
||||
[APPEND_PATH])
|
||||
|
||||
``APPEND_PATH``
|
||||
@@ -223,6 +224,12 @@ Example:
|
||||
|
||||
Additional arguments that are forwarded to protoc.
|
||||
|
||||
``PROTOC_EXE <executable>``
|
||||
.. versionadded:: 3.32
|
||||
|
||||
Command name, path, or CMake executable used to generate protobuf bindings.
|
||||
If omitted, ``protobuf::protoc`` is used.
|
||||
|
||||
Example::
|
||||
|
||||
find_package(gRPC CONFIG REQUIRED)
|
||||
@@ -243,7 +250,7 @@ cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
|
||||
|
||||
function(protobuf_generate)
|
||||
set(_options APPEND_PATH DESCRIPTORS)
|
||||
set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO PROTOC_OUT_DIR PLUGIN PLUGIN_OPTIONS DEPENDENCIES)
|
||||
set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO PROTOC_OUT_DIR PLUGIN PLUGIN_OPTIONS DEPENDENCIES PROTOC_EXE)
|
||||
if(COMMAND target_sources)
|
||||
list(APPEND _singleargs TARGET)
|
||||
endif()
|
||||
@@ -312,10 +319,14 @@ function(protobuf_generate)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT TARGET protobuf::protoc)
|
||||
message(SEND_ERROR "protoc executable not found. "
|
||||
"Please define the Protobuf_PROTOC_EXECUTABLE variable or ensure that protoc is in CMake's search path.")
|
||||
return()
|
||||
if(NOT protobuf_generate_PROTOC_EXE)
|
||||
if(NOT TARGET protobuf::protoc)
|
||||
message(SEND_ERROR "protoc executable not found. "
|
||||
"Please define the Protobuf_PROTOC_EXECUTABLE variable, or pass PROTOC_EXE to protobuf_generate, or ensure that protoc is in CMake's search path.")
|
||||
return()
|
||||
endif()
|
||||
# Default to using the CMake executable
|
||||
set(protobuf_generate_PROTOC_EXE protobuf::protoc)
|
||||
endif()
|
||||
|
||||
if(protobuf_generate_APPEND_PATH)
|
||||
@@ -388,7 +399,7 @@ function(protobuf_generate)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${_generated_srcs}
|
||||
COMMAND protobuf::protoc
|
||||
COMMAND ${protobuf_generate_PROTOC_EXE}
|
||||
ARGS ${protobuf_generate_PROTOC_OPTIONS} --${protobuf_generate_LANGUAGE}_out ${_plugin_options}:${protobuf_generate_PROTOC_OUT_DIR} ${_plugin} ${_dll_desc_out} ${_protobuf_include_path} ${_abs_file}
|
||||
DEPENDS ${_abs_file} protobuf::protoc ${protobuf_generate_DEPENDENCIES}
|
||||
COMMENT ${_comment}
|
||||
|
||||
@@ -9,3 +9,4 @@ add_test(NAME FindProtobuf.Test COMMAND
|
||||
"-DCMake_TEST_FindProtobuf_gRPC=${CMake_TEST_FindProtobuf_gRPC}"
|
||||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
|
||||
)
|
||||
set_property(TEST FindProtobuf.Test PROPERTY FAIL_REGULAR_EXPRESSION PROTOC_EXE)
|
||||
|
||||
@@ -70,7 +70,7 @@ if(CMake_TEST_FindProtobuf_gRPC)
|
||||
# NOTE: with IMPORT_DIRS msgs/, generated files will be placed under ${CMAKE_CURRENT_BINARY_DIR}/grpc/
|
||||
target_include_directories(msgs_grpc_IMPORT_DIRS PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/grpc/)
|
||||
target_link_libraries(msgs_grpc_IMPORT_DIRS PUBLIC ${Protobuf_LIBRARIES})
|
||||
protobuf_generate(TARGET msgs_grpc_IMPORT_DIRS LANGUAGE cpp IMPORT_DIRS msgs/)
|
||||
protobuf_generate(TARGET msgs_grpc_IMPORT_DIRS LANGUAGE cpp IMPORT_DIRS msgs/ PROTOC_EXE ${Protobuf_PROTOC_EXECUTABLE})
|
||||
protobuf_generate(TARGET msgs_grpc_IMPORT_DIRS LANGUAGE grpc IMPORT_DIRS msgs/ GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc PLUGIN "protoc-gen-grpc=${gRPC_CPP_PLUGIN}")
|
||||
add_executable(test_generate_grpc_IMPORT_DIRS main-generate-grpc.cxx)
|
||||
target_link_libraries(test_generate_grpc_IMPORT_DIRS PRIVATE msgs_grpc_IMPORT_DIRS)
|
||||
|
||||
Reference in New Issue
Block a user