From f0884ec25b5f56cea3ed135efaf5fca744d3f1ee Mon Sep 17 00:00:00 2001
From: redPanther <redPanther@users.noreply.github.com>
Date: Mon, 13 Jun 2016 08:11:57 +0200
Subject: [PATCH] add support for using system protoc instead of version in
 submodule (#698)

---
 dependencies/CMakeLists.txt | 44 ++++++++++++++++++++++++++------------------
 1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/dependencies/CMakeLists.txt b/dependencies/CMakeLists.txt
index 52d7f74..26dd96c 100644
--- a/dependencies/CMakeLists.txt
+++ b/dependencies/CMakeLists.txt
@@ -9,27 +9,35 @@ if(ENABLE_WS281XPWM)
 		external/rpi_ws281x/mailbox.c external/rpi_ws281x/ws2811.c
 		external/rpi_ws281x/pwm.c external/rpi_ws281x/dma.c
 		external/rpi_ws281x/rpihw.c)
-endif(ENABLE_WS281XPWM)
+endif()
 
-set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared protobuf library")
-add_subdirectory(external/protobuf)
+set(USE_SYSTEM_PROTO_LIBS OFF CACHE BOOL "use protobuf library from system")
 
-if(CMAKE_CROSSCOMPILING)
-	# when crosscompiling import the protoc executable targets from a file generated by a native build
-	option(IMPORT_PROTOC "Protoc export file (protoc_export.cmake) from a native build" "IMPORT_PROTOC-FILE_NOT_FOUND")
-	include(${IMPORT_PROTOC})
-else()
-	# export the protoc compiler so it can be used when cross compiling
-	export(TARGETS protoc_compiler FILE "${CMAKE_BINARY_DIR}/protoc_export.cmake")
-endif()
+if (USE_SYSTEM_PROTO_LIBS)
+	find_package(Protobuf REQUIRED)
+	include_directories(${PROTOBUF_INCLUDE_DIRS})
+else ()
+	set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared protobuf library")
+	add_subdirectory(external/protobuf)
 
-# define the include for the protobuf library at the parent scope
-set(PROTOBUF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/protobuf/src")
-set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
+	if(CMAKE_CROSSCOMPILING)
+		# when crosscompiling import the protoc executable targets from a file generated by a native build
+		option(IMPORT_PROTOC "Protoc export file (protoc_export.cmake) from a native build" "IMPORT_PROTOC-FILE_NOT_FOUND")
+		include(${IMPORT_PROTOC})
+	else()
+		# export the protoc compiler so it can be used when cross compiling
+		export(TARGETS protoc_compiler FILE "${CMAKE_BINARY_DIR}/protoc_export.cmake")
+	endif()
+
+	# define the include for the protobuf library at the parent scope
+	set(PROTOBUF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/protobuf/src")
+	set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS} PARENT_SCOPE)
+
+	# define the protoc executable at the parent scope
+	get_property(PROTOBUF_PROTOC_EXECUTABLE TARGET protoc_compiler PROPERTY LOCATION)
+	set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE} PARENT_SCOPE)
+endif()
 
-# define the protoc executable at the parent scope
-get_property(PROTOBUF_PROTOC_EXECUTABLE TARGET protoc_compiler PROPERTY LOCATION)
-set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE} PARENT_SCOPE)
 message(STATUS "Using protobuf compiler: " ${PROTOBUF_PROTOC_EXECUTABLE})
 
 #=============================================================================
@@ -76,7 +84,7 @@ function(PROTOBUF_GENERATE_CPP SRCS HDRS)
 		endforeach()
 	endif()
 
-	if(CMAKE_CROSSCOMPILING)
+	if(CMAKE_CROSSCOMPILING OR USE_SYSTEM_PROTO_LIBS)
 		set(PROTOC_DEPENDENCY ${PROTOBUF_PROTOC_EXECUTABLE})
 	else()
 		set(PROTOC_DEPENDENCY protoc_compiler)
