Index: third_party/protobuf/cmake/examples.cmake |
diff --git a/third_party/protobuf/cmake/examples.cmake b/third_party/protobuf/cmake/examples.cmake |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e5cad63f67650db353a1f3a0e8b349e8cf0db32f |
--- /dev/null |
+++ b/third_party/protobuf/cmake/examples.cmake |
@@ -0,0 +1,57 @@ |
+if(protobuf_VERBOSE) |
+ message(STATUS "Protocol Buffers Examples Configuring...") |
+endif() |
+ |
+get_filename_component(examples_dir "../examples" ABSOLUTE) |
+ |
+if(protobuf_VERBOSE) |
+ message(STATUS "Protocol Buffers Examples Configuring done") |
+endif() |
+include(ExternalProject) |
+ |
+# Internal utility function: Create a custom target representing a build of examples with custom options. |
+function(add_examples_build NAME) |
+ |
+ ExternalProject_Add(${NAME} |
+ PREFIX ${NAME} |
+ SOURCE_DIR "${examples_dir}" |
+ BINARY_DIR ${NAME} |
+ STAMP_DIR ${NAME}/logs |
+ INSTALL_COMMAND "" #Skip |
+ LOG_CONFIGURE 1 |
+ CMAKE_CACHE_ARGS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}" |
+ "-Dprotobuf_VERBOSE:BOOL=${protobuf_VERBOSE}" |
+ ${ARGN} |
+ ) |
+ set_property(TARGET ${NAME} PROPERTY FOLDER "Examples") |
+ set_property(TARGET ${NAME} PROPERTY EXCLUDE_FROM_ALL TRUE) |
+endfunction() |
+ |
+# Add examples as an external project. |
+# sub_directory cannot be used because the find_package(protobuf) call would cause failures with redefined targets. |
+add_examples_build(examples "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}") |
+add_dependencies(examples libprotobuf protoc) |
+ |
+option(protobuf_BUILD_EXAMPLES_MULTITEST "Build Examples in multiple configurations. Useful for testing." OFF) |
+mark_as_advanced(protobuf_BUILD_EXAMPLES_MULTITEST) |
+if(protobuf_BUILD_EXAMPLES_MULTITEST) |
+ set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
+ |
+ #Build using the legacy compatibility module. |
+ add_examples_build(examples-legacy |
+ "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}" |
+ "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE" |
+ ) |
+ add_dependencies(examples-legacy libprotobuf protoc) |
+ |
+ #Build using the installed library. |
+ add_examples_build(examples-installed |
+ "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" |
+ ) |
+ |
+ #Build using the installed library in legacy compatibility mode. |
+ add_examples_build(examples-installed-legacy |
+ "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" |
+ "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE" |
+ ) |
+endif() |