# HG changeset patch # User Sebastien Jodogne # Date 1679824743 -7200 # Node ID 9466c95f70c86f681a3e10ca5c85760900760f82 # Parent 8d19e53cf23e91a1fd1b1ec9d410a613c9233489 integrating Protobuf library into Orthanc server diff -r 8d19e53cf23e -r 9466c95f70c8 OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake --- a/OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake Sun Mar 26 10:46:09 2023 +0200 +++ b/OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake Sun Mar 26 11:59:03 2023 +0200 @@ -141,6 +141,11 @@ unset(ENABLE_DCMTK_LOG CACHE) endif() +if (NOT ENABLE_PROTOBUF) + unset(USE_SYSTEM_PROTOBUF CACHE) + add_definitions(-DORTHANC_ENABLE_PROTOBUF=0) +endif() + ##################################################################### ## List of source files @@ -476,6 +481,16 @@ endif() +## +## Google Protocol Buffers +## + +if (ENABLE_PROTOBUF) + include(${CMAKE_CURRENT_LIST_DIR}/ProtobufConfiguration.cmake) + add_definitions(-DORTHANC_ENABLE_PROTOBUF=1) +endif() + + ##################################################################### ## Inclusion of mandatory third-party dependencies @@ -712,6 +727,7 @@ ${LUA_SOURCES} ${MONGOOSE_SOURCES} ${OPENSSL_SOURCES} + ${PROTOBUF_LIBRARY_SOURCES} ${PUGIXML_SOURCES} ${SQLITE_SOURCES} ${UUID_SOURCES} diff -r 8d19e53cf23e -r 9466c95f70c8 OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake --- a/OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake Sun Mar 26 10:46:09 2023 +0200 +++ b/OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake Sun Mar 26 11:59:03 2023 +0200 @@ -70,6 +70,7 @@ set(USE_SYSTEM_LUA ON CACHE BOOL "Use the system version of Lua") set(USE_SYSTEM_MONGOOSE ON CACHE BOOL "Use the system version of Mongoose") set(USE_SYSTEM_OPENSSL ON CACHE BOOL "Use the system version of OpenSSL") +set(USE_SYSTEM_PROTOBUF ON CACHE BOOL "Use the system version of Google Protocol Buffers") set(USE_SYSTEM_PUGIXML ON CACHE BOOL "Use the system version of Pugixml") set(USE_SYSTEM_SQLITE ON CACHE BOOL "Use the system version of SQLite") set(USE_SYSTEM_UUID ON CACHE BOOL "Use the system version of the uuid library from e2fsprogs") @@ -123,6 +124,7 @@ set(ENABLE_LOCALE OFF CACHE INTERNAL "Enable support for locales (notably in Boost)") set(ENABLE_LUA OFF CACHE INTERNAL "Enable support of Lua scripting") set(ENABLE_PNG OFF CACHE INTERNAL "Enable support of PNG") +set(ENABLE_PROTOBUF OFF CACHE INTERNAL "Enable support for Google Protocol Buffers") set(ENABLE_PUGIXML OFF CACHE INTERNAL "Enable support of XML through Pugixml") set(ENABLE_SQLITE OFF CACHE INTERNAL "Enable support of SQLite databases") set(ENABLE_ZLIB OFF CACHE INTERNAL "Enable support of zlib") diff -r 8d19e53cf23e -r 9466c95f70c8 OrthancFramework/Resources/CMake/ProtobufConfiguration.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancFramework/Resources/CMake/ProtobufConfiguration.cmake Sun Mar 26 11:59:03 2023 +0200 @@ -0,0 +1,55 @@ +# Orthanc - A Lightweight, RESTful DICOM Store +# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics +# Department, University Hospital of Liege, Belgium +# Copyright (C) 2017-2023 Osimis S.A., Belgium +# Copyright (C) 2021-2023 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public License +# as published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program. If not, see +# . + + +if (STATIC_BUILD OR NOT USE_SYSTEM_PROTOBUF) + include(${CMAKE_CURRENT_LIST_DIR}/../ProtocolBuffers/ProtobufLibrary.cmake) + source_group(ThirdParty\\Protobuf REGULAR_EXPRESSION ${PROTOBUF_SOURCE_DIR}/.*) + +else() + find_program(PROTOC_EXECUTABLE protoc) + if (${PROTOC_EXECUTABLE} MATCHES "PROTOC_EXECUTABLE-NOTFOUND") + message(FATAL_ERROR "Please install the 'protoc' compiler for Protocol Buffers (package 'protobuf-compiler' on Debian/Ubuntu)") + endif() + + check_include_file_cxx(google/protobuf/any.h HAVE_PROTOBUF_H) + if (NOT HAVE_PROTOBUF_H) + message(FATAL_ERROR "Please install the libprotobuf-dev package") + endif() + + set(CMAKE_REQUIRED_LIBRARIES "protobuf") + + include(CheckCXXSourceCompiles) + check_cxx_source_compiles( + " +#include +int main() +{ + google::protobuf::FieldDescriptor::TypeName(google::protobuf::FieldDescriptor::TYPE_FLOAT); +} +" HAVE_PROTOBUF_LIB) + if (NOT HAVE_PROTOBUF_LIB) + message(FATAL_ERROR "Cannot find the protobuf library") + endif() + + unset(CMAKE_REQUIRED_LIBRARIES) + + link_libraries(protobuf) +endif() diff -r 8d19e53cf23e -r 9466c95f70c8 OrthancFramework/Resources/ProtocolBuffers/CMakeLists.txt --- a/OrthancFramework/Resources/ProtocolBuffers/CMakeLists.txt Sun Mar 26 10:46:09 2023 +0200 +++ b/OrthancFramework/Resources/ProtocolBuffers/CMakeLists.txt Sun Mar 26 11:59:03 2023 +0200 @@ -25,16 +25,12 @@ set(ALLOW_DOWNLOADS ON) +include(${CMAKE_SOURCE_DIR}/../CMake/DownloadPackage.cmake) include(${CMAKE_SOURCE_DIR}/../CMake/Compiler.cmake) + include(${CMAKE_SOURCE_DIR}/ProtobufLibrary.cmake) -include_directories( - ${PROTOBUF_SOURCE_DIR}/src - ) - -add_executable(protoc - ${PROTOBUF_LIBRARY_SOURCES} - +set(PROTOBUF_COMPILER_SOURCES ${PROTOBUF_SOURCE_DIR}/src/google/protobuf/compiler/code_generator.cc ${PROTOBUF_SOURCE_DIR}/src/google/protobuf/compiler/command_line_interface.cc ${PROTOBUF_SOURCE_DIR}/src/google/protobuf/compiler/cpp/cpp_enum.cc @@ -137,7 +133,12 @@ if (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") set_property( - SOURCE ${PROTOBUF_LIBRARY_SOURCES} + SOURCE ${PROTOBUF_COMPILER_SOURCES} PROPERTY COMPILE_DEFINITIONS "HAVE_PTHREAD=1" ) endif() + +add_executable(protoc + ${PROTOBUF_LIBRARY_SOURCES} + ${PROTOBUF_COMPILER_SOURCES} + ) diff -r 8d19e53cf23e -r 9466c95f70c8 OrthancFramework/Resources/ProtocolBuffers/ProtobufLibrary.cmake --- a/OrthancFramework/Resources/ProtocolBuffers/ProtobufLibrary.cmake Sun Mar 26 10:46:09 2023 +0200 +++ b/OrthancFramework/Resources/ProtocolBuffers/ProtobufLibrary.cmake Sun Mar 26 11:59:03 2023 +0200 @@ -19,8 +19,6 @@ # . -include(${CMAKE_SOURCE_DIR}/../CMake/DownloadPackage.cmake) - DownloadPackage( "ca0d9b243e649d398a6b419acd35103a" "http://orthanc.uclouvain.be/third-party-downloads/protobuf-cpp-3.5.1.tar.gz" @@ -28,6 +26,10 @@ set(PROTOBUF_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf-3.5.1) +include_directories( + ${PROTOBUF_SOURCE_DIR}/src + ) + set(PROTOBUF_LIBRARY_SOURCES ${PROTOBUF_SOURCE_DIR}/src/google/protobuf/any.cc ${PROTOBUF_SOURCE_DIR}/src/google/protobuf/any.pb.cc @@ -113,3 +115,10 @@ ${PROTOBUF_SOURCE_DIR}/src/google/protobuf/wire_format_lite.cc ${PROTOBUF_SOURCE_DIR}/src/google/protobuf/wrappers.pb.cc ) + +if (NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") + set_property( + SOURCE ${PROTOBUF_LIBRARY_SOURCES} + PROPERTY COMPILE_DEFINITIONS "HAVE_PTHREAD=1" + ) +endif() diff -r 8d19e53cf23e -r 9466c95f70c8 OrthancServer/CMakeLists.txt --- a/OrthancServer/CMakeLists.txt Sun Mar 26 10:46:09 2023 +0200 +++ b/OrthancServer/CMakeLists.txt Sun Mar 26 11:59:03 2023 +0200 @@ -41,6 +41,7 @@ set(ENABLE_LUA ON) set(ENABLE_OPENSSL_ENGINES ON) # OpenSSL engines are necessary for PKCS11 set(ENABLE_PNG ON) +set(ENABLE_PROTOBUF ON) set(ENABLE_PUGIXML ON) set(ENABLE_SQLITE ON) set(ENABLE_WEB_CLIENT ON)