|
|
@@ -57,17 +57,18 @@
|
|
|
# include_directories(${PROTOBUF_INCLUDE_DIRS})
|
|
|
# include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
|
# 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})
|
|
|
# target_link_libraries(bar ${PROTOBUF_LIBRARIES})
|
|
|
#
|
|
|
# .. note::
|
|
|
-# The PROTOBUF_GENERATE_CPP macro and add_executable() or
|
|
|
-# add_library() calls only work properly within the same
|
|
|
-# directory.
|
|
|
+# The ``protobuf_generate_cpp`` and ``protobuf_generate_python``
|
|
|
+# functions and :command:`add_executable` or :command:`add_library`
|
|
|
+# calls only work properly within the same directory.
|
|
|
#
|
|
|
# .. 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>...])
|
|
|
#
|
|
|
@@ -77,6 +78,17 @@
|
|
|
# Variable to define with autogenerated header files
|
|
|
# ``ARGN``
|
|
|
# ``.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.
|
|
|
@@ -147,6 +159,53 @@ function(PROTOBUF_GENERATE_CPP SRCS HDRS)
|
|
|
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
|
|
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)
|
|
|
set(_PROTOBUF_ARCH_DIR x64/)
|
|
|
endif()
|