Feng Xiao | 9086d96 | 2016-07-13 13:47:51 -0700 | [diff] [blame] | 1 | if(protobuf_VERBOSE) |
| 2 | message(STATUS "Protocol Buffers Examples Configuring...") |
| 3 | endif() |
| 4 | |
Arfrever Frehtes Taifersar Arahesis | 14cab5b | 2022-03-08 00:00:00 +0000 | [diff] [blame] | 5 | get_filename_component(examples_dir "${protobuf_SOURCE_DIR}/examples" ABSOLUTE) |
Feng Xiao | 9086d96 | 2016-07-13 13:47:51 -0700 | [diff] [blame] | 6 | |
| 7 | if(protobuf_VERBOSE) |
| 8 | message(STATUS "Protocol Buffers Examples Configuring done") |
| 9 | endif() |
| 10 | include(ExternalProject) |
| 11 | |
| 12 | # Internal utility function: Create a custom target representing a build of examples with custom options. |
| 13 | function(add_examples_build NAME) |
| 14 | |
| 15 | ExternalProject_Add(${NAME} |
| 16 | PREFIX ${NAME} |
| 17 | SOURCE_DIR "${examples_dir}" |
| 18 | BINARY_DIR ${NAME} |
| 19 | STAMP_DIR ${NAME}/logs |
| 20 | INSTALL_COMMAND "" #Skip |
| 21 | LOG_CONFIGURE 1 |
| 22 | CMAKE_CACHE_ARGS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}" |
| 23 | "-Dprotobuf_VERBOSE:BOOL=${protobuf_VERBOSE}" |
| 24 | ${ARGN} |
| 25 | ) |
| 26 | set_property(TARGET ${NAME} PROPERTY FOLDER "Examples") |
| 27 | set_property(TARGET ${NAME} PROPERTY EXCLUDE_FROM_ALL TRUE) |
| 28 | endfunction() |
| 29 | |
| 30 | # Add examples as an external project. |
| 31 | # sub_directory cannot be used because the find_package(protobuf) call would cause failures with redefined targets. |
| 32 | add_examples_build(examples "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}") |
Mike Kruskal | 3edec1f | 2022-07-25 20:36:47 -0700 | [diff] [blame] | 33 | add_dependencies(examples ${protobuf_LIB_PROTOBUF} ${protobuf_PROTOC_EXE}) |
Feng Xiao | 9086d96 | 2016-07-13 13:47:51 -0700 | [diff] [blame] | 34 | |
| 35 | option(protobuf_BUILD_EXAMPLES_MULTITEST "Build Examples in multiple configurations. Useful for testing." OFF) |
| 36 | mark_as_advanced(protobuf_BUILD_EXAMPLES_MULTITEST) |
| 37 | if(protobuf_BUILD_EXAMPLES_MULTITEST) |
| 38 | set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
| 39 | |
| 40 | #Build using the legacy compatibility module. |
| 41 | add_examples_build(examples-legacy |
| 42 | "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}" |
| 43 | "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE" |
| 44 | ) |
Mike Kruskal | 3edec1f | 2022-07-25 20:36:47 -0700 | [diff] [blame] | 45 | add_dependencies(examples-legacy ${protobuf_LIB_PROTOBUF} ${protobuf_PROTOC_EXE}) |
Feng Xiao | 9086d96 | 2016-07-13 13:47:51 -0700 | [diff] [blame] | 46 | |
| 47 | #Build using the installed library. |
| 48 | add_examples_build(examples-installed |
| 49 | "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" |
| 50 | ) |
| 51 | |
| 52 | #Build using the installed library in legacy compatibility mode. |
| 53 | add_examples_build(examples-installed-legacy |
| 54 | "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}" |
| 55 | "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE" |
| 56 | ) |
| 57 | endif() |