mjpg-streamer/cmake/FindProtobuf-c.cmake

87 lines
3.2 KiB
CMake
Raw Permalink Normal View History

2024-10-15 15:50:29 +08:00
# PROTOBUF_C_FOUND - System has libprotobuf-c
# PROTOBUF_C_INCLUDE_DIRS - The libprotobuf-c include directories
# PROTOBUF_C_LIBRARIES - The libraries needed to use libprotobuf-c
# PROTOBUF_C_DEFINITIONS - Compiler switches required for using libprotobuf-c
function(PROTOBUF_C_GENERATE SRCS HDRS)
if(NOT ARGN)
message(SEND_ERROR "Error: PROTOBUFC_GENERATE() called without any proto files")
return()
endif()
if(PROTOBUF_C_GENERATE_APPEND_PATH)
# Create an include path for each file specified
foreach(FIL ${ARGN})
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
if(${_contains_already} EQUAL -1)
list(APPEND _protobuf_include_path -I ${ABS_PATH})
endif()
endforeach()
else()
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
endif()
if(DEFINED PROTOBUFC_IMPORT_DIRS)
foreach(DIR ${PROTOBUF_IMPORT_DIRS})
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
if(${_contains_already} EQUAL -1)
list(APPEND _protobuf_include_path -I ${ABS_PATH})
endif()
endforeach()
endif()
set(${SRCS})
set(${HDRS})
foreach(FIL ${ARGN})
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
get_filename_component(FIL_WE ${FIL} NAME_WE)
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.c")
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.h")
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.c"
"${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.h"
COMMAND ${PROTOBUFC_PROTOC_EXECUTABLE}
ARGS --c_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
DEPENDS ${ABS_FIL}
COMMENT "Running C protocol buffer compiler on ${FIL}"
VERBATIM )
endforeach()
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
endfunction()
# Find the protoc Executable
find_program(PROTOBUFC_PROTOC_EXECUTABLE
NAMES protoc-c
DOC "protoc-c compiler"
)
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_PROTOBUF_C QUIET protobuf-c)
set(PROTOBUF_C_DEFINITIONS ${PC_PROTOBUF_C_CFLAGS_OTHER})
endif()
find_path(PROTOBUF_C_INCLUDE_DIR protobuf-c/protobuf-c.h
HINTS ${PC_PROTOBUF_C_INCLUDEDIR} ${PC_PROTOBUF_C_INCLUDE_DIRS}
PATH_SUFFIXES protobuf-c)
find_library(PROTOBUF_C_LIBRARY NAMES protobuf-c
HINTS ${PC_PROTOBUF_C_LIBDIR} ${PC_PROTOBUF_C_LIBRARY_DIRS})
set(PROTOBUF_C_LIBRARIES ${PROTOBUF_C_LIBRARY} )
set(PROTOBUF_C_INCLUDE_DIRS ${PROTOBUF_C_INCLUDE_DIR})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(protobuf-c DEFAULT_MSG
PROTOBUF_C_LIBRARY PROTOBUF_C_INCLUDE_DIR)
mark_as_advanced(PROTOBUF_C_INCLUDE_DIR YANG_LIBRARY)