From acb51685bd364adb3dd0c867c07f17c7f5b6819a Mon Sep 17 00:00:00 2001 From: Joey de l'Arago Date: Tue, 6 Sep 2022 10:50:49 +0200 Subject: [PATCH 1/3] Remove unused files Replace StandardProjectSettings.cmake with umbase StandardProjectSettings.cmake CURA-9483 --- CMakeLists.txt | 1 - cmake/COPYING-CMAKE-SCRIPTS | 22 --- cmake/StandardProjectSettings.cmake | 197 --------------------------- cmake/cpack_config_deb_mingw64.cmake | 26 ---- conanfile.py | 1 + 5 files changed, 1 insertion(+), 246 deletions(-) delete mode 100644 cmake/COPYING-CMAKE-SCRIPTS delete mode 100644 cmake/StandardProjectSettings.cmake delete mode 100644 cmake/cpack_config_deb_mingw64.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index d778bddc..7d0a1fe8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,6 @@ cmake_policy(SET CMP0091 NEW) project(libarcus) cmake_minimum_required(VERSION 3.20) -include(cmake/StandardProjectSettings.cmake) find_package(protobuf 3.17.1 REQUIRED) diff --git a/cmake/COPYING-CMAKE-SCRIPTS b/cmake/COPYING-CMAKE-SCRIPTS deleted file mode 100644 index 4b417765..00000000 --- a/cmake/COPYING-CMAKE-SCRIPTS +++ /dev/null @@ -1,22 +0,0 @@ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/cmake/StandardProjectSettings.cmake b/cmake/StandardProjectSettings.cmake deleted file mode 100644 index aa305c13..00000000 --- a/cmake/StandardProjectSettings.cmake +++ /dev/null @@ -1,197 +0,0 @@ -include(GNUInstallDirs) # Standard install dirs - -# Ultimaker uniform Thread linking method -function(use_threads project_name) - message(STATUS "Enabling threading support for ${project_name}") - set(CMAKE_THREAD_PREFER_PTHREAD TRUE) - set(THREADS_PREFER_PTHREAD_FLAG TRUE) - find_package(Threads) - get_target_property(type ${project_name} TYPE) - if (${type} STREQUAL "INTERFACE_LIBRARY") - target_link_libraries(${project_name} INTERFACE Threads::Threads) - else() - target_link_libraries(${project_name} PRIVATE Threads::Threads) - endif() -endfunction() - -# https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md -function(set_project_warnings project_name) - message(STATUS "Setting warnings for ${project_name}") - set(MSVC_WARNINGS - /W4 # Baseline reasonable warnings - /w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss of data - /w14254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data - /w14263 # 'function': member function does not override any base class virtual member function - /w14265 # 'classname': class has virtual functions, but destructor is not virtual instances of this class may not - # be destructed correctly - /w14287 # 'operator': unsigned/negative constant mismatch - /we4289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside - # the for-loop scope - /w14296 # 'operator': expression is always 'boolean_value' - /w14311 # 'variable': pointer truncation from 'type1' to 'type2' - /w14545 # expression before comma evaluates to a function which is missing an argument list - /w14546 # function call before comma missing argument list - /w14547 # 'operator': operator before comma has no effect; expected operator with side-effect - /w14549 # 'operator': operator before comma has no effect; did you intend 'operator'? - /w14555 # expression has no effect; expected expression with side- effect - /w14619 # pragma warning: there is no warning number 'number' - /w14640 # Enable warning on thread un-safe static member initialization - /w14826 # Conversion from 'type1' to 'type_2' is sign-extended. This may cause unexpected runtime behavior. - /w14905 # wide string literal cast to 'LPSTR' - /w14906 # string literal cast to 'LPWSTR' - /w14928 # illegal copy-initialization; more than one user-defined conversion has been implicitly applied - /permissive- # standards conformance mode for MSVC compiler. - ) - - set(CLANG_WARNINGS - -Wall - -Wextra # reasonable and standard - -Wshadow # warn the user if a variable declaration shadows one from a parent context - -Wnon-virtual-dtor # warn the user if a class with virtual functions has a non-virtual destructor. This helps - # catch hard to track down memory errors - -Wold-style-cast # warn for c-style casts - -Wcast-align # warn for potential performance problem casts - -Wunused # warn on anything being unused - -Woverloaded-virtual # warn if you overload (not override) a virtual function - -Wpedantic # warn if non-standard C++ is used - -Wconversion # warn on type conversions that may lose data - -Wsign-conversion # warn on sign conversions - -Wnull-dereference # warn if a null dereference is detected - -Wdouble-promotion # warn if float is implicit promoted to double - -Wformat=2 # warn on security issues around functions that format output (ie printf) - ) - - set(GCC_WARNINGS - ${CLANG_WARNINGS} - -Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist - -Wduplicated-cond # warn if if / else chain has duplicated conditions - -Wduplicated-branches # warn if if / else branches have duplicated code - -Wlogical-op # warn about logical operations being used where bitwise were probably wanted - -Wuseless-cast # warn if you perform a cast to the same type - ) - - if(MSVC) - set(PROJECT_WARNINGS ${MSVC_WARNINGS}) - elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") - set(PROJECT_WARNINGS ${CLANG_WARNINGS}) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(PROJECT_WARNINGS ${GCC_WARNINGS}) - else() - message(AUTHOR_WARNING "No compiler warnings set for '${CMAKE_CXX_COMPILER_ID}' compiler.") - endif() - - get_target_property(type ${project_name} TYPE) - if (${type} STREQUAL "INTERFACE_LIBRARY") - target_compile_options(${project_name} INTERFACE ${PROJECT_WARNINGS}) - else() - target_compile_options(${project_name} PRIVATE ${PROJECT_WARNINGS}) - endif() -endfunction() - -function(enable_sanitizers project_name) - - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") - option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE) - - if(ENABLE_COVERAGE) - target_compile_options(${project_name} INTERFACE --coverage -O0 -g) - target_link_libraries(${project_name} INTERFACE --coverage) - endif() - - set(SANITIZERS "") - - option(ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" FALSE) - if(ENABLE_SANITIZER_ADDRESS) - list(APPEND SANITIZERS "address") - endif() - - option(ENABLE_SANITIZER_LEAK "Enable leak sanitizer" FALSE) - if(ENABLE_SANITIZER_LEAK) - list(APPEND SANITIZERS "leak") - endif() - - option(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR "Enable undefined behavior sanitizer" FALSE) - if(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR) - list(APPEND SANITIZERS "undefined") - endif() - - option(ENABLE_SANITIZER_THREAD "Enable thread sanitizer" FALSE) - if(ENABLE_SANITIZER_THREAD) - if("address" IN_LIST SANITIZERS OR "leak" IN_LIST SANITIZERS) - message(WARNING "Thread sanitizer does not work with Address and Leak sanitizer enabled") - else() - list(APPEND SANITIZERS "thread") - endif() - endif() - - option(ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" FALSE) - if(ENABLE_SANITIZER_MEMORY AND CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") - if("address" IN_LIST SANITIZERS - OR "thread" IN_LIST SANITIZERS - OR "leak" IN_LIST SANITIZERS) - message(WARNING "Memory sanitizer does not work with Address, Thread and Leak sanitizer enabled") - else() - list(APPEND SANITIZERS "memory") - endif() - endif() - - list( - JOIN - SANITIZERS - "," - LIST_OF_SANITIZERS) - - endif() - - if(LIST_OF_SANITIZERS) - if(NOT - "${LIST_OF_SANITIZERS}" - STREQUAL - "") - target_compile_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) - target_link_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) - endif() - endif() - -endfunction() - -option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" OFF) -option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF) -option(ENABLE_INCLUDE_WHAT_YOU_USE "Enable static analysis with include-what-you-use" OFF) - -if(ENABLE_CPPCHECK) - find_program(CPPCHECK cppcheck) - if(CPPCHECK) - message(STATUS "Using cppcheck") - set(CMAKE_CXX_CPPCHECK - ${CPPCHECK} - --suppress=missingInclude - --enable=all - --inline-suppr - --inconclusive - -i - ${CMAKE_SOURCE_DIR}/imgui/lib) - else() - message(WARNING "cppcheck requested but executable not found") - endif() -endif() - -if(ENABLE_CLANG_TIDY) - find_program(CLANGTIDY clang-tidy) - if(CLANGTIDY) - message(STATUS "Using clang-tidy") - set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY} -extra-arg=-Wno-unknown-warning-option) - else() - message(WARNING "clang-tidy requested but executable not found") - endif() -endif() - -if(ENABLE_INCLUDE_WHAT_YOU_USE) - find_program(INCLUDE_WHAT_YOU_USE include-what-you-use) - if(INCLUDE_WHAT_YOU_USE) - message(STATUS "Using include-what-you-use") - set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${INCLUDE_WHAT_YOU_USE}) - else() - message(WARNING "include-what-you-use requested but executable not found") - endif() -endif() \ No newline at end of file diff --git a/cmake/cpack_config_deb_mingw64.cmake b/cmake/cpack_config_deb_mingw64.cmake deleted file mode 100644 index 04ad2429..00000000 --- a/cmake/cpack_config_deb_mingw64.cmake +++ /dev/null @@ -1,26 +0,0 @@ -set(CPACK_GENERATOR "DEB") -set(CPACK_CMAKE_GENERATOR "Unix Makefiles") - -set(CPACK_PACKAGE_NAME "cura-libarcus-mingw-w64-dev") -set(CPACK_PACKAGE_VENDOR "Ultimaker B.V.") -set(CPACK_PACKAGE_DESCRIPTION "(Cura) libArcus static library for MinGW-w64 targeting Win64") -set(CPACK_PACKAGE_CONTACT "Lipu Fei ") -set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/x86_64-w64-mingw32") -set(CPACK_PACKAGE_VERSION "4.5.0") -set(CPACK_DEBIAN_PACKAGE_RELEASE 1) -set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}") - -set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}") -set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}") -set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_PACKAGE_CONTACT}") -set(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") -set(CPACK_DEBIAN_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.deb") -set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "all") -set(CPACK_DEBIAN_PACKAGE_SECTION "devel") -set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") - -set(_arcus_DEB_DEPENDS - "cura-libprotobuf-mingw-w64-dev (>= 3.9.2)" -) -string(REPLACE ";" ", " _arcus_DEB_DEPENDS "${_arcus_DEB_DEPENDS}") -set(CPACK_DEBIAN_PACKAGE_DEPENDS "${_arcus_DEB_DEPENDS}") diff --git a/conanfile.py b/conanfile.py index 21e932f0..99cace0f 100644 --- a/conanfile.py +++ b/conanfile.py @@ -36,6 +36,7 @@ class ArcusConan(ConanFile): } def requirements(self): + self.requires("umbase/0.1.6@ultimaker/stable") # required for the CMake build modules for req in self._um_data()["requirements"]: self.requires(req) From b4fb45f349cc160f224046bc594f5f627c927626 Mon Sep 17 00:00:00 2001 From: Joey de l'Arago Date: Tue, 6 Sep 2022 11:04:03 +0200 Subject: [PATCH 2/3] revert changes CURA-9483 --- CMakeLists.txt | 1 + cmake/StandardProjectSettings.cmake | 197 ++++++++++++++++++++++++++++ conanfile.py | 1 - 3 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 cmake/StandardProjectSettings.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d0a1fe8..d778bddc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_policy(SET CMP0091 NEW) project(libarcus) cmake_minimum_required(VERSION 3.20) +include(cmake/StandardProjectSettings.cmake) find_package(protobuf 3.17.1 REQUIRED) diff --git a/cmake/StandardProjectSettings.cmake b/cmake/StandardProjectSettings.cmake new file mode 100644 index 00000000..aa305c13 --- /dev/null +++ b/cmake/StandardProjectSettings.cmake @@ -0,0 +1,197 @@ +include(GNUInstallDirs) # Standard install dirs + +# Ultimaker uniform Thread linking method +function(use_threads project_name) + message(STATUS "Enabling threading support for ${project_name}") + set(CMAKE_THREAD_PREFER_PTHREAD TRUE) + set(THREADS_PREFER_PTHREAD_FLAG TRUE) + find_package(Threads) + get_target_property(type ${project_name} TYPE) + if (${type} STREQUAL "INTERFACE_LIBRARY") + target_link_libraries(${project_name} INTERFACE Threads::Threads) + else() + target_link_libraries(${project_name} PRIVATE Threads::Threads) + endif() +endfunction() + +# https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md +function(set_project_warnings project_name) + message(STATUS "Setting warnings for ${project_name}") + set(MSVC_WARNINGS + /W4 # Baseline reasonable warnings + /w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss of data + /w14254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data + /w14263 # 'function': member function does not override any base class virtual member function + /w14265 # 'classname': class has virtual functions, but destructor is not virtual instances of this class may not + # be destructed correctly + /w14287 # 'operator': unsigned/negative constant mismatch + /we4289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside + # the for-loop scope + /w14296 # 'operator': expression is always 'boolean_value' + /w14311 # 'variable': pointer truncation from 'type1' to 'type2' + /w14545 # expression before comma evaluates to a function which is missing an argument list + /w14546 # function call before comma missing argument list + /w14547 # 'operator': operator before comma has no effect; expected operator with side-effect + /w14549 # 'operator': operator before comma has no effect; did you intend 'operator'? + /w14555 # expression has no effect; expected expression with side- effect + /w14619 # pragma warning: there is no warning number 'number' + /w14640 # Enable warning on thread un-safe static member initialization + /w14826 # Conversion from 'type1' to 'type_2' is sign-extended. This may cause unexpected runtime behavior. + /w14905 # wide string literal cast to 'LPSTR' + /w14906 # string literal cast to 'LPWSTR' + /w14928 # illegal copy-initialization; more than one user-defined conversion has been implicitly applied + /permissive- # standards conformance mode for MSVC compiler. + ) + + set(CLANG_WARNINGS + -Wall + -Wextra # reasonable and standard + -Wshadow # warn the user if a variable declaration shadows one from a parent context + -Wnon-virtual-dtor # warn the user if a class with virtual functions has a non-virtual destructor. This helps + # catch hard to track down memory errors + -Wold-style-cast # warn for c-style casts + -Wcast-align # warn for potential performance problem casts + -Wunused # warn on anything being unused + -Woverloaded-virtual # warn if you overload (not override) a virtual function + -Wpedantic # warn if non-standard C++ is used + -Wconversion # warn on type conversions that may lose data + -Wsign-conversion # warn on sign conversions + -Wnull-dereference # warn if a null dereference is detected + -Wdouble-promotion # warn if float is implicit promoted to double + -Wformat=2 # warn on security issues around functions that format output (ie printf) + ) + + set(GCC_WARNINGS + ${CLANG_WARNINGS} + -Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist + -Wduplicated-cond # warn if if / else chain has duplicated conditions + -Wduplicated-branches # warn if if / else branches have duplicated code + -Wlogical-op # warn about logical operations being used where bitwise were probably wanted + -Wuseless-cast # warn if you perform a cast to the same type + ) + + if(MSVC) + set(PROJECT_WARNINGS ${MSVC_WARNINGS}) + elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + set(PROJECT_WARNINGS ${CLANG_WARNINGS}) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(PROJECT_WARNINGS ${GCC_WARNINGS}) + else() + message(AUTHOR_WARNING "No compiler warnings set for '${CMAKE_CXX_COMPILER_ID}' compiler.") + endif() + + get_target_property(type ${project_name} TYPE) + if (${type} STREQUAL "INTERFACE_LIBRARY") + target_compile_options(${project_name} INTERFACE ${PROJECT_WARNINGS}) + else() + target_compile_options(${project_name} PRIVATE ${PROJECT_WARNINGS}) + endif() +endfunction() + +function(enable_sanitizers project_name) + + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE) + + if(ENABLE_COVERAGE) + target_compile_options(${project_name} INTERFACE --coverage -O0 -g) + target_link_libraries(${project_name} INTERFACE --coverage) + endif() + + set(SANITIZERS "") + + option(ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" FALSE) + if(ENABLE_SANITIZER_ADDRESS) + list(APPEND SANITIZERS "address") + endif() + + option(ENABLE_SANITIZER_LEAK "Enable leak sanitizer" FALSE) + if(ENABLE_SANITIZER_LEAK) + list(APPEND SANITIZERS "leak") + endif() + + option(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR "Enable undefined behavior sanitizer" FALSE) + if(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR) + list(APPEND SANITIZERS "undefined") + endif() + + option(ENABLE_SANITIZER_THREAD "Enable thread sanitizer" FALSE) + if(ENABLE_SANITIZER_THREAD) + if("address" IN_LIST SANITIZERS OR "leak" IN_LIST SANITIZERS) + message(WARNING "Thread sanitizer does not work with Address and Leak sanitizer enabled") + else() + list(APPEND SANITIZERS "thread") + endif() + endif() + + option(ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" FALSE) + if(ENABLE_SANITIZER_MEMORY AND CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + if("address" IN_LIST SANITIZERS + OR "thread" IN_LIST SANITIZERS + OR "leak" IN_LIST SANITIZERS) + message(WARNING "Memory sanitizer does not work with Address, Thread and Leak sanitizer enabled") + else() + list(APPEND SANITIZERS "memory") + endif() + endif() + + list( + JOIN + SANITIZERS + "," + LIST_OF_SANITIZERS) + + endif() + + if(LIST_OF_SANITIZERS) + if(NOT + "${LIST_OF_SANITIZERS}" + STREQUAL + "") + target_compile_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) + target_link_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) + endif() + endif() + +endfunction() + +option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" OFF) +option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF) +option(ENABLE_INCLUDE_WHAT_YOU_USE "Enable static analysis with include-what-you-use" OFF) + +if(ENABLE_CPPCHECK) + find_program(CPPCHECK cppcheck) + if(CPPCHECK) + message(STATUS "Using cppcheck") + set(CMAKE_CXX_CPPCHECK + ${CPPCHECK} + --suppress=missingInclude + --enable=all + --inline-suppr + --inconclusive + -i + ${CMAKE_SOURCE_DIR}/imgui/lib) + else() + message(WARNING "cppcheck requested but executable not found") + endif() +endif() + +if(ENABLE_CLANG_TIDY) + find_program(CLANGTIDY clang-tidy) + if(CLANGTIDY) + message(STATUS "Using clang-tidy") + set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY} -extra-arg=-Wno-unknown-warning-option) + else() + message(WARNING "clang-tidy requested but executable not found") + endif() +endif() + +if(ENABLE_INCLUDE_WHAT_YOU_USE) + find_program(INCLUDE_WHAT_YOU_USE include-what-you-use) + if(INCLUDE_WHAT_YOU_USE) + message(STATUS "Using include-what-you-use") + set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${INCLUDE_WHAT_YOU_USE}) + else() + message(WARNING "include-what-you-use requested but executable not found") + endif() +endif() \ No newline at end of file diff --git a/conanfile.py b/conanfile.py index 99cace0f..21e932f0 100644 --- a/conanfile.py +++ b/conanfile.py @@ -36,7 +36,6 @@ class ArcusConan(ConanFile): } def requirements(self): - self.requires("umbase/0.1.6@ultimaker/stable") # required for the CMake build modules for req in self._um_data()["requirements"]: self.requires(req) From 95d95cdccdc26e76d2f4fdebcb2ee2ab1b0a4c49 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 7 Sep 2022 15:14:00 +0200 Subject: [PATCH 3/3] Clean-up old unused files Contributes to CURA-9483 --- TODO.md | 8 - cmake/StandardProjectSettings.cmake | 197 ------- docs/assets/deps.png | Bin 31558 -> 0 bytes docs/development/protobuf.md | 793 ---------------------------- docs/development/zlib.md | 243 --------- 5 files changed, 1241 deletions(-) delete mode 100644 TODO.md delete mode 100644 cmake/StandardProjectSettings.cmake delete mode 100644 docs/assets/deps.png delete mode 100644 docs/development/protobuf.md delete mode 100644 docs/development/zlib.md diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 815bf5f0..00000000 --- a/TODO.md +++ /dev/null @@ -1,8 +0,0 @@ -Things to add later -=================== - -- Support for Unix file sockets in addition to streamed local TCP sockets. -- Support for DNS resolving. -- Find some way to unit test this. -- Use a hash function on the message type name to automatically determine message type id. -- Improve error handling / checking. diff --git a/cmake/StandardProjectSettings.cmake b/cmake/StandardProjectSettings.cmake deleted file mode 100644 index aa305c13..00000000 --- a/cmake/StandardProjectSettings.cmake +++ /dev/null @@ -1,197 +0,0 @@ -include(GNUInstallDirs) # Standard install dirs - -# Ultimaker uniform Thread linking method -function(use_threads project_name) - message(STATUS "Enabling threading support for ${project_name}") - set(CMAKE_THREAD_PREFER_PTHREAD TRUE) - set(THREADS_PREFER_PTHREAD_FLAG TRUE) - find_package(Threads) - get_target_property(type ${project_name} TYPE) - if (${type} STREQUAL "INTERFACE_LIBRARY") - target_link_libraries(${project_name} INTERFACE Threads::Threads) - else() - target_link_libraries(${project_name} PRIVATE Threads::Threads) - endif() -endfunction() - -# https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md -function(set_project_warnings project_name) - message(STATUS "Setting warnings for ${project_name}") - set(MSVC_WARNINGS - /W4 # Baseline reasonable warnings - /w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss of data - /w14254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data - /w14263 # 'function': member function does not override any base class virtual member function - /w14265 # 'classname': class has virtual functions, but destructor is not virtual instances of this class may not - # be destructed correctly - /w14287 # 'operator': unsigned/negative constant mismatch - /we4289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside - # the for-loop scope - /w14296 # 'operator': expression is always 'boolean_value' - /w14311 # 'variable': pointer truncation from 'type1' to 'type2' - /w14545 # expression before comma evaluates to a function which is missing an argument list - /w14546 # function call before comma missing argument list - /w14547 # 'operator': operator before comma has no effect; expected operator with side-effect - /w14549 # 'operator': operator before comma has no effect; did you intend 'operator'? - /w14555 # expression has no effect; expected expression with side- effect - /w14619 # pragma warning: there is no warning number 'number' - /w14640 # Enable warning on thread un-safe static member initialization - /w14826 # Conversion from 'type1' to 'type_2' is sign-extended. This may cause unexpected runtime behavior. - /w14905 # wide string literal cast to 'LPSTR' - /w14906 # string literal cast to 'LPWSTR' - /w14928 # illegal copy-initialization; more than one user-defined conversion has been implicitly applied - /permissive- # standards conformance mode for MSVC compiler. - ) - - set(CLANG_WARNINGS - -Wall - -Wextra # reasonable and standard - -Wshadow # warn the user if a variable declaration shadows one from a parent context - -Wnon-virtual-dtor # warn the user if a class with virtual functions has a non-virtual destructor. This helps - # catch hard to track down memory errors - -Wold-style-cast # warn for c-style casts - -Wcast-align # warn for potential performance problem casts - -Wunused # warn on anything being unused - -Woverloaded-virtual # warn if you overload (not override) a virtual function - -Wpedantic # warn if non-standard C++ is used - -Wconversion # warn on type conversions that may lose data - -Wsign-conversion # warn on sign conversions - -Wnull-dereference # warn if a null dereference is detected - -Wdouble-promotion # warn if float is implicit promoted to double - -Wformat=2 # warn on security issues around functions that format output (ie printf) - ) - - set(GCC_WARNINGS - ${CLANG_WARNINGS} - -Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist - -Wduplicated-cond # warn if if / else chain has duplicated conditions - -Wduplicated-branches # warn if if / else branches have duplicated code - -Wlogical-op # warn about logical operations being used where bitwise were probably wanted - -Wuseless-cast # warn if you perform a cast to the same type - ) - - if(MSVC) - set(PROJECT_WARNINGS ${MSVC_WARNINGS}) - elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") - set(PROJECT_WARNINGS ${CLANG_WARNINGS}) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(PROJECT_WARNINGS ${GCC_WARNINGS}) - else() - message(AUTHOR_WARNING "No compiler warnings set for '${CMAKE_CXX_COMPILER_ID}' compiler.") - endif() - - get_target_property(type ${project_name} TYPE) - if (${type} STREQUAL "INTERFACE_LIBRARY") - target_compile_options(${project_name} INTERFACE ${PROJECT_WARNINGS}) - else() - target_compile_options(${project_name} PRIVATE ${PROJECT_WARNINGS}) - endif() -endfunction() - -function(enable_sanitizers project_name) - - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") - option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE) - - if(ENABLE_COVERAGE) - target_compile_options(${project_name} INTERFACE --coverage -O0 -g) - target_link_libraries(${project_name} INTERFACE --coverage) - endif() - - set(SANITIZERS "") - - option(ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" FALSE) - if(ENABLE_SANITIZER_ADDRESS) - list(APPEND SANITIZERS "address") - endif() - - option(ENABLE_SANITIZER_LEAK "Enable leak sanitizer" FALSE) - if(ENABLE_SANITIZER_LEAK) - list(APPEND SANITIZERS "leak") - endif() - - option(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR "Enable undefined behavior sanitizer" FALSE) - if(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR) - list(APPEND SANITIZERS "undefined") - endif() - - option(ENABLE_SANITIZER_THREAD "Enable thread sanitizer" FALSE) - if(ENABLE_SANITIZER_THREAD) - if("address" IN_LIST SANITIZERS OR "leak" IN_LIST SANITIZERS) - message(WARNING "Thread sanitizer does not work with Address and Leak sanitizer enabled") - else() - list(APPEND SANITIZERS "thread") - endif() - endif() - - option(ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" FALSE) - if(ENABLE_SANITIZER_MEMORY AND CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") - if("address" IN_LIST SANITIZERS - OR "thread" IN_LIST SANITIZERS - OR "leak" IN_LIST SANITIZERS) - message(WARNING "Memory sanitizer does not work with Address, Thread and Leak sanitizer enabled") - else() - list(APPEND SANITIZERS "memory") - endif() - endif() - - list( - JOIN - SANITIZERS - "," - LIST_OF_SANITIZERS) - - endif() - - if(LIST_OF_SANITIZERS) - if(NOT - "${LIST_OF_SANITIZERS}" - STREQUAL - "") - target_compile_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) - target_link_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) - endif() - endif() - -endfunction() - -option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" OFF) -option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF) -option(ENABLE_INCLUDE_WHAT_YOU_USE "Enable static analysis with include-what-you-use" OFF) - -if(ENABLE_CPPCHECK) - find_program(CPPCHECK cppcheck) - if(CPPCHECK) - message(STATUS "Using cppcheck") - set(CMAKE_CXX_CPPCHECK - ${CPPCHECK} - --suppress=missingInclude - --enable=all - --inline-suppr - --inconclusive - -i - ${CMAKE_SOURCE_DIR}/imgui/lib) - else() - message(WARNING "cppcheck requested but executable not found") - endif() -endif() - -if(ENABLE_CLANG_TIDY) - find_program(CLANGTIDY clang-tidy) - if(CLANGTIDY) - message(STATUS "Using clang-tidy") - set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY} -extra-arg=-Wno-unknown-warning-option) - else() - message(WARNING "clang-tidy requested but executable not found") - endif() -endif() - -if(ENABLE_INCLUDE_WHAT_YOU_USE) - find_program(INCLUDE_WHAT_YOU_USE include-what-you-use) - if(INCLUDE_WHAT_YOU_USE) - message(STATUS "Using include-what-you-use") - set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${INCLUDE_WHAT_YOU_USE}) - else() - message(WARNING "include-what-you-use requested but executable not found") - endif() -endif() \ No newline at end of file diff --git a/docs/assets/deps.png b/docs/assets/deps.png deleted file mode 100644 index 8bb4751358ca42487e7c144b8a1b6b6facf0e355..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31558 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 bKl)A0vM;o>b`(gAeMCb=S2^#|vp@a|u$qVX diff --git a/docs/development/protobuf.md b/docs/development/protobuf.md deleted file mode 100644 index 395d9160..00000000 --- a/docs/development/protobuf.md +++ /dev/null @@ -1,793 +0,0 @@ - - - -# protobuf/3.17.1 - ---- - - - -
- -## protobuf/3.17.1 dependencies - -* [zlib/1.2.12](https://conan.io/center/zlib) - -
- -## Using the protobuf Conan Package - -
- -Conan integrates with different build systems. You can declare which build system you want your project to use setting in the **[generators]** section of the [conanfile.txt](https://docs.conan.io/en/latest/reference/conanfile_txt.html#generators) or using the **generators** attribute in the [conanfile.py](https://docs.conan.io/en/latest/reference/conanfile/attributes.html#generators). Here, there is some basic information you can use to integrate **protobuf** in your own project. For more detailed information, please [check the Conan documentation](https://docs.conan.io/en/latest/getting_started.html). - - - -
- -## Using protobuf with CMake - -
- -### [Conan CMake generators](https://docs.conan.io/en/latest/reference/conanfile/tools/cmake.html) - -
- -* [CMakeDeps](https://docs.conan.io/en/latest/reference/conanfile/tools/cmake/cmakedeps.html): generates information about where the **protobuf** library and its dependencies ( [zlib](https://conan.io/center/zlib)) are installed together with other information like version, flags, and directory data or configuration. CMake will use this files when you invoke ``find_package()`` in your *CMakeLists.txt*. - -* [CMakeToolchain](https://docs.conan.io/en/latest/reference/conanfile/tools/cmake/cmaketoolchain.html): generates a CMake toolchain file the you can later invoke with CMake in the command line using `-DCMAKE_TOOLCHAIN_FILE=conantoolchain.cmake`. - -Declare these generators in your **conanfile.txt** along with your **protobuf** dependency like: - -```ini -[requires] -protobuf/3.17.1 - -[generators] -CMakeDeps -CMakeToolchain -``` - -
- -To use **protobuf** in a simple CMake project with this structure: - -```shell -. -|-- CMakeLists.txt -|-- conanfile.txt -`-- src - `-- main..cpp -``` - -
- -Your **CMakeLists.txt** could look similar to this, using the global **protobuf::protobuf** CMake's target: - -```cmake -cmake_minimum_required(VERSION 3.15) -project(protobuf_project CXX) - -find_package(protobuf) - -add_executable(${PROJECT_NAME} src/main.cpp) - -# Use the global target -target_link_libraries(${PROJECT_NAME} protobuf::protobuf) -``` - -
- -To install **protobuf/3.17.1**, its dependencies and build your project, you just have to do: - -```shell -# for Linux/macOS -$ conan install . --install-folder cmake-build-release --build=missing -$ cmake . -DCMAKE_TOOLCHAIN_FILE=cmake-build-release/conan_toolchain.cmake -$ cmake --build . - -# for Windows and Visual Studio 2017 -$ conan install . --output-folder cmake-build --build=missing -$ cmake . -G "Visual Studio 15 2017" -DCMAKE_TOOLCHAIN_FILE=cmake-build/conan_toolchain.cmake -$ cmake --build . --config Release -``` - - - -
- - - -As the protobuf Conan package defines components you can link only that desired part of the library in your project. For example, linking only with the protobuf **libprotobuf** component, through the **protobuf::libprotobuf** target. - -```cmake -... -# Link just to protobuf libprotobuf component -target_link_libraries(${PROJECT_NAME} protobuf::libprotobuf) -``` - -
- -To check all the available components for **protobuf** Conan package, please check the dedicated section at the end of this document. - - - - -
- -### Declared CMake build modules - -
- -#### lib/cmake/protobuf/protobuf-generate.cmake - ```cmake - # User options - include("${CMAKE_CURRENT_LIST_DIR}/protobuf-options.cmake") - - # Depend packages - # BEGIN CONAN PATCH - #_protobuf_FIND_ZLIB@ - # END CONAN PATCH - - # Imported targets - if(NOT TARGET protobuf::protoc) - if(CMAKE_CROSSCOMPILING) - find_program(PROTOC_PROGRAM protoc PATHS ENV PATH NO_DEFAULT_PATH) - endif() - if(NOT PROTOC_PROGRAM) - set(PROTOC_PROGRAM "${CMAKE_CURRENT_LIST_DIR}/../../../bin/protoc") - endif() - get_filename_component(PROTOC_PROGRAM "${PROTOC_PROGRAM}" ABSOLUTE) - set(Protobuf_PROTOC_EXECUTABLE ${PROTOC_PROGRAM} CACHE FILEPATH "The protoc compiler") - add_executable(protobuf::protoc IMPORTED) - set_property(TARGET protobuf::protoc PROPERTY IMPORTED_LOCATION ${Protobuf_PROTOC_EXECUTABLE}) - endif() - - - function(protobuf_generate) - include(CMakeParseArguments) - - set(_options APPEND_PATH) - set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO PROTOC_OUT_DIR PLUGIN) - if(COMMAND target_sources) - list(APPEND _singleargs TARGET) - endif() - set(_multiargs PROTOS IMPORT_DIRS GENERATE_EXTENSIONS PROTOC_OPTIONS) - - cmake_parse_arguments(protobuf_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}") - - if(NOT protobuf_generate_PROTOS AND NOT protobuf_generate_TARGET) - message(SEND_ERROR "Error: protobuf_generate called without any targets or source files") - return() - endif() - - if(NOT protobuf_generate_OUT_VAR AND NOT protobuf_generate_TARGET) - message(SEND_ERROR "Error: protobuf_generate called without a target or output variable") - return() - endif() - - if(NOT protobuf_generate_LANGUAGE) - set(protobuf_generate_LANGUAGE cpp) - endif() - string(TOLOWER ${protobuf_generate_LANGUAGE} protobuf_generate_LANGUAGE) - - if(NOT protobuf_generate_PROTOC_OUT_DIR) - set(protobuf_generate_PROTOC_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) - endif() - - if(protobuf_generate_EXPORT_MACRO AND protobuf_generate_LANGUAGE STREQUAL cpp) - set(_dll_export_decl "dllexport_decl=${protobuf_generate_EXPORT_MACRO}:") - endif() - - if(protobuf_generate_PLUGIN) - set(_plugin "--plugin=${protobuf_generate_PLUGIN}") - endif() - - if(NOT protobuf_generate_GENERATE_EXTENSIONS) - if(protobuf_generate_LANGUAGE STREQUAL cpp) - set(protobuf_generate_GENERATE_EXTENSIONS .pb.h .pb.cc) - elseif(protobuf_generate_LANGUAGE STREQUAL python) - set(protobuf_generate_GENERATE_EXTENSIONS _pb2.py) - else() - message(SEND_ERROR "Error: protobuf_generate given unknown Language ${LANGUAGE}, please provide a value for GENERATE_EXTENSIONS") - return() - endif() - endif() - - if(protobuf_generate_TARGET) - get_target_property(_source_list ${protobuf_generate_TARGET} SOURCES) - foreach(_file ${_source_list}) - if(_file MATCHES "proto$") - list(APPEND protobuf_generate_PROTOS ${_file}) - endif() - endforeach() - endif() - - if(NOT protobuf_generate_PROTOS) - message(SEND_ERROR "Error: protobuf_generate could not find any .proto files") - return() - endif() - - if(protobuf_generate_APPEND_PATH) - # Create an include path for each file specified - foreach(_file ${protobuf_generate_PROTOS}) - get_filename_component(_abs_file ${_file} ABSOLUTE) - get_filename_component(_abs_path ${_abs_file} 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() - endif() - - foreach(DIR ${protobuf_generate_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() - - if(NOT _protobuf_include_path) - set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) - endif() - - set(_generated_srcs_all) - foreach(_proto ${protobuf_generate_PROTOS}) - get_filename_component(_abs_file ${_proto} ABSOLUTE) - get_filename_component(_abs_dir ${_abs_file} DIRECTORY) - - get_filename_component(_file_full_name ${_proto} NAME) - string(FIND "${_file_full_name}" "." _file_last_ext_pos REVERSE) - string(SUBSTRING "${_file_full_name}" 0 ${_file_last_ext_pos} _basename) - - set(_suitable_include_found FALSE) - foreach(DIR ${_protobuf_include_path}) - if(NOT DIR STREQUAL "-I") - file(RELATIVE_PATH _rel_dir ${DIR} ${_abs_dir}) - string(FIND "${_rel_dir}" "../" _is_in_parent_folder) - if (NOT ${_is_in_parent_folder} EQUAL 0) - set(_suitable_include_found TRUE) - break() - endif() - endif() - endforeach() - - if(NOT _suitable_include_found) - message(SEND_ERROR "Error: protobuf_generate could not find any correct proto include directory.") - return() - endif() - - set(_generated_srcs) - foreach(_ext ${protobuf_generate_GENERATE_EXTENSIONS}) - list(APPEND _generated_srcs "${protobuf_generate_PROTOC_OUT_DIR}/${_rel_dir}/${_basename}${_ext}") - endforeach() - list(APPEND _generated_srcs_all ${_generated_srcs}) - - add_custom_command( - OUTPUT ${_generated_srcs} - COMMAND protobuf::protoc - ARGS ${protobuf_generate_PROTOC_OPTIONS} --${protobuf_generate_LANGUAGE}_out ${_dll_export_decl}${protobuf_generate_PROTOC_OUT_DIR} ${_plugin} ${_protobuf_include_path} ${_abs_file} - DEPENDS ${_abs_file} protobuf::protoc - COMMENT "Running ${protobuf_generate_LANGUAGE} protocol buffer compiler on ${_proto}. Custom options: ${protobuf_generate_PROTOC_OPTIONS}" - VERBATIM ) - endforeach() - - set_source_files_properties(${_generated_srcs_all} PROPERTIES GENERATED TRUE) - if(protobuf_generate_OUT_VAR) - set(${protobuf_generate_OUT_VAR} ${_generated_srcs_all} PARENT_SCOPE) - endif() - if(protobuf_generate_TARGET) - target_sources(${protobuf_generate_TARGET} PRIVATE ${_generated_srcs_all}) - endif() - - endfunction() - - # CMake FindProtobuf module compatible file - if(protobuf_MODULE_COMPATIBLE) - include("${CMAKE_CURRENT_LIST_DIR}/protobuf-module.cmake") - endif() - - ```#### lib/cmake/protobuf/protobuf-module.cmake - ```cmake - # This file contains backwards compatibility patches for various legacy functions and variables - # Functions - - function(PROTOBUF_GENERATE_CPP SRCS HDRS) - cmake_parse_arguments(protobuf_generate_cpp "" "EXPORT_MACRO" "" ${ARGN}) - - set(_proto_files "${protobuf_generate_cpp_UNPARSED_ARGUMENTS}") - if(NOT _proto_files) - message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files") - return() - endif() - - if(PROTOBUF_GENERATE_CPP_APPEND_PATH) - set(_append_arg APPEND_PATH) - endif() - - if(DEFINED Protobuf_IMPORT_DIRS) - set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS}) - endif() - - set(_outvar) - protobuf_generate(${_append_arg} LANGUAGE cpp EXPORT_MACRO ${protobuf_generate_cpp_EXPORT_MACRO} OUT_VAR _outvar ${_import_arg} PROTOS ${_proto_files}) - - set(${SRCS}) - set(${HDRS}) - foreach(_file ${_outvar}) - if(_file MATCHES "cc$") - list(APPEND ${SRCS} ${_file}) - else() - list(APPEND ${HDRS} ${_file}) - endif() - endforeach() - set(${SRCS} ${${SRCS}} PARENT_SCOPE) - set(${HDRS} ${${HDRS}} PARENT_SCOPE) - endfunction() - - function(PROTOBUF_GENERATE_PYTHON SRCS) - if(NOT ARGN) - message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files") - return() - endif() - - if(PROTOBUF_GENERATE_CPP_APPEND_PATH) - set(_append_arg APPEND_PATH) - endif() - - if(DEFINED Protobuf_IMPORT_DIRS) - set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS}) - endif() - - set(_outvar) - protobuf_generate(${_append_arg} LANGUAGE python OUT_VAR _outvar ${_import_arg} PROTOS ${ARGN}) - set(${SRCS} ${_outvar} PARENT_SCOPE) - endfunction() - - # Environment - - # Backwards compatibility - # Define camel case versions of input variables - foreach(UPPER - PROTOBUF_SRC_ROOT_FOLDER - PROTOBUF_IMPORT_DIRS - PROTOBUF_DEBUG - PROTOBUF_LIBRARY - PROTOBUF_PROTOC_LIBRARY - PROTOBUF_INCLUDE_DIR - PROTOBUF_PROTOC_EXECUTABLE - PROTOBUF_LIBRARY_DEBUG - PROTOBUF_PROTOC_LIBRARY_DEBUG - PROTOBUF_LITE_LIBRARY - PROTOBUF_LITE_LIBRARY_DEBUG - ) - if (DEFINED ${UPPER}) - string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER}) - if (NOT DEFINED ${Camel}) - set(${Camel} ${${UPPER}}) - endif() - endif() - endforeach() - - if(0) - if(DEFINED Protobuf_SRC_ROOT_FOLDER) - message(AUTHOR_WARNING "Variable Protobuf_SRC_ROOT_FOLDER defined, but not" - " used in CONFIG mode") - endif() - - include(SelectLibraryConfigurations) - - # Internal function: search for normal library as well as a debug one - # if the debug one is specified also include debug/optimized keywords - # in *_LIBRARIES variable - function(_protobuf_find_libraries name filename) - if(${name}_LIBRARIES) - # Use result recorded by a previous call. - elseif(${name}_LIBRARY) - # Honor cache entry used by CMake 3.5 and lower. - set(${name}_LIBRARIES "${${name}_LIBRARY}" PARENT_SCOPE) - else() - get_target_property(${name}_LIBRARY_RELEASE protobuf::lib${filename} - LOCATION_RELEASE) - get_target_property(${name}_LIBRARY_RELWITHDEBINFO protobuf::lib${filename} - LOCATION_RELWITHDEBINFO) - get_target_property(${name}_LIBRARY_MINSIZEREL protobuf::lib${filename} - LOCATION_MINSIZEREL) - get_target_property(${name}_LIBRARY_DEBUG protobuf::lib${filename} - LOCATION_DEBUG) - - select_library_configurations(${name}) - set(${name}_LIBRARY ${${name}_LIBRARY} PARENT_SCOPE) - set(${name}_LIBRARIES ${${name}_LIBRARIES} PARENT_SCOPE) - endif() - endfunction() - - # Internal function: find threads library - function(_protobuf_find_threads) - set(CMAKE_THREAD_PREFER_PTHREAD TRUE) - find_package(Threads) - if(Threads_FOUND) - list(APPEND PROTOBUF_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) - set(PROTOBUF_LIBRARIES "${PROTOBUF_LIBRARIES}" PARENT_SCOPE) - endif() - endfunction() - - # - # Main. - # - - # By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc - # for each directory where a proto file is referenced. - if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH) - set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE) - endif() - - # The Protobuf library - _protobuf_find_libraries(Protobuf protobuf) - - # The Protobuf Lite library - _protobuf_find_libraries(Protobuf_LITE protobuf-lite) - - # The Protobuf Protoc Library - _protobuf_find_libraries(Protobuf_PROTOC protoc) - - if(UNIX) - _protobuf_find_threads() - endif() - - # Set the include directory - get_target_property(Protobuf_INCLUDE_DIRS protobuf::libprotobuf - INTERFACE_INCLUDE_DIRECTORIES) - - # Set the protoc Executable - get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc - IMPORTED_LOCATION_RELEASE) - if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") - get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc - IMPORTED_LOCATION_RELWITHDEBINFO) - endif() - if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") - get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc - IMPORTED_LOCATION_MINSIZEREL) - endif() - if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") - get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc - IMPORTED_LOCATION_DEBUG) - endif() - if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") - get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc - IMPORTED_LOCATION_NOCONFIG) - endif() - - # Version info variable - set(Protobuf_VERSION "3.17.1.0") - - include(FindPackageHandleStandardArgs) - FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf - REQUIRED_VARS Protobuf_PROTOC_EXECUTABLE Protobuf_LIBRARIES Protobuf_INCLUDE_DIRS - VERSION_VAR Protobuf_VERSION - ) - - # Backwards compatibility - endif() - foreach(Camel - Protobuf_VERSION - Protobuf_SRC_ROOT_FOLDER - Protobuf_IMPORT_DIRS - Protobuf_DEBUG - Protobuf_INCLUDE_DIRS - Protobuf_LIBRARIES - Protobuf_PROTOC_LIBRARIES - Protobuf_LITE_LIBRARIES - Protobuf_LIBRARY - Protobuf_PROTOC_LIBRARY - Protobuf_INCLUDE_DIR - Protobuf_PROTOC_EXECUTABLE - Protobuf_LIBRARY_DEBUG - Protobuf_PROTOC_LIBRARY_DEBUG - Protobuf_LITE_LIBRARY - Protobuf_LITE_LIBRARY_DEBUG - ) - string(TOUPPER ${Camel} UPPER) - set(${UPPER} ${${Camel}}) - endforeach() - - ```#### lib/cmake/protobuf/protobuf-options.cmake - ```cmake - # Verbose output - option(protobuf_VERBOSE "Enable for verbose output" OFF) - mark_as_advanced(protobuf_VERBOSE) - - # FindProtobuf module compatible - option(protobuf_MODULE_COMPATIBLE "CMake built-in FindProtobuf.cmake module compatible" OFF) - mark_as_advanced(protobuf_MODULE_COMPATIBLE) - - ``` - - - -
- -## Using protobuf with Visual Studio - -
- -### [Visual Studio Conan generators](https://docs.conan.io/en/latest/reference/conanfile/tools/microsoft.html) - -
- -* [MSBuildDeps](https://docs.conan.io/en/latest/reference/conanfile/tools/microsoft.html#msbuilddeps): generates the **conandeps.props** properties file with information about where the **protobuf** library and its dependencies ( [zlib](https://conan.io/center/zlib)) are installed together with other information like version, flags, and directory data or configuration. - -* [MSBuildToolchain](https://docs.conan.io/en/latest/reference/conanfile/tools/microsoft.html#msbuildtoolchain): Generates the **conantoolchain.props** properties file with the current package configuration, settings, and options. - -Declare these generators in your **conanfile.txt** along with your **protobuf** dependency like: - -```ini -[requires] -protobuf/3.17.1 - -[generators] -MSBuildDeps -MSBuildToolchain -``` - -
- -Please, [check the Conan documentation](https://docs.conan.io/en/latest/reference/conanfile/tools/microsoft.html) for more detailed information on how to add these properties files to your Visual Studio projects. - - - -
- -## Using protobuf with Autotools and pkg-config - -
- -### [Autotools Conan generators](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu.html) - -
- -* [AutotoolsToolchain](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu/autotoolstoolchain.html): generates the **conanautotoolstoolchain.sh/bat** script translating information from the current package configuration, settings, and options setting some enviroment variables for Autotools like: ``CPPFLAGS``, ``CXXFLAGS``, ``CFLAGS`` and ``LDFLAGS``. It will also generate a ``deactivate_conanautotoolstoolchain.sh/bat`` so you can restore your environment. - -* [AutotoolsDeps](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu/autotoolsdeps.html): generates the **conanautotoolsdeps.sh/bat** script with information about where the **protobuf** library and its dependencies ( [zlib](https://conan.io/center/zlib)) are installed together with other information like version, flags, and directory data or configuration. This is done setting some enviroment variables for Autotools like: ``LIBS``, ``CPPFLAGS``,``CXXFLAGS``, ``CFLAGS`` and ``LDFLAGS``. It will also generate a ``deactivate_conanautotoolsdeps.sh/bat`` so you can restore your environment. - -Declare these generators in your **conanfile.txt** along with your **protobuf** dependency like: - -```ini -[requires] -protobuf/3.17.1 - -[generators] -AutotoolsToolchain -AutotoolsDeps -``` - -
- -Then, building your project is as easy as: - -```shell -$ conan install . -# set the environment variables for Autotools -$ source conanautotoolstoolchain.sh -$ source conanautotoolsdeps.sh -$ ./configure -$ make - -# restore the environment after the build is completed -$ source deactivate_conanautotoolstoolchain.sh -$ source deactivate_conanautotoolsdeps.sh -``` - -
- -### [pkg-config Conan generator](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu/pkgconfigdeps.html) - -
- -* [PkgConfigDeps](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu/pkgconfigdeps.html): generates the **protobuf_full_package.pc** file (and the ones corresponding to **protobuf** dependencies) with information about the dependencies that can be later used by the **pkg-config** tool pkg-config to collect data about the libraries Conan installed. - -
- -You can use this generator instead of the **AutotoolsDeps** one: - -```ini -[requires] -protobuf/3.17.1 - -[generators] -AutotoolsToolchain -PkgConfigDeps -``` - -
- -And then using **pkg-config** to set the environment variables you want, like: - -```shell -$ conan install . -# set the environment variables for Autotools -$ source conanautotoolstoolchain.sh - -# You will have to set the PKG_CONFIG_PATH to where Conan created the protobuf_full_package.pc file -$ export CPPFLAGS="$CPPFLAGS $(pkg-config --cflags protobuf)" -$ export LIBS="$LIBS $(pkg-config --libs-only-l protobuf)" -$ export LDFLAGS="$LDFLAGS $(pkg-config --libs-only-L --libs-only-other protobuf)" - -$ ./configure -$ make - -# restore the environment after the build is completed -$ source deactivate_conanautotoolstoolchain.sh -``` - - - -
- -As the protobuf Conan package defines components you can use them to link only that desired part of the library in your project. To check all the available components for **protobuf** Conan package, and the corresponding *.pc* files names, please check the dedicated section at the end of this document. - - -
- -## Other build systems - -
- -Please, [check the Conan documentation](https://docs.conan.io/en/latest/reference/conanfile/tools.html) for other integrations besides the ones listed in this document. - - - - - -
- -## Declared components for protobuf - -
- -These are all the declared components for the **protobuf** Conan package: -* Component **libprotobuf**: - * CMake target name: ``protobuf::libprotobuf`` - * pkg-config *.pc* file: **protobuf.pc** - * Requires other components: **zlib::zlib** - * Links to libraries: **protobuf** - * Systems libs: **pthread** -* Component **libprotoc**: - * CMake target name: ``protobuf::libprotoc`` - * pkg-config *.pc* file: **protobuf_full_package-libprotoc.pc** - * Requires other components: **libprotobuf** - * Links to libraries: **protoc** - - -
- -## Exposed header files for protobuf - -
- -```cpp -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -``` - -
- - ---- ---- -Conan **1.47.0**. JFrog LTD. [https://conan.io](https://conan.io). Autogenerated 2022-04-26 15:36:12. \ No newline at end of file diff --git a/docs/development/zlib.md b/docs/development/zlib.md deleted file mode 100644 index 5472be8c..00000000 --- a/docs/development/zlib.md +++ /dev/null @@ -1,243 +0,0 @@ - - - -# zlib/1.2.12 - ---- - - - -
- -## Using the zlib Conan Package - -
- -Conan integrates with different build systems. You can declare which build system you want your project to use setting in the **[generators]** section of the [conanfile.txt](https://docs.conan.io/en/latest/reference/conanfile_txt.html#generators) or using the **generators** attribute in the [conanfile.py](https://docs.conan.io/en/latest/reference/conanfile/attributes.html#generators). Here, there is some basic information you can use to integrate **zlib** in your own project. For more detailed information, please [check the Conan documentation](https://docs.conan.io/en/latest/getting_started.html). - - - -
- -## Using zlib with CMake - -
- -### [Conan CMake generators](https://docs.conan.io/en/latest/reference/conanfile/tools/cmake.html) - -
- -* [CMakeDeps](https://docs.conan.io/en/latest/reference/conanfile/tools/cmake/cmakedeps.html): generates information about where the **zlib** library and its dependencies are installed together with other information like version, flags, and directory data or configuration. CMake will use this files when you invoke ``find_package()`` in your *CMakeLists.txt*. - -* [CMakeToolchain](https://docs.conan.io/en/latest/reference/conanfile/tools/cmake/cmaketoolchain.html): generates a CMake toolchain file the you can later invoke with CMake in the command line using `-DCMAKE_TOOLCHAIN_FILE=conantoolchain.cmake`. - -Declare these generators in your **conanfile.txt** along with your **zlib** dependency like: - -```ini -[requires] -zlib/1.2.12 - -[generators] -CMakeDeps -CMakeToolchain -``` - -
- -To use **zlib** in a simple CMake project with this structure: - -```shell -. -|-- CMakeLists.txt -|-- conanfile.txt -`-- src - `-- main..c -``` - -
- -Your **CMakeLists.txt** could look similar to this, using the global **ZLIB::ZLIB** CMake's target: - -```cmake -cmake_minimum_required(VERSION 3.15) -project(zlib_project C) - -find_package(ZLIB) - -add_executable(${PROJECT_NAME} src/main.c) - -# Use the global target -target_link_libraries(${PROJECT_NAME} ZLIB::ZLIB) -``` - -
- -To install **zlib/1.2.12**, its dependencies and build your project, you just have to do: - -```shell -# for Linux/macOS -$ conan install . --install-folder cmake-build-release --build=missing -$ cmake . -DCMAKE_TOOLCHAIN_FILE=cmake-build-release/conan_toolchain.cmake -$ cmake --build . - -# for Windows and Visual Studio 2017 -$ conan install . --output-folder cmake-build --build=missing -$ cmake . -G "Visual Studio 15 2017" -DCMAKE_TOOLCHAIN_FILE=cmake-build/conan_toolchain.cmake -$ cmake --build . --config Release -``` - - - - - - - - -
- -## Using zlib with Visual Studio - -
- -### [Visual Studio Conan generators](https://docs.conan.io/en/latest/reference/conanfile/tools/microsoft.html) - -
- -* [MSBuildDeps](https://docs.conan.io/en/latest/reference/conanfile/tools/microsoft.html#msbuilddeps): generates the **conandeps.props** properties file with information about where the **zlib** library and its dependencies are installed together with other information like version, flags, and directory data or configuration. - -* [MSBuildToolchain](https://docs.conan.io/en/latest/reference/conanfile/tools/microsoft.html#msbuildtoolchain): Generates the **conantoolchain.props** properties file with the current package configuration, settings, and options. - -Declare these generators in your **conanfile.txt** along with your **zlib** dependency like: - -```ini -[requires] -zlib/1.2.12 - -[generators] -MSBuildDeps -MSBuildToolchain -``` - -
- -Please, [check the Conan documentation](https://docs.conan.io/en/latest/reference/conanfile/tools/microsoft.html) for more detailed information on how to add these properties files to your Visual Studio projects. - - - -
- -## Using zlib with Autotools and pkg-config - -
- -### [Autotools Conan generators](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu.html) - -
- -* [AutotoolsToolchain](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu/autotoolstoolchain.html): generates the **conanautotoolstoolchain.sh/bat** script translating information from the current package configuration, settings, and options setting some enviroment variables for Autotools like: ``CPPFLAGS``, ``CXXFLAGS``, ``CFLAGS`` and ``LDFLAGS``. It will also generate a ``deactivate_conanautotoolstoolchain.sh/bat`` so you can restore your environment. - -* [AutotoolsDeps](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu/autotoolsdeps.html): generates the **conanautotoolsdeps.sh/bat** script with information about where the **zlib** library and its dependencies are installed together with other information like version, flags, and directory data or configuration. This is done setting some enviroment variables for Autotools like: ``LIBS``, ``CPPFLAGS``,``CXXFLAGS``, ``CFLAGS`` and ``LDFLAGS``. It will also generate a ``deactivate_conanautotoolsdeps.sh/bat`` so you can restore your environment. - -Declare these generators in your **conanfile.txt** along with your **zlib** dependency like: - -```ini -[requires] -zlib/1.2.12 - -[generators] -AutotoolsToolchain -AutotoolsDeps -``` - -
- -Then, building your project is as easy as: - -```shell -$ conan install . -# set the environment variables for Autotools -$ source conanautotoolstoolchain.sh -$ source conanautotoolsdeps.sh -$ ./configure -$ make - -# restore the environment after the build is completed -$ source deactivate_conanautotoolstoolchain.sh -$ source deactivate_conanautotoolsdeps.sh -``` - -
- -### [pkg-config Conan generator](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu/pkgconfigdeps.html) - -
- -* [PkgConfigDeps](https://docs.conan.io/en/latest/reference/conanfile/tools/gnu/pkgconfigdeps.html): generates the **zlib.pc** file (and the ones corresponding to **zlib** dependencies) with information about the dependencies that can be later used by the **pkg-config** tool pkg-config to collect data about the libraries Conan installed. - -
- -You can use this generator instead of the **AutotoolsDeps** one: - -```ini -[requires] -zlib/1.2.12 - -[generators] -AutotoolsToolchain -PkgConfigDeps -``` - -
- -And then using **pkg-config** to set the environment variables you want, like: - -```shell -$ conan install . -# set the environment variables for Autotools -$ source conanautotoolstoolchain.sh - -# You will have to set the PKG_CONFIG_PATH to where Conan created the zlib.pc file -$ export CPPFLAGS="$CPPFLAGS $(pkg-config --cflags zlib)" -$ export LIBS="$LIBS $(pkg-config --libs-only-l zlib)" -$ export LDFLAGS="$LDFLAGS $(pkg-config --libs-only-L --libs-only-other zlib)" - -$ ./configure -$ make - -# restore the environment after the build is completed -$ source deactivate_conanautotoolstoolchain.sh -``` - - - - -
- -## Other build systems - -
- -Please, [check the Conan documentation](https://docs.conan.io/en/latest/reference/conanfile/tools.html) for other integrations besides the ones listed in this document. - - - - - - -
- -## Exposed header files for zlib - -
- -```cpp -#include -#include -``` - -
- - ---- ---- -Conan **1.47.0**. JFrog LTD. [https://conan.io](https://conan.io). Autogenerated 2022-04-26 15:36:12. \ No newline at end of file