From b018a67ead14f06ee61625e5ebb8fe52a0c4d10e Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Fri, 26 Apr 2024 14:45:19 +0300 Subject: [PATCH 1/8] Pull in all dependencies for macOS CI jobs. Instead of only pulling in a basic set. --- .github/workflows/build-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 1aa516716032ff..24c13150f34126 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -105,7 +105,7 @@ jobs: id: install-nd-dep if: needs.file-check.outputs.run == 'true' run: | - bash ./packaging/installer/install-required-packages.sh --dont-wait --non-interactive netdata + bash ./packaging/installer/install-required-packages.sh --dont-wait --non-interactive netdata-all - name: Build from source id: build-source if: needs.file-check.outputs.run == 'true' From 2a10d87f6690a43758d49be9cdfdab5dae8dc94f Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Fri, 26 Apr 2024 16:58:32 +0300 Subject: [PATCH 2/8] Switch to using imported target for OpenSSL in most cases. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6df570e7ef5a7..4163996ef31668 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -570,7 +570,7 @@ if(NOT OPENSSL_FOUND) endif() if(NOT MACOS) - pkg_check_modules(CRYPTO libcrypto) + pkg_check_modules(CRYPTO IMPORTED_TARGET libcrypto) endif() # From 4e680d7cbeeb2c18397a29293e4ec6310053afe2 Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Fri, 3 May 2024 09:41:01 -0400 Subject: [PATCH 3/8] Use imported libraries for OpenSSL in all cases. --- CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4163996ef31668..1d46525e66b59e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -547,9 +547,9 @@ endif() # openssl/crypto set(ENABLE_OPENSSL True) -pkg_check_modules(OPENSSL openssl) +pkg_check_modules(TLS IMPORTED_TARGET openssl) -if(NOT OPENSSL_FOUND) +if(NOT TARGET PkgConfig::OPENSSL) if(MACOS) execute_process(COMMAND brew --prefix --installed openssl @@ -561,9 +561,16 @@ if(NOT OPENSSL_FOUND) message(FATAL_ERROR "OpenSSL (or LibreSSL) is required for building Netdata, but could not be found.") endif() - set(OPENSSL_INCLUDE_DIRS "${BREW_OPENSSL_PREFIX}/include") - set(OPENSSL_CFLAGS_OTHER "") - set(OPENSSL_LDFLAGS "-L${BREW_OPENSSL_PREFIX}/lib;-lssl;-lcrypto") + add_library(PkgConfig::CRYPTO IMPORTED) + set_target_properties(PkgConfig::CRYPTO + IMPORTED_LOCATION ${BREW_OPENSSL_PREFIX}/lib/libcrypto.dylib + INTERFACE_INCLUDE_DIRECTORIES ${BREW_OPENSSL_PREFIX}/include) + + add_library(PkgConfig::TLS IMPORTED) + set_target_properties(PkgConfig::TLS + IMPORTED_LOCATION ${BREW_OPENSSL_PREFIX}/lib/libssl.dylib + INTERFACE_LINK_LIBRARIES PkgConfig::CRYPTO + INTERFACE_INCLUDE_DIRECTORIES ${BREW_OPENSSL_PREFIX}/include) else() message(FATAL_ERROR "OpenSSL (or LibreSSL) is required for building Netdata, but could not be found.") endif() @@ -1576,10 +1583,7 @@ if(ENABLE_H2O) ) target_compile_options(h2o PUBLIC -DH2O_USE_LIBUV=0) - - target_include_directories(h2o BEFORE PRIVATE ${OPENSSL_INCLUDE_DIRS}) - target_compile_options(h2o PRIVATE ${OPENSSL_CFLAGS_OTHER}) - target_link_libraries(h2o PRIVATE ${OPENSSL_LIBRARIES}) + target_link_libraries(h2o PRIVATE PkgConfig::OPENSSL) endif() # @@ -1713,14 +1717,10 @@ target_compile_options(libnetdata PUBLIC ${LIBUV_CFLAGS_OTHER}) target_link_libraries(libnetdata PUBLIC ${LIBUV_LDFLAGS}) # crypto -target_include_directories(libnetdata BEFORE PUBLIC ${CRYPTO_INCLUDE_DIRS}) -target_compile_options(libnetdata PUBLIC ${CRYPTO_CFLAGS_OTHER}) -target_link_libraries(libnetdata PUBLIC ${CRYPTO_LDFLAGS}) +target_link_libraries(libnetdata PUBLIC PkgConfig::CRYPTO) # openssl -target_include_directories(libnetdata BEFORE PUBLIC ${OPENSSL_INCLUDE_DIRS}) -target_compile_options(libnetdata PUBLIC ${OPENSSL_CFLAGS_OTHER}) -target_link_libraries(libnetdata PUBLIC ${OPENSSL_LDFLAGS}) +target_link_libraries(libnetdata PUBLIC PkgConfig::TLS) # mnl if(NOT MACOS) From c055bf20779c2a0b672c4b4332180b79b3ee9058 Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Tue, 7 May 2024 12:57:56 -0400 Subject: [PATCH 4/8] Work around broken behavior in FindPkgConfig with static builds. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It happened to be working before without this because we weren’t hitting any edge cases, but the use of IMPORTED targets with PkgConfig requires these fixes to behave correctly for transitive dependencies in static builds. --- CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d46525e66b59e..83efd76d78a2af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,8 +66,17 @@ project(netdata list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/packaging/cmake/Modules") include(CMakeDependentOption) +if(NOT BUILD_SHARED_LIBS) + set(CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_STATIC_LIBRARY_PREFIX}") + set(CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_STATIC_LIBRARY_SUFFIX}") +endif() + find_package(PkgConfig REQUIRED) +if(NOT BUILD_SHARED_LIBS) + list(APPEND PKG_CONFIG_EXECUTABLE "--static") +endif() + set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 14) set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "netdata") From 8d974db40866261bb97ad846c75b786883f3e43b Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Wed, 8 May 2024 06:51:45 -0400 Subject: [PATCH 5/8] Correctly detect static builds. --- CMakeLists.txt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 83efd76d78a2af..d464882cbaddfc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,14 +66,20 @@ project(netdata list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/packaging/cmake/Modules") include(CMakeDependentOption) -if(NOT BUILD_SHARED_LIBS) +if(DEFINED BUILD_SHARED_LIBS) + if(NOT BUILD_SHARED_LIBS) + set(STATIC_BUILD TRUE) + endif() +endif() + +if(STATIC_BUILD) set(CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_STATIC_LIBRARY_PREFIX}") set(CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_STATIC_LIBRARY_SUFFIX}") endif() find_package(PkgConfig REQUIRED) -if(NOT BUILD_SHARED_LIBS) +if(STATIC_BUILD) list(APPEND PKG_CONFIG_EXECUTABLE "--static") endif() From eda484ab39108f5f2e36515af2a1c5adfe3f808e Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Thu, 16 May 2024 08:48:20 -0400 Subject: [PATCH 6/8] Fix H2O linking. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d464882cbaddfc..8a9c1fc86b6fdf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1598,7 +1598,7 @@ if(ENABLE_H2O) ) target_compile_options(h2o PUBLIC -DH2O_USE_LIBUV=0) - target_link_libraries(h2o PRIVATE PkgConfig::OPENSSL) + target_link_libraries(h2o PRIVATE PkgConfig::TLS) endif() # From 47edd5660a81c68f1c0cf612bf550bd7c78c7d45 Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Mon, 20 May 2024 08:40:55 -0400 Subject: [PATCH 7/8] Fix typo. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a9c1fc86b6fdf..4ad61dec6b4006 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -564,7 +564,7 @@ endif() set(ENABLE_OPENSSL True) pkg_check_modules(TLS IMPORTED_TARGET openssl) -if(NOT TARGET PkgConfig::OPENSSL) +if(NOT TARGET PkgConfig::TLS) if(MACOS) execute_process(COMMAND brew --prefix --installed openssl From 392b8c131b2cf1a89b59eef994d99d7361dda2d7 Mon Sep 17 00:00:00 2001 From: "Austin S. Hemmelgarn" Date: Mon, 20 May 2024 08:54:36 -0400 Subject: [PATCH 8/8] Always check for libcrypto if we found openssl. If we fail to find libcrypto when we found openssl with pkg_check_modules, then the openssl install is horribly broken and we will see failures either at link time or at runtime, so there is no point in not checking for it on macOS. This also more clearly delineates that we _do_ require libcrypto irrespective of the platform. --- CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ad61dec6b4006..4d6864447f6787 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -589,11 +589,10 @@ if(NOT TARGET PkgConfig::TLS) else() message(FATAL_ERROR "OpenSSL (or LibreSSL) is required for building Netdata, but could not be found.") endif() +else() + pkg_check_modules(CRYPTO IMPORTED_TARGET REQUIRED libcrypto) endif() -if(NOT MACOS) - pkg_check_modules(CRYPTO IMPORTED_TARGET libcrypto) -endif() # # figure out if we need protoc/protobuf