FindProtobuf: Add protobuf_generate_python function
This commit is contained in:
parent
6dad4c25b0
commit
2ec97b1302
|
@ -0,0 +1,6 @@
|
||||||
|
FindProtobuf-python-extension
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
* The :module:`FindProtobuf` module gained a new
|
||||||
|
:command:`protobuf_generate_python` function to generate python
|
||||||
|
sources from ``.proto`` files.
|
|
@ -57,17 +57,18 @@
|
||||||
# include_directories(${PROTOBUF_INCLUDE_DIRS})
|
# include_directories(${PROTOBUF_INCLUDE_DIRS})
|
||||||
# include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
# include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||||
# protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)
|
# protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)
|
||||||
|
# protobuf_generate_python(PROTO_PY foo.proto)
|
||||||
# add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
|
# add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
|
||||||
# target_link_libraries(bar ${PROTOBUF_LIBRARIES})
|
# target_link_libraries(bar ${PROTOBUF_LIBRARIES})
|
||||||
#
|
#
|
||||||
# .. note::
|
# .. note::
|
||||||
# The PROTOBUF_GENERATE_CPP macro and add_executable() or
|
# The ``protobuf_generate_cpp`` and ``protobuf_generate_python``
|
||||||
# add_library() calls only work properly within the same
|
# functions and :command:`add_executable` or :command:`add_library`
|
||||||
# directory.
|
# calls only work properly within the same directory.
|
||||||
#
|
#
|
||||||
# .. command:: protobuf_generate_cpp
|
# .. command:: protobuf_generate_cpp
|
||||||
#
|
#
|
||||||
# Add custom commands to process ``.proto`` files::
|
# Add custom commands to process ``.proto`` files to C++::
|
||||||
#
|
#
|
||||||
# protobuf_generate_cpp (<SRCS> <HDRS> [<ARGN>...])
|
# protobuf_generate_cpp (<SRCS> <HDRS> [<ARGN>...])
|
||||||
#
|
#
|
||||||
|
@ -77,6 +78,17 @@
|
||||||
# Variable to define with autogenerated header files
|
# Variable to define with autogenerated header files
|
||||||
# ``ARGN``
|
# ``ARGN``
|
||||||
# ``.proto`` files
|
# ``.proto`` files
|
||||||
|
#
|
||||||
|
# .. command:: protobuf_generate_python
|
||||||
|
#
|
||||||
|
# Add custom commands to process ``.proto`` files to Python::
|
||||||
|
#
|
||||||
|
# protobuf_generate_python (<PY> [<ARGN>...])
|
||||||
|
#
|
||||||
|
# ``PY``
|
||||||
|
# Variable to define with autogenerated Python files
|
||||||
|
# ``ARGN``
|
||||||
|
# ``.proto`` filess
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
# Copyright 2009 Kitware, Inc.
|
# Copyright 2009 Kitware, Inc.
|
||||||
|
@ -147,6 +159,53 @@ function(PROTOBUF_GENERATE_CPP SRCS HDRS)
|
||||||
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(PROTOBUF_GENERATE_PYTHON SRCS)
|
||||||
|
if(NOT ARGN)
|
||||||
|
message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||||
|
# Create an include path for each file specified
|
||||||
|
foreach(FIL ${ARGN})
|
||||||
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||||
|
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
||||||
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||||
|
if(${_contains_already} EQUAL -1)
|
||||||
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
else()
|
||||||
|
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED PROTOBUF_IMPORT_DIRS)
|
||||||
|
foreach(DIR ${PROTOBUF_IMPORT_DIRS})
|
||||||
|
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
||||||
|
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||||
|
if(${_contains_already} EQUAL -1)
|
||||||
|
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${SRCS})
|
||||||
|
foreach(FIL ${ARGN})
|
||||||
|
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||||
|
get_filename_component(FIL_WE ${FIL} NAME_WE)
|
||||||
|
|
||||||
|
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}_pb2.py")
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}_pb2.py"
|
||||||
|
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --python_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
|
||||||
|
DEPENDS ${ABS_FIL} ${PROTOBUF_PROTOC_EXECUTABLE}
|
||||||
|
COMMENT "Running Python protocol buffer compiler on ${FIL}"
|
||||||
|
VERBATIM )
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
set(_PROTOBUF_ARCH_DIR x64/)
|
set(_PROTOBUF_ARCH_DIR x64/)
|
||||||
endif()
|
endif()
|
||||||
|
|
Loading…
Reference in New Issue