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 compatiblity 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 compatiblity mode.
  add_examples_build(examples-installed-legacy
    "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}"
    "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE"
  )
endif()
