diff options
| author | Dimitri Staessens <dimitri.staessens@intec.ugent.be> | 2016-03-29 12:06:58 +0200 | 
|---|---|---|
| committer | Dimitri Staessens <dimitri.staessens@intec.ugent.be> | 2016-03-29 12:06:58 +0200 | 
| commit | 1d4442e472d20f261986089ea468daa93631d1f4 (patch) | |
| tree | 3b27a134c762190b096de421310a50910dca4a34 /cmake | |
| parent | e5d67f7d4df123c2490201447681f2efd553dcc1 (diff) | |
| parent | 37c4ccaf59a0406053573e14909be48322ffb084 (diff) | |
| download | ouroboros-1d4442e472d20f261986089ea468daa93631d1f4.tar.gz ouroboros-1d4442e472d20f261986089ea468daa93631d1f4.zip | |
Merged in sandervrijders/ouroboros/be-gpb (pull request #45)
Replace custom ser/des with GPB
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/FindProtobufC.cmake | 72 | 
1 files changed, 72 insertions, 0 deletions
| diff --git a/cmake/FindProtobufC.cmake b/cmake/FindProtobufC.cmake new file mode 100644 index 00000000..bfa50110 --- /dev/null +++ b/cmake/FindProtobufC.cmake @@ -0,0 +1,72 @@ +function(PROTOBUF_GENERATE_C SRCS HDRS) +  if(NOT ARGN) +    message(SEND_ERROR "Error: PROTOBUF_GENERATE_C() called without any proto files") +    return() +  endif() + +  if(PROTOBUF_GENERATE_C_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() + +  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  ${PROTOBUF_PROTOC_C_EXECUTABLE} +      ARGS --c_out=${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL} +      DEPENDS ${ABS_FIL} ${PROTOBUF_PROTOC_C_EXECUTABLE} +      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() + +# By default have PROTOBUF_GENERATE_C macro pass -I to protoc +# for each directory where a proto file is referenced. +if(NOT DEFINED PROTOBUF_GENERATE_C_APPEND_PATH) +  set(PROTOBUF_GENERATE_C_APPEND_PATH TRUE) +endif() + +# Find library +find_library(PROTOBUF_C_LIBRARY +    NAMES libprotobuf-c.so libprotobuf-c +) +mark_as_advanced(PROTOBUF_C_LIBRARY) + +# Find the include directory +find_path(PROTOBUF_C_INCLUDE_DIR +    google/protobuf-c/protobuf-c.h +) +mark_as_advanced(PROTOBUF_C_INCLUDE_DIR) + +# Find the protoc-c Executable +find_program(PROTOBUF_PROTOC_C_EXECUTABLE +    NAMES protoc-c +    DOC "The Google Protocol Buffers C Compiler" +) +mark_as_advanced(PROTOBUF_PROTOC_C_EXECUTABLE) + +find_package(PackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ProtobufC DEFAULT_MSG +    PROTOBUF_C_LIBRARY PROTOBUF_C_INCLUDE_DIR PROTOBUF_PROTOC_C_EXECUTABLE) | 
