diff --git a/CMakeLists.txt b/CMakeLists.txt index 96257bf095..39e87c9322 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -285,8 +285,7 @@ include(GetSpdlog) get_spdlog() # yaml-cpp -include(BundledYamlCpp) -use_bundled_yamlcpp(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) +include(YamlCpp) # concurrentqueue add_library(concurrentqueue INTERFACE) @@ -302,7 +301,13 @@ include(GslLite) # Add necessary definitions based on the value of STRICT_GSL_CHECKS, see gsl-lite README for more details list(APPEND GslDefinitions gsl_CONFIG_DEFAULTS_VERSION=1) +list(APPEND GslDefinitions gsl_FEATURE_BYTE=1) list(APPEND GslDefinitionsNonStrict gsl_CONFIG_CONTRACT_VIOLATION_THROWS gsl_CONFIG_NARROW_THROWS_ON_TRUNCATION=1) +# Disable gsl-lite's direct __assert_fail() forward declaration on Linux to avoid conflicts +# with the system assert.h declaration that includes noexcept (__THROW). +if (UNIX AND NOT APPLE) + list(APPEND GslDefinitions gsl_CONFIG_USE_CRT_ASSERTION_HANDLER=0) +endif() if (STRICT_GSL_CHECKS STREQUAL "AUDIT") list(APPEND GslDefinitions gsl_CONFIG_CONTRACT_CHECKING_AUDIT) endif() diff --git a/cmake/Abseil.cmake b/cmake/Abseil.cmake index 9ed541e3a2..7b8ee7aea6 100644 --- a/cmake/Abseil.cmake +++ b/cmake/Abseil.cmake @@ -28,8 +28,8 @@ set(PC ${Bash_EXECUTABLE} -c "set -x &&\ FetchContent_Declare( absl - URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20240722.0.tar.gz - URL_HASH SHA256=f50e5ac311a81382da7fa75b97310e4b9006474f9560ac46f54a9967f07d4ae3 + URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20260107.1.tar.gz + URL_HASH SHA256=4314e2a7cbac89cac25a2f2322870f343d81579756ceff7f431803c2c9090195 PATCH_COMMAND "${PC}" OVERRIDE_FIND_PACKAGE SYSTEM diff --git a/cmake/ArgParse.cmake b/cmake/ArgParse.cmake index 6af3bdbe1b..9b66148ef8 100644 --- a/cmake/ArgParse.cmake +++ b/cmake/ArgParse.cmake @@ -18,8 +18,8 @@ include(FetchContent) FetchContent_Declare( argparse - URL https://github.com/p-ranav/argparse/archive/refs/tags/v3.0.tar.gz - URL_HASH SHA256=ba7b465759bb01069d57302855eaf4d1f7d677f21ad7b0b00b92939645c30f47 + URL https://github.com/p-ranav/argparse/archive/refs/tags/v3.2.tar.gz + URL_HASH SHA256=9dcb3d8ce0a41b2a48ac8baa54b51a9f1b6a2c52dd374e28cc713bab0568ec98 SYSTEM ) FetchContent_MakeAvailable(argparse) diff --git a/cmake/BundledMbedTLS.cmake b/cmake/BundledMbedTLS.cmake deleted file mode 100644 index f32c87f83d..0000000000 --- a/cmake/BundledMbedTLS.cmake +++ /dev/null @@ -1,106 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -function(use_bundled_mbedtls SOURCE_DIR BINARY_DIR) - message("Using bundled MbedTLS") - - # Define byproducts - if (WIN32) - set(BYPRODUCT_PREFIX "" CACHE STRING "" FORCE) - set(BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE) - else() - set(BYPRODUCT_PREFIX "lib" CACHE STRING "" FORCE) - set(BYPRODUCT_SUFFIX ".a" CACHE STRING "" FORCE) - endif() - - set(BYPRODUCTS - "lib/${BYPRODUCT_PREFIX}mbedtls${BYPRODUCT_SUFFIX}" - "lib/${BYPRODUCT_PREFIX}mbedx509${BYPRODUCT_SUFFIX}" - "lib/${BYPRODUCT_PREFIX}mbedcrypto${BYPRODUCT_SUFFIX}" - ) - - set(MBEDTLS_BIN_DIR "${BINARY_DIR}/thirdparty/mbedtls-install" CACHE STRING "" FORCE) - - FOREACH(BYPRODUCT ${BYPRODUCTS}) - LIST(APPEND MBEDTLS_LIBRARIES_LIST "${MBEDTLS_BIN_DIR}/${BYPRODUCT}") - ENDFOREACH(BYPRODUCT) - - # Set build options - set(MBEDTLS_CMAKE_ARGS ${PASSTHROUGH_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=${MBEDTLS_BIN_DIR}" - -DENABLE_PROGRAMS=OFF - -DENABLE_TESTING=OFF - ) - - # Build project - ExternalProject_Add( - mbedtls-external - URL "https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/mbedtls-2.16.3.tar.gz" - URL_HASH "SHA256=ec72ecf39275327f52b5ee9787271313a0d2960e7342b488d223a118ba164caa" - SOURCE_DIR "${BINARY_DIR}/thirdparty/mbedtls-src" - CMAKE_ARGS ${MBEDTLS_CMAKE_ARGS} - BUILD_BYPRODUCTS ${MBEDTLS_LIBRARIES_LIST} - EXCLUDE_FROM_ALL TRUE - DOWNLOAD_NO_PROGRESS TRUE - TLS_VERIFY TRUE - ) - - # Set variables - set(MBEDTLS_FOUND "YES" CACHE STRING "" FORCE) - set(MBEDTLS_INCLUDE_DIRS "${MBEDTLS_BIN_DIR}/include" CACHE STRING "" FORCE) - set(MBEDTLS_LIBRARIES ${MBEDTLS_LIBRARIES_LIST} CACHE STRING "" FORCE) - set(MBEDTLS_LIBRARY "${MBEDTLS_BIN_DIR}/lib/${BYPRODUCT_PREFIX}mbedtls${BYPRODUCT_SUFFIX}" CACHE STRING "" FORCE) - set(MBEDX509_LIBRARY "${MBEDTLS_BIN_DIR}/lib/${BYPRODUCT_PREFIX}mbedx509${BYPRODUCT_SUFFIX}" CACHE STRING "" FORCE) - set(MBEDCRYPTO_LIBRARY "${MBEDTLS_BIN_DIR}/lib/${BYPRODUCT_PREFIX}mbedcrypto${BYPRODUCT_SUFFIX}" CACHE STRING "" FORCE) - - # Set exported variables for FindPackage.cmake - set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDTLS_INCLUDE_DIRS=${MBEDTLS_INCLUDE_DIRS}" CACHE STRING "" FORCE) - string(REPLACE ";" "%" MBEDTLS_LIBRARIES_EXPORT "${MBEDTLS_LIBRARIES}") - set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDTLS_LIBRARIES=${MBEDTLS_LIBRARIES_EXPORT}" CACHE STRING "" FORCE) - set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDTLS_LIBRARY=${MBEDTLS_LIBRARY}" CACHE STRING "" FORCE) - set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDX509_LIBRARY=${MBEDX509_LIBRARY}" CACHE STRING "" FORCE) - set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDCRYPTO_LIBRARY=${MBEDCRYPTO_LIBRARY}" CACHE STRING "" FORCE) - - # Create imported targets - file(MAKE_DIRECTORY ${MBEDTLS_INCLUDE_DIRS}) - - add_library(mbedTLS::mbedcrypto STATIC IMPORTED) - set_target_properties(mbedTLS::mbedcrypto PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${MBEDTLS_INCLUDE_DIRS}") - set_target_properties(mbedTLS::mbedcrypto PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "C" - IMPORTED_LOCATION "${MBEDCRYPTO_LIBRARY}") - add_dependencies(mbedTLS::mbedcrypto mbedtls-external) - - add_library(mbedTLS::mbedx509 STATIC IMPORTED) - set_target_properties(mbedTLS::mbedx509 PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${MBEDTLS_INCLUDE_DIRS}") - set_target_properties(mbedTLS::mbedx509 PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "C" - IMPORTED_LOCATION "${MBEDX509_LIBRARY}") - add_dependencies(mbedTLS::mbedx509 mbedtls-external) - set_property(TARGET mbedTLS::mbedx509 APPEND PROPERTY INTERFACE_LINK_LIBRARIES mbedTLS::mbedcrypto) - - add_library(mbedTLS::mbedtls STATIC IMPORTED) - set_target_properties(mbedTLS::mbedtls PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${MBEDTLS_INCLUDE_DIRS}") - set_target_properties(mbedTLS::mbedtls PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "C" - IMPORTED_LOCATION "${MBEDTLS_LIBRARY}") - add_dependencies(mbedTLS::mbedtls mbedtls-external) - set_property(TARGET mbedTLS::mbedtls APPEND PROPERTY INTERFACE_LINK_LIBRARIES mbedTLS::mbedx509 mbedTLS::mbedcrypto) -endfunction(use_bundled_mbedtls) diff --git a/cmake/BundledOpen62541.cmake b/cmake/BundledOpen62541.cmake deleted file mode 100644 index 8e9867008b..0000000000 --- a/cmake/BundledOpen62541.cmake +++ /dev/null @@ -1,77 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -function(use_bundled_open62541 SOURCE_DIR BINARY_DIR) - # Define patch step - set(PC "${Patch_EXECUTABLE}" -p1 -i "${SOURCE_DIR}/thirdparty/open62541/open62541.patch") - - # Define byproducts - if (WIN32) - set(BYPRODUCT "lib/open62541.lib") - else() - include(GNUInstallDirs) - string(REPLACE "/" ";" LIBDIR_LIST ${CMAKE_INSTALL_LIBDIR}) - list(GET LIBDIR_LIST 0 LIBDIR) - set(BYPRODUCT "${LIBDIR}/libopen62541.a") - endif() - - # Set build options - set(OPEN62541_BYPRODUCT_DIR "${BINARY_DIR}/thirdparty/open62541-install") - - set(OPEN62541_CMAKE_ARGS ${PASSTHROUGH_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=${OPEN62541_BYPRODUCT_DIR}" - -DOPEN62541_VERSION=v1.5.2 - -DUA_ENABLE_ENCRYPTION=ON - -DUA_FORCE_WERROR=OFF - -DUA_ENABLE_DEBUG_SANITIZER=OFF) - - append_third_party_passthrough_args(OPEN62541_CMAKE_ARGS "${OPEN62541_CMAKE_ARGS}") - - # Build project - ExternalProject_Add( - open62541-external - URL "https://github.com/open62541/open62541/archive/refs/tags/v1.5.2.tar.gz" - URL_HASH "SHA256=61110a51c4f00a70a6e47882ea92550b667eede62e66c64431fdc37ff660361c" - SOURCE_DIR "${BINARY_DIR}/thirdparty/open62541-src" - PATCH_COMMAND ${PC} - LIST_SEPARATOR % # This is needed for passing semicolon-separated lists - CMAKE_ARGS ${OPEN62541_CMAKE_ARGS} - BUILD_BYPRODUCTS "${OPEN62541_BYPRODUCT_DIR}/${BYPRODUCT}" - EXCLUDE_FROM_ALL TRUE - DOWNLOAD_NO_PROGRESS TRUE - TLS_VERIFY TRUE - ) - - # Set dependencies - add_dependencies(open62541-external mbedTLS::mbedtls) - - # Set variables - set(OPEN62541_FOUND "YES" CACHE STRING "" FORCE) - set(OPEN62541_INCLUDE_DIR "${OPEN62541_BYPRODUCT_DIR}/include" CACHE STRING "" FORCE) - set(OPEN62541_LIBRARY "${OPEN62541_BYPRODUCT_DIR}/${BYPRODUCT}" CACHE STRING "" FORCE) - - # Create imported targets - add_library(open62541::open62541 STATIC IMPORTED) - set_target_properties(open62541::open62541 PROPERTIES IMPORTED_LOCATION "${OPEN62541_LIBRARY}") - add_dependencies(open62541::open62541 open62541-external) - file(MAKE_DIRECTORY ${OPEN62541_INCLUDE_DIR}) - set_property(TARGET open62541::open62541 APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPEN62541_INCLUDE_DIR}) - set_property(TARGET open62541::open62541 APPEND PROPERTY INTERFACE_LINK_LIBRARIES mbedTLS::mbedtls Threads::Threads) - if(WIN32) - set_property(TARGET open62541::open62541 APPEND PROPERTY INTERFACE_LINK_LIBRARIES Ws2_32.lib Iphlpapi.lib) - endif() -endfunction(use_bundled_open62541) diff --git a/cmake/BundledOpenSSL.cmake b/cmake/BundledOpenSSL.cmake index dd0400395d..cc83b5c173 100644 --- a/cmake/BundledOpenSSL.cmake +++ b/cmake/BundledOpenSSL.cmake @@ -107,7 +107,7 @@ function(use_openssl SOURCE_DIR BINARY_DIR) URL_HASH "SHA256=22db04f3c8f9a808c9795dcf7d2713ff40c12c410ea2d1f6435c6c9c8558958b" SOURCE_DIR "${BINARY_DIR}/thirdparty/openssl-src" BUILD_IN_SOURCE true - CONFIGURE_COMMAND perl Configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${PASSTHROUGH_CMAKE_C_FLAGS} ${OPENSSL_WINDOWS_COMPILE_FLAGS}" "CXXFLAGS=${PASSTHROUGH_CMAKE_CXX_FLAGS} ${OPENSSL_WINDOWS_COMPILE_FLAGS}" ${OPENSSL_SHARED_FLAG} ${OPENSSL_EXTRA_FLAGS} "--prefix=${OPENSSL_BIN_DIR}" "--openssldir=${OPENSSL_BIN_DIR}" + CONFIGURE_COMMAND perl Configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${OPENSSL_C_FLAGS} ${OPENSSL_WINDOWS_COMPILE_FLAGS}" "CXXFLAGS=${PASSTHROUGH_CMAKE_CXX_FLAGS} ${OPENSSL_WINDOWS_COMPILE_FLAGS}" ${OPENSSL_SHARED_FLAG} ${OPENSSL_EXTRA_FLAGS} "--prefix=${OPENSSL_BIN_DIR}" "--openssldir=${OPENSSL_BIN_DIR}" BUILD_BYPRODUCTS ${OPENSSL_LIBRARIES_LIST} EXCLUDE_FROM_ALL TRUE BUILD_COMMAND ${OPENSSL_BUILD_COMMAND} @@ -122,7 +122,7 @@ function(use_openssl SOURCE_DIR BINARY_DIR) URL_HASH "SHA256=22db04f3c8f9a808c9795dcf7d2713ff40c12c410ea2d1f6435c6c9c8558958b" SOURCE_DIR "${BINARY_DIR}/thirdparty/openssl-src" BUILD_IN_SOURCE true - CONFIGURE_COMMAND ./Configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${PASSTHROUGH_CMAKE_C_FLAGS} -fPIC" "CXXFLAGS=${PASSTHROUGH_CMAKE_CXX_FLAGS} -fPIC" ${OPENSSL_SHARED_FLAG} ${OPENSSL_EXTRA_FLAGS} "--prefix=${OPENSSL_BIN_DIR}" "--openssldir=${OPENSSL_BIN_DIR}" + CONFIGURE_COMMAND ./Configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${OPENSSL_C_FLAGS} -fPIC" "CXXFLAGS=${PASSTHROUGH_CMAKE_CXX_FLAGS} -fPIC" ${OPENSSL_SHARED_FLAG} ${OPENSSL_EXTRA_FLAGS} "--prefix=${OPENSSL_BIN_DIR}" "--openssldir=${OPENSSL_BIN_DIR}" BUILD_BYPRODUCTS ${OPENSSL_LIBRARIES_LIST} EXCLUDE_FROM_ALL TRUE DOWNLOAD_NO_PROGRESS TRUE @@ -238,7 +238,7 @@ function(use_openssl SOURCE_DIR BINARY_DIR) URL_HASH "SHA256=a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539" SOURCE_DIR "${BINARY_DIR}/thirdparty/openssl-fips-src" BUILD_IN_SOURCE true - CONFIGURE_COMMAND perl Configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${PASSTHROUGH_CMAKE_C_FLAGS} ${OPENSSL_WINDOWS_COMPILE_FLAGS}" "CXXFLAGS=${PASSTHROUGH_CMAKE_CXX_FLAGS} ${OPENSSL_WINDOWS_COMPILE_FLAGS}" ${OPENSSL_SHARED_FLAG} ${OPENSSL_FIPS_EXTRA_FLAGS} enable-fips "--prefix=${OPENSSL_FIPS_BIN_DIR}" "--openssldir=${OPENSSL_FIPS_BIN_DIR}" + CONFIGURE_COMMAND perl Configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${OPENSSL_C_FLAGS} ${OPENSSL_WINDOWS_COMPILE_FLAGS}" "CXXFLAGS=${PASSTHROUGH_CMAKE_CXX_FLAGS} ${OPENSSL_WINDOWS_COMPILE_FLAGS}" ${OPENSSL_SHARED_FLAG} ${OPENSSL_FIPS_EXTRA_FLAGS} enable-fips "--prefix=${OPENSSL_FIPS_BIN_DIR}" "--openssldir=${OPENSSL_FIPS_BIN_DIR}" BUILD_BYPRODUCTS ${OPENSSL_FIPS_FILE_LIST} EXCLUDE_FROM_ALL TRUE BUILD_COMMAND ${OPENSSL_BUILD_COMMAND} @@ -251,7 +251,7 @@ function(use_openssl SOURCE_DIR BINARY_DIR) URL_HASH "SHA256=a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539" SOURCE_DIR "${BINARY_DIR}/thirdparty/openssl-fips-src" BUILD_IN_SOURCE true - CONFIGURE_COMMAND ./Configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${PASSTHROUGH_CMAKE_C_FLAGS} -fPIC" "CXXFLAGS=${PASSTHROUGH_CMAKE_CXX_FLAGS} -fPIC" ${OPENSSL_SHARED_FLAG} ${OPENSSL_FIPS_EXTRA_FLAGS} "--prefix=${OPENSSL_FIPS_BIN_DIR}" "--openssldir=${OPENSSL_FIPS_BIN_DIR}" + CONFIGURE_COMMAND ./Configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${OPENSSL_C_FLAGS} -fPIC" "CXXFLAGS=${PASSTHROUGH_CMAKE_CXX_FLAGS} -fPIC" ${OPENSSL_SHARED_FLAG} ${OPENSSL_FIPS_EXTRA_FLAGS} "--prefix=${OPENSSL_FIPS_BIN_DIR}" "--openssldir=${OPENSSL_FIPS_BIN_DIR}" BUILD_BYPRODUCTS ${OPENSSL_FIPS_FILE_LIST} EXCLUDE_FROM_ALL TRUE INSTALL_COMMAND make install_fips diff --git a/cmake/BundledYamlCpp.cmake b/cmake/BundledYamlCpp.cmake deleted file mode 100644 index 536e1c5a75..0000000000 --- a/cmake/BundledYamlCpp.cmake +++ /dev/null @@ -1,70 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -function(use_bundled_yamlcpp SOURCE_DIR BINARY_DIR) - if (WIN32) - set(LIBDIR "lib") - else() - include(GNUInstallDirs) - string(REPLACE "/" ";" LIBDIR_LIST ${CMAKE_INSTALL_LIBDIR}) - list(GET LIBDIR_LIST 0 LIBDIR) - endif() - - # Define byproducts - if (WIN32) - set(BYPRODUCT "${LIBDIR}/yaml-cpp.lib") - else() - set(BYPRODUCT "${LIBDIR}/libyaml-cpp.a") - endif() - - # Set build options - set(YAMLCPP_CMAKE_ARGS ${PASSTHROUGH_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=${BINARY_DIR}/thirdparty/yaml-cpp-install" - "-DCMAKE_DEBUG_POSTFIX=" - "-DBUILD_SHARED_LIBS=OFF" - "-DYAML_CPP_BUILD_TESTS=OFF" - "-DYAML_CPP_BUILD_TOOLS=OFF") - - # Build project - ExternalProject_Add( - yaml-cpp-external - URL "https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-0.7.0.tar.gz" - URL_HASH "SHA256=43e6a9fcb146ad871515f0d0873947e5d497a1c9c60c58cb102a97b47208b7c3" - SOURCE_DIR "${BINARY_DIR}/thirdparty/yaml-cpp-src" - INSTALL_DIR "${BINARY_DIR}/thirdparty/yaml-cpp-install" - LIST_SEPARATOR % # This is needed for passing semicolon-separated lists - CMAKE_ARGS ${YAMLCPP_CMAKE_ARGS} - BUILD_BYPRODUCTS "${BINARY_DIR}/thirdparty/yaml-cpp-install/${BYPRODUCT}" - EXCLUDE_FROM_ALL TRUE - DOWNLOAD_NO_PROGRESS TRUE - TLS_VERIFY TRUE - ) - - # Set variables - set(YAMLCPP_FOUND "YES" CACHE STRING "" FORCE) - set(YAMLCPP_INCLUDE_DIR "${BINARY_DIR}/thirdparty/yaml-cpp-install/include" CACHE STRING "" FORCE) - set(YAMLCPP_LIBRARY "${BINARY_DIR}/thirdparty/yaml-cpp-install/${BYPRODUCT}" CACHE STRING "" FORCE) - set(YAMLCPP_LIBRARIES ${YAMLCPP_LIBRARY} CACHE STRING "" FORCE) - - # Create imported targets - file(MAKE_DIRECTORY ${YAMLCPP_INCLUDE_DIR}) - - add_library(yaml-cpp STATIC IMPORTED) - set_target_properties(yaml-cpp PROPERTIES IMPORTED_LOCATION "${YAMLCPP_LIBRARY}") - add_dependencies(yaml-cpp yaml-cpp-external) - target_include_directories(yaml-cpp INTERFACE ${YAMLCPP_INCLUDE_DIR}) -endfunction(use_bundled_yamlcpp) diff --git a/cmake/BundledZLIB.cmake b/cmake/BundledZLIB.cmake deleted file mode 100644 index fd0a25a58f..0000000000 --- a/cmake/BundledZLIB.cmake +++ /dev/null @@ -1,65 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -function(use_bundled_zlib SOURCE_DIR BINARY_DIR) - message("Using bundled zlib") - - # Define byproducts - if (WIN32) - string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type) - if (build_type MATCHES relwithdebinfo OR build_type MATCHES release) - set(BYPRODUCT "lib/zlibstatic.lib") - else() - set(BYPRODUCT "lib/zlibstaticd.lib") - endif() - else() - set(BYPRODUCT "lib/libz.a") - endif() - - # Set build options - set(ZLIB_CMAKE_ARGS ${PASSTHROUGH_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=${BINARY_DIR}/thirdparty/zlib-install" - ) - - # Build project - ExternalProject_Add( - zlib-external - URL "https://github.com/madler/zlib/archive/refs/tags/v1.3.1.tar.gz" - URL_HASH "SHA256=17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c" - SOURCE_DIR "${BINARY_DIR}/thirdparty/zlib-src" - CMAKE_ARGS ${ZLIB_CMAKE_ARGS} - BUILD_BYPRODUCTS "${BINARY_DIR}/thirdparty/zlib-install/${BYPRODUCT}" - EXCLUDE_FROM_ALL TRUE - ) - - # Set variables - set(ZLIB_FOUND "YES" CACHE STRING "" FORCE) - set(ZLIB_INCLUDE_DIRS "${BINARY_DIR}/thirdparty/zlib-install/include" CACHE STRING "" FORCE) - set(ZLIB_LIBRARIES "${BINARY_DIR}/thirdparty/zlib-install/${BYPRODUCT}" CACHE STRING "" FORCE) - - # Set exported variables for FindPackage.cmake - set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_ZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIRS}" CACHE STRING "" FORCE) - set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_ZLIB_LIBRARIES=${ZLIB_LIBRARIES}" CACHE STRING "" FORCE) - - # Create imported targets - file(MAKE_DIRECTORY ${ZLIB_INCLUDE_DIRS}) - - add_library(ZLIB::ZLIB STATIC IMPORTED) - set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_LOCATION "${ZLIB_LIBRARIES}") - add_dependencies(ZLIB::ZLIB zlib-external) - set_property(TARGET ZLIB::ZLIB APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRS}) -endfunction(use_bundled_zlib) diff --git a/cmake/FetchBenchmark.cmake b/cmake/FetchBenchmark.cmake index 7043ae201d..67f0aed68d 100644 --- a/cmake/FetchBenchmark.cmake +++ b/cmake/FetchBenchmark.cmake @@ -22,8 +22,8 @@ set(BENCHMARK_ENABLE_TESTING "OFF" CACHE STRING "" FORCE) FetchContent_Declare( benchmark - URL https://github.com/google/benchmark/archive/refs/tags/v1.9.1.tar.gz - URL_HASH SHA256=32131c08ee31eeff2c8968d7e874f3cb648034377dfc32a4c377fa8796d84981 + URL https://github.com/google/benchmark/archive/refs/tags/v1.9.5.tar.gz + URL_HASH SHA256=9631341c82bac4a288bef951f8b26b41f69021794184ece969f8473977eaa340 OVERRIDE_FIND_PACKAGE SYSTEM ) diff --git a/cmake/FetchLibSSH2.cmake b/cmake/FetchLibSSH2.cmake index d4d99dec83..b035ac9202 100644 --- a/cmake/FetchLibSSH2.cmake +++ b/cmake/FetchLibSSH2.cmake @@ -26,8 +26,8 @@ set(PC "${Patch_EXECUTABLE}" -p1 -i "${CMAKE_SOURCE_DIR}/thirdparty/libssh2/libs FetchContent_Declare( libssh2 - URL "https://github.com/libssh2/libssh2/releases/download/libssh2-1.10.0/libssh2-1.10.0.tar.gz" - URL_HASH "SHA256=2d64e90f3ded394b91d3a2e774ca203a4179f69aebee03003e5a6fa621e41d51" + URL "https://github.com/libssh2/libssh2/archive/refs/tags/libssh2-1.11.1.tar.gz" + URL_HASH "SHA256=82b35c61c78b475647bdc981a183c5b5ab0d979e1caee94186e8f9150f2b0d0d" PATCH_COMMAND ${PC} SYSTEM OVERRIDE_FIND_PACKAGE @@ -41,4 +41,4 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) FetchContent_MakeAvailable(libssh2) -target_link_libraries(libssh2 PUBLIC OpenSSL::Crypto OpenSSL::SSL ZLIB::ZLIB) +target_link_libraries(libssh2_static PUBLIC OpenSSL::Crypto OpenSSL::SSL ZLIB::ZLIB) diff --git a/cmake/Fetchlibrdkafka.cmake b/cmake/Fetchlibrdkafka.cmake index 75d713fc73..ca69ccedbe 100644 --- a/cmake/Fetchlibrdkafka.cmake +++ b/cmake/Fetchlibrdkafka.cmake @@ -37,15 +37,15 @@ set(PC ${Bash_EXECUTABLE} -c "set -x &&\ (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_2}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_2}\\\")") FetchContent_Declare(libkafka - URL https://github.com/confluentinc/librdkafka/archive/refs/tags/v2.8.0.tar.gz - URL_HASH SHA256=5bd1c46f63265f31c6bfcedcde78703f77d28238eadf23821c2b43fc30be3e25 + URL https://github.com/confluentinc/librdkafka/archive/refs/tags/v2.14.1.tar.gz + URL_HASH SHA256=bb246e754dee3560e9b42bf4e844dc05de4b146a3cae937e36301ffacdc456e7 PATCH_COMMAND "${PC}" SYSTEM ) FetchContent_MakeAvailable(libkafka) -get_target_property(ZSTD_INCLUDE_DIRS zstd::zstd INCLUDE_DIRECTORIES) +get_target_property(ZSTD_INCLUDE_DIRS zstd::zstd INTERFACE_INCLUDE_DIRECTORIES) get_target_property(LZ4_INCLUDE_DIRS lz4::lz4 INCLUDE_DIRECTORIES) target_include_directories(rdkafka SYSTEM PRIVATE ${ZSTD_INCLUDE_DIRS}) diff --git a/cmake/Findnlohmann_json.cmake b/cmake/Findnlohmann_json.cmake index e81fd9659c..83bc5f1320 100644 --- a/cmake/Findnlohmann_json.cmake +++ b/cmake/Findnlohmann_json.cmake @@ -21,8 +21,8 @@ if (NOT nlohmann_json_FOUND) set(nlohmann_json_FOUND "YES" CACHE STRING "" FORCE) set(nlohmann_json_INCLUDE_DIR "${CMAKE_BINARY_DIR}/_deps/nlohmann/" CACHE STRING "" FORCE) if(NOT EXISTS "${nlohmann_json_INCLUDE_DIR}/nlohmann/json.hpp") - file(DOWNLOAD "https://github.com/nlohmann/json/releases/download/v3.10.5/json.hpp" "${nlohmann_json_INCLUDE_DIR}/nlohmann/json.hpp" - EXPECTED_HASH SHA256=e832d339d9e0c042e7dff807754769d778cf5d6ae9730ce21eed56de99cb5e86) + file(DOWNLOAD "https://github.com/nlohmann/json/releases/download/v3.12.0/json.hpp" "${nlohmann_json_INCLUDE_DIR}/nlohmann/json.hpp" + EXPECTED_HASH SHA256=aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63) endif() endif() diff --git a/cmake/GetZLIB.cmake b/cmake/GetZLIB.cmake index 6e7bea1e33..96496ba56e 100644 --- a/cmake/GetZLIB.cmake +++ b/cmake/GetZLIB.cmake @@ -21,7 +21,6 @@ function(get_zlib SOURCE_DIR BINARY_DIR) find_package(ZLIB REQUIRED) elseif(MINIFI_ZLIB_SOURCE STREQUAL "BUILD") message("Using CMake to build zlib from source") - include(BundledZLIB) - use_bundled_zlib(${SOURCE_DIR} ${BINARY_DIR}) + include(ZLIB) endif() endfunction(get_zlib) diff --git a/cmake/Grpc.cmake b/cmake/Grpc.cmake index 266c7f84b0..216e0221ad 100644 --- a/cmake/Grpc.cmake +++ b/cmake/Grpc.cmake @@ -30,14 +30,18 @@ set(gRPC_ZLIB_PROVIDER "package" CACHE STRING "" FORCE) set(gRPC_SSL_PROVIDER "package" CACHE STRING "" FORCE) set(gRPC_PROTOBUF_PROVIDER "package" CACHE STRING "" FORCE) -set(PATCH_FILE "${CMAKE_SOURCE_DIR}/thirdparty/grpc/fix-protobuf-find-package.patch") +set(PATCH_FILE1 "${CMAKE_SOURCE_DIR}/thirdparty/grpc/fix-protobuf-find-package.patch") +set(PATCH_FILE2 "${CMAKE_SOURCE_DIR}/thirdparty/grpc/fix-memory-request-missing-string-include.patch") +set(PATCH_FILE3 "${CMAKE_SOURCE_DIR}/thirdparty/grpc/fix-glob-missing-algorithm-include.patch") set(PC ${Bash_EXECUTABLE} -c "set -x &&\ - (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE}\\\")") + (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE1}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE1}\\\") &&\ + (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE2}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE2}\\\") &&\ + (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE3}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE3}\\\")") FetchContent_Declare( grpc GIT_REPOSITORY https://github.com/grpc/grpc - GIT_TAG v1.72.2 + GIT_TAG v1.80.0 GIT_SUBMODULES "third_party/cares/cares third_party/re2 third_party/upb" PATCH_COMMAND "${PC}" SYSTEM diff --git a/cmake/GslLite.cmake b/cmake/GslLite.cmake index 14a114685c..8cb56fcd33 100644 --- a/cmake/GslLite.cmake +++ b/cmake/GslLite.cmake @@ -18,8 +18,8 @@ include(FetchContent) FetchContent_Declare(gsl-lite - URL https://github.com/gsl-lite/gsl-lite/archive/refs/tags/v0.39.0.tar.gz - URL_HASH SHA256=f80ec07d9f4946097a1e2554e19cee4b55b70b45d59e03a7d2b7f80d71e467e9 + URL https://github.com/gsl-lite/gsl-lite/archive/refs/tags/v1.1.0.tar.gz + URL_HASH SHA256=bc786258eda511980942b973f5f394c854705bb0462ee46f82a8c39b5e19ea03 SYSTEM ) FetchContent_MakeAvailable(gsl-lite) diff --git a/cmake/JsonSchemaValidator.cmake b/cmake/JsonSchemaValidator.cmake index cb9886690c..462c3c1c14 100644 --- a/cmake/JsonSchemaValidator.cmake +++ b/cmake/JsonSchemaValidator.cmake @@ -18,8 +18,8 @@ include(FetchContent) FetchContent_Declare(json-schema-validator - URL https://github.com/pboettch/json-schema-validator/archive/2.2.0.tar.gz - URL_HASH SHA256=03897867bd757ecac1db7545babf0c6c128859655b496582a9cea4809c2260aa + URL https://github.com/pboettch/json-schema-validator/archive/refs/tags/2.4.0.tar.gz + URL_HASH SHA256=24cbb114609cc9b43d4018b8d03e082ff5d2f26f5dce8bd36538097267b63af9 SYSTEM) FetchContent_MakeAvailable(json-schema-validator) diff --git a/cmake/Jsoncons.cmake b/cmake/Jsoncons.cmake index 559a711cfe..694659c8c3 100644 --- a/cmake/Jsoncons.cmake +++ b/cmake/Jsoncons.cmake @@ -20,8 +20,8 @@ include(FetchContent) set(JSONCONS_BUILD_TESTS OFF CACHE BOOL "" FORCE) FetchContent_Declare(jsoncons - URL https://github.com/danielaparker/jsoncons/archive/refs/tags/v1.3.2.tar.gz - URL_HASH SHA256=f22fb163df1a12c2f9ee5f95cad9fc37c6cfbefe0ae6f30aba7440832ef70fbe + URL https://github.com/danielaparker/jsoncons/archive/refs/tags/v1.7.0.tar.gz + URL_HASH SHA256=5a2aad4e791a1c93b0b0b326973459753a96a4c48d06d3035cd0ea0d262198d4 SYSTEM ) diff --git a/cmake/KubernetesClientC.cmake b/cmake/KubernetesClientC.cmake index bc5d13bf22..95e616f795 100644 --- a/cmake/KubernetesClientC.cmake +++ b/cmake/KubernetesClientC.cmake @@ -34,7 +34,6 @@ set(LWS_WITHOUT_TEST_CLIENT ON CACHE BOOL "" FORCE) set(LWS_WITH_SHARED OFF CACHE BOOL "" FORCE) set(LWS_OPENSSL_INCLUDE_DIRS "${OPENSSL_INCLUDE_DIR}" CACHE STRING "" FORCE) set(LWS_OPENSSL_LIBRARIES "${OPENSSL_LIBRARIES}" CACHE STRING "" FORCE) -set(CMAKE_C_FLAGS "-fpic" CACHE STRING "" FORCE) set(DISABLE_WERROR ON CACHE STRING "" FORCE) set(WEBSOCKETS_PATCH_FILE_1 "${CMAKE_SOURCE_DIR}/thirdparty/libwebsockets/fix-include-dirs.patch") @@ -43,21 +42,23 @@ set(WEBSOCKETS_PC ${Bash_EXECUTABLE} -c "set -x &&\ (${Patch_EXECUTABLE} -R -p1 -s -f --dry-run -i ${WEBSOCKETS_PATCH_FILE_1} || ${Patch_EXECUTABLE} -p1 -i ${WEBSOCKETS_PATCH_FILE_1}) &&\ (${Patch_EXECUTABLE} -R -p1 -s -f --dry-run -i ${WEBSOCKETS_PATCH_FILE_2} || ${Patch_EXECUTABLE} -p1 -i ${WEBSOCKETS_PATCH_FILE_2})") FetchContent_Declare(websockets - URL https://github.com/warmcat/libwebsockets/archive/refs/tags/v4.3.2.tar.gz - URL_HASH SHA256=6a85a1bccf25acc7e8e5383e4934c9b32a102880d1e4c37c70b27ae2a42406e1 + URL https://github.com/warmcat/libwebsockets/archive/refs/tags/v4.5.8.tar.gz + URL_HASH SHA256=b6ade658f4af3a823d0dc806ae5ef0623f0f4f5e2aeb895a0f77c4783840c30e PATCH_COMMAND "${WEBSOCKETS_PC}" SYSTEM ) FetchContent_MakeAvailable(yaml websockets) +target_compile_options(websockets PRIVATE -fPIC) + set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(K8S_PATCH_FILE "${CMAKE_SOURCE_DIR}/thirdparty/kubernetes-client-c/remove-findpackage.patch") set(K8S_PC ${Bash_EXECUTABLE} -c "set -x &&\ (${Patch_EXECUTABLE} -R -p1 -s -f --dry-run -i ${K8S_PATCH_FILE} || ${Patch_EXECUTABLE} -p1 -i ${K8S_PATCH_FILE})") FetchContent_Declare(kubernetes - URL https://github.com/kubernetes-client/c/archive/refs/tags/v0.5.0.tar.gz - URL_HASH SHA256=dbb6e6cd29ae2ac6c15de894aefb9b1e3d48916541d443f089aa0ffad6517ec6 + URL https://github.com/kubernetes-client/c/archive/refs/tags/v0.14.0.tar.gz + URL_HASH SHA256=52216183b540cd10cfe33da326c7a529c127e9bca3cc512533059374591cbdc4 PATCH_COMMAND "${K8S_PC}" SOURCE_SUBDIR kubernetes SYSTEM diff --git a/cmake/LZ4.cmake b/cmake/LZ4.cmake index 6712614c90..33a268b19e 100644 --- a/cmake/LZ4.cmake +++ b/cmake/LZ4.cmake @@ -25,8 +25,8 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(BUILD_STATIC_LIBS ON CACHE BOOL "" FORCE) FetchContent_Declare(lz4 - URL https://github.com/lz4/lz4/archive/refs/tags/v1.9.4.tar.gz - URL_HASH SHA256=0b0e3aa07c8c063ddf40b082bdf7e37a1562bda40a0ff5272957f3e987e0e54b + URL https://github.com/lz4/lz4/archive/refs/tags/v1.10.0.tar.gz + URL_HASH SHA256=537512904744b35e232912055ccf8ec66d768639ff3abe5788d90d792ec5f48b SOURCE_SUBDIR build/cmake OVERRIDE_FIND_PACKAGE SYSTEM diff --git a/cmake/LibLZMA.cmake b/cmake/LibLZMA.cmake index f90621cf91..1669368c1a 100644 --- a/cmake/LibLZMA.cmake +++ b/cmake/LibLZMA.cmake @@ -24,8 +24,8 @@ set(PC ${Bash_EXECUTABLE} -c "set -x &&\ (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE}\\\")") FetchContent_Declare(liblzma - URL https://github.com/tukaani-project/xz/releases/download/v5.6.2/xz-5.6.2.tar.gz - URL_HASH SHA256=8bfd20c0e1d86f0402f2497cfa71c6ab62d4cd35fd704276e3140bfb71414519 + URL https://github.com/tukaani-project/xz/archive/refs/tags/v5.8.3.tar.gz + URL_HASH SHA256=8ec1767fa517642ecb4cf08b891ce667ba6f143551e382b07c7ef437bda335e2 PATCH_COMMAND "${PC}" SYSTEM) diff --git a/cmake/Lua.cmake b/cmake/Lua.cmake index 6dc22c02b4..f558bbe862 100644 --- a/cmake/Lua.cmake +++ b/cmake/Lua.cmake @@ -18,8 +18,8 @@ include(FetchContent) FetchContent_Declare(lua - URL "https://github.com/lua/lua/archive/refs/tags/v5.4.6.tar.gz" - URL_HASH "SHA256=11c228cf9b9564d880b394f8069ad829d01e39756567f79c347a6b89fed44771" + URL "https://github.com/lua/lua/archive/refs/tags/v5.4.8.tar.gz" + URL_HASH "SHA256=d85b70a65f43c5d2254944d58d625e822c8e2e10d9c6a3bd9b5b657e46376a19" SYSTEM ) diff --git a/cmake/MagicEnum.cmake b/cmake/MagicEnum.cmake index 9bd6efad8e..a7a3f1d631 100644 --- a/cmake/MagicEnum.cmake +++ b/cmake/MagicEnum.cmake @@ -18,8 +18,8 @@ include(FetchContent) FetchContent_Declare(magic_enum - URL https://github.com/Neargye/magic_enum/archive/refs/tags/v0.9.3.tar.gz - URL_HASH SHA256=3cadd6a05f1bffc5141e5e731c46b2b73c2dbff025e723c8abaa659e0a24f072 + URL https://github.com/Neargye/magic_enum/archive/refs/tags/v0.9.8.tar.gz + URL_HASH SHA256=1e54959a3f3cb675938d858603ad69d0f3f7c82439fc2bf86d7232daec2bd10e SYSTEM) FetchContent_MakeAvailable(magic_enum) diff --git a/cmake/MbedTLS.cmake b/cmake/MbedTLS.cmake new file mode 100644 index 0000000000..dc00c4dd2a --- /dev/null +++ b/cmake/MbedTLS.cmake @@ -0,0 +1,61 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +include(FetchContent) + +set(ENABLE_TESTING OFF CACHE BOOL "" FORCE) +set(ENABLE_PROGRAMS OFF CACHE BOOL "" FORCE) + +FetchContent_Declare( + mbedtls + GIT_REPOSITORY "https://github.com/Mbed-TLS/mbedtls.git" + GIT_TAG "v3.6.6" + GIT_SUBMODULES "framework" + EXCLUDE_FROM_ALL + SYSTEM +) + +FetchContent_MakeAvailable(mbedtls) + +foreach(mbedtls_target mbedtls mbedx509 mbedcrypto everest p256m) + if(TARGET ${mbedtls_target}) + target_compile_options(${mbedtls_target} PRIVATE $<$:-Wno-error>) + endif() +endforeach() + +if (WIN32) + set(MBEDTLS_BYPRODUCT_PREFIX "" CACHE STRING "" FORCE) + set(MBEDTLS_BYPRODUCT_SUFFIX ".lib" CACHE STRING "" FORCE) +else() + set(MBEDTLS_BYPRODUCT_PREFIX "lib" CACHE STRING "" FORCE) + set(MBEDTLS_BYPRODUCT_SUFFIX ".a" CACHE STRING "" FORCE) +endif() + +# Set variables +set(MBEDTLS_FOUND "YES" CACHE STRING "" FORCE) +set(MBEDTLS_INCLUDE_DIRS "${mbedtls_SOURCE_DIR}/include" CACHE STRING "" FORCE) +set(MBEDTLS_LIBRARY "${mbedtls_BINARY_DIR}/library/${MBEDTLS_BYPRODUCT_PREFIX}mbedtls${MBEDTLS_BYPRODUCT_SUFFIX}" CACHE STRING "" FORCE) +set(MBEDX509_LIBRARY "${mbedtls_BINARY_DIR}/library/${MBEDTLS_BYPRODUCT_PREFIX}mbedx509${MBEDTLS_BYPRODUCT_SUFFIX}" CACHE STRING "" FORCE) +set(MBEDCRYPTO_LIBRARY "${mbedtls_BINARY_DIR}/library/${MBEDTLS_BYPRODUCT_PREFIX}mbedcrypto${MBEDTLS_BYPRODUCT_SUFFIX}" CACHE STRING "" FORCE) +set(MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY};${MBEDX509_LIBRARY};${MBEDCRYPTO_LIBRARY}" CACHE STRING "" FORCE) + +# Set exported variables for FindPackage.cmake +set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDTLS_INCLUDE_DIRS=${MBEDTLS_INCLUDE_DIRS}" CACHE STRING "" FORCE) +set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDTLS_LIBRARIES=${MBEDTLS_LIBRARIES_EXPORT}" CACHE STRING "" FORCE) +set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDTLS_LIBRARY=${MBEDTLS_LIBRARY}" CACHE STRING "" FORCE) +set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDX509_LIBRARY=${MBEDX509_LIBRARY}" CACHE STRING "" FORCE) +set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_MBEDCRYPTO_LIBRARY=${MBEDCRYPTO_LIBRARY}" CACHE STRING "" FORCE) diff --git a/cmake/MiMalloc.cmake b/cmake/MiMalloc.cmake index 45a5a00156..585d3f1b74 100644 --- a/cmake/MiMalloc.cmake +++ b/cmake/MiMalloc.cmake @@ -19,8 +19,8 @@ include(FetchContent) FetchContent_Declare( mimalloc - URL https://github.com/microsoft/mimalloc/archive/refs/tags/v2.0.6.tar.gz - URL_HASH SHA256=9f05c94cc2b017ed13698834ac2a3567b6339a8bde27640df5a1581d49d05ce5 + URL https://github.com/microsoft/mimalloc/archive/refs/tags/v3.3.2.tar.gz + URL_HASH SHA256=ca02384e007f46950598500dfaebde5ff9948c1d231f5a81b058799afa64bbbb SYSTEM ) FetchContent_MakeAvailable(mimalloc) diff --git a/cmake/Open62541.cmake b/cmake/Open62541.cmake new file mode 100644 index 0000000000..ba4a1ffbcb --- /dev/null +++ b/cmake/Open62541.cmake @@ -0,0 +1,44 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +include(FetchContent) + +set(OPEN62541_VERSION "v1.5.4" CACHE STRING "" FORCE) +set(UA_ENABLE_ENCRYPTION ON CACHE BOOL "" FORCE) +set(UA_FORCE_WERROR OFF CACHE BOOL "" FORCE) +set(UA_ENABLE_DEBUG_SANITIZER OFF CACHE BOOL "" FORCE) + +set(PATCH_FILE_1 "${CMAKE_SOURCE_DIR}/thirdparty/open62541/open62541.patch") +set(PATCH_FILE_2 "${CMAKE_SOURCE_DIR}/thirdparty/open62541/cflag_fix.patch") +set(PC ${Bash_EXECUTABLE} -c "set -x &&\ + (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_1}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_1}\\\") &&\ + (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_2}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_2}\\\")") + +FetchContent_Declare( + open62541 + URL "https://github.com/open62541/open62541/archive/refs/tags/${OPEN62541_VERSION}.tar.gz" + URL_HASH "SHA256=fb5aafc19c67a91368d1f71d9ee4acf0f4b47a0d65c66db4ed738691828779c7" + PATCH_COMMAND "${PC}" + EXCLUDE_FROM_ALL + DOWNLOAD_NO_PROGRESS TRUE + TLS_VERIFY TRUE + SYSTEM +) + +FetchContent_MakeAvailable(open62541) + +add_dependencies(open62541 mbedtls) diff --git a/cmake/PahoMqttC.cmake b/cmake/PahoMqttC.cmake index 16148cf124..d34d597dbe 100644 --- a/cmake/PahoMqttC.cmake +++ b/cmake/PahoMqttC.cmake @@ -22,6 +22,7 @@ set(PAHO_BUILD_STATIC ON CACHE BOOL "" FORCE) set(PAHO_BUILD_SHARED OFF CACHE BOOL "" FORCE) set(PAHO_ENABLE_TESTING OFF CACHE BOOL "" FORCE) set(PAHO_WITH_SSL ON CACHE BOOL "" FORCE) +set(PAHO_HIGH_PERFORMANCE ON CACHE BOOL "" FORCE) set(PATCH_FILE_1 "${CMAKE_SOURCE_DIR}/thirdparty/paho-mqtt/cmake-openssl.patch") set(PATCH_FILE_2 "${CMAKE_SOURCE_DIR}/thirdparty/paho-mqtt/1576-Changed-bool-typedef-to-bit.patch") @@ -31,8 +32,8 @@ set(PC ${Bash_EXECUTABLE} -c "set -x &&\ FetchContent_Declare( paho.mqtt.c-external - URL "https://github.com/eclipse/paho.mqtt.c/archive/refs/tags/v1.3.14.tar.gz" - URL_HASH "SHA256=7af7d906e60a696a80f1b7c2bd7d6eb164aaad908ff4c40c3332ac2006d07346" + URL "https://github.com/eclipse-paho/paho.mqtt.c/archive/refs/tags/v1.3.16.tar.gz" + URL_HASH "SHA256=8b960f51edc7e03507637d987882bc486d8f4be6e79431bf99e2763344fd14c5" PATCH_COMMAND "${PC}" SYSTEM ) diff --git a/cmake/RpMalloc.cmake b/cmake/RpMalloc.cmake index a97a9135c0..2552b88b57 100644 --- a/cmake/RpMalloc.cmake +++ b/cmake/RpMalloc.cmake @@ -19,8 +19,8 @@ include(FetchContent) FetchContent_Declare( rpmalloc - URL https://github.com/mjansson/rpmalloc/archive/refs/tags/1.4.4.tar.gz - URL_HASH SHA256=3859620c03e6473f0b3f16a4e965e7c049594253f70e8370fb9caa0e4118accb + URL https://github.com/mjansson/rpmalloc/archive/refs/tags/1.4.5.tar.gz + URL_HASH SHA256=2513626697ef72a60957acc8caed17c39931a55c1a49202707de195742683d69 SYSTEM ) FetchContent_GetProperties(rpmalloc) diff --git a/cmake/YamlCpp.cmake b/cmake/YamlCpp.cmake new file mode 100644 index 0000000000..19d3c34f60 --- /dev/null +++ b/cmake/YamlCpp.cmake @@ -0,0 +1,32 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +include(FetchContent) + +set(CMAKE_DEBUG_POSTFIX "" CACHE STRING "" FORCE) +set(YAML_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) +set(YAML_CPP_BUILD_TESTS OFF CACHE BOOL "" FORCE) +set(YAML_CPP_BUILD_TOOLS OFF CACHE BOOL "" FORCE) + +FetchContent_Declare( + yaml-cpp + URL "https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-0.9.0.tar.gz" + URL_HASH "SHA256=25cb043240f828a8c51beb830569634bc7ac603978e0f69d6b63558dadefd49a" + SYSTEM +) + +FetchContent_MakeAvailable(yaml-cpp) diff --git a/cmake/ZLIB.cmake b/cmake/ZLIB.cmake new file mode 100644 index 0000000000..6f32ff28c4 --- /dev/null +++ b/cmake/ZLIB.cmake @@ -0,0 +1,45 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +include(FetchContent) + +set(ZLIB_BUILD_TESTING OFF CACHE BOOL "" FORCE) +set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE) + +FetchContent_Declare( + zlib + URL "https://github.com/madler/zlib/archive/refs/tags/v1.3.2.tar.gz" + URL_HASH "SHA256=b99a0b86c0ba9360ec7e78c4f1e43b1cbdf1e6936c8fa0f6835c0cd694a495a1" + SYSTEM +) + +FetchContent_MakeAvailable(zlib) + +if(WIN32) + set(_zlib_static_suffix "s") +else() + set(_zlib_static_suffix "") +endif() + +set(ZLIB_FOUND "YES" CACHE STRING "" FORCE) +set(ZLIB_INCLUDE_DIRS "${zlib_SOURCE_DIR}" CACHE STRING "" FORCE) +set(ZLIB_LIBRARY "${zlib_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}z${_zlib_static_suffix}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE STRING "" FORCE) +set(ZLIB_LIBRARIES "${ZLIB_LIBRARY}" CACHE STRING "" FORCE) + +# Set exported variables for FindPackage.cmake +set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_ZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIRS}" CACHE STRING "" FORCE) +set(PASSTHROUGH_VARIABLES ${PASSTHROUGH_VARIABLES} "-DEXPORTED_ZLIB_LIBRARIES=${ZLIB_LIBRARIES}" CACHE STRING "" FORCE) diff --git a/cmake/Zstd.cmake b/cmake/Zstd.cmake index a951b62d43..d4cb50a0be 100644 --- a/cmake/Zstd.cmake +++ b/cmake/Zstd.cmake @@ -21,16 +21,9 @@ list(PREPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/zstd/dummy") set(ZSTD_BUILD_SHARED OFF CACHE BOOL "" FORCE) -set(PC "") -if (WIN32) - set(PATCH_FILE "${CMAKE_SOURCE_DIR}/thirdparty/zstd/exclude_gcc_clang_compiler_options_from_windows.patch") - set(PC "${Patch_EXECUTABLE}" -p1 -i "${PATCH_FILE}") -endif() - FetchContent_Declare(zstd - URL https://github.com/facebook/zstd/archive/refs/tags/v1.5.2.tar.gz - URL_HASH SHA256=f7de13462f7a82c29ab865820149e778cbfe01087b3a55b5332707abf9db4a6e - PATCH_COMMAND "${PC}" + URL https://github.com/facebook/zstd/archive/refs/tags/v1.5.7.tar.gz + URL_HASH SHA256=37d7284556b20954e56e1ca85b80226768902e2edabd3b649e9e72c0c9012ee3 SOURCE_SUBDIR build/cmake SYSTEM ) diff --git a/cmake/liblzma/dummy/FindLibLZMA.cmake b/cmake/liblzma/dummy/FindLibLZMA.cmake index ece2ccc26c..1487fc2e89 100644 --- a/cmake/liblzma/dummy/FindLibLZMA.cmake +++ b/cmake/liblzma/dummy/FindLibLZMA.cmake @@ -22,12 +22,12 @@ if(NOT LIBLZMA_FOUND) set(LIBLZMA_INCLUDE_DIRS "${EXPORTED_LIBLZMA_INCLUDE_DIR}" CACHE STRING "" FORCE) if (WIN32) - if (EXISTS "${EXPORTED_LIBLZMA_LIB_DIR}/liblzma.lib") - set(LIBLZMA_LIBRARIES "${EXPORTED_LIBLZMA_LIB_DIR}/liblzma.lib" CACHE STRING "" FORCE) - elseif (EXISTS "${EXPORTED_LIBLZMA_LIB_DIR}/${CMAKE_BUILD_TYPE}/liblzma.lib") - set(LIBLZMA_LIBRARIES "${EXPORTED_LIBLZMA_LIB_DIR}/${CMAKE_BUILD_TYPE}/liblzma.lib" CACHE STRING "" FORCE) + if (EXISTS "${EXPORTED_LIBLZMA_LIB_DIR}/lzma.lib") + set(LIBLZMA_LIBRARIES "${EXPORTED_LIBLZMA_LIB_DIR}/lzma.lib" CACHE STRING "" FORCE) + elseif (EXISTS "${EXPORTED_LIBLZMA_LIB_DIR}/${CMAKE_BUILD_TYPE}/lzma.lib") + set(LIBLZMA_LIBRARIES "${EXPORTED_LIBLZMA_LIB_DIR}/${CMAKE_BUILD_TYPE}/lzma.lib" CACHE STRING "" FORCE) else() - message(FATAL_ERROR "Could not find liblzma.lib") + message(FATAL_ERROR "Could not find lzma.lib") endif() else() set(LIBLZMA_LIBRARIES "${EXPORTED_LIBLZMA_LIBRARY}" CACHE STRING "" FORCE) diff --git a/cmake/zlib/dummy/FindZLIB.cmake b/cmake/zlib/dummy/FindZLIB.cmake index d959a53558..d8bfe475f6 100644 --- a/cmake/zlib/dummy/FindZLIB.cmake +++ b/cmake/zlib/dummy/FindZLIB.cmake @@ -30,4 +30,5 @@ if(NOT TARGET ZLIB::ZLIB) set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${ZLIB_LIBRARIES}") + add_dependencies(ZLIB::ZLIB zlibstatic) endif() diff --git a/core-framework/common/include/utils/Enum.h b/core-framework/common/include/utils/Enum.h index c4695fa1b8..a170dba876 100644 --- a/core-framework/common/include/utils/Enum.h +++ b/core-framework/common/include/utils/Enum.h @@ -22,7 +22,7 @@ #include #include -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" namespace org::apache::nifi::minifi::utils { diff --git a/core-framework/common/include/utils/ParsingErrors.h b/core-framework/common/include/utils/ParsingErrors.h index 434ba3764b..2820d16e53 100644 --- a/core-framework/common/include/utils/ParsingErrors.h +++ b/core-framework/common/include/utils/ParsingErrors.h @@ -22,7 +22,7 @@ #include #include "fmt/format.h" -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" namespace org::apache::nifi::minifi::core { diff --git a/core-framework/common/include/utils/PropertyErrors.h b/core-framework/common/include/utils/PropertyErrors.h index b8bc6715b9..98b7219ce5 100644 --- a/core-framework/common/include/utils/PropertyErrors.h +++ b/core-framework/common/include/utils/PropertyErrors.h @@ -22,7 +22,7 @@ #include #include "fmt/format.h" -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" namespace org::apache::nifi::minifi::core { diff --git a/core-framework/common/include/utils/StringUtils.h b/core-framework/common/include/utils/StringUtils.h index 679f838014..5c36f57d10 100644 --- a/core-framework/common/include/utils/StringUtils.h +++ b/core-framework/common/include/utils/StringUtils.h @@ -328,7 +328,7 @@ std::string to_hex(std::span data_to_be_transformed, bool upper * @return the hexencoded string */ inline std::string to_hex(std::string_view str, bool uppercase = false) { - return to_hex(gsl::make_span(str).as_span(), uppercase); + return to_hex(std::as_bytes(std::span(str)), uppercase); } @@ -381,7 +381,7 @@ std::string to_base64(std::span raw_data, bool url = false, boo * @return the Base64 encoded string */ inline std::string to_base64(std::string_view str, bool url = false, bool padded = true) { - return to_base64(gsl::make_span(str).as_span(), url, padded); + return to_base64(std::as_bytes(std::span(str)), url, padded); } std::string replaceMap(std::string source_string, const std::map &replace_map); diff --git a/core-framework/include/io/StreamPipe.h b/core-framework/include/io/StreamPipe.h index b5b77dc9ec..579ead94c1 100644 --- a/core-framework/include/io/StreamPipe.h +++ b/core-framework/include/io/StreamPipe.h @@ -41,7 +41,7 @@ inline io::IoResult pipe(io::InputStream& src, io::OutputStream& dst) { auto remaining = readRet; size_t transferred = 0; while (remaining > 0) { - const auto writeRet = dst.write(gsl::make_span(buffer).subspan(transferred, remaining)); + const auto writeRet = dst.write(std::span(buffer).subspan(transferred, remaining)); // TODO(adebreceni): // write might return 0, e.g. in case of a congested server // what should we return then? diff --git a/core-framework/include/utils/AttributeErrors.h b/core-framework/include/utils/AttributeErrors.h index c213e3fc79..3f1927dd37 100644 --- a/core-framework/include/utils/AttributeErrors.h +++ b/core-framework/include/utils/AttributeErrors.h @@ -22,7 +22,7 @@ #include #include "fmt/format.h" -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" namespace org::apache::nifi::minifi::core { diff --git a/core-framework/src/http/HTTPClient.cpp b/core-framework/src/http/HTTPClient.cpp index fae2a78c91..32d76f60fc 100644 --- a/core-framework/src/http/HTTPClient.cpp +++ b/core-framework/src/http/HTTPClient.cpp @@ -28,7 +28,7 @@ #include #include "core/Resource.h" -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" #include "range/v3/algorithm/all_of.hpp" #include "range/v3/action/transform.hpp" #include "minifi-cpp/utils/gsl.h" diff --git a/core-framework/src/io/ZlibStream.cpp b/core-framework/src/io/ZlibStream.cpp index 436d9c5c99..fa41a3ab83 100644 --- a/core-framework/src/io/ZlibStream.cpp +++ b/core-framework/src/io/ZlibStream.cpp @@ -22,7 +22,7 @@ #include "minifi-cpp/Exception.h" #include "minifi-cpp/utils/gsl.h" #include "core/logging/LoggerFactory.h" -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" namespace org::apache::nifi::minifi::io { @@ -109,7 +109,7 @@ size_t ZlibCompressStream::write(const uint8_t* value, size_t size, FlushMode mo } const auto output_size = outputBuffer_.size() - strm_.avail_out; logger_->log_trace("deflate produced {} B of output data", output_size); - if (output_->write(gsl::make_span(outputBuffer_).subspan(0, output_size)) != output_size) { + if (output_->write(std::span(outputBuffer_).subspan(0, output_size)) != output_size) { logger_->log_error("Failed to write to underlying stream"); state_ = ZlibStreamState::ERRORED; return STREAM_ERROR; @@ -182,7 +182,7 @@ size_t ZlibDecompressStream::write(const uint8_t* value, size_t size) { } const auto output_size = outputBuffer_.size() - strm_.avail_out; logger_->log_trace("inflate produced {} B of output data", output_size); - if (output_->write(gsl::make_span(outputBuffer_).subspan(0, output_size)) != output_size) { + if (output_->write(std::span(outputBuffer_).subspan(0, output_size)) != output_size) { logger_->log_error("Failed to write to underlying stream"); state_ = ZlibStreamState::ERRORED; return STREAM_ERROR; diff --git a/docker/Dockerfile b/docker/Dockerfile index 86993e0bdb..b050fa8a63 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,7 +16,7 @@ # under the License. # -ARG BASE_IMAGE="alpine:3.19.1" +ARG BASE_IMAGE="alpine:3.22.4" # Build image FROM ${BASE_IMAGE} AS build diff --git a/encrypt-config/tests/ConfigFileTests.cpp b/encrypt-config/tests/ConfigFileTests.cpp index 32224a4c41..6944ac7e39 100644 --- a/encrypt-config/tests/ConfigFileTests.cpp +++ b/encrypt-config/tests/ConfigFileTests.cpp @@ -168,7 +168,7 @@ TEST_CASE("ConfigFile can write to a new file", "[encrypt-config][writeTo]") { TestController test_controller; auto temp_dir = test_controller.createTempDirectory(); - auto remove_directory = minifi::gsl::finally([&temp_dir]() { utils::file::delete_dir(temp_dir); }); + auto remove_directory = gsl::finally([&temp_dir]() { utils::file::delete_dir(temp_dir); }); auto file_path = temp_dir / "minifi.properties"; test_file.writeTo(file_path); diff --git a/extensions/azure/tests/MockBlobStorage.h b/extensions/azure/tests/MockBlobStorage.h index fb7e8ec54d..83e6b4644d 100644 --- a/extensions/azure/tests/MockBlobStorage.h +++ b/extensions/azure/tests/MockBlobStorage.h @@ -88,7 +88,7 @@ class MockBlobStorage : public minifi::azure::storage::BlobStorageClient { } buffer_.assign(FETCHED_DATA.begin() + range_start, FETCHED_DATA.begin() + range_start + size); - return std::make_unique(gsl::make_span(buffer_).as_span()); + return std::make_unique(std::as_bytes(std::span(buffer_))); } std::vector listContainer(const minifi::azure::storage::ListAzureBlobStorageParameters& params) override { diff --git a/extensions/azure/tests/MockDataLakeStorageClient.h b/extensions/azure/tests/MockDataLakeStorageClient.h index 03a5f46b13..57d3c388e3 100644 --- a/extensions/azure/tests/MockDataLakeStorageClient.h +++ b/extensions/azure/tests/MockDataLakeStorageClient.h @@ -81,7 +81,7 @@ class MockDataLakeStorageClient : public org::apache::nifi::minifi::azure::stora size = *params.range_length; } - const auto range = gsl::make_span(FETCHED_DATA).subspan(range_start, size).as_span(); + const auto range = std::as_bytes(std::span(FETCHED_DATA).subspan(range_start, size)); buffer_.assign(std::begin(range), std::end(range)); return std::make_unique(buffer_); } diff --git a/extensions/azure/utils/AzureEnums.h b/extensions/azure/utils/AzureEnums.h index ab87836e12..6b4b1cd33d 100644 --- a/extensions/azure/utils/AzureEnums.h +++ b/extensions/azure/utils/AzureEnums.h @@ -19,7 +19,7 @@ */ #pragma once -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" namespace org::apache::nifi::minifi::azure { diff --git a/extensions/bustache/ApplyTemplate.cpp b/extensions/bustache/ApplyTemplate.cpp index 81af9c7413..226f9b192d 100644 --- a/extensions/bustache/ApplyTemplate.cpp +++ b/extensions/bustache/ApplyTemplate.cpp @@ -61,7 +61,7 @@ void ApplyTemplate::onTrigger(core::ProcessContext& context, core::ProcessSessio // TODO(calebj) write ostream reciever for format() to prevent excessive copying std::string ostring = bustache::to_string(format(data)); - output_stream->write(gsl::make_span(ostring).as_span()); + output_stream->write(std::as_bytes(std::span(ostring))); return io::IoResult::from(ostring.length()); }); session.transfer(flow_file, Success); diff --git a/extensions/execute-process/ExecuteProcess.cpp b/extensions/execute-process/ExecuteProcess.cpp index 03e696a26d..f928675cce 100644 --- a/extensions/execute-process/ExecuteProcess.cpp +++ b/extensions/execute-process/ExecuteProcess.cpp @@ -129,7 +129,7 @@ void ExecuteProcess::readOutputInBatches(core::ProcessSession& session) const { } flow_file->addAttribute("command", command_); flow_file->addAttribute("command.arguments", command_argument_); - session.writeBuffer(flow_file, gsl::make_span(buffer.data(), gsl::narrow(num_read))); + session.writeBuffer(flow_file, std::span(buffer.data(), gsl::narrow(num_read))); session.transfer(flow_file, Success); session.commit(); } @@ -177,7 +177,7 @@ void ExecuteProcess::readOutput(core::ProcessSession& session) const { if (read_to_buffer > 0) { logger_->log_debug("Execute Command Respond {}", read_to_buffer); // child exits and close the pipe - const auto buffer_span = gsl::make_span(buffer.data(), read_to_buffer); + const auto buffer_span = std::span(buffer.data(), read_to_buffer); if (!writeToFlowFile(session, flow_file, buffer_span)) { return; } diff --git a/extensions/gcp/processors/FetchGCSObject.cpp b/extensions/gcp/processors/FetchGCSObject.cpp index 32e1eb4c76..e43b80415a 100644 --- a/extensions/gcp/processors/FetchGCSObject.cpp +++ b/extensions/gcp/processors/FetchGCSObject.cpp @@ -48,7 +48,7 @@ class FetchFromGCSCallback { if (!reader) return io::IoResult::zero(); std::string contents{std::istreambuf_iterator{reader}, {}}; - const auto write_ret = stream->write(gsl::make_span(contents).as_span()); + const auto write_ret = stream->write(std::as_writable_bytes(std::span(contents))); reader.Close(); return io::IoResult::from(write_ret); } diff --git a/extensions/grafana-loki/CMakeLists.txt b/extensions/grafana-loki/CMakeLists.txt index 04a068fc9d..177b74aa35 100644 --- a/extensions/grafana-loki/CMakeLists.txt +++ b/extensions/grafana-loki/CMakeLists.txt @@ -30,7 +30,8 @@ if (ENABLE_GRPC_FOR_LOKI) add_custom_command( OUTPUT ${LOKI_PROTOBUF_GENERATED_DIR}/grafana-loki-push.grpc.pb.cc ${LOKI_PROTOBUF_GENERATED_DIR}/grafana-loki-push.grpc.pb.h ${LOKI_PROTOBUF_GENERATED_DIR}/grafana-loki-push.pb.h ${LOKI_PROTOBUF_GENERATED_DIR}/grafana-loki-push.pb.cc - COMMAND ${PROTOBUF_COMPILER} --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN} -I=${CMAKE_CURRENT_SOURCE_DIR}/protos/ -I=${protobuf_SOURCE_DIR}/src --grpc_out=${LOKI_PROTOBUF_GENERATED_DIR} --cpp_out=${LOKI_PROTOBUF_GENERATED_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/protos/grafana-loki-push.proto + COMMAND ${PROTOBUF_COMPILER} --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN} --proto_path=. --proto_path=${protobuf_SOURCE_DIR}/src --grpc_out=${LOKI_PROTOBUF_GENERATED_DIR} --cpp_out=${LOKI_PROTOBUF_GENERATED_DIR} grafana-loki-push.proto + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/protos DEPENDS protobuf::protoc grpc_cpp_plugin) add_library(grafana-loki-protos ${LOKI_PROTOBUF_GENERATED_DIR}/grafana-loki-push.grpc.pb.cc ${LOKI_PROTOBUF_GENERATED_DIR}/grafana-loki-push.pb.cc) @@ -57,6 +58,9 @@ if (ENABLE_GRPC_FOR_LOKI) target_include_directories(minifi-grafana-loki SYSTEM PRIVATE BEFORE "${LOKI_PROTOBUF_GENERATED_DIR}" "${GRPC_INCLUDE_DIR}" "${PROTOBUF_INCLUDE_DIR}") target_link_libraries(minifi-grafana-loki grafana-loki-protos) add_dependencies(minifi-grafana-loki grafana-loki-protos) + if (MSVC) + target_compile_options(minifi-grafana-loki PRIVATE /wd4996) + endif() endif() register_extension(minifi-grafana-loki "GRAFANA LOKI EXTENSIONS" GRAFANA-LOKI-EXTENSIONS "This enables Grafana Loki support" "extensions/grafana-loki/tests") diff --git a/extensions/grafana-loki/tests/CMakeLists.txt b/extensions/grafana-loki/tests/CMakeLists.txt index b9764ebea7..333bf90343 100644 --- a/extensions/grafana-loki/tests/CMakeLists.txt +++ b/extensions/grafana-loki/tests/CMakeLists.txt @@ -26,6 +26,9 @@ SET(GRAFANA_LOKI_TEST_COUNT 0) FOREACH(testfile ${GRAFANA_LOKI_TESTS}) get_filename_component(testfilename "${testfile}" NAME_WE) add_minifi_executable("${testfilename}" "${testfile}") + if (MSVC) + target_compile_options("${testfilename}" PRIVATE /wd4996) + endif() target_include_directories(${testfilename} PRIVATE BEFORE "${CMAKE_SOURCE_DIR}/extensions/standard-processors") target_include_directories(${testfilename} PRIVATE BEFORE "${CMAKE_SOURCE_DIR}/extensions/grafana-loki") if (ENABLE_GRPC_FOR_LOKI) diff --git a/extensions/kubernetes/controllerservice/KubernetesControllerService.cpp b/extensions/kubernetes/controllerservice/KubernetesControllerService.cpp index 9aa86f23a4..6a90edb766 100644 --- a/extensions/kubernetes/controllerservice/KubernetesControllerService.cpp +++ b/extensions/kubernetes/controllerservice/KubernetesControllerService.cpp @@ -77,6 +77,7 @@ v1_pod_list_unique_ptr getPods(gsl::not_null api_client, core::log nullptr, // pretty nullptr, // resourceVersion nullptr, // resourceVersionMatch + nullptr, // sendInitialEvents 0, // timeoutSeconds 0)}; // watch logger.log_info("The return code of the Kubernetes API listPodForAllNamespaces call: {}", api_client->response_code); diff --git a/extensions/libarchive/CompressContent.h b/extensions/libarchive/CompressContent.h index 59c53e52f3..6d36875db0 100644 --- a/extensions/libarchive/CompressContent.h +++ b/extensions/libarchive/CompressContent.h @@ -185,7 +185,7 @@ class CompressContent : public core::ProcessorImpl { } else if (ret == 0) { break; } else { - const auto writeret = filterStream->write(gsl::make_span(buffer).subspan(0, ret)); + const auto writeret = filterStream->write(std::span(buffer).subspan(0, ret)); if (io::isError(writeret) || gsl::narrow(writeret) != ret) { return io::IoResult::error(); } diff --git a/extensions/libarchive/ReadArchiveStream.h b/extensions/libarchive/ReadArchiveStream.h index e23473ed74..f702439b72 100644 --- a/extensions/libarchive/ReadArchiveStream.h +++ b/extensions/libarchive/ReadArchiveStream.h @@ -41,7 +41,7 @@ class ReadArchiveStreamImpl final : public InputStreamImpl, public ReadArchiveSt if (io::isError(result)) { return std::nullopt; } - return gsl::make_span(buffer_).subspan(0, result); + return std::span(buffer_).subspan(0, result); } private: diff --git a/extensions/mqtt/processors/AbstractMQTTProcessor.cpp b/extensions/mqtt/processors/AbstractMQTTProcessor.cpp index 4d928fafe7..5838110dbb 100644 --- a/extensions/mqtt/processors/AbstractMQTTProcessor.cpp +++ b/extensions/mqtt/processors/AbstractMQTTProcessor.cpp @@ -323,6 +323,8 @@ void AbstractMQTTProcessor::setBrokerLimits(MQTTAsync_successData5* response) { if (value != PAHO_MQTT_C_FAILURE_CODE) { if constexpr (std::is_same_v&>) { out_var = std::chrono::seconds(value); + } else if constexpr (std::is_same_v::value_type, bool>) { + out_var = (value != 0); } else { out_var = gsl::narrow::value_type>(value); } diff --git a/extensions/mqtt/tests/ConsumeMQTTTests.cpp b/extensions/mqtt/tests/ConsumeMQTTTests.cpp index 8b63b1aecc..e1b0c73fd1 100644 --- a/extensions/mqtt/tests/ConsumeMQTTTests.cpp +++ b/extensions/mqtt/tests/ConsumeMQTTTests.cpp @@ -16,6 +16,8 @@ * limitations under the License. */ +#include +#include #include "unit/Catch.h" #include "catch2/matchers/catch_matchers_string.hpp" #include "unit/TestBase.h" @@ -94,6 +96,17 @@ class TestConsumeMQTTProcessor : public minifi::processors::ConsumeMQTT { REGISTER_RESOURCE(TestConsumeMQTTProcessor, Processor); +static std::unique_ptr +makeMallocMqttMessage(const std::string& payload, int struct_version = 0, int qos = 0, int retained = 0, int dup = 0, int msgid = 1) { + auto* raw_msg = static_cast(std::malloc(sizeof(MQTTAsync_message))); + auto* payload_copy = static_cast(std::malloc(payload.size())); + std::memcpy(payload_copy, payload.data(), payload.size()); + *raw_msg = MQTTAsync_message{.struct_id = {'M', 'Q', 'T', 'M'}, .struct_version = struct_version, + .payloadlen = gsl::narrow(payload.size()), .payload = payload_copy, + .qos = qos, .retained = retained, .dup = dup, .msgid = msgid, .properties = {}}; + return std::unique_ptr(raw_msg); +} + struct ConsumeMqttTestFixture { ConsumeMqttTestFixture() : test_controller_(utils::make_processor("TestConsumeMQTTProcessor")), @@ -251,11 +264,9 @@ TEST_CASE_METHOD(ConsumeMqttTestFixture, "Read XML messages and write them to js const size_t expected_record_count = 2; const std::string payload = R"(42test)"; for (size_t i = 0; i < expected_record_count; ++i) { - TestConsumeMQTTProcessor::SmartMessage message{std::unique_ptr( - new MQTTAsync_message{.struct_id = {'M', 'Q', 'T', 'M'}, .struct_version = gsl::narrow(i), .payloadlen = gsl::narrow(payload.size()), - .payload = const_cast(payload.data()), .qos = gsl::narrow(i), .retained = gsl::narrow(i), .dup = gsl::narrow(i), - .msgid = gsl::narrow(i + 1), .properties = {}}), - std::string{"mytopic/segment/" + std::to_string(i)}}; // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + TestConsumeMQTTProcessor::SmartMessage message{ + makeMallocMqttMessage(payload, gsl::narrow(i), gsl::narrow(i), gsl::narrow(i), gsl::narrow(i), gsl::narrow(i + 1)), + std::string{"mytopic/segment/" + std::to_string(i)}}; auto& test_processor = dynamic_cast(consume_mqtt_processor_->getImpl()); test_processor.enqueueReceivedMQTTMsg(std::move(message)); @@ -281,10 +292,8 @@ TEST_CASE_METHOD(ConsumeMqttTestFixture, "Invalid XML payload does not result in const std::string payload = "invalid xml payload"; TestConsumeMQTTProcessor::SmartMessage message{ - std::unique_ptr( - new MQTTAsync_message{.struct_id = {'M', 'Q', 'T', 'M'}, .struct_version = 1, .payloadlen = gsl::narrow(payload.size()), - .payload = const_cast(payload.data()), .qos = 1, .retained = 0, .dup = 0, .msgid = 42, .properties = {}}), - std::string{"mytopic"}}; // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + makeMallocMqttMessage(payload, 1, 1, 0, 0, 42), + std::string{"mytopic"}}; auto& test_processor = dynamic_cast(consume_mqtt_processor_->getImpl()); test_processor.enqueueReceivedMQTTMsg(std::move(message)); @@ -323,10 +332,9 @@ TEST_CASE_METHOD(ConsumeMqttTestFixture, "Read MQTT message and write it to a fl const size_t expected_flow_file_count = 2; const std::string payload = "test MQTT payload"; for (size_t i = 0; i < expected_flow_file_count; ++i) { - TestConsumeMQTTProcessor::SmartMessage message{std::unique_ptr( - new MQTTAsync_message{.struct_id = {'M', 'Q', 'T', 'M'}, .struct_version = 1, .payloadlen = gsl::narrow(payload.size()), - .payload = const_cast(payload.data()), .qos = 1, .retained = 0, .dup = 0, .msgid = 42, .properties = {}}), - std::string{topic}}; // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + TestConsumeMQTTProcessor::SmartMessage message{ + makeMallocMqttMessage(payload, 1, 1, 0, 0, 42), + std::string{topic}}; auto& test_processor = dynamic_cast(consume_mqtt_processor_->getImpl()); test_processor.enqueueReceivedMQTTMsg(std::move(message)); } diff --git a/extensions/opc/CMakeLists.txt b/extensions/opc/CMakeLists.txt index a19db6df82..19226af704 100644 --- a/extensions/opc/CMakeLists.txt +++ b/extensions/opc/CMakeLists.txt @@ -20,12 +20,10 @@ if (NOT (ENABLE_ALL OR ENABLE_OPC)) return() endif() -include(BundledMbedTLS) -use_bundled_mbedtls(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}) +include(MbedTLS) list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/mbedtls/dummy") -include(BundledOpen62541) -use_bundled_open62541(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}) +include(Open62541) set( CMAKE_VERBOSE_MAKEFILE on ) diff --git a/extensions/python/ExecutePythonProcessor.cpp b/extensions/python/ExecutePythonProcessor.cpp index 2d4d761576..184acad784 100644 --- a/extensions/python/ExecutePythonProcessor.cpp +++ b/extensions/python/ExecutePythonProcessor.cpp @@ -39,7 +39,7 @@ namespace org::apache::nifi::minifi::extensions::python::processors { void ExecutePythonProcessor::initialize() { initializeScript(); // only include supported properties that are defined in the python processor - setSupportedProperties(gsl::make_span(python_properties_)); + setSupportedProperties(std::span(python_properties_)); setSupportedRelationships(Relationships); logger_->log_debug("Processor has been initialized."); } @@ -163,7 +163,7 @@ const core::PropertyValidator& translateCodeToPropertyValidator(const PropertyVa } // namespace void ExecutePythonProcessor::addProperty(const std::string &name, const std::string &description, const std::optional &defaultvalue, bool required, bool el, bool sensitive, - const std::optional& property_type_code, gsl::span allowable_values, const std::optional& controller_service_type_name) { + const std::optional& property_type_code, std::span allowable_values, const std::optional& controller_service_type_name) { auto builder = core::PropertyDefinitionBuilder<>::createProperty(name).withDescription(description).isRequired(required).supportsExpressionLanguage(el).isSensitive(sensitive); if (defaultvalue) { builder.withDefaultValue(*defaultvalue); diff --git a/extensions/python/ExecutePythonProcessor.h b/extensions/python/ExecutePythonProcessor.h index a4c1a66b84..7c1575924a 100644 --- a/extensions/python/ExecutePythonProcessor.h +++ b/extensions/python/ExecutePythonProcessor.h @@ -81,7 +81,7 @@ class ExecutePythonProcessor : public core::ProcessorImpl { } void addProperty(const std::string &name, const std::string &description, const std::optional &defaultvalue, bool required, bool el, bool sensitive, - const std::optional& property_type_code, gsl::span allowable_values, const std::optional& controller_service_type_name); + const std::optional& property_type_code, std::span allowable_values, const std::optional& controller_service_type_name); std::vector getPythonProperties() const { std::lock_guard lock(python_properties_mutex_); diff --git a/extensions/python/PythonProcessor.cpp b/extensions/python/PythonProcessor.cpp index 282a8cf9fa..0691273cad 100644 --- a/extensions/python/PythonProcessor.cpp +++ b/extensions/python/PythonProcessor.cpp @@ -44,7 +44,7 @@ void PythonProcessor::setVersion(const std::string& version) { } void PythonProcessor::addProperty(const std::string& name, const std::string& description, const std::optional& defaultvalue, bool required, bool el, bool sensitive, - const std::optional& property_type_code, gsl::span allowable_values, const std::optional& controller_service_type_name) { + const std::optional& property_type_code, std::span allowable_values, const std::optional& controller_service_type_name) { processor_->addProperty(name, description, defaultvalue, required, el, sensitive, property_type_code, allowable_values, controller_service_type_name); } diff --git a/extensions/python/PythonProcessor.h b/extensions/python/PythonProcessor.h index 2f048863f3..b72fa97d61 100644 --- a/extensions/python/PythonProcessor.h +++ b/extensions/python/PythonProcessor.h @@ -45,7 +45,7 @@ class PythonProcessor { void setVersion(const std::string& version); void addProperty(const std::string& name, const std::string& description, const std::optional& defaultvalue, bool required, bool el, bool sensitive, - const std::optional& property_type_code, gsl::span allowable_values, const std::optional& controller_service_type_name); + const std::optional& property_type_code, std::span allowable_values, const std::optional& controller_service_type_name); private: python::processors::ExecutePythonProcessor* processor_; diff --git a/extensions/python/types/PyOutputStream.cpp b/extensions/python/types/PyOutputStream.cpp index 5e845496c4..3f6d6298ad 100644 --- a/extensions/python/types/PyOutputStream.cpp +++ b/extensions/python/types/PyOutputStream.cpp @@ -72,7 +72,7 @@ PyObject* PyOutputStream::write(PyOutputStream* self, PyObject* args) { if (PyBytes_AsStringAndSize(bytes, &buffer, &length) == -1) { return nullptr; } - return object::returnReference(output_stream->write(gsl::make_span(buffer, length).as_span())); + return object::returnReference(output_stream->write(std::as_bytes(std::span(buffer, length)))); } PyTypeObject* PyOutputStream::typeObject() { diff --git a/extensions/rocksdb-repos/FlowFileLoader.cpp b/extensions/rocksdb-repos/FlowFileLoader.cpp index c434380716..2dfd5ca653 100644 --- a/extensions/rocksdb-repos/FlowFileLoader.cpp +++ b/extensions/rocksdb-repos/FlowFileLoader.cpp @@ -96,7 +96,7 @@ utils::TaskRescheduleInfo FlowFileLoader::loadImpl(const std::vector(), content_repo_, container_id); + std::as_bytes(std::span(serialized_items[idx])), content_repo_, container_id); if (!flow_file) { // corrupted flow file logger_->log_error("Failed to deserialize flow file \"{}\"", serialized_keys[idx]); diff --git a/extensions/rocksdb-repos/FlowFileRepository.cpp b/extensions/rocksdb-repos/FlowFileRepository.cpp index f955262a82..5283056828 100644 --- a/extensions/rocksdb-repos/FlowFileRepository.cpp +++ b/extensions/rocksdb-repos/FlowFileRepository.cpp @@ -104,7 +104,7 @@ void FlowFileRepository::deserializeFlowFilesWithNoContentClaim(minifi::internal } utils::Identifier container_id; - auto flow_file = FlowFileRecord::DeSerialize(gsl::make_span(values[i]).as_span(), content_repo_, container_id); + auto flow_file = FlowFileRecord::DeSerialize(std::as_bytes(std::span(values[i])), content_repo_, container_id); if (flow_file) { gsl_Expects(flow_file->getUUIDStr() == key_positions.at(i)->key); key_positions.at(i)->content = flow_file->getResourceClaim(); @@ -151,7 +151,8 @@ void FlowFileRepository::initialize_repository() { const auto it = opendb->NewIterator(options); for (it->SeekToFirst(); it->Valid(); it->Next()) { utils::Identifier container_id; - auto eventRead = FlowFileRecord::DeSerialize(gsl::make_span(it->value()).as_span(), content_repo_, container_id); + const auto slice = it->value(); + auto eventRead = FlowFileRecord::DeSerialize(std::span(reinterpret_cast(slice.data()), slice.size()), content_repo_, container_id); const std::string key = it->key().ToString(); if (!eventRead) { // failed to deserialize FlowFile, cannot clear claim diff --git a/extensions/rocksdb-repos/ProvenanceRepository.cpp b/extensions/rocksdb-repos/ProvenanceRepository.cpp index bd4ae8260e..88191c3a19 100644 --- a/extensions/rocksdb-repos/ProvenanceRepository.cpp +++ b/extensions/rocksdb-repos/ProvenanceRepository.cpp @@ -87,7 +87,8 @@ bool ProvenanceRepository::getElements(std::vector= requested_batch) break; auto eventRead = ProvenanceEventRecord::create(); - io::BufferStream stream(gsl::make_span(it->value()).as_span()); + const auto slice = it->value(); + io::BufferStream stream(std::as_bytes(std::span(reinterpret_cast(slice.data()), slice.size()))); if (eventRead->deserialize(stream)) { max_size++; records.push_back(eventRead); diff --git a/extensions/rocksdb-repos/tests/RepoTests.cpp b/extensions/rocksdb-repos/tests/RepoTests.cpp index 6f5272c4f5..f3a8fd76f8 100644 --- a/extensions/rocksdb-repos/tests/RepoTests.cpp +++ b/extensions/rocksdb-repos/tests/RepoTests.cpp @@ -667,7 +667,7 @@ TEST_CASE("Test getting content repository size properties", "[TestGettingReposi auto content_session = content_repo->createSession(); auto claim = content_session->create(); auto stream = content_session->write(claim); - stream->write(gsl::make_span(content).as_span()); + stream->write(std::as_bytes(std::span(content))); flow_file->setResourceClaim(claim); flow_file->setSize(stream->size()); flow_file->setOffset(0); diff --git a/extensions/sftp/client/SFTPClient.cpp b/extensions/sftp/client/SFTPClient.cpp index d590f74153..9629dbff00 100644 --- a/extensions/sftp/client/SFTPClient.cpp +++ b/extensions/sftp/client/SFTPClient.cpp @@ -382,11 +382,11 @@ bool SFTPClient::connect() { } } else { const char* fingerprint = libssh2_hostkey_hash(ssh_session_, LIBSSH2_HOSTKEY_HASH_SHA1); - const auto fingerprint_span = gsl::make_span(fingerprint, 20); + const auto fingerprint_span = std::span(fingerprint, 20); if (fingerprint == nullptr) { logger_->log_warn("Cannot get remote server fingerprint"); } else { - auto fingerprint_hex = utils::string::to_hex(fingerprint_span.as_span()); + auto fingerprint_hex = utils::string::to_hex(std::as_bytes(fingerprint_span)); std::stringstream fingerprint_hex_colon; for (size_t i = 0; i < 20; i++) { fingerprint_hex_colon << fingerprint_hex.substr(i * 2, 2); diff --git a/extensions/standard-processors/controllers/JsonRecordSetWriter.cpp b/extensions/standard-processors/controllers/JsonRecordSetWriter.cpp index c018da50ac..37143cc1ab 100644 --- a/extensions/standard-processors/controllers/JsonRecordSetWriter.cpp +++ b/extensions/standard-processors/controllers/JsonRecordSetWriter.cpp @@ -84,7 +84,8 @@ void JsonRecordSetWriter::writePerLine(const core::RecordSet& record_set, const rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); doc.Accept(writer); - write_result += gsl::narrow(stream->write(gsl::make_span(fmt::format("{}\n", buffer.GetString())).as_span())); + const auto line = fmt::format("{}\n", buffer.GetString()); + write_result += gsl::narrow(stream->write(std::as_bytes(std::span(line)))); } return io::IoResult::from(write_result); }); @@ -107,7 +108,8 @@ void JsonRecordSetWriter::writeAsArray(const core::RecordSet& record_set, const rapidjson::Writer writer(buffer); doc.Accept(writer); } - return io::IoResult::from(stream->write(gsl::make_span(fmt::format("{}", buffer.GetString())).as_span())); + auto output = fmt::format("{}", buffer.GetString()); + return io::IoResult::from(stream->write(std::as_bytes(std::span(output)))); }); } diff --git a/extensions/standard-processors/modbus/Error.h b/extensions/standard-processors/modbus/Error.h index 05a227cb28..c023a3dbdc 100644 --- a/extensions/standard-processors/modbus/Error.h +++ b/extensions/standard-processors/modbus/Error.h @@ -21,7 +21,7 @@ #include #include -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" namespace org::apache::nifi::minifi::modbus { diff --git a/extensions/standard-processors/processors/InvokeHTTP.cpp b/extensions/standard-processors/processors/InvokeHTTP.cpp index a089cba5ca..4716aa994e 100644 --- a/extensions/standard-processors/processors/InvokeHTTP.cpp +++ b/extensions/standard-processors/processors/InvokeHTTP.cpp @@ -345,7 +345,7 @@ void InvokeHTTP::onTriggerWithClient(core::ProcessContext& context, core::Proces if (!response_headers.empty()) { response_flow->addAttribute(STATUS_MESSAGE, utils::string::trim(response_headers.at(0))); } response_flow->addAttribute(REQUEST_URL, client.getURL()); response_flow->addAttribute(TRANSACTION_ID, transaction_id); - io::BufferStream stream(gsl::make_span(response_body).as_span()); + io::BufferStream stream(std::as_bytes(std::span(response_body))); // need an import from the data stream. session.importFrom(stream, response_flow); } else { diff --git a/extensions/standard-processors/tests/unit/ProcessorTests.cpp b/extensions/standard-processors/tests/unit/ProcessorTests.cpp index 0ff1e443ae..aa0e048ca5 100644 --- a/extensions/standard-processors/tests/unit/ProcessorTests.cpp +++ b/extensions/standard-processors/tests/unit/ProcessorTests.cpp @@ -445,7 +445,7 @@ TEST_CASE("Test Find file", "[getfileCreate3]") { for (auto entry : repo->getRepoMap()) { minifi::provenance::ProvenanceEventRecordImpl newRecord; - minifi::io::BufferStream stream(gsl::make_span(entry.second).as_span()); + minifi::io::BufferStream stream(std::as_bytes(std::span(entry.second))); newRecord.deserialize(stream); bool found = false; diff --git a/extensions/systemd/ConsumeJournald.cpp b/extensions/systemd/ConsumeJournald.cpp index ba636810b4..351f542ebf 100644 --- a/extensions/systemd/ConsumeJournald.cpp +++ b/extensions/systemd/ConsumeJournald.cpp @@ -106,10 +106,11 @@ void ConsumeJournald::onTrigger(core::ProcessContext& context, core::ProcessSess for (auto& msg: messages) { const auto flow_file = session.create(); - if (payload_format_ == systemd::PayloadFormat::Syslog) session.writeBuffer(flow_file, gsl::make_span(formatSyslogMessage(msg))); + const auto syslog_message = formatSyslogMessage(msg); + if (payload_format_ == systemd::PayloadFormat::Syslog) session.writeBuffer(flow_file, std::span(syslog_message)); for (auto& field: msg.fields) { if (field.name == "MESSAGE" && payload_format_ == systemd::PayloadFormat::Raw) { - session.writeBuffer(flow_file, gsl::make_span(field.value)); + session.writeBuffer(flow_file, std::span(field.value)); } else { flow_file->setAttribute(std::move(field.name), std::move(field.value)); } @@ -129,7 +130,7 @@ std::optional> ConsumeJournald::enumerateJournalEntry(libw gsl_Ensures(data_ptr && "if sd_journal_enumerate_data was successful, then data_ptr must be set"); gsl_Ensures(data_length > 0 && "if sd_journal_enumerate_data was successful, then data_length must be greater than zero"); const char* const data_str_ptr = reinterpret_cast(data_ptr); - return gsl::make_span(data_str_ptr, data_length); + return std::span(data_str_ptr, data_length); } std::optional ConsumeJournald::getNextField(libwrapper::Journal& journal) { diff --git a/extensions/systemd/tests/ConsumeJournaldTest.cpp b/extensions/systemd/tests/ConsumeJournaldTest.cpp index e6f96e0506..866caef75d 100644 --- a/extensions/systemd/tests/ConsumeJournaldTest.cpp +++ b/extensions/systemd/tests/ConsumeJournaldTest.cpp @@ -36,7 +36,6 @@ using systemd::JournalType; using systemd::ConsumeJournald; namespace { -namespace gsl = minifi::gsl; struct JournalEntry final { JournalEntry(const char* const identifier, const char* const message, const int pid = 0, std::vector extra_fields = {}, const char* const hostname = "test-pc") : fields{std::move(extra_fields)} diff --git a/extensions/windows-event-log/TailEventLog.cpp b/extensions/windows-event-log/TailEventLog.cpp index faa8db8334..6d6939b96c 100644 --- a/extensions/windows-event-log/TailEventLog.cpp +++ b/extensions/windows-event-log/TailEventLog.cpp @@ -91,7 +91,7 @@ void TailEventLog::onTrigger(core::ProcessContext& context, core::ProcessSession flowFile->addAttribute("event_time", getTimeStamp(event_record->TimeGenerated)); flowFile->addAttribute("event_type", typeToString(event_record->EventType)); - io::BufferStream stream(gsl::make_span(event_record + event_record->DataOffset, event_record->DataLength).as_span()); + io::BufferStream stream(std::as_bytes(std::span(event_record + event_record->DataOffset, event_record->DataLength))); // need an import from the data stream. session.importFrom(stream, flowFile); session.transfer(flowFile, Success); diff --git a/libminifi/include/io/AtomicEntryStream.h b/libminifi/include/io/AtomicEntryStream.h index eb30227e75..0dfe2e693e 100644 --- a/libminifi/include/io/AtomicEntryStream.h +++ b/libminifi/include/io/AtomicEntryStream.h @@ -114,7 +114,7 @@ template size_t AtomicEntryStream::write(const uint8_t *value, size_t size) { if (size == 0) return 0; if (!value || invalid_stream_) return STREAM_ERROR; - const auto out_span = gsl::make_span(value, size).as_span(); + const auto out_span = std::as_bytes(std::span(value, size)); std::lock_guard lock(entry_lock_); if (entry_->insert(key_, out_span)) { offset_ += size; diff --git a/libminifi/src/c2/C2Payload.cpp b/libminifi/src/c2/C2Payload.cpp index 6dfc8ad132..984fd9a17f 100644 --- a/libminifi/src/c2/C2Payload.cpp +++ b/libminifi/src/c2/C2Payload.cpp @@ -62,11 +62,11 @@ void C2Payload::addContent(C2ContentResponse &&content, bool collapsible) { } void C2Payload::setRawData(const std::string &data) { - setRawData(gsl::make_span(data).as_span()); + setRawData(std::as_bytes(std::span(data))); } void C2Payload::setRawData(const std::vector &data) { - setRawData(gsl::make_span(data).as_span()); + setRawData(std::as_bytes(std::span(data))); } void C2Payload::setRawData(std::span data) { diff --git a/libminifi/src/c2/protocols/RESTSender.cpp b/libminifi/src/c2/protocols/RESTSender.cpp index 157971abda..a6eb76a71c 100644 --- a/libminifi/src/c2/protocols/RESTSender.cpp +++ b/libminifi/src/c2/protocols/RESTSender.cpp @@ -192,7 +192,7 @@ C2Payload RESTSender::sendPayload(const std::string& url, const Direction direct } else { logger_->log_debug("Response code '{}' from '{}'", respCode, url); } - const auto response_body_bytes = gsl::make_span(client.getResponseBody()).as_span(); + const auto response_body_bytes = std::as_bytes(std::span(client.getResponseBody())); logger_->log_trace("Received response: \"{}\"", [&] { return utils::string::escapeUnprintableBytes(response_body_bytes); }); if (isOkay && !clientError && !serverError) { if (accepted_formats) { diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp index a86f80e673..bd59eeaaa3 100644 --- a/libminifi/src/core/ProcessSession.cpp +++ b/libminifi/src/core/ProcessSession.cpp @@ -498,7 +498,7 @@ void ProcessSessionImpl::importFrom(io::InputStream &stream, const std::shared_p const auto max_size = stream.size(); while (position < max_size) { const auto read_size = std::min(max_read, max_size - position); - const auto subbuffer = gsl::make_span(buffer).subspan(0, read_size); + const auto subbuffer = std::span(buffer).subspan(0, read_size); stream.read(subbuffer); content_stream->write(subbuffer); diff --git a/libminifi/src/sitetosite/CompressionOutputStream.cpp b/libminifi/src/sitetosite/CompressionOutputStream.cpp index d6631e55a9..e3ed210fc9 100644 --- a/libminifi/src/sitetosite/CompressionOutputStream.cpp +++ b/libminifi/src/sitetosite/CompressionOutputStream.cpp @@ -79,7 +79,7 @@ size_t CompressionOutputStream::compressAndWrite() { io::BufferStream buffer_stream; { io::ZlibCompressStream zlib_stream{gsl::make_not_null(&buffer_stream), io::ZlibCompressionFormat::ZLIB, Z_BEST_SPEED}; - const auto ret = zlib_stream.write(gsl::make_span(buffer_).subspan(0, buffer_offset_)); + const auto ret = zlib_stream.write(std::span(buffer_).subspan(0, buffer_offset_)); if (io::isError(ret)) { logger_->log_error("Failed to write data to zlib stream: {}", ret); return ret; diff --git a/libminifi/src/utils/ChecksumCalculator.cpp b/libminifi/src/utils/ChecksumCalculator.cpp index ae32e8ee42..f968c16221 100644 --- a/libminifi/src/utils/ChecksumCalculator.cpp +++ b/libminifi/src/utils/ChecksumCalculator.cpp @@ -86,7 +86,7 @@ std::string ChecksumCalculator::computeChecksum(const std::vector hash{}; crypto_hash_sha256_final(&state, hash.data()); - return string::to_hex(gsl::make_span(hash).as_span()); + return string::to_hex(std::as_bytes(std::span(hash))); } } // namespace org::apache::nifi::minifi::utils diff --git a/libminifi/test/integration/HTTPClientTests.cpp b/libminifi/test/integration/HTTPClientTests.cpp index 05d309e6a1..27666641b2 100644 --- a/libminifi/test/integration/HTTPClientTests.cpp +++ b/libminifi/test/integration/HTTPClientTests.cpp @@ -24,7 +24,7 @@ #include "http/HTTPClient.h" #include "CivetServer.h" #include "integration/ConnectionCountingServer.h" -#include "magic_enum.hpp" +#include "magic_enum/magic_enum.hpp" #include "http/BaseHTTPClient.h" using namespace std::literals::chrono_literals; diff --git a/libminifi/test/libtest/unit/ContentRepositoryDependentTests.h b/libminifi/test/libtest/unit/ContentRepositoryDependentTests.h index d59b6d14dd..65d7b222e9 100644 --- a/libminifi/test/libtest/unit/ContentRepositoryDependentTests.h +++ b/libminifi/test/libtest/unit/ContentRepositoryDependentTests.h @@ -48,7 +48,7 @@ struct ReadUntilItCan { if (read_result == 0) return minifi::io::IoResult::from(bytes_read); bytes_read += read_result; - const auto char_view = gsl::make_span(buffer).subspan(0, read_result).as_span(); + const auto char_view = std::span(reinterpret_cast(buffer.data()), read_result); value_.append(std::begin(char_view), std::end(char_view)); } } diff --git a/libminifi/test/libtest/unit/ProvenanceTestHelper.h b/libminifi/test/libtest/unit/ProvenanceTestHelper.h index 6b6d3cbaea..0d0407a9cd 100644 --- a/libminifi/test/libtest/unit/ProvenanceTestHelper.h +++ b/libminifi/test/libtest/unit/ProvenanceTestHelper.h @@ -96,7 +96,7 @@ class TestRepositoryBase : public T_BaseRepository { break; } const auto eventRead = store.at(max_size); - org::apache::nifi::minifi::io::BufferStream stream(gsl::make_span(entry.second).template as_span()); + org::apache::nifi::minifi::io::BufferStream stream(std::as_bytes(std::span(entry.second))); eventRead->deserialize(stream); ++max_size; } diff --git a/libminifi/test/schema-tests/SchemaTests.cpp b/libminifi/test/schema-tests/SchemaTests.cpp index 5615d62a4f..6485d681a3 100644 --- a/libminifi/test/schema-tests/SchemaTests.cpp +++ b/libminifi/test/schema-tests/SchemaTests.cpp @@ -17,6 +17,7 @@ */ #include +#include #include "unit/TestBase.h" #include "unit/Catch.h" @@ -233,9 +234,11 @@ TEST_CASE("The JSON schema detects invalid values in the json flow") { std::unordered_map errors; extractExpectedErrors(config_json, "", errors); + std::unordered_set consumed_error_paths; ErrorHandler err_handler{[&] (const auto& err) { auto it = errors.find(err.path); if (it == errors.end()) { + if (consumed_error_paths.count(err.path) != 0) { return; } throw std::logic_error("Unexpected error in json flow at " + err.path + ": " + err.error); } if (!it->second.empty()) { @@ -244,6 +247,7 @@ TEST_CASE("The JSON schema detects invalid values in the json flow") { throw std::logic_error("Error in json flow at " + err.path + " does not match expected pattern, expected: '" + it->second + "', actual: " + err.error); } } + consumed_error_paths.insert(err.path); errors.erase(it); }}; validator.validate(config_json, err_handler); diff --git a/libminifi/test/unit/FlowFileQueueSwapTests.cpp b/libminifi/test/unit/FlowFileQueueSwapTests.cpp index 65868e131a..22b44228a2 100644 --- a/libminifi/test/unit/FlowFileQueueSwapTests.cpp +++ b/libminifi/test/unit/FlowFileQueueSwapTests.cpp @@ -72,7 +72,7 @@ class SwappingFlowFileTestRepo : public TestFlowRepository, public minifi::SwapM std::string value; Get(ff_id.id.to_string().c_str(), value); minifi::utils::Identifier container_id; - auto ff = minifi::FlowFileRecord::DeSerialize(gsl::make_span(value).as_span(), content_repo_, container_id); + auto ff = minifi::FlowFileRecord::DeSerialize(std::as_bytes(std::span(value)), content_repo_, container_id); ff->setPenaltyExpiration(ff_id.to_be_processed_after); load_task.result.push_back(std::move(ff)); } diff --git a/libminifi/test/unit/StringUtilsTests.cpp b/libminifi/test/unit/StringUtilsTests.cpp index 3c05068e68..40ddeb63aa 100644 --- a/libminifi/test/unit/StringUtilsTests.cpp +++ b/libminifi/test/unit/StringUtilsTests.cpp @@ -308,18 +308,15 @@ TEST_CASE("test string::testHexEncode", "[test hex encode]") { REQUIRE("" == string::to_hex("")); REQUIRE("6f" == string::to_hex("o")); REQUIRE("666f6f626172" == string::to_hex("foobar")); - REQUIRE("000102030405060708090a0b0c0d0e0f" == string::to_hex(gsl::make_span(std::vector{ + const auto test_vector = std::vector{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f}).as_span())); + 0x0c, 0x0d, 0x0e, 0x0f}; + REQUIRE("000102030405060708090a0b0c0d0e0f" == string::to_hex(std::as_bytes(std::span(test_vector)))); REQUIRE("6F" == string::to_hex("o", true /*uppercase*/)); REQUIRE("666F6F626172" == string::to_hex("foobar", true /*uppercase*/)); - REQUIRE("000102030405060708090A0B0C0D0E0F" == string::to_hex(gsl::make_span(std::vector{ - 0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f}).as_span(), true /*uppercase*/)); + REQUIRE("000102030405060708090A0B0C0D0E0F" == string::to_hex(std::as_bytes(std::span(test_vector)), true /*uppercase*/)); } TEST_CASE("test string::testHexDecode", "[test hex decode]") { diff --git a/minifi-api/common/include/minifi-cpp/utils/gsl.h b/minifi-api/common/include/minifi-cpp/utils/gsl.h index 9954eb357f..f0e37c191d 100644 --- a/minifi-api/common/include/minifi-cpp/utils/gsl.h +++ b/minifi-api/common/include/minifi-cpp/utils/gsl.h @@ -21,10 +21,10 @@ #include -namespace org::apache::nifi::minifi { - namespace gsl = ::gsl_lite; +namespace org::apache::nifi::minifi { + namespace utils { template diff --git a/thirdparty/grpc/fix-glob-missing-algorithm-include.patch b/thirdparty/grpc/fix-glob-missing-algorithm-include.patch new file mode 100644 index 0000000000..7aa7e30288 --- /dev/null +++ b/thirdparty/grpc/fix-glob-missing-algorithm-include.patch @@ -0,0 +1,12 @@ +diff --git a/src/core/util/glob.cc b/src/core/util/glob.cc +index 1b1c16e23d..555d595722 100644 +--- a/src/core/util/glob.cc ++++ b/src/core/util/glob.cc +@@ -12,6 +12,7 @@ + // See the License for the specific language governing permissions and + // limitations under the License. + ++#include + #include "absl/strings/string_view.h" + + namespace grpc_core { diff --git a/thirdparty/grpc/fix-memory-request-missing-string-include.patch b/thirdparty/grpc/fix-memory-request-missing-string-include.patch new file mode 100644 index 0000000000..ba68a608a8 --- /dev/null +++ b/thirdparty/grpc/fix-memory-request-missing-string-include.patch @@ -0,0 +1,12 @@ +diff --git a/include/grpc/event_engine/memory_request.h b/include/grpc/event_engine/memory_request.h +index 5c74bdb..abc1234 100644 +--- a/include/grpc/event_engine/memory_request.h ++++ b/include/grpc/event_engine/memory_request.h +@@ -17,6 +17,7 @@ + #include + #include + ++#include + #include "absl/strings/string_view.h" + + namespace grpc_event_engine { diff --git a/thirdparty/kubernetes-client-c/remove-findpackage.patch b/thirdparty/kubernetes-client-c/remove-findpackage.patch index 0ff60be893..3c1fde8ecc 100644 --- a/thirdparty/kubernetes-client-c/remove-findpackage.patch +++ b/thirdparty/kubernetes-client-c/remove-findpackage.patch @@ -1,12 +1,11 @@ diff --git a/kubernetes/PreTarget.cmake b/kubernetes/PreTarget.cmake -index 93ea00e..1e064b8 100644 +index 32c4faa6..23e185dc 100644 --- a/kubernetes/PreTarget.cmake +++ b/kubernetes/PreTarget.cmake -@@ -41,6 +41,3 @@ list(APPEND HDRS - websocket/kube_exec.h +@@ -44,5 +44,3 @@ list(APPEND HDRS include/generic.h include/utils.h) -- --find_package(libwebsockets CONFIG REQUIRED) + +-find_package(Libwebsockets CONFIG REQUIRED) -find_package(yaml CONFIG REQUIRED) \ No newline at end of file diff --git a/thirdparty/liblzma/liblzma.patch b/thirdparty/liblzma/liblzma.patch index 307a75975d..90fc4a0a71 100644 --- a/thirdparty/liblzma/liblzma.patch +++ b/thirdparty/liblzma/liblzma.patch @@ -1,12 +1,11 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index 59ecf010..c5d62b3e 100644 +index b0894e75..e9ae0d15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -1483,566 +1483,3 @@ function(my_install_man COMPONENT SRC_FILE LINK_NAMES) - endforeach() +@@ -1796,741 +1796,3 @@ function(my_install_man COMPONENT SRC_FILE LINK_NAMES) endif() endfunction() -- + - -############################################################################# -# libgnu (getopt_long) @@ -51,17 +50,14 @@ index 59ecf010..c5d62b3e 100644 - # the Autotools build (m4/getopt.m4). - target_compile_definitions(libgnu PUBLIC "__GETOPT_PREFIX=rpl_") - -- # Create a custom copy command to copy the getopt header to the build -- # directory and re-copy it if it is updated. (Gnulib does it this way -- # because it allows choosing which .in.h files to actually use in the -- # build. We need just getopt.h so this is a bit overcomplicated for +- # Copy the getopt header to the build directory and re-copy it +- # if it is updated. (Gnulib does it this way because it allows +- # choosing which .in.h files to actually use in the build. We +- # need just getopt.h so this is a bit overcomplicated for - # a single header file only.) -- add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/lib/getopt.h" -- COMMAND "${CMAKE_COMMAND}" -E copy -- "${CMAKE_CURRENT_SOURCE_DIR}/lib/getopt.in.h" -- "${CMAKE_CURRENT_BINARY_DIR}/lib/getopt.h" -- MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/lib/getopt.in.h" -- VERBATIM) +- configure_file("${CMAKE_CURRENT_SOURCE_DIR}/lib/getopt.in.h" +- "${CMAKE_CURRENT_BINARY_DIR}/lib/getopt.h" +- COPYONLY) - - target_sources(libgnu PRIVATE - lib/getopt1.c @@ -78,15 +74,136 @@ index 59ecf010..c5d62b3e 100644 - - -############################################################################# +-# Sandboxing for the command line tools +-############################################################################# +- +-# auto Use sandboxing if a supported method is available in the OS. +-# no Disable sandboxing. +-# capsicum Require Capsicum (FreeBSD >= 10.2) and fail if not found. +-# pledge Require pledge(2) (OpenBSD >= 5.9) and fail if not found. +-# landlock Require Landlock (Linux >= 5.13) and fail if not found. +-set(SUPPORTED_SANDBOX_METHODS auto no capsicum pledge landlock) +- +-set(XZ_SANDBOX auto CACHE STRING +- "Sandboxing method to use in 'xz', 'xzdec', and 'lzmadec'") +- +-set_property(CACHE XZ_SANDBOX PROPERTY STRINGS "${SUPPORTED_SANDBOX_METHODS}") +- +-if(NOT XZ_SANDBOX IN_LIST SUPPORTED_SANDBOX_METHODS) +- message(FATAL_ERROR "'${XZ_SANDBOX}' is not a supported " +- "sandboxing method") +-endif() +- +-# When autodetecting, the search order is fixed and we must not find +-# more than one method. +-if(XZ_SANDBOX STREQUAL "no") +- set(SANDBOX_FOUND ON) +-else() +- set(SANDBOX_FOUND OFF) +-endif() +- +-# Since xz and xzdec can both use sandboxing, the compile definition needed +-# to use the sandbox must be added to both targets. +-set(SANDBOX_COMPILE_DEFINITION OFF) +- +-# Sandboxing: Capsicum +-if(NOT SANDBOX_FOUND AND XZ_SANDBOX MATCHES "^auto$|^capsicum$") +- check_symbol_exists(cap_rights_limit sys/capsicum.h +- HAVE_CAP_RIGHTS_LIMIT) +- if(HAVE_CAP_RIGHTS_LIMIT) +- set(SANDBOX_COMPILE_DEFINITION "HAVE_CAP_RIGHTS_LIMIT") +- set(SANDBOX_FOUND ON) +- endif() +-endif() +- +-# Sandboxing: pledge(2) +-if(NOT SANDBOX_FOUND AND XZ_SANDBOX MATCHES "^auto$|^pledge$") +- check_symbol_exists(pledge unistd.h HAVE_PLEDGE) +- if(HAVE_PLEDGE) +- set(SANDBOX_COMPILE_DEFINITION "HAVE_PLEDGE") +- set(SANDBOX_FOUND ON) +- endif() +-endif() +- +-# Sandboxing: Landlock +-if(NOT SANDBOX_FOUND AND XZ_SANDBOX MATCHES "^auto$|^landlock$") +- # A compile check is done here because some systems have +- # linux/landlock.h, but do not have the syscalls defined +- # in order to actually use Linux Landlock. +- check_c_source_compiles(" +- #include +- #include +- #include +- +- int main(void) +- { +- (void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); +- (void)SYS_landlock_create_ruleset; +- (void)SYS_landlock_restrict_self; +- (void)LANDLOCK_CREATE_RULESET_VERSION; +- return 0; +- } +- " +- HAVE_LINUX_LANDLOCK) +- +- if(HAVE_LINUX_LANDLOCK) +- set(SANDBOX_COMPILE_DEFINITION "HAVE_LINUX_LANDLOCK") +- set(SANDBOX_FOUND ON) +- +- # Of our three sandbox methods, only Landlock is incompatible +- # with -fsanitize. FreeBSD 13.2 with Capsicum was tested with +- # -fsanitize=address,undefined and had no issues. OpenBSD (as +- # of version 7.4) has minimal support for process instrumentation. +- # OpenBSD does not distribute the additional libraries needed +- # (libasan, libubsan, etc.) with GCC or Clang needed for runtime +- # sanitization support and instead only support +- # -fsanitize-minimal-runtime for minimal undefined behavior +- # sanitization. This minimal support is compatible with our use +- # of the Pledge sandbox. So only Landlock will result in a +- # build that cannot compress or decompress a single file to +- # standard out. +- if(CMAKE_C_FLAGS MATCHES "-fsanitize=") +- message(SEND_ERROR +- "CMAKE_C_FLAGS or the environment variable CFLAGS " +- "contains '-fsanitize=' which is incompatible " +- "with Landlock sandboxing. Use -DXZ_SANDBOX=no " +- "as an argument to 'cmake' when using '-fsanitize'.") +- endif() +- endif() +-endif() +- +-if(NOT SANDBOX_FOUND AND NOT XZ_SANDBOX MATCHES "^auto$|^no$") +- message(SEND_ERROR "XZ_SANDBOX=${XZ_SANDBOX} was used but " +- "support for the sandboxing method wasn't found.") +-endif() +- +- +-############################################################################# -# xzdec and lzmadec -############################################################################# - --if(HAVE_DECODERS AND (NOT MSVC OR MSVC_VERSION GREATER_EQUAL 1900)) -- foreach(XZDEC xzdec lzmadec) +-option(XZ_TOOL_XZDEC "Build and install the xzdec command line tool" ON) +-option(XZ_TOOL_LZMADEC "Build and install the lzmadec command line tool" ON) +- +-if(HAVE_DECODERS) +- set(XZDEC_TOOLS) +- +- if(XZ_TOOL_XZDEC) +- list(APPEND XZDEC_TOOLS xzdec) +- endif() +- +- if(XZ_TOOL_LZMADEC) +- list(APPEND XZDEC_TOOLS lzmadec) +- endif() +- +- foreach(XZDEC ${XZDEC_TOOLS}) - add_executable("${XZDEC}" +- src/common/my_landlock.h - src/common/sysdefs.h - src/common/tuklib_common.h - src/common/tuklib_config.h +- src/common/tuklib_mbstr_nonprint.c +- src/common/tuklib_mbstr_nonprint.h - src/common/tuklib_exit.c - src/common/tuklib_exit.h - src/common/tuklib_gettext.h @@ -102,34 +219,46 @@ index 59ecf010..c5d62b3e 100644 - - target_link_libraries("${XZDEC}" PRIVATE liblzma libgnu) - -- if(WIN32) +- if(WIN32 OR CYGWIN) - # Add the Windows resource file for xzdec.exe or lzmadec.exe. -- target_sources("${XZDEC}" PRIVATE src/xzdec/xzdec_w32res.rc) -- set_target_properties("${XZDEC}" PROPERTIES -- LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/common/common_w32res.rc" +- target_sources("${XZDEC}" PRIVATE "src/xzdec/${XZDEC}_w32res.rc") +- set_source_files_properties( +- "src/xzdec/${XZDEC}_w32res.rc" PROPERTIES +- OBJECT_DEPENDS "${W32RES_DEPENDENCIES}" - ) - endif() - - if(SANDBOX_COMPILE_DEFINITION) - target_compile_definitions("${XZDEC}" PRIVATE -- "${SANDBOX_COMPILE_DEFINITION}") +- "${SANDBOX_COMPILE_DEFINITION}") - endif() - - tuklib_progname("${XZDEC}") +- tuklib_mbstr("${XZDEC}") - - install(TARGETS "${XZDEC}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - COMPONENT "${XZDEC}_Runtime") - endforeach() - -- # This is the only build-time difference with lzmadec. -- target_compile_definitions(lzmadec PRIVATE "LZMADEC") +- if(XZ_TOOL_LZMADEC) +- # This is the only build-time difference with lzmadec. +- target_compile_definitions(lzmadec PRIVATE "LZMADEC") +- endif() - -- if(UNIX) +- if(UNIX AND XZ_TOOL_XZDEC) - # NOTE: This puts the lzmadec.1 symlinks into xzdec_Documentation. - # This isn't great but doing them separately with translated - # man pages would require extra code. So this has to suffice for now. -- my_install_man(xzdec_Documentation src/xzdec/xzdec.1 lzmadec) +- # +- # Also, if xzdec is disabled but lzmadec isn't, then the man page +- # isn't installed at all. It could be done but it's not a typical +- # situation so let's keep this simpler. +- if(XZ_TOOL_LZMADEC) +- my_install_man(xzdec_Documentation src/xzdec/xzdec.1 lzmadec) +- else() +- my_install_man(xzdec_Documentation src/xzdec/xzdec.1 "") +- endif() - endif() -endif() - @@ -138,11 +267,19 @@ index 59ecf010..c5d62b3e 100644 -# lzmainfo -############################################################################# - --if(HAVE_DECODERS AND (NOT MSVC OR MSVC_VERSION GREATER_EQUAL 1900)) +-option(XZ_TOOL_LZMAINFO "Build and install the lzmainfo command line tool" ON) +- +-if(XZ_TOOL_LZMAINFO AND HAVE_DECODERS) - add_executable(lzmainfo - src/common/sysdefs.h - src/common/tuklib_common.h - src/common/tuklib_config.h +- src/common/tuklib_mbstr.h +- src/common/tuklib_mbstr_nonprint.c +- src/common/tuklib_mbstr_nonprint.h +- src/common/tuklib_mbstr_width.c +- src/common/tuklib_mbstr_wrap.c +- src/common/tuklib_mbstr_wrap.h - src/common/tuklib_exit.c - src/common/tuklib_exit.h - src/common/tuklib_gettext.h @@ -158,19 +295,20 @@ index 59ecf010..c5d62b3e 100644 - - target_link_libraries(lzmainfo PRIVATE liblzma libgnu) - -- if(WIN32) +- if(WIN32 OR CYGWIN) - # Add the Windows resource file for lzmainfo.exe. - target_sources(lzmainfo PRIVATE src/lzmainfo/lzmainfo_w32res.rc) -- set_target_properties(lzmainfo PROPERTIES -- LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/common/common_w32res.rc" +- set_source_files_properties(src/lzmainfo/lzmainfo_w32res.rc PROPERTIES +- OBJECT_DEPENDS "${W32RES_DEPENDENCIES}" - ) - endif() - - tuklib_progname(lzmainfo) +- tuklib_mbstr(lzmainfo) - - # NOTE: The translations are in the "xz" domain and the .mo files are - # installed as part of the "xz" target. -- if(ENABLE_NLS) +- if(XZ_NLS) - target_link_libraries(lzmainfo PRIVATE Intl::Intl) - - target_compile_definitions(lzmainfo PRIVATE @@ -194,12 +332,17 @@ index 59ecf010..c5d62b3e 100644 -# xz -############################################################################# - --if(NOT MSVC OR MSVC_VERSION GREATER_EQUAL 1900) +-option(XZ_TOOL_XZ "Build and install the xz command line tool" ON) +- +-if(XZ_TOOL_XZ) - add_executable(xz +- src/common/my_landlock.h - src/common/mythread.h - src/common/sysdefs.h - src/common/tuklib_common.h - src/common/tuklib_config.h +- src/common/tuklib_mbstr_nonprint.c +- src/common/tuklib_mbstr_nonprint.h - src/common/tuklib_exit.c - src/common/tuklib_exit.h - src/common/tuklib_gettext.h @@ -207,6 +350,8 @@ index 59ecf010..c5d62b3e 100644 - src/common/tuklib_mbstr.h - src/common/tuklib_mbstr_fw.c - src/common/tuklib_mbstr_width.c +- src/common/tuklib_mbstr_wrap.c +- src/common/tuklib_mbstr_wrap.h - src/common/tuklib_open_stdxxx.c - src/common/tuklib_open_stdxxx.h - src/common/tuklib_progname.c @@ -252,13 +397,28 @@ index 59ecf010..c5d62b3e 100644 - - target_link_libraries(xz PRIVATE liblzma libgnu) - -- target_compile_definitions(xz PRIVATE ASSUME_RAM=128) +- if(USE_POSIX_THREADS) +- # src/xz/signals.c uses mythread_sigmask() which with POSIX +- # threads calls pthread_sigmask(). Thus, we need the threading +- # library as a dependency for xz. The liblzma target links against +- # Threads::Threads PRIVATEly, thus that won't provide the pthreads +- # symbols for xz. +- # +- # NOTE: The build may work without this if the symbol is in libc +- # but it is mandatory to have this here to keep it working with +- # all pthread implementations. +- target_link_libraries(xz PRIVATE Threads::Threads) +- endif() - -- if(WIN32) +- set(XZ_ASSUME_RAM "128" CACHE STRING "Assume that the system has \ +-this many MiB of RAM if xz cannot determine the amount at runtime") +- target_compile_definitions(xz PRIVATE "ASSUME_RAM=${XZ_ASSUME_RAM}") +- +- if(WIN32 OR CYGWIN) - # Add the Windows resource file for xz.exe. - target_sources(xz PRIVATE src/xz/xz_w32res.rc) -- set_target_properties(xz PROPERTIES -- LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/common/common_w32res.rc" +- set_source_files_properties(src/xz/xz_w32res.rc PROPERTIES +- OBJECT_DEPENDS "${W32RES_DEPENDENCIES}" - ) - endif() - @@ -269,8 +429,13 @@ index 59ecf010..c5d62b3e 100644 - tuklib_progname(xz) - tuklib_mbstr(xz) - -- check_symbol_exists(optreset getopt.h HAVE_OPTRESET) -- tuklib_add_definition_if(xz HAVE_OPTRESET) +- if(HAVE_GETOPT_LONG) +- check_symbol_exists(optreset getopt.h HAVE_OPTRESET) +- tuklib_add_definition_if(xz HAVE_OPTRESET) +- endif() +- +- check_symbol_exists(getrlimit sys/resource.h HAVE_GETRLIMIT) +- tuklib_add_definition_if(xz HAVE_GETRLIMIT) - - check_symbol_exists(posix_fadvise fcntl.h HAVE_POSIX_FADVISE) - tuklib_add_definition_if(xz HAVE_POSIX_FADVISE) @@ -324,7 +489,7 @@ index 59ecf010..c5d62b3e 100644 - endif() - endif() - -- if(ENABLE_NLS) +- if(XZ_NLS) - target_link_libraries(xz PRIVATE Intl::Intl) - - target_compile_definitions(xz PRIVATE @@ -335,37 +500,27 @@ index 59ecf010..c5d62b3e 100644 - - file(STRINGS po/LINGUAS LINGUAS) - -- # Where to find .gmo files. If msgfmt is available, the .po files -- # will be converted as part of the build. Otherwise we will use -- # the pre-generated .gmo files which are included in XZ Utils -- # tarballs by Autotools. -- set(GMO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/po") -- -- if(GETTEXT_FOUND) -- # NOTE: gettext_process_po_files' INSTALL_DESTINATION is -- # incompatible with how Autotools requires the .po files to -- # be named. CMake would require each .po file to be named with -- # the translation domain and thus each .po file would need its -- # own language-specific directory (like "po/fi/xz.po"). On top -- # of this, INSTALL_DESTINATION doesn't allow specifying COMPONENT -- # and thus the .mo files go into "Unspecified" component. So we -- # can use gettext_process_po_files to convert the .po files but -- # installation needs to be done with our own code. -- # -- # Also, the .gmo files will go to root of the build directory -- # instead of neatly into a subdirectory. This is hardcoded in -- # CMake's FindGettext.cmake. -- foreach(LANG IN LISTS LINGUAS) -- gettext_process_po_files("${LANG}" ALL -- PO_FILES "${CMAKE_CURRENT_SOURCE_DIR}/po/${LANG}.po") -- endforeach() -- -- set(GMO_DIR "${CMAKE_CURRENT_BINARY_DIR}") -- endif() +- # NOTE: gettext_process_po_files' INSTALL_DESTINATION is +- # incompatible with how Autotools requires the .po files to +- # be named. CMake would require each .po file to be named with +- # the translation domain and thus each .po file would need its +- # own language-specific directory (like "po/fi/xz.po"). On top +- # of this, INSTALL_DESTINATION doesn't allow specifying COMPONENT +- # and thus the .mo files go into "Unspecified" component. So we +- # can use gettext_process_po_files to convert the .po files but +- # installation needs to be done with our own code. +- # +- # Also, the .gmo files will go to root of the build directory +- # instead of neatly into a subdirectory. This is hardcoded in +- # CMake's FindGettext.cmake. +- foreach(LANG IN LISTS LINGUAS) +- gettext_process_po_files("${LANG}" ALL +- PO_FILES "${CMAKE_CURRENT_SOURCE_DIR}/po/${LANG}.po") +- endforeach() - - foreach(LANG IN LISTS LINGUAS) - install( -- FILES "${GMO_DIR}/${LANG}.gmo" +- FILES "${CMAKE_CURRENT_BINARY_DIR}/${LANG}.gmo" - DESTINATION "${CMAKE_INSTALL_LOCALEDIR}/${LANG}/LC_MESSAGES" - RENAME "${TRANSLATION_DOMAIN}.mo" - COMPONENT xz_Runtime) @@ -394,16 +549,17 @@ index 59ecf010..c5d62b3e 100644 - COMPONENT xz_Runtime) - - if(UNIX) -- option(CREATE_XZ_SYMLINKS "Create unxz and xzcat symlinks" ON) -- option(CREATE_LZMA_SYMLINKS "Create lzma, unlzma, and lzcat symlinks" +- option(XZ_TOOL_SYMLINKS "Create unxz and xzcat symlinks" ON) +- option(XZ_TOOL_SYMLINKS_LZMA +- "Create 'lzma' and other symlinks for LZMA Utils compatibility" - ON) - set(XZ_LINKS) - -- if(CREATE_XZ_SYMLINKS) +- if(XZ_TOOL_SYMLINKS) - list(APPEND XZ_LINKS "unxz" "xzcat") - endif() - -- if(CREATE_LZMA_SYMLINKS) +- if(XZ_TOOL_SYMLINKS_LZMA) - list(APPEND XZ_LINKS "lzma" "unlzma" "lzcat") - endif() - @@ -428,7 +584,17 @@ index 59ecf010..c5d62b3e 100644 -# Scripts -############################################################################# - +-set(ENABLE_SCRIPTS OFF) +- -if(UNIX) +- # NOTE: These depend on the xz tool and decoder support. +- option(XZ_TOOL_SCRIPTS "Install the scripts \ +-xzdiff, xzgrep, xzmore, xzless, and their symlinks" ON) +- +- if(XZ_TOOL_SCRIPTS AND XZ_TOOL_XZ AND HAVE_DECODERS) +- set(ENABLE_SCRIPTS ON) +- endif() +- - # NOTE: This isn't as sophisticated as in the Autotools build which - # uses posix-shell.m4 but hopefully this doesn't need to be either. - # CMake likely won't be used on as many (old) obscure systems as the @@ -439,70 +605,76 @@ index 59ecf010..c5d62b3e 100644 - set(POSIX_SHELL_DEFAULT "/bin/sh") - endif() - -- set(POSIX_SHELL "${POSIX_SHELL_DEFAULT}" CACHE STRING +- set(XZ_POSIX_SHELL "${POSIX_SHELL_DEFAULT}" CACHE STRING - "Shell to use for scripts (xzgrep and others)") - -- # Guess the extra path to add from POSIX_SHELL. Autotools-based build -- # has a separate option --enable-path-for-scripts=PREFIX but this is -- # enough for Solaris. -- set(enable_path_for_scripts) -- get_filename_component(POSIX_SHELL_DIR "${POSIX_SHELL}" DIRECTORY) +- if(ENABLE_SCRIPTS) +- # Guess the extra path to add from XZ_POSIX_SHELL. Autotools-based +- # build has a separate option --enable-path-for-scripts=PREFIX but +- # this is enough for Solaris. +- set(enable_path_for_scripts) +- get_filename_component(POSIX_SHELL_DIR "${XZ_POSIX_SHELL}" DIRECTORY) - -- if(NOT POSIX_SHELL_DIR STREQUAL "/bin" AND -- NOT POSIX_SHELL_DIR STREQUAL "/usr/bin") -- set(enable_path_for_scripts "PATH=${POSIX_SHELL_DIR}:\$PATH") -- endif() +- if(NOT POSIX_SHELL_DIR MATCHES "^/bin$|^/usr/bin$") +- set(enable_path_for_scripts "PATH=${POSIX_SHELL_DIR}:\$PATH") +- endif() - -- set(XZDIFF_LINKS xzcmp) -- set(XZGREP_LINKS xzegrep xzfgrep) -- set(XZMORE_LINKS) -- set(XZLESS_LINKS) +- set(XZDIFF_LINKS xzcmp) +- set(XZGREP_LINKS xzegrep xzfgrep) +- set(XZMORE_LINKS) +- set(XZLESS_LINKS) - -- if(CREATE_LZMA_SYMLINKS) -- list(APPEND XZDIFF_LINKS lzdiff lzcmp) -- list(APPEND XZGREP_LINKS lzgrep lzegrep lzfgrep) -- list(APPEND XZMORE_LINKS lzmore) -- list(APPEND XZLESS_LINKS lzless) -- endif() +- if(XZ_TOOL_SYMLINKS_LZMA) +- list(APPEND XZDIFF_LINKS lzdiff lzcmp) +- list(APPEND XZGREP_LINKS lzgrep lzegrep lzfgrep) +- list(APPEND XZMORE_LINKS lzmore) +- list(APPEND XZLESS_LINKS lzless) +- endif() - -- set(xz "xz") +- set(xz "xz") +- set(POSIX_SHELL "${XZ_POSIX_SHELL}") - -- foreach(S xzdiff xzgrep xzmore xzless) -- configure_file("src/scripts/${S}.in" "${S}" -- @ONLY -- NEWLINE_STYLE LF) +- foreach(S xzdiff xzgrep xzmore xzless) +- configure_file("src/scripts/${S}.in" "${S}" +- @ONLY +- NEWLINE_STYLE LF +- FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE +- GROUP_READ GROUP_EXECUTE +- WORLD_READ WORLD_EXECUTE) - -- install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/${S}" -- DESTINATION "${CMAKE_INSTALL_BINDIR}" -- COMPONENT scripts_Runtime) -- endforeach() +- install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/${S}" +- DESTINATION "${CMAKE_INSTALL_BINDIR}" +- COMPONENT scripts_Runtime) +- endforeach() +- +- unset(xz) +- unset(POSIX_SHELL) +- unset(enable_path_for_scripts) - -- # file(CHMOD ...) would need CMake 3.19 so use execute_process instead. -- # Using +x is fine even if umask was 077. If execute bit is set at all -- # then "make install" will set it for group and other access bits too. -- execute_process(COMMAND chmod +x xzdiff xzgrep xzmore xzless -- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") +- my_install_symlinks(scripts_Runtime "${CMAKE_INSTALL_BINDIR}" +- xzdiff "" "${XZDIFF_LINKS}") - -- unset(xz) -- unset(POSIX_SHELL) -- unset(enable_path_for_scripts) +- my_install_symlinks(scripts_Runtime "${CMAKE_INSTALL_BINDIR}" +- xzgrep "" "${XZGREP_LINKS}") - -- my_install_symlinks(scripts_Runtime "${CMAKE_INSTALL_BINDIR}" xzdiff "" -- "${XZDIFF_LINKS}") +- my_install_symlinks(scripts_Runtime "${CMAKE_INSTALL_BINDIR}" +- xzmore "" "${XZMORE_LINKS}") - -- my_install_symlinks(scripts_Runtime "${CMAKE_INSTALL_BINDIR}" xzgrep "" -- "${XZGREP_LINKS}") +- my_install_symlinks(scripts_Runtime "${CMAKE_INSTALL_BINDIR}" +- xzless "" "${XZLESS_LINKS}") - -- my_install_symlinks(scripts_Runtime "${CMAKE_INSTALL_BINDIR}" xzmore "" -- "${XZMORE_LINKS}") +- my_install_man(scripts_Documentation +- src/scripts/xzdiff.1 "${XZDIFF_LINKS}") - -- my_install_symlinks(scripts_Runtime "${CMAKE_INSTALL_BINDIR}" xzless "" -- "${XZLESS_LINKS}") +- my_install_man(scripts_Documentation +- src/scripts/xzgrep.1 "${XZGREP_LINKS}") - -- my_install_man(scripts_Documentation src/scripts/xzdiff.1 "${XZDIFF_LINKS}") -- my_install_man(scripts_Documentation src/scripts/xzgrep.1 "${XZGREP_LINKS}") -- my_install_man(scripts_Documentation src/scripts/xzmore.1 "${XZMORE_LINKS}") -- my_install_man(scripts_Documentation src/scripts/xzless.1 "${XZLESS_LINKS}") +- my_install_man(scripts_Documentation +- src/scripts/xzmore.1 "${XZMORE_LINKS}") +- +- my_install_man(scripts_Documentation +- src/scripts/xzless.1 "${XZLESS_LINKS}") +- endif() -endif() - - @@ -511,9 +683,9 @@ index 59ecf010..c5d62b3e 100644 -############################################################################# - -if(UNIX) -- option(ENABLE_DOXYGEN "Use Doxygen to generate liblzma API docs" OFF) +- option(XZ_DOXYGEN "Use Doxygen to generate liblzma API docs" OFF) - -- if (ENABLE_DOXYGEN) +- if (XZ_DOXYGEN) - file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/doc") - - add_custom_command( @@ -539,27 +711,30 @@ index 59ecf010..c5d62b3e 100644 - endif() -endif() - --install(DIRECTORY doc/examples -- DESTINATION "${CMAKE_INSTALL_DOCDIR}" -- COMPONENT liblzma_Documentation) -- --# GPLv2 applies to the scripts. If GNU getopt_long is used then --# LGPLv2.1 applies to the command line tools but, using the --# section 3 of LGPLv2.1, GNU getopt_long can be handled as GPLv2 too. --# Thus GPLv2 should be enough here. --install(FILES AUTHORS -- COPYING -- COPYING.0BSD -- COPYING.GPLv2 -- NEWS -- README -- THANKS -- doc/faq.txt -- doc/history.txt -- doc/lzma-file-format.txt -- doc/xz-file-format.txt -- DESTINATION "${CMAKE_INSTALL_DOCDIR}" -- COMPONENT Documentation) +-option(XZ_DOC "Install basic documentation, examples, and license files" ON) +-if(XZ_DOC) +- install(DIRECTORY doc/examples +- DESTINATION "${CMAKE_INSTALL_DOCDIR}" +- COMPONENT liblzma_Documentation) +- +- # GPLv2 applies to the scripts. If GNU getopt_long is used then +- # LGPLv2.1 applies to the command line tools but, using the +- # section 3 of LGPLv2.1, GNU getopt_long can be handled as GPLv2 too. +- # Thus GPLv2 should be enough here. +- install(FILES AUTHORS +- COPYING +- COPYING.0BSD +- COPYING.GPLv2 +- NEWS +- README +- THANKS +- doc/faq.txt +- doc/history.txt +- doc/lzma-file-format.txt +- doc/xz-file-format.txt +- DESTINATION "${CMAKE_INSTALL_DOCDIR}" +- COMPONENT Documentation) +-endif() - - -############################################################################# diff --git a/thirdparty/libssh2/libssh2-CMAKE_MODULE_PATH.patch b/thirdparty/libssh2/libssh2-CMAKE_MODULE_PATH.patch index c31795e295..35e38a6d5e 100644 --- a/thirdparty/libssh2/libssh2-CMAKE_MODULE_PATH.patch +++ b/thirdparty/libssh2/libssh2-CMAKE_MODULE_PATH.patch @@ -1,13 +1,13 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index ae55942..a49d808 100644 +index 6b51ac64..8720c375 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -35,7 +35,7 @@ +@@ -39,7 +39,7 @@ + cmake_minimum_required(VERSION 3.7) + message(STATUS "Using CMake version ${CMAKE_VERSION}") - cmake_minimum_required(VERSION 2.8.11) - --set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +-set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) - project(libssh2 C) - set(PROJECT_URL "https://www.libssh2.org/") + include(CheckFunctionExists) + include(CheckSymbolExists) diff --git a/thirdparty/libwebsockets/fix-include-dirs.patch b/thirdparty/libwebsockets/fix-include-dirs.patch index c640c5eed4..1780f24771 100644 --- a/thirdparty/libwebsockets/fix-include-dirs.patch +++ b/thirdparty/libwebsockets/fix-include-dirs.patch @@ -1,19 +1,19 @@ diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt -index c55c6198..5e401726 100644 +index bf4d7f3af..aefbdc421 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt -@@ -170,7 +170,7 @@ if (LWS_WITH_STATIC) +@@ -244,7 +244,7 @@ if (LWS_WITH_STATIC) ) - target_include_directories(websockets PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) + target_include_directories(websockets PRIVATE ${LWS_LIB_BUILD_INC_PATHS} ${LWS_LIB_BUILD_INC_PATHS_TEMP} ${CMAKE_CURRENT_SOURCE_DIR}/../core) target_compile_definitions(websockets PRIVATE LWS_BUILDING_STATIC) - target_include_directories(websockets PUBLIC ${LWS_PUBLIC_INCLUDES}) + target_include_directories(websockets PUBLIC $) set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) if (WIN32) -@@ -198,7 +198,7 @@ if (LWS_WITH_SHARED) +@@ -272,7 +272,7 @@ if (LWS_WITH_SHARED) ) - target_include_directories(websockets_shared PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) + target_include_directories(websockets_shared PRIVATE ${LWS_LIB_BUILD_INC_PATHS} ${LWS_LIB_BUILD_INC_PATHS_TEMP} ${CMAKE_CURRENT_SOURCE_DIR}/../core) target_compile_definitions(websockets_shared PRIVATE LWS_BUILDING_SHARED) - target_include_directories(websockets_shared PUBLIC ${LWS_PUBLIC_INCLUDES}) + target_include_directories(websockets_shared PUBLIC $) diff --git a/thirdparty/libwebsockets/openssl3.patch b/thirdparty/libwebsockets/openssl3.patch index 48f5cea557..c0159f3b1f 100644 --- a/thirdparty/libwebsockets/openssl3.patch +++ b/thirdparty/libwebsockets/openssl3.patch @@ -1,23 +1,16 @@ diff --git a/lib/tls/CMakeLists.txt b/lib/tls/CMakeLists.txt -index fb9a75fe..84f30d57 100644 +index 13cb71493..c7607fd81 100644 --- a/lib/tls/CMakeLists.txt +++ b/lib/tls/CMakeLists.txt -@@ -318,58 +318,54 @@ if (NOT VARIA) +@@ -333,61 +333,55 @@ if (NOT VARIA) set(VARIA "") endif() -CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_set1_param LWS_HAVE_SSL_CTX_set1_param PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}SSL_set_info_callback LWS_HAVE_SSL_SET_INFO_CALLBACK PARENT_SCOPE) +- -CHECK_FUNCTION_EXISTS(${VARIA}X509_VERIFY_PARAM_set1_host LWS_HAVE_X509_VERIFY_PARAM_set1_host PARENT_SCOPE) --CHECK_SYMBOL_EXISTS(${VARIA}X509_VERIFY_PARAM_set1_host LWS_HAVE_X509_VERIFY_PARAM_set1_host_sym PARENT_SCOPE) -+set(LWS_HAVE_SSL_CTX_set1_param 1 CACHE BOOL x) -+set(LWS_HAVE_SSL_SET_INFO_CALLBACK 1 CACHE BOOL x) -+set(LWS_HAVE_X509_VERIFY_PARAM_set1_host 1 CACHE BOOL x) -+set(LWS_HAVE_X509_VERIFY_PARAM_set1_host_sym 1 CACHE BOOL x) - if (LWS_HAVE_X509_VERIFY_PARAM_set1_host_sym) - set(LWS_HAVE_X509_VERIFY_PARAM_set1_host 1 PARENT_SCOPE) - endif() - +- -CHECK_FUNCTION_EXISTS(${VARIA}RSA_set0_key LWS_HAVE_RSA_SET0_KEY PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}X509_get_key_usage LWS_HAVE_X509_get_key_usage PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_EVP_PKEY_new_raw_private_key LWS_HAVE_SSL_CTX_EVP_PKEY_new_raw_private_key PARENT_SCOPE) @@ -39,10 +32,16 @@ index fb9a75fe..84f30d57 100644 -CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_xts LWS_HAVE_EVP_aes_128_xts PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}RSA_verify_pss_mgf1 LWS_HAVE_RSA_verify_pss_mgf1 PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}HMAC_CTX_new LWS_HAVE_HMAC_CTX_new PARENT_SCOPE) --CHECK_SYMBOL_EXISTS(${VARIA}SSL_CTX_set_ciphersuites LWS_HAVE_SSL_CTX_set_ciphersuites PARENT_SCOPE) +-CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_set_ciphersuites LWS_HAVE_SSL_CTX_set_ciphersuites PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}EVP_PKEY_new_raw_private_key LWS_HAVE_EVP_PKEY_new_raw_private_key PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}SSL_SESSION_set_time LWS_HAVE_SSL_SESSION_set_time PARENT_SCOPE) --CHECK_SYMBOL_EXISTS(${VARIA}SSL_SESSION_up_ref LWS_HAVE_SSL_SESSION_up_ref PARENT_SCOPE) +-CHECK_FUNCTION_EXISTS(${VARIA}SSL_SESSION_up_ref LWS_HAVE_SSL_SESSION_up_ref PARENT_SCOPE) +-CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_set_keylog_callback LWS_HAVE_SSL_CTX_set_keylog_callback PARENT_SCOPE) ++set(LWS_HAVE_SSL_CTX_set1_param 1 CACHE BOOL x) ++set(LWS_HAVE_SSL_SET_INFO_CALLBACK 1 CACHE BOOL x) ++ ++set(LWS_HAVE_X509_VERIFY_PARAM_set1_host 1 CACHE BOOL x) ++ +set(LWS_HAVE_RSA_SET0_KEY 1 CACHE BOOL x) +set(LWS_HAVE_X509_get_key_usage 1 CACHE BOOL x) +set(LWS_HAVE_SSL_CTX_EVP_PKEY_new_raw_private_key 1 CACHE BOOL x) @@ -62,35 +61,42 @@ index fb9a75fe..84f30d57 100644 + + +set(LWS_HAVE_EVP_aes_128_xts 1 CACHE BOOL x) -+set(LWS_HAVE_RSA_verify_pss_mgf1 1 CACHE BOOL x) ++set(LWS_HAVE_RSA_verify_pss_mgf1 0 CACHE BOOL x) +set(LWS_HAVE_HMAC_CTX_new 1 CACHE BOOL x) +set(LWS_HAVE_SSL_CTX_set_ciphersuites 1 CACHE BOOL x) +set(LWS_HAVE_EVP_PKEY_new_raw_private_key 1 CACHE BOOL x) +set(LWS_HAVE_SSL_SESSION_set_time 1 CACHE BOOL x) +set(LWS_HAVE_SSL_SESSION_up_ref 1 CACHE BOOL x) ++set(LWS_HAVE_SSL_CTX_set_keylog_callback 1 CACHE BOOL x) # deprecated in openssl v3 -CHECK_FUNCTION_EXISTS(${VARIA}EC_KEY_new_by_curve_name LWS_HAVE_EC_KEY_new_by_curve_name PARENT_SCOPE) -+set(LWS_HAVE_EC_KEY_new_by_curve_name 0 CACHE BOOL x) ++set(LWS_HAVE_EC_KEY_new_by_curve_name 1 CACHE BOOL x) if (LWS_WITH_SSL AND NOT LWS_WITH_MBEDTLS) -- # we don't want to confuse what's in or out of the wrapper with -- # what's in an openssl also installed on the build host + # we don't want to confuse what's in or out of the wrapper with + # what's in an openssl also installed on the build host -CHECK_C_SOURCE_COMPILES("#include \nint main(void) { STACK_OF(X509) *c = NULL; SSL_CTX *ctx = NULL; return (int)SSL_CTX_get_extra_chain_certs_only(ctx, &c); }\n" LWS_HAVE_SSL_EXTRA_CHAIN_CERTS) -CHECK_C_SOURCE_COMPILES("#include \nint main(void) { EVP_MD_CTX *md_ctx = NULL; EVP_MD_CTX_free(md_ctx); return 0; }\n" LWS_HAVE_EVP_MD_CTX_free) -CHECK_C_SOURCE_COMPILES("#include \nint main(void) { OPENSSL_STACK *x = NULL; return !x; } \n" LWS_HAVE_OPENSSL_STACK) +-CHECK_C_SOURCE_COMPILES("#include \nint main(void) { SSL_CTX *ctx = NULL; return SSL_CTX_set_ecdh_auto(ctx, 1); }\n" LWS_HAVE_SSL_CTX_SET_ECDH_AUTO) +-CHECK_C_SOURCE_COMPILES("#include \nint main(void) { SSL *ssl = NULL; return (int)SSL_set_tlsext_host_name(ssl, \"hello\"); }\n" LWS_HAVE_SSL_set_tlsext_host_name) +- +-set(LWS_HAVE_SSL_set_tlsext_host_name ${LWS_HAVE_SSL_set_tlsext_host_name} PARENT_SCOPE) -set(LWS_HAVE_SSL_EXTRA_CHAIN_CERTS ${LWS_HAVE_SSL_EXTRA_CHAIN_CERTS} PARENT_SCOPE) -set(LWS_HAVE_EVP_MD_CTX_free ${LWS_HAVE_EVP_MD_CTX_free} PARENT_SCOPE) +-set(LWS_HAVE_SSL_CTX_SET_ECDH_AUTO ${LWS_HAVE_SSL_CTX_SET_ECDH_AUTO} PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}ECDSA_SIG_set0 LWS_HAVE_ECDSA_SIG_set0 PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}BN_bn2binpad LWS_HAVE_BN_bn2binpad PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_wrap LWS_HAVE_EVP_aes_128_wrap PARENT_SCOPE) -CHECK_FUNCTION_EXISTS(${VARIA}EC_POINT_get_affine_coordinates LWS_HAVE_EC_POINT_get_affine_coordinates PARENT_SCOPE) --CHECK_SYMBOL_EXISTS(${VARIA}SSL_CTX_load_verify_file LWS_HAVE_SSL_CTX_load_verify_file PARENT_SCOPE) --CHECK_SYMBOL_EXISTS(${VARIA}SSL_CTX_load_verify_dir LWS_HAVE_SSL_CTX_load_verify_dir PARENT_SCOPE) -+set(LWS_HAVE_OPENSSL_STACK 1 CACHE BOOL x) +-CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_load_verify_file LWS_HAVE_SSL_CTX_load_verify_file PARENT_SCOPE) +-CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_load_verify_dir LWS_HAVE_SSL_CTX_load_verify_dir PARENT_SCOPE) ++set(LWS_HAVE_SSL_set_tlsext_host_name 1 CACHE BOOL x) +set(LWS_HAVE_SSL_EXTRA_CHAIN_CERTS 1 CACHE BOOL x) +set(LWS_HAVE_EVP_MD_CTX_free 1 CACHE BOOL x) ++set(LWS_HAVE_SSL_CTX_SET_ECDH_AUTO 1 CACHE BOOL x) +set(LWS_HAVE_ECDSA_SIG_set0 1 CACHE BOOL x) +set(LWS_HAVE_BN_bn2binpad 1 CACHE BOOL x) +set(LWS_HAVE_EVP_aes_128_wrap 1 CACHE BOOL x) @@ -100,7 +106,7 @@ index fb9a75fe..84f30d57 100644 endif() if (LWS_WITH_MBEDTLS) -@@ -412,8 +408,8 @@ if (LWS_WITH_MBEDTLS) +@@ -431,8 +425,8 @@ if (LWS_WITH_MBEDTLS) CHECK_FUNCTION_EXISTS(mbedtls_internal_aes_encrypt LWS_HAVE_mbedtls_internal_aes_encrypt PARENT_SCOPE) # not on xenial 2.2 endif() else() @@ -111,8 +117,3 @@ index fb9a75fe..84f30d57 100644 endif() # Generate self-signed SSL certs for the test-server. -@@ -572,3 +568,4 @@ set(TEST_SERVER_SSL_KEY "${TEST_SERVER_SSL_KEY}" PARENT_SCOPE) - set(TEST_SERVER_SSL_CERT "${TEST_SERVER_SSL_CERT}" PARENT_SCOPE) - set(TEST_SERVER_DATA ${TEST_SERVER_DATA} PARENT_SCOPE) - -+ diff --git a/thirdparty/open62541/cflag_fix.patch b/thirdparty/open62541/cflag_fix.patch new file mode 100644 index 0000000000..8aebcf359d --- /dev/null +++ b/thirdparty/open62541/cflag_fix.patch @@ -0,0 +1,49 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 89e7d67ae..8a3c39600 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -588,24 +588,21 @@ endif() + # Compiler Settings # + ##################### + +-# Check if a C compiler flag is supported and add it (if supported) +-# Taken from https://stackoverflow.com/a/33266748 ++# Check if a C compiler flag is supported and collect it for later use with target_compile_options + include(CheckCCompilerFlag) + function(check_add_cc_flag CC_FLAG) +- string(FIND "${CMAKE_C_FLAGS}" "${CC_FLAG}" flag_already_set) +- if(flag_already_set EQUAL -1) ++ if(NOT "${CC_FLAG}" IN_LIST UA_C_FLAGS) + message(STATUS "Test CC flag ${CC_FLAG}") +- check_c_compiler_flag("${CC_FLAG}" flag_supported) +- if(flag_supported) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CC_FLAG}" CACHE INTERNAL "C Compiler Flags") ++ check_c_compiler_flag("${CC_FLAG}" _flag_supported) ++ if(_flag_supported) ++ set(UA_C_FLAGS ${UA_C_FLAGS} ${CC_FLAG} PARENT_SCOPE) + endif() +- unset(flag_supported CACHE) ++ unset(_flag_supported CACHE) + endif() + endfunction() + function(add_cc_flag CC_FLAG) +- string(FIND "${CMAKE_C_FLAGS}" "${CC_FLAG}" flag_already_set) +- if(flag_already_set EQUAL -1) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CC_FLAG}" CACHE INTERNAL "C Compiler Flags") ++ if(NOT "${CC_FLAG}" IN_LIST UA_C_FLAGS) ++ set(UA_C_FLAGS ${UA_C_FLAGS} ${CC_FLAG} PARENT_SCOPE) + endif() + endfunction() + +@@ -1438,6 +1435,11 @@ else() + endif() + add_library(open62541 $ $) + ++if(UA_C_FLAGS) ++ target_compile_options(open62541-object PRIVATE ${UA_C_FLAGS}) ++ target_compile_options(open62541-plugins PRIVATE ${UA_C_FLAGS}) ++endif() ++ + add_dependencies(open62541-object open62541-code-generation) + add_dependencies(open62541-plugins open62541-code-generation) + diff --git a/thirdparty/open62541/open62541.patch b/thirdparty/open62541/open62541.patch index 2a54f20e95..75fe9a1dd8 100644 --- a/thirdparty/open62541/open62541.patch +++ b/thirdparty/open62541/open62541.patch @@ -1,5 +1,5 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index e9baae1ec..954909854 100644 +index 89e7d67ae..3a09ed900 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ endif() @@ -11,15 +11,7 @@ index e9baae1ec..954909854 100644 find_package(Python3 REQUIRED) find_package(Git) -@@ -669,7 +669,6 @@ if((CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") AND - # Threading support - if(UA_MULTITHREADING GREATER_EQUAL 100 AND NOT WIN32) - check_add_cc_flag("-pthread") -- check_add_cc_flag("-ftls-model=initial-exec") # Enable thread-local variables in the .so shared object - endif() - - # Force 32bit build -@@ -691,17 +690,6 @@ if((CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") AND +@@ -717,17 +717,6 @@ if((CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") AND endif() endif() @@ -38,7 +30,7 @@ index e9baae1ec..954909854 100644 set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # cmake sets -rdynamic by default if(APPLE) diff --git a/arch/posix/eventloop_posix.h b/arch/posix/eventloop_posix.h -index a5f51383e..0d8b78418 100644 +index ce64f374a..c4b69668c 100644 --- a/arch/posix/eventloop_posix.h +++ b/arch/posix/eventloop_posix.h @@ -277,7 +277,9 @@ typedef int SOCKET; diff --git a/thirdparty/zstd/exclude_gcc_clang_compiler_options_from_windows.patch b/thirdparty/zstd/exclude_gcc_clang_compiler_options_from_windows.patch deleted file mode 100644 index c32f78f4f5..0000000000 --- a/thirdparty/zstd/exclude_gcc_clang_compiler_options_from_windows.patch +++ /dev/null @@ -1,37 +0,0 @@ -diff --git a/build/cmake/tests/CMakeLists.txt b/build/cmake/tests/CMakeLists.txt -index 8bba6ea6..ce84ed8c 100644 ---- a/build/cmake/tests/CMakeLists.txt -+++ b/build/cmake/tests/CMakeLists.txt -@@ -57,7 +57,9 @@ target_link_libraries(datagen libzstd_static) - # fullbench - # - add_executable(fullbench ${PROGRAMS_DIR}/datagen.c ${PROGRAMS_DIR}/util.c ${PROGRAMS_DIR}/timefn.c ${PROGRAMS_DIR}/benchfn.c ${PROGRAMS_DIR}/benchzstd.c ${TESTS_DIR}/fullbench.c) --set_property(TARGET fullbench APPEND PROPERTY COMPILE_OPTIONS "-Wno-deprecated-declarations") -+if (NOT WIN32) -+ set_property(TARGET fullbench APPEND PROPERTY COMPILE_OPTIONS "-Wno-deprecated-declarations") -+endif() - target_link_libraries(fullbench libzstd_static) - add_test(NAME fullbench COMMAND fullbench ${ZSTD_FULLBENCH_FLAGS}) - -@@ -65,7 +67,9 @@ add_test(NAME fullbench COMMAND fullbench ${ZSTD_FULLBENCH_FLAGS}) - # fuzzer - # - add_executable(fuzzer ${PROGRAMS_DIR}/datagen.c ${PROGRAMS_DIR}/util.c ${PROGRAMS_DIR}/timefn.c ${TESTS_DIR}/fuzzer.c) --set_property(TARGET fuzzer APPEND PROPERTY COMPILE_OPTIONS "-Wno-deprecated-declarations") -+if (NOT WIN32) -+ set_property(TARGET fuzzer APPEND PROPERTY COMPILE_OPTIONS "-Wno-deprecated-declarations") -+endif() - target_link_libraries(fuzzer libzstd_static) - AddTestFlagsOption(ZSTD_FUZZER_FLAGS "$ENV{FUZZERTEST} $ENV{FUZZER_FLAGS}" - "Semicolon-separated list of flags to pass to the fuzzer test (see `fuzzer -h` for usage)") -@@ -78,7 +82,9 @@ add_test(NAME fuzzer COMMAND fuzzer ${ZSTD_FUZZER_FLAGS}) - # zstreamtest - # - add_executable(zstreamtest ${PROGRAMS_DIR}/datagen.c ${PROGRAMS_DIR}/util.c ${PROGRAMS_DIR}/timefn.c ${TESTS_DIR}/seqgen.c ${TESTS_DIR}/zstreamtest.c) --set_property(TARGET zstreamtest APPEND PROPERTY COMPILE_OPTIONS "-Wno-deprecated-declarations") -+if (NOT WIN32) -+ set_property(TARGET zstreamtest APPEND PROPERTY COMPILE_OPTIONS "-Wno-deprecated-declarations") -+endif() - target_link_libraries(zstreamtest libzstd_static) - AddTestFlagsOption(ZSTD_ZSTREAM_FLAGS "$ENV{ZSTREAM_TESTTIME} $ENV{FUZZER_FLAGS}" - "Semicolon-separated list of flags to pass to the zstreamtest test (see `zstreamtest -h` for usage)")