|  | @@ -65,6 +65,8 @@
 | 
	
		
			
				|  |  |        deps.append("${_gRPC_ZLIB_LIBRARIES}")
 | 
	
		
			
				|  |  |      for d in target_dict.get('deps', []):
 | 
	
		
			
				|  |  |        deps.append(d)
 | 
	
		
			
				|  |  | +    if target_dict.build == 'test' and target_dict.language == 'c++':
 | 
	
		
			
				|  |  | +      deps.append("${_gRPC_GFLAGS_LIBRARIES}")
 | 
	
		
			
				|  |  |      return deps
 | 
	
		
			
				|  |  |    %>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -76,6 +78,9 @@
 | 
	
		
			
				|  |  |    set(PACKAGE_TARNAME   "<%text>${PACKAGE_NAME}-${PACKAGE_VERSION}</%text>")
 | 
	
		
			
				|  |  |    set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
 | 
	
		
			
				|  |  |    project(<%text>${PACKAGE_NAME}</%text> C CXX)
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  # Options
 | 
	
		
			
				|  |  | +  option(gRPC_BUILD_TESTS "Build tests" OFF)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (NOT MSVC)
 | 
	
		
			
				|  |  |      set(gRPC_INSTALL ON CACHE BOOL "Generate installation target")
 | 
	
	
		
			
				|  | @@ -91,7 +96,10 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    set(gRPC_PROTOBUF_PROVIDER "module" CACHE STRING "Provider of protobuf library")
 | 
	
		
			
				|  |  |    set_property(CACHE gRPC_PROTOBUF_PROVIDER PROPERTY STRINGS "module" "package")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  set(gRPC_GFLAGS_PROVIDER "module" CACHE STRING "Provider of gflags library")
 | 
	
		
			
				|  |  | +  set_property(CACHE gRPC_GFLAGS_PROVIDER PROPERTY STRINGS "module" "package")
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  |    set(gRPC_USE_PROTO_LITE OFF CACHE BOOL "Use the protobuf-lite library")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (MSVC)
 | 
	
	
		
			
				|  | @@ -195,6 +203,26 @@
 | 
	
		
			
				|  |  |      endif()
 | 
	
		
			
				|  |  |      set(_gRPC_FIND_SSL "if(NOT OpenSSL_FOUND)\n  find_package(OpenSSL)\nendif()")
 | 
	
		
			
				|  |  |    endif()
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  if("<%text>${gRPC_GFLAGS_PROVIDER}</%text>" STREQUAL "module")
 | 
	
		
			
				|  |  | +    if(NOT GFLAGS_ROOT_DIR)
 | 
	
		
			
				|  |  | +      set(GFLAGS_ROOT_DIR <%text>${CMAKE_CURRENT_SOURCE_DIR}</%text>/third_party/gflags)
 | 
	
		
			
				|  |  | +    endif()
 | 
	
		
			
				|  |  | +    if(EXISTS "<%text>${GFLAGS_ROOT_DIR}</%text>/CMakeLists.txt")
 | 
	
		
			
				|  |  | +        add_subdirectory(<%text>${GFLAGS_ROOT_DIR}</%text> third_party/gflags)
 | 
	
		
			
				|  |  | +        if(TARGET gflags_static)
 | 
	
		
			
				|  |  | +            set(_gRPC_GFLAGS_LIBRARIES gflags_static)
 | 
	
		
			
				|  |  | +        endif()
 | 
	
		
			
				|  |  | +    else()
 | 
	
		
			
				|  |  | +        message(WARNING "gRPC_GFLAGS_PROVIDER is \"module\" but GFLAGS_ROOT_DIR is wrong")
 | 
	
		
			
				|  |  | +    endif()
 | 
	
		
			
				|  |  | +  elseif("<%text>${gRPC_GFLAGS_PROVIDER}</%text>" STREQUAL "package")
 | 
	
		
			
				|  |  | +    find_package(gflags)
 | 
	
		
			
				|  |  | +    if(TARGET gflags::gflags)
 | 
	
		
			
				|  |  | +      set(_gRPC_GFLAGS_LIBRARIES gflags::gflags)
 | 
	
		
			
				|  |  | +    endif()
 | 
	
		
			
				|  |  | +    set(_gRPC_FIND_GFLAGS "if(NOT gflags_FOUND)\n  find_package(gflags)\nendif()")
 | 
	
		
			
				|  |  | +  endif()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if(NOT MSVC)
 | 
	
		
			
				|  |  |      set(CMAKE_C_FLAGS   "<%text>${CMAKE_C_FLAGS}</%text>   -std=c11")
 | 
	
	
		
			
				|  | @@ -260,17 +288,31 @@
 | 
	
		
			
				|  |  |    endfunction()
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  |    % for lib in libs:
 | 
	
		
			
				|  |  | -  % if lib.build in ["all", "protoc", "tool"] and lib.language in ['c', 'c++']:
 | 
	
		
			
				|  |  | +  % if lib.build in ["all", "protoc", "tool", "test", "private"] and lib.language in ['c', 'c++']:
 | 
	
		
			
				|  |  | +  % if not lib.get('build_system', []) or 'cmake' in lib.get('build_system', []):
 | 
	
		
			
				|  |  | +  % if lib.build in ["test", "private"]:
 | 
	
		
			
				|  |  | +  if (gRPC_BUILD_TESTS)
 | 
	
		
			
				|  |  | +  ${cc_library(lib)}
 | 
	
		
			
				|  |  | +  endif (gRPC_BUILD_TESTS)
 | 
	
		
			
				|  |  | +  % else:
 | 
	
		
			
				|  |  |    ${cc_library(lib)}
 | 
	
		
			
				|  |  |    ${cc_install(lib)}
 | 
	
		
			
				|  |  |    % endif
 | 
	
		
			
				|  |  | +  % endif
 | 
	
		
			
				|  |  | +  % endif
 | 
	
		
			
				|  |  |    % endfor
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    % for tgt in targets:
 | 
	
		
			
				|  |  | -  % if tgt.build in ["all", "protoc", "tool"] and tgt.language in ['c', 'c++']:
 | 
	
		
			
				|  |  | +  % if tgt.build in ["all", "protoc", "tool", "test", "private"] and tgt.language in ['c', 'c++']:
 | 
	
		
			
				|  |  | +  % if tgt.build in ["test", "private"]:
 | 
	
		
			
				|  |  | +  if (gRPC_BUILD_TESTS)
 | 
	
		
			
				|  |  | +  ${cc_binary(tgt)}
 | 
	
		
			
				|  |  | +  endif (gRPC_BUILD_TESTS)
 | 
	
		
			
				|  |  | +  % else:
 | 
	
		
			
				|  |  |    ${cc_binary(tgt)}
 | 
	
		
			
				|  |  |    ${cc_install(tgt)}
 | 
	
		
			
				|  |  |    % endif
 | 
	
		
			
				|  |  | +  % endif
 | 
	
		
			
				|  |  |    % endfor
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    <%def name="cc_library(lib)">
 | 
	
	
		
			
				|  | @@ -302,6 +344,11 @@
 | 
	
		
			
				|  |  |      PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src
 | 
	
		
			
				|  |  |      PRIVATE <%text>${ZLIB_INCLUDE_DIR}</%text>
 | 
	
		
			
				|  |  |      PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib
 | 
	
		
			
				|  |  | +    PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include
 | 
	
		
			
				|  |  | +  % if lib.build in ['test', 'private'] and lib.language == 'c++':
 | 
	
		
			
				|  |  | +    PRIVATE third_party/googletest/include
 | 
	
		
			
				|  |  | +    PRIVATE third_party/googletest
 | 
	
		
			
				|  |  | +  % endif
 | 
	
		
			
				|  |  |    % if any(proto_re.match(src) for src in lib.src):
 | 
	
		
			
				|  |  |      PRIVATE <%text>${_gRPC_PROTO_GENS_DIR}</%text>
 | 
	
		
			
				|  |  |    % endif
 | 
	
	
		
			
				|  | @@ -335,6 +382,9 @@
 | 
	
		
			
				|  |  |    % for src in tgt.src:
 | 
	
		
			
				|  |  |      ${src}
 | 
	
		
			
				|  |  |    % endfor
 | 
	
		
			
				|  |  | +  % if tgt.build == 'test' and tgt.language == 'c++':
 | 
	
		
			
				|  |  | +    third_party/googletest/src/gtest-all.cc
 | 
	
		
			
				|  |  | +  % endif
 | 
	
		
			
				|  |  |    )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    target_include_directories(${tgt.name}
 | 
	
	
		
			
				|  | @@ -344,6 +394,11 @@
 | 
	
		
			
				|  |  |      PRIVATE <%text>${PROTOBUF_ROOT_DIR}</%text>/src
 | 
	
		
			
				|  |  |      PRIVATE <%text>${ZLIB_ROOT_DIR}</%text>
 | 
	
		
			
				|  |  |      PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/zlib
 | 
	
		
			
				|  |  | +    PRIVATE <%text>${CMAKE_CURRENT_BINARY_DIR}</%text>/third_party/gflags/include
 | 
	
		
			
				|  |  | +  % if tgt.build in ['test', 'private'] and tgt.language == 'c++':
 | 
	
		
			
				|  |  | +    PRIVATE third_party/googletest/include
 | 
	
		
			
				|  |  | +    PRIVATE third_party/googletest
 | 
	
		
			
				|  |  | +  % endif
 | 
	
		
			
				|  |  |    )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    % if len(get_deps(tgt)) > 0:
 |