From 3865eb364eb7fff18d162bfc24a4a752e2d8fe47 Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Sun, 20 Sep 2026 04:26:28 -0500 Subject: [PATCH 01/15] Standardize packaged telemetry dependencies Centralize the self-contained Linux curl/mbedTLS threading setup so consumers no longer carry private build scripts. Document the shared platform policy and system-SQLite lifecycle required when multiple embedded SDK copies coexist. Files changed: - cmake/MatsdkFetchCurl.cmake - docs/embedding-with-cmake.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- cmake/MatsdkFetchCurl.cmake | 5 ++++- docs/embedding-with-cmake.md | 25 +++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/cmake/MatsdkFetchCurl.cmake b/cmake/MatsdkFetchCurl.cmake index ea10d86d7..ddda91aa5 100644 --- a/cmake/MatsdkFetchCurl.cmake +++ b/cmake/MatsdkFetchCurl.cmake @@ -36,7 +36,6 @@ function(matsdk_fetch_curl out_target) INSTALL_MBEDTLS_HEADERS MBEDTLS_FATAL_WARNINGS USE_SHARED_MBEDTLS_LIBRARY - LINK_WITH_PTHREAD BUILD_CURL_EXE BUILD_EXAMPLES BUILD_LIBCURL_DOCS @@ -83,6 +82,7 @@ function(matsdk_fetch_curl out_target) endforeach() if(MATSDK_CURL_TLS_BACKEND_UPPER STREQUAL "MBEDTLS") + set(LINK_WITH_PTHREAD ON) set(USE_STATIC_MBEDTLS_LIBRARY ON) set(CURL_USE_MBEDTLS ON) set(MBEDTLS_CONFIG_FILE "") @@ -96,6 +96,9 @@ function(matsdk_fetch_curl out_target) foreach(target mbedtls mbedx509 mbedcrypto) matsdk_configure_fetched_static_target("${target}") + target_compile_definitions("${target}" PRIVATE + MBEDTLS_THREADING_C + MBEDTLS_THREADING_PTHREAD) endforeach() set(MBEDTLS_INCLUDE_DIR "${matsdk_mbedtls_SOURCE_DIR}/include") diff --git a/docs/embedding-with-cmake.md b/docs/embedding-with-cmake.md index 7a3d08a33..955a0fb1f 100644 --- a/docs/embedding-with-cmake.md +++ b/docs/embedding-with-cmake.md @@ -40,10 +40,31 @@ set(MATSDK_ZLIB_PROVIDER VENDORED CACHE STRING "" FORCE) # SYSTEM or VENDORED `MINIMAL` builds the feature-stripped SQLite amalgamation. `VENDORED` builds the unstripped vendored dependency. `SYSTEM` consumes the canonical -`SQLite::SQLite3` / `ZLIB::ZLIB` targets or uses `find_package()`. `AUTO` -preserves platform defaults: system dependencies on desktop/Apple source builds +`SQLite3::SQLite3` / `ZLIB::ZLIB` targets or uses `find_package()`. `AUTO` +preserves platform defaults: system dependencies on Linux/Apple source builds and vendored dependencies on Windows/Android source builds. +Recommended packaged-library policy: + +| Platform | SQLite | zlib | HTTP/TLS | +| --- | --- | --- | --- | +| macOS/iOS | `SYSTEM` (`libsqlite3`) | `SYSTEM` (`libz`) | Apple-native HTTP | +| Linux, self-contained | `MINIMAL` | `VENDORED` | `FETCH` + `MBEDTLS` | +| Linux, host-managed | host-selected | host-selected | `SYSTEM`; the host selects curl's TLS backend | +| Windows | `MINIMAL` | `VENDORED` | WinHTTP | +| Android | `MINIMAL`, or `NONE` with Room | `VENDORED` | Java/JNI by default | + +Apple's SQLite and zlib entries are system libraries: consumers link them but +do not ship private copies. A Linux host such as Foundry Local that already +standardizes on libcurl/OpenSSL should provide `CURL::libcurl` and select +`MATSDK_CURL_PROVIDER=SYSTEM`; other self-contained Linux consumers can use the +SDK's pinned curl/mbedTLS build. + +When multiple embedded SDK copies use the same system SQLite runtime, each +consumer must set `skipSqliteInitAndShutdown` to `"true"` and leave SQLite's +process-wide lifetime to the host. This is the required configuration for +coexisting Apple libraries that all link the system `libsqlite3`. + ## Non-vcpkg dependency selection When the CPP11 PAL uses the curl HTTP transport outside vcpkg, the SDK normally From 67c1920f3cf49c9c02e61e7b7fae09ad64b95ae9 Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Sun, 20 Sep 2026 11:30:24 -0500 Subject: [PATCH 02/15] CMake: preserve legacy SQLite package targets Installed system-provider packages must support CMake versions whose FindSQLite3 module exposes SQLite::SQLite3 instead of SQLite3::SQLite3. Normalize the legacy target to the SDK's canonical target so Linux system mode remains optional and portable. Files changed: - cmake/MatsdkDependencyTargets.cmake - cmake/MSTelemetryConfig.cmake.in Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- cmake/MSTelemetryConfig.cmake.in | 1 + cmake/MatsdkDependencyTargets.cmake | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cmake/MSTelemetryConfig.cmake.in b/cmake/MSTelemetryConfig.cmake.in index a46d7d94c..60a3579c2 100644 --- a/cmake/MSTelemetryConfig.cmake.in +++ b/cmake/MSTelemetryConfig.cmake.in @@ -17,6 +17,7 @@ if(@MATSDK_CONFIG_STATIC_PACKAGE@) SQLite3::SQLite3 "@MATSDK_SQLITE_PROVIDER_RESOLVED@" SQLite3 + LEGACY_TARGET SQLite::SQLite3 ${_matsdk_package_sqlite_args}) matsdk_add_package_system_dependency( MSTelemetry::zlib_dependency diff --git a/cmake/MatsdkDependencyTargets.cmake b/cmake/MatsdkDependencyTargets.cmake index f5f320043..47ddf21a4 100644 --- a/cmake/MatsdkDependencyTargets.cmake +++ b/cmake/MatsdkDependencyTargets.cmake @@ -20,7 +20,7 @@ function(matsdk_add_package_system_dependency dependency_target canonical_target endif() set(options APPLE_SYSTEM) - set(one_value_args APPLE_LIBRARY) + set(one_value_args APPLE_LIBRARY LEGACY_TARGET) cmake_parse_arguments(MATSDK_PACKAGE_DEP "${options}" "${one_value_args}" "" ${ARGN}) if(MATSDK_PACKAGE_DEP_APPLE_SYSTEM) @@ -35,6 +35,12 @@ function(matsdk_add_package_system_dependency dependency_target canonical_target elseif(NOT TARGET "${canonical_target}") find_dependency(${package_name}) endif() + if(NOT TARGET "${canonical_target}" + AND DEFINED MATSDK_PACKAGE_DEP_LEGACY_TARGET + AND TARGET "${MATSDK_PACKAGE_DEP_LEGACY_TARGET}") + matsdk_add_interface_dependency( + "${canonical_target}" "${MATSDK_PACKAGE_DEP_LEGACY_TARGET}") + endif() if(NOT TARGET "${canonical_target}") message(FATAL_ERROR "${package_name} did not create the required ${canonical_target} target.") From c8cecaf886740e259df76820699d39358bf14e93 Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Sun, 20 Sep 2026 12:18:56 -0500 Subject: [PATCH 03/15] CMake: require the canonical SQLite target Require CMake 4.3 for builds and installed-package consumers so FindSQLite3 provides SQLite3::SQLite3 without a legacy compatibility alias. Pin CI to CMake 4.4.2 and use the newest sdkmanager release, CMake 4.1.2, for Android source builds where system SQLite discovery is not used. Files changed: root/package dependency configuration, CI workflows and setup action, Android build entry points, standalone examples/tests/wrappers, and build documentation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/actions/setup-cmake/action.yml | 10 ++++++++++ .github/workflows/build-android.yml | 2 +- .github/workflows/build-ios-mac.yml | 1 + .github/workflows/build-posix-latest.yml | 1 + .github/workflows/build-ubuntu-2204.yml | 1 + .github/workflows/codeql-analysis.yml | 3 ++- .github/workflows/spm-release.yml | 3 +++ .github/workflows/test-embedding.yml | 7 +++++++ .github/workflows/test-vcpkg.yml | 5 +++++ .github/workflows/test-win-latest.yml | 1 + .github/workflows/vcpkg-release-bump.yml | 6 ++++++ CMakeLists.txt | 13 ++++++------- README.md | 5 +++-- build-android.cmd | 2 +- cmake/MSTelemetryConfig.cmake.in | 5 ++++- cmake/MatsdkDependencyTargets.cmake | 8 +------- cmake/MatsdkOptions.cmake | 2 +- cmake/MatsdkRequirePresetSupport.cmake | 8 +------- docs/building-with-vcpkg.md | 2 +- docs/cpp-start-android.md | 2 +- docs/embedding-with-cmake.md | 2 +- examples/c/SampleC-Guest/CMakeLists.txt | 2 +- examples/cpp/EventSender/CMakeLists.txt | 2 +- examples/cpp/MacProxy/CMakeLists.txt | 2 +- examples/cpp/SampleCpp/CMakeLists.txt | 2 +- examples/cpp/SampleCppMini/CMakeLists.txt | 2 +- examples/objc/cocoa-app/CMakeLists.txt | 2 +- lib/android_build/app/build.gradle | 2 +- lib/android_build/app/src/main/cpp/CMakeLists.txt | 2 +- lib/android_build/maesdk/build.gradle | 2 +- .../maesdk/src/main/cpp/CMakeLists.txt | 2 +- tests/embedding/CMakeLists.txt | 2 +- tests/vcpkg/CMakeLists.txt | 2 +- tools/build-android-aar.sh | 4 ++-- wrappers/obj-c/CMakeLists.txt | 2 +- wrappers/swift/CMakeLists.txt | 2 +- 36 files changed, 74 insertions(+), 47 deletions(-) create mode 100644 .github/actions/setup-cmake/action.yml diff --git a/.github/actions/setup-cmake/action.yml b/.github/actions/setup-cmake/action.yml new file mode 100644 index 000000000..77514a9b6 --- /dev/null +++ b/.github/actions/setup-cmake/action.yml @@ -0,0 +1,10 @@ +name: Set up CMake +description: Install the repository's required CMake release. +runs: + using: composite + steps: + - name: Install CMake 4.4.2 + shell: pwsh + run: | + python -m pip install --disable-pip-version-check --upgrade "cmake==4.4.2" + cmake --version diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 576eeb1ce..2f179d042 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -55,7 +55,7 @@ jobs: java -version gci env:* | sort-object name new-item "$Env:USERPROFILE\.android\repositories.cfg" -ItemType "file" - echo yes | sdkmanager "ndk-bundle" "cmake;3.22.1" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT + echo yes | sdkmanager "ndk-bundle" "cmake;4.1.2" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT - name: Chocolatey run: | choco install --no-progress -y ninja diff --git a/.github/workflows/build-ios-mac.yml b/.github/workflows/build-ios-mac.yml index d7687200d..6242f732e 100644 --- a/.github/workflows/build-ios-mac.yml +++ b/.github/workflows/build-ios-mac.yml @@ -55,6 +55,7 @@ jobs: run: | sudo chown -R $USER:staff /usr/local - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Initialize googletest run: git submodule update --init --depth=1 third_party/googletest - name: build diff --git a/.github/workflows/build-posix-latest.yml b/.github/workflows/build-posix-latest.yml index dc45fe14e..3234608e5 100644 --- a/.github/workflows/build-posix-latest.yml +++ b/.github/workflows/build-posix-latest.yml @@ -44,6 +44,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Initialize googletest run: git submodule update --init --depth=1 third_party/googletest - name: Test ${{ matrix.os }} ${{ matrix.config }} diff --git a/.github/workflows/build-ubuntu-2204.yml b/.github/workflows/build-ubuntu-2204.yml index ca21ad8c4..b82a5b236 100644 --- a/.github/workflows/build-ubuntu-2204.yml +++ b/.github/workflows/build-ubuntu-2204.yml @@ -44,6 +44,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Initialize googletest run: git submodule update --init --depth=1 third_party/googletest - name: Test ${{ matrix.os }} ${{ matrix.config }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a47773036..873e7ee82 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -41,6 +41,7 @@ jobs: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 continue-on-error: true + - uses: ./.github/actions/setup-cmake # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL @@ -137,7 +138,7 @@ jobs: java -version gci env:* | sort-object name new-item "$Env:USERPROFILE\.android\repositories.cfg" -ItemType "file" - echo yes | sdkmanager "ndk-bundle" "cmake;3.22.1" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT + echo yes | sdkmanager "ndk-bundle" "cmake;4.1.2" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT - name: Chocolatey run: | choco install --no-progress -y ninja diff --git a/.github/workflows/spm-release.yml b/.github/workflows/spm-release.yml index 1782d3229..77ce7b933 100644 --- a/.github/workflows/spm-release.yml +++ b/.github/workflows/spm-release.yml @@ -84,6 +84,9 @@ jobs: # port (the optional modules are excluded there too). submodules: false + - uses: ./.github/actions/setup-cmake + if: ${{ steps.ver.outputs.skip != 'true' }} + - name: Skip if this SPM version is already published id: pub if: ${{ steps.ver.outputs.skip != 'true' }} diff --git a/.github/workflows/test-embedding.yml b/.github/workflows/test-embedding.yml index 5c13e1e25..4cfe66cab 100644 --- a/.github/workflows/test-embedding.yml +++ b/.github/workflows/test-embedding.yml @@ -48,6 +48,7 @@ jobs: disable-logging: ON steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Install system dependencies if: matrix.dependencies == 'system' run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libsqlite3-dev ninja-build zlib1g-dev @@ -88,6 +89,7 @@ jobs: runs-on: windows-2022 steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Configure run: > cmake -S tests/embedding -B build-embedding -A x64 @@ -107,6 +109,7 @@ jobs: mode: [system, fetched] steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Install system dependencies if: matrix.mode == 'system' run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libsqlite3-dev zlib1g-dev @@ -152,6 +155,7 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Configure, install, and consume run: | cmake -G Ninja -S . -B build-package \ @@ -180,6 +184,7 @@ jobs: architectures: [arm64, "arm64;x86_64"] steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Configure run: > cmake -G Ninja -S tests/embedding -B build-embedding @@ -204,6 +209,7 @@ jobs: zlib-provider: VENDORED steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Configure run: > cmake -G Xcode -S tests/embedding -B build-embedding @@ -223,6 +229,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Configure run: > cmake -G Ninja -S tests/embedding -B build-embedding diff --git a/.github/workflows/test-vcpkg.yml b/.github/workflows/test-vcpkg.yml index 59961ce53..b6b5a2e4f 100644 --- a/.github/workflows/test-vcpkg.yml +++ b/.github/workflows/test-vcpkg.yml @@ -27,6 +27,7 @@ jobs: name: Windows (x64-windows-static) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | @@ -43,6 +44,7 @@ jobs: name: Linux (x64-linux) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | @@ -61,6 +63,7 @@ jobs: name: macOS (native) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | @@ -79,6 +82,7 @@ jobs: name: iOS (arm64-ios cross-compile) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | @@ -97,6 +101,7 @@ jobs: name: Android (arm64-v8a API 23 cross-compile) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | diff --git a/.github/workflows/test-win-latest.yml b/.github/workflows/test-win-latest.yml index 2a77d5e2a..bc9d2a94e 100644 --- a/.github/workflows/test-win-latest.yml +++ b/.github/workflows/test-win-latest.yml @@ -45,6 +45,7 @@ jobs: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 continue-on-error: true + - uses: ./.github/actions/setup-cmake - name: setup-msbuild uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0 diff --git a/.github/workflows/vcpkg-release-bump.yml b/.github/workflows/vcpkg-release-bump.yml index 77ed47444..97405b969 100644 --- a/.github/workflows/vcpkg-release-bump.yml +++ b/.github/workflows/vcpkg-release-bump.yml @@ -130,6 +130,12 @@ jobs: if: ${{ steps.ver.outputs.skip != 'true' }} run: cd vcpkg && ./bootstrap-vcpkg.sh -disableMetrics + - name: Set up CMake + if: ${{ steps.ver.outputs.skip != 'true' }} + run: | + python3 -m pip install --disable-pip-version-check --upgrade "cmake==4.4.2" + cmake --version + - name: Update port REF, SHA512 and version if: ${{ steps.ver.outputs.skip != 'true' }} run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 30fe6e3c8..bbf3e79d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,11 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.1...4.4) project(MSTelemetry LANGUAGES C CXX) +if(CMAKE_VERSION VERSION_LESS 4.3 AND NOT CMAKE_SYSTEM_NAME STREQUAL "Android") + message(FATAL_ERROR + "MSTelemetry requires CMake 4.3 or newer. Android source builds may use " + "the Android SDK's CMake 4.1.2 package.") +endif() if(APPLE) set(MATSDK_BUILD_PLATFORM_APPLE TRUE) else() @@ -238,17 +243,11 @@ endif() ################################################################################################ # Canonical dependency targets ################################################################################################ -if(TARGET SQLite::SQLite3 AND NOT TARGET SQLite3::SQLite3) - matsdk_add_interface_dependency(SQLite3::SQLite3 SQLite::SQLite3) -endif() if(MATSDK_SQLITE_PROVIDER_RESOLVED STREQUAL "SYSTEM" AND NOT TARGET SQLite3::SQLite3) if(APPLE AND NOT MATSDK_USING_VCPKG) matsdk_add_apple_system_library(SQLite3::SQLite3 sqlite3) else() find_package(SQLite3 QUIET) - if(NOT TARGET SQLite3::SQLite3 AND TARGET SQLite::SQLite3) - matsdk_add_interface_dependency(SQLite3::SQLite3 SQLite::SQLite3) - endif() if(NOT TARGET SQLite3::SQLite3 AND MATSDK_USING_VCPKG) find_package(unofficial-sqlite3 CONFIG REQUIRED) matsdk_add_interface_dependency( diff --git a/README.md b/README.md index 181530a47..8ebd69f1a 100644 --- a/README.md +++ b/README.md @@ -59,8 +59,9 @@ Platform specific build instructions: Standard configure/build presets are listed with `cmake --list-presets`. `build.sh`, `build-ios.sh`, and `build-cmake.ps1` are thin compatibility -wrappers around those presets. Presets require CMake 3.21+; direct CMake builds -retain the project's CMake 3.15 floor. +wrappers around those presets. Builds and installed-package consumers require +CMake 4.3 or newer. Android source builds may use the Android SDK's CMake 4.1.2 +package because Google does not currently publish CMake 4.3 through sdkmanager. Other resources to learn how to setup the build system: diff --git a/build-android.cmd b/build-android.cmd index add5f03d8..7b48cc495 100644 --- a/build-android.cmd +++ b/build-android.cmd @@ -5,7 +5,7 @@ REM Users may override the default %ANDROID_SDK_ROOT% location if necessary if "%ANDROID_SDK_ROOT%" == "" set "ANDROID_SDK_ROOT=C:\Android\android-sdk" if "%ANDROID_NDK_VERSION%" == "" set "ANDROID_NDK_VERSION=27.0.12077973" -if "%ANDROID_CMAKE_VERSION%" == "" set "ANDROID_CMAKE_VERSION=3.22.1" +if "%ANDROID_CMAKE_VERSION%" == "" set "ANDROID_CMAKE_VERSION=4.1.2" if "%ANDROID_HOME%" == "" set "ANDROID_HOME=%ANDROID_SDK_ROOT%" if "%ANDROID_NDK%" == "" set "ANDROID_NDK=%ANDROID_SDK_ROOT%\ndk\%ANDROID_NDK_VERSION%" if "%ANDROID_NDK_HOME%" == "" set "ANDROID_NDK_HOME=%ANDROID_NDK%" diff --git a/cmake/MSTelemetryConfig.cmake.in b/cmake/MSTelemetryConfig.cmake.in index 60a3579c2..51c987ee0 100644 --- a/cmake/MSTelemetryConfig.cmake.in +++ b/cmake/MSTelemetryConfig.cmake.in @@ -1,5 +1,9 @@ @PACKAGE_INIT@ +if(CMAKE_VERSION VERSION_LESS 4.3) + message(FATAL_ERROR "MSTelemetry requires CMake 4.3 or newer.") +endif() + include(CMakeFindDependencyMacro) include("${CMAKE_CURRENT_LIST_DIR}/MatsdkDependencyTargets.cmake") @@ -17,7 +21,6 @@ if(@MATSDK_CONFIG_STATIC_PACKAGE@) SQLite3::SQLite3 "@MATSDK_SQLITE_PROVIDER_RESOLVED@" SQLite3 - LEGACY_TARGET SQLite::SQLite3 ${_matsdk_package_sqlite_args}) matsdk_add_package_system_dependency( MSTelemetry::zlib_dependency diff --git a/cmake/MatsdkDependencyTargets.cmake b/cmake/MatsdkDependencyTargets.cmake index 47ddf21a4..f5f320043 100644 --- a/cmake/MatsdkDependencyTargets.cmake +++ b/cmake/MatsdkDependencyTargets.cmake @@ -20,7 +20,7 @@ function(matsdk_add_package_system_dependency dependency_target canonical_target endif() set(options APPLE_SYSTEM) - set(one_value_args APPLE_LIBRARY LEGACY_TARGET) + set(one_value_args APPLE_LIBRARY) cmake_parse_arguments(MATSDK_PACKAGE_DEP "${options}" "${one_value_args}" "" ${ARGN}) if(MATSDK_PACKAGE_DEP_APPLE_SYSTEM) @@ -35,12 +35,6 @@ function(matsdk_add_package_system_dependency dependency_target canonical_target elseif(NOT TARGET "${canonical_target}") find_dependency(${package_name}) endif() - if(NOT TARGET "${canonical_target}" - AND DEFINED MATSDK_PACKAGE_DEP_LEGACY_TARGET - AND TARGET "${MATSDK_PACKAGE_DEP_LEGACY_TARGET}") - matsdk_add_interface_dependency( - "${canonical_target}" "${MATSDK_PACKAGE_DEP_LEGACY_TARGET}") - endif() if(NOT TARGET "${canonical_target}") message(FATAL_ERROR "${package_name} did not create the required ${canonical_target} target.") diff --git a/cmake/MatsdkOptions.cmake b/cmake/MatsdkOptions.cmake index c90487350..13c6fd869 100644 --- a/cmake/MatsdkOptions.cmake +++ b/cmake/MatsdkOptions.cmake @@ -127,7 +127,7 @@ string(TOUPPER "${MATSDK_ZLIB_PROVIDER}" MATSDK_ZLIB_PROVIDER_RESOLVED) if(MATSDK_SQLITE_PROVIDER_RESOLVED STREQUAL "AUTO") if(MATSDK_ANDROID_USE_ROOM AND CMAKE_SYSTEM_NAME STREQUAL "Android") set(MATSDK_SQLITE_PROVIDER_RESOLVED NONE) - elseif(TARGET SQLite3::SQLite3 OR TARGET SQLite::SQLite3) + elseif(TARGET SQLite3::SQLite3) set(MATSDK_SQLITE_PROVIDER_RESOLVED SYSTEM) elseif(NOT MATSDK_USING_VCPKG AND (WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Android")) diff --git a/cmake/MatsdkRequirePresetSupport.cmake b/cmake/MatsdkRequirePresetSupport.cmake index 18b682ad0..e6bacf4e0 100644 --- a/cmake/MatsdkRequirePresetSupport.cmake +++ b/cmake/MatsdkRequirePresetSupport.cmake @@ -1,7 +1 @@ -cmake_minimum_required(VERSION 3.15) - -if(CMAKE_VERSION VERSION_LESS 3.21) - message(FATAL_ERROR - "The 1DS build wrappers require CMake 3.21 or newer for CMakePresets.json " - "support. Direct CMake builds retain the CMake 3.15 minimum.") -endif() +cmake_minimum_required(VERSION 4.3) diff --git a/docs/building-with-vcpkg.md b/docs/building-with-vcpkg.md index 8cdb27c69..ea967aa49 100644 --- a/docs/building-with-vcpkg.md +++ b/docs/building-with-vcpkg.md @@ -201,7 +201,7 @@ The vcpkg port automatically resolves the following dependencies: | Dependency | vcpkg Package | CMake Target | Platforms | | -------------- | --------------- | --------------------------------- | ------------------ | -| SQLite3 | `sqlite3` | `unofficial::sqlite3::sqlite3` | Non-Apple (default; see `minimal-sqlite`). **macOS/iOS link the system `libsqlite3`** (`SQLite::SQLite3`) | +| SQLite3 | `sqlite3` | `unofficial::sqlite3::sqlite3` | Non-Apple (default; see `minimal-sqlite`). **macOS/iOS link the system `libsqlite3`** (`SQLite3::SQLite3`) | | zlib | `zlib` | `ZLIB::ZLIB` | Non-Apple. **macOS/iOS link the system `libz`** | | nlohmann JSON | `nlohmann-json` | `nlohmann_json::nlohmann_json` | All | | libcurl | `curl[openssl]` or `curl[mbedtls]` | `CURL::libcurl` | Linux by default; Android only when `android-curl-openssl` or `android-curl-mbedtls` is selected | diff --git a/docs/cpp-start-android.md b/docs/cpp-start-android.md index 8f02b05e7..f724c3515 100644 --- a/docs/cpp-start-android.md +++ b/docs/cpp-start-android.md @@ -25,7 +25,7 @@ Default environment variables used by `build-android.cmd` script: ```console set "ANDROID_NDK_VERSION=27.0.12077973" -set "ANDROID_CMAKE_VERSION=3.22.1" +set "ANDROID_CMAKE_VERSION=4.1.2" set "ANDROID_SDK_ROOT=C:\Android\android-sdk" set "ANDROID_HOME=%ANDROID_SDK_ROOT%" set "ANDROID_NDK=%ANDROID_SDK_ROOT%\ndk\%ANDROID_NDK_VERSION%" diff --git a/docs/embedding-with-cmake.md b/docs/embedding-with-cmake.md index 955a0fb1f..e9c196c1f 100644 --- a/docs/embedding-with-cmake.md +++ b/docs/embedding-with-cmake.md @@ -94,7 +94,7 @@ leaf consumer target, define the standard CMake targets before adding the SDK: # These may be real targets or aliases to targets owned by your superbuild. add_library(CURL::libcurl ALIAS my_curl_target) add_library(ZLIB::ZLIB ALIAS my_zlib_target) -add_library(SQLite::SQLite3 ALIAS my_sqlite_target) +add_library(SQLite3::SQLite3 ALIAS my_sqlite_target) add_subdirectory(cpp_client_telemetry) target_link_libraries(your_target PRIVATE MSTelemetry::mat) diff --git a/examples/c/SampleC-Guest/CMakeLists.txt b/examples/c/SampleC-Guest/CMakeLists.txt index 06a7d85b5..adeccbf20 100644 --- a/examples/c/SampleC-Guest/CMakeLists.txt +++ b/examples/c/SampleC-Guest/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) project(SampleC-Guest) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/cpp/EventSender/CMakeLists.txt b/examples/cpp/EventSender/CMakeLists.txt index 223ebb785..b0a98b8b3 100644 --- a/examples/cpp/EventSender/CMakeLists.txt +++ b/examples/cpp/EventSender/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) project(EventSender) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/cpp/MacProxy/CMakeLists.txt b/examples/cpp/MacProxy/CMakeLists.txt index 04dfa5d01..b990447b9 100644 --- a/examples/cpp/MacProxy/CMakeLists.txt +++ b/examples/cpp/MacProxy/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) project(MacProxy) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/cpp/SampleCpp/CMakeLists.txt b/examples/cpp/SampleCpp/CMakeLists.txt index bfa90995e..fdc2a515f 100644 --- a/examples/cpp/SampleCpp/CMakeLists.txt +++ b/examples/cpp/SampleCpp/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) project(SampleCpp) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/cpp/SampleCppMini/CMakeLists.txt b/examples/cpp/SampleCppMini/CMakeLists.txt index a2c33224f..ac1fcac68 100644 --- a/examples/cpp/SampleCppMini/CMakeLists.txt +++ b/examples/cpp/SampleCppMini/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) project(SampleCppMini) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/objc/cocoa-app/CMakeLists.txt b/examples/objc/cocoa-app/CMakeLists.txt index 353098e92..07f61e0ed 100644 --- a/examples/objc/cocoa-app/CMakeLists.txt +++ b/examples/objc/cocoa-app/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) project(foo) include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/MSTelemetrySample.cmake) diff --git a/lib/android_build/app/build.gradle b/lib/android_build/app/build.gradle index 544239e58..abf4dfe12 100644 --- a/lib/android_build/app/build.gradle +++ b/lib/android_build/app/build.gradle @@ -29,7 +29,7 @@ android { externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" - version "3.22.1" + version "4.1.2" } } compileOptions { diff --git a/lib/android_build/app/src/main/cpp/CMakeLists.txt b/lib/android_build/app/src/main/cpp/CMakeLists.txt index 64e93ab16..4d6142ec0 100644 --- a/lib/android_build/app/src/main/cpp/CMakeLists.txt +++ b/lib/android_build/app/src/main/cpp/CMakeLists.txt @@ -3,7 +3,7 @@ # Sets the minimum version of CMake required to build the native library. -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.1...4.4) project(MaesdkAndroidTests LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/lib/android_build/maesdk/build.gradle b/lib/android_build/maesdk/build.gradle index 9a043215e..3ab3082c9 100644 --- a/lib/android_build/maesdk/build.gradle +++ b/lib/android_build/maesdk/build.gradle @@ -61,7 +61,7 @@ android { externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" - version "3.22.1" + version "4.1.2" } } } diff --git a/lib/android_build/maesdk/src/main/cpp/CMakeLists.txt b/lib/android_build/maesdk/src/main/cpp/CMakeLists.txt index 6712289dd..a9be66e5b 100644 --- a/lib/android_build/maesdk/src/main/cpp/CMakeLists.txt +++ b/lib/android_build/maesdk/src/main/cpp/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.1...4.4) project(MaesdkAndroid LANGUAGES C CXX) get_filename_component(SDK_ROOT diff --git a/tests/embedding/CMakeLists.txt b/tests/embedding/CMakeLists.txt index 7b6a77370..23d9729c4 100644 --- a/tests/embedding/CMakeLists.txt +++ b/tests/embedding/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) project(cpp-client-telemetry_embedding_test LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 11) diff --git a/tests/vcpkg/CMakeLists.txt b/tests/vcpkg/CMakeLists.txt index 709b3038c..1a51e1bcf 100644 --- a/tests/vcpkg/CMakeLists.txt +++ b/tests/vcpkg/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) project(cpp-client-telemetry_vcpkg_test LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) diff --git a/tools/build-android-aar.sh b/tools/build-android-aar.sh index 8ace0f78c..5263b3680 100755 --- a/tools/build-android-aar.sh +++ b/tools/build-android-aar.sh @@ -14,7 +14,7 @@ set -euo pipefail # - Requires ANDROID_SDK_ROOT (or ANDROID_HOME) when installing NDK. ANDROID_NDK_VERSION_DEFAULT="27.0.12077973" -CMAKE_VERSION_DEFAULT="3.22.1" +CMAKE_VERSION_DEFAULT="4.1.2" INSTALL_NDK=0 CLEAN=0 @@ -29,7 +29,7 @@ Build MAESDK Android AAR locally. Options: --install-ndk Install the pinned NDK + CMake via sdkmanager. --ndk-version Override NDK version (default: 27.0.12077973). - --cmake-version Override CMake version (default: 3.22.1). + --cmake-version Override CMake version (default: 4.1.2). --output-dir Output directory (default: /dist/android-aar). --clean Run a clean build (gradle clean). -h, --help Show help. diff --git a/wrappers/obj-c/CMakeLists.txt b/wrappers/obj-c/CMakeLists.txt index e20b5a158..39e53751f 100644 --- a/wrappers/obj-c/CMakeLists.txt +++ b/wrappers/obj-c/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) PROJECT(ObjC_Wrapper) diff --git a/wrappers/swift/CMakeLists.txt b/wrappers/swift/CMakeLists.txt index cc751726e..a82dee693 100644 --- a/wrappers/swift/CMakeLists.txt +++ b/wrappers/swift/CMakeLists.txt @@ -15,7 +15,7 @@ # and linking the static libs to generate the executable. # ------------------------------------------------------------------------------------------------------------ -cmake_minimum_required(VERSION 3.15...3.31) +cmake_minimum_required(VERSION 4.3...4.4) # Set build and path related variables string(TOLOWER ${CMAKE_BUILD_TYPE} LOWER_BUILD_TYPE) From 74476d7aa30d4a7af830aa4c2c6c4e7f6a740245 Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Sun, 20 Sep 2026 12:56:53 -0500 Subject: [PATCH 04/15] CI: expose modern CMake to build steps Persist the pip-installed CMake binary directory through GITHUB_PATH so subsequent workflow steps use 4.4.2 instead of the runner default. Avoid the removed Android SDK 'tools' package while retaining platform-tools and the explicitly installed NDK and CMake packages. Files changed: .github/actions/setup-cmake/action.yml, .github/workflows/build-android.yml, and .github/workflows/codeql-analysis.yml. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/actions/setup-cmake/action.yml | 4 +++- .github/workflows/build-android.yml | 2 ++ .github/workflows/codeql-analysis.yml | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/actions/setup-cmake/action.yml b/.github/actions/setup-cmake/action.yml index 77514a9b6..2319c0acb 100644 --- a/.github/actions/setup-cmake/action.yml +++ b/.github/actions/setup-cmake/action.yml @@ -7,4 +7,6 @@ runs: shell: pwsh run: | python -m pip install --disable-pip-version-check --upgrade "cmake==4.4.2" - cmake --version + $cmakeBin = python -c "import cmake; print(cmake.CMAKE_BIN_DIR)" + $cmakeBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + & (Join-Path $cmakeBin "cmake") --version diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 2f179d042..12c4ec05f 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -50,6 +50,8 @@ jobs: java-version: '17' - name: Setup Android SDK uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3.2.2 + with: + packages: platform-tools - name: Install NDK run: | java -version diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 873e7ee82..00086362c 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -133,6 +133,8 @@ jobs: java-version: '17' - name: Setup Android SDK uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3.2.2 + with: + packages: platform-tools - name: Install NDK run: | java -version From c69dda093ecd7f58dd3c6c1b4f45d3de38d02de2 Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Mon, 21 Sep 2026 10:30:21 -0500 Subject: [PATCH 05/15] Linux: provision the required CMake release Make the supported build.sh setup path install verified CMake 4.4.2 binaries on x86_64 and arm64 when the host provides an older release. Preserve caller-provided modern CMake paths and document the CMake 4.3 floor. Files changed: build.sh, tools/setup-buildtools.sh, and docs/linux-setup-build.md. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- build.sh | 7 ++++-- docs/linux-setup-build.md | 6 ++++- tools/setup-buildtools.sh | 53 +++++++++++++++++++++++++++++---------- 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/build.sh b/build.sh index f701610db..c7009c9d4 100755 --- a/build.sh +++ b/build.sh @@ -27,8 +27,6 @@ usage() exit 0 } -export PATH=/usr/local/bin:$PATH - DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo "Current directory: $DIR" cd $DIR @@ -164,6 +162,11 @@ if [ ! -f "$BUILD_TOOLS_MARKER" ]; then fi fi +if ! command -v cmake >/dev/null 2>&1 || \ + [ "$(printf '%s\n' 4.3 "$(cmake --version | head -1 | awk '{print $3}')" | sort -V | head -1)" != "4.3" ]; then + export PATH=/usr/local/bin:$PATH +fi + matsdk_print_compiler_versions matsdk_require_cmake_preset_support diff --git a/docs/linux-setup-build.md b/docs/linux-setup-build.md index 2e045fa59..f4d95c57b 100644 --- a/docs/linux-setup-build.md +++ b/docs/linux-setup-build.md @@ -3,6 +3,7 @@ ## Required dependencies - gcc-5+ or above +- CMake 4.3 or newer - zlib - sqlite3 - libcurl + openssl @@ -11,7 +12,7 @@ ### Installing dependencies as root ```console -sudo apt-get install cmake3 sqlite3 libsqlite3-dev libcurl4-openssl-dev libgtest-dev +sudo apt-get install sqlite3 libsqlite3-dev libcurl4-openssl-dev libgtest-dev ``` There is a helper script in source code distribution that can be invoked as follows: @@ -20,6 +21,9 @@ There is a helper script in source code distribution that can be invoked as foll source tools/setup-buildtools.sh ``` +The helper installs the pinned CMake 4.4.2 binary distribution when the +available CMake is older than 4.3. + ### Debian 8.x Jesse (old stable) specific instructions 1DS SDK requires gcc-5+. Latest available in Debian 8 and below is 4.9. gcc-5 and g++-5 must to be installed manually: diff --git a/tools/setup-buildtools.sh b/tools/setup-buildtools.sh index fa023f6c4..9e8033866 100755 --- a/tools/setup-buildtools.sh +++ b/tools/setup-buildtools.sh @@ -1,5 +1,43 @@ #!/bin/bash +CMAKE_VERSION=4.4.2 + +install_cmake() +{ +if command -v cmake >/dev/null 2>&1 && \ + [ "$(printf '%s\n' 4.3 "$(cmake --version | head -1 | awk '{print $3}')" | sort -V | head -1)" = "4.3" ]; then +return +fi + +case "$(uname -m)" in +x86_64) + CMAKE_ARCH=x86_64 + CMAKE_SHA256=3ada9a3f5d8a85413579bdd0ea6aa8e8da86efdd6d15c91a1afa517f2021956c + ;; +aarch64|arm64) + CMAKE_ARCH=aarch64 + CMAKE_SHA256=9ca1aadb4451c5dcbdc67f9b4aff42dab52abbaebd8db9e2900026502dbed671 + ;; +*) + echo "Unsupported architecture for prebuilt CMake: $(uname -m)" >&2 + exit 1 + ;; +esac + +CMAKE_ARCHIVE="cmake-${CMAKE_VERSION}-linux-${CMAKE_ARCH}.tar.gz" +CMAKE_URL="https://cmake.org/files/v4.4/${CMAKE_ARCHIVE}" +CMAKE_INSTALL_DIR="/opt/cmake-${CMAKE_VERSION}" +wget -q "${CMAKE_URL}" -O "/tmp/${CMAKE_ARCHIVE}" || return 1 +echo "${CMAKE_SHA256} /tmp/${CMAKE_ARCHIVE}" | sha256sum --check - || return 1 +mkdir -p "${CMAKE_INSTALL_DIR}" || return 1 +tar -xzf "/tmp/${CMAKE_ARCHIVE}" \ + --strip-components=1 -C "${CMAKE_INSTALL_DIR}" || return 1 +rm -f "/tmp/${CMAKE_ARCHIVE}" || return 1 +for tool in cmake cpack ctest; do + ln -sf "${CMAKE_INSTALL_DIR}/bin/${tool}" "/usr/local/bin/${tool}" || return 1 +done +} + if [ -f /bin/yum ]; then if [ `cat /etc/redhat-release | tr -dc '0-9.'|cut -d \. -f1` == "7" ]; then # Prefer yum over apt-get @@ -30,18 +68,6 @@ echo "*********************************************************" exit 3 fi -if ! command -v cmake >/dev/null 2>&1 || \ - [ "$(printf '%s\n' 3.21.7 "$(cmake --version | head -1 | awk '{print $3}')" | sort -V | head -1)" != "3.21.7" ]; then -yum -y remove cmake -wget https://cmake.org/files/v3.21/cmake-3.21.7.tar.gz -tar -zxvf cmake-3.21.7.tar.gz -cd cmake-3.21.7 -./bootstrap --prefix=/usr/local -make -make install -cd .. -fi - else echo "*** Nothing to install for that version CentOS ***" fi @@ -51,7 +77,6 @@ export DEBIAN_FRONTEND=noninteractive apt-get update -y apt-get install -y automake apt-get install -y libtool-bin -apt-get install -y cmake apt-get install -y sqlite apt-get install -y curl apt-get install -y libcurl4-openssl-dev nghttp2 @@ -65,6 +90,8 @@ apt-get install -y libsqlite3-dev apt-get install -y wget fi +install_cmake || exit 1 + ## Install sqlite 3.22 export SQLITE_PKG=sqlite-autoconf-3220000 wget https://www.sqlite.org/2018/$SQLITE_PKG.tar.gz -O /tmp/sqlite-snapshot.tar.gz From d56f7dfd986ebd4bf80f2e24ea448eb4e653d98b Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Mon, 21 Sep 2026 11:01:25 -0500 Subject: [PATCH 06/15] Linux: make build-tool provisioning reliable Version the build-tools marker so existing checkouts rerun setup for the CMake 4.4.2 requirement. Propagate installer failures without writing a success marker, and give unsupported architectures an actionable CMake 4.3+ requirement. Files changed: build.sh, tools/build-common.sh, and tools/setup-buildtools.sh. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- build.sh | 10 +++++++--- tools/build-common.sh | 5 ++++- tools/setup-buildtools.sh | 3 ++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/build.sh b/build.sh index c7009c9d4..5cdaf4556 100755 --- a/build.sh +++ b/build.sh @@ -138,9 +138,12 @@ echo "macosx deployment target="$MACOSX_DEPLOYMENT_TARGET # Install build tools and recent sqlite3 BUILD_TOOLS_MARKER=.buildtools +BUILD_TOOLS_MARKER_VERSION=cmake-4.4.2 OS_NAME=`uname -a` -if [ ! -f "$BUILD_TOOLS_MARKER" ]; then +if [ ! -f "$BUILD_TOOLS_MARKER" ] || \ + [ "$(cat "$BUILD_TOOLS_MARKER")" != "$BUILD_TOOLS_MARKER_VERSION" ]; then + rm -f "$BUILD_TOOLS_MARKER" buildtools_cmd=() case "$OS_NAME" in *Darwin*) buildtools_cmd=(tools/setup-buildtools-apple.sh "$APPLE_ARCH") ;; @@ -151,8 +154,8 @@ if [ ! -f "$BUILD_TOOLS_MARKER" ]; then if [[ ${#buildtools_cmd[@]} -gt 0 ]]; then if [[ -z "$NOROOT" ]]; then matsdk_try_buildtools_once "$BUILD_TOOLS_MARKER" \ - "No root: skipping build tools installation." \ - sudo "${buildtools_cmd[@]}" + "Build-tools installation failed." \ + sudo "${buildtools_cmd[@]}" || exit 1 else echo "No root: skipping build tools installation." matsdk_mark_buildtools_checked "$BUILD_TOOLS_MARKER" @@ -160,6 +163,7 @@ if [ ! -f "$BUILD_TOOLS_MARKER" ]; then else matsdk_mark_buildtools_checked "$BUILD_TOOLS_MARKER" fi + printf '%s\n' "$BUILD_TOOLS_MARKER_VERSION" > "$BUILD_TOOLS_MARKER" fi if ! command -v cmake >/dev/null 2>&1 || \ diff --git a/tools/build-common.sh b/tools/build-common.sh index 1ba0ecb56..b5de4da70 100644 --- a/tools/build-common.sh +++ b/tools/build-common.sh @@ -34,7 +34,10 @@ matsdk_try_buildtools_once() { if [ ! -f "$marker_file" ]; then if [ $# -gt 0 ]; then - "$@" || echo "$failure_message" + if ! "$@"; then + echo "$failure_message" + return 1 + fi fi matsdk_mark_buildtools_checked "$marker_file" fi diff --git a/tools/setup-buildtools.sh b/tools/setup-buildtools.sh index 9e8033866..e82448968 100755 --- a/tools/setup-buildtools.sh +++ b/tools/setup-buildtools.sh @@ -19,7 +19,8 @@ aarch64|arm64) CMAKE_SHA256=9ca1aadb4451c5dcbdc67f9b4aff42dab52abbaebd8db9e2900026502dbed671 ;; *) - echo "Unsupported architecture for prebuilt CMake: $(uname -m)" >&2 + echo "No prebuilt CMake is configured for $(uname -m)." >&2 + echo "Install CMake 4.3 or newer and rerun the build." >&2 exit 1 ;; esac From 29e8a1fa122dde6cf230190c5e8dd532627f0bcd Mon Sep 17 00:00:00 2001 From: bmehta001 Date: Mon, 21 Sep 2026 11:27:51 -0500 Subject: [PATCH 07/15] Update minimum CMake version requirement Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- tests/embedding/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/embedding/CMakeLists.txt b/tests/embedding/CMakeLists.txt index 23d9729c4..d9692b8ec 100644 --- a/tests/embedding/CMakeLists.txt +++ b/tests/embedding/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 4.1...4.4) project(cpp-client-telemetry_embedding_test LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 11) From 1a748b65526c3984b7bd6cb3d39baa222913680a Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Mon, 21 Sep 2026 12:12:21 -0500 Subject: [PATCH 08/15] Android: keep embedding entry point on CMake 4.1 Allow the Android embedding test and downstream Android source consumers to enter the root project with sdkmanager's CMake 4.1.2. The root project continues to reject versions below 4.3 on non-Android platforms. Files changed: tests/embedding/CMakeLists.txt. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tests/embedding/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/embedding/CMakeLists.txt b/tests/embedding/CMakeLists.txt index 23d9729c4..d9692b8ec 100644 --- a/tests/embedding/CMakeLists.txt +++ b/tests/embedding/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 4.1...4.4) project(cpp-client-telemetry_embedding_test LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 11) From 37ecd5df85dd2671fd785fd141487a19244bd657 Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Tue, 22 Sep 2026 11:36:09 -0500 Subject: [PATCH 09/15] Build: close CMake setup gaps and target Windows 10 Version and validate the Android CMake/NDK marker so stale setup state cannot hide missing tools. Provision CMake for the Linux no-exceptions job that failed under the runner's 3.31 release. Raise desktop builds and header gates to the Windows 10 API floor. Remove the Windows 7 runtime probe, hand-defined network-cost GUID, and obsolete warning suppressions in favor of the SDK IID. Files changed: Android and Linux setup paths, Windows workflows/docs/project definitions, WinHTTP and network detection sources, and the public-header gate. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: fa477318-3257-45cd-8711-d5214b5cb119 --- .github/workflows/build-posix-latest.yml | 1 + .github/workflows/test-win-latest.yml | 4 +- README.md | 6 +- Solutions/net48/net48.vcxproj | 4 +- Solutions/net48/targetver.h | 2 +- Solutions/win32-dll/win32-dll.vcxproj | 4 +- Solutions/win32-lib/win32-lib.vcxproj | 8 +- .../win32-mini-dll/win32-mini-dll.vcxproj | 4 +- .../win32-mini-lib/win32-mini-lib.vcxproj | 8 +- build-android.cmd | 1 + lib/CMakeLists.txt | 4 +- lib/http/HttpClient_WinHttp.cpp | 3 +- lib/pal/desktop/NetworkDetector.cpp | 35 +------ tests/headers/check_public_headers.cmd | 2 +- tools/setup-buildtools-android.cmd | 94 ++++++++++++------- 15 files changed, 90 insertions(+), 90 deletions(-) diff --git a/.github/workflows/build-posix-latest.yml b/.github/workflows/build-posix-latest.yml index 0df27e8a7..f4c2a7c7f 100644 --- a/.github/workflows/build-posix-latest.yml +++ b/.github/workflows/build-posix-latest.yml @@ -67,6 +67,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: ./.github/actions/setup-cmake - name: Install Curl development package run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev - name: Configure diff --git a/.github/workflows/test-win-latest.yml b/.github/workflows/test-win-latest.yml index 6b7a1cd29..f42dbaf89 100644 --- a/.github/workflows/test-win-latest.yml +++ b/.github/workflows/test-win-latest.yml @@ -32,7 +32,7 @@ concurrency: jobs: test: - name: Windows 8.1 API floor ${{ matrix.arch }}-${{ matrix.build }}${{ matrix.transport == 'WinInet' && ' (WinInet)' || '' }} + name: Windows 10 API floor ${{ matrix.arch }}-${{ matrix.build }}${{ matrix.transport == 'WinInet' && ' (WinInet)' || '' }} runs-on: ${{ matrix.os }} timeout-minutes: 30 strategy: @@ -76,7 +76,7 @@ jobs: retention-days: 7 public-headers: - name: Public header gate (MSVC, Windows 8.1 API floor) + name: Public header gate (MSVC, Windows 10 API floor) runs-on: windows-2022 steps: - name: Checkout diff --git a/README.md b/README.md index 44139a815..5a641fc2b 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,6 @@ Other resources to learn how to setup the build system: | Ubuntu 20.04.x LTS | :white_check_mark: | :white_check_mark: | | Ubuntu 22.04.x LTS | :white_check_mark: | :white_check_mark: | | Ubuntu (latest) | :white_check_mark: | :white_check_mark: | - | Windows 8.1 | :white_check_mark: | | | Windows 10.x | :white_check_mark: | | | Windows 11 | :white_check_mark: | | | Windows Server 2016 | :white_check_mark: | | @@ -102,9 +101,8 @@ Other resources to learn how to setup the build system: * **Supported** - these platforms are known to work well with the SDK in production. * **Covered by CI** - these platforms are tested as part of CI. -* Windows 7 and Windows 8 are not supported. Windows desktop builds target the - Windows 8.1 API floor in CI, although GitHub-hosted runners do not provide - Windows 8.1 runtime coverage. +* Windows 7, Windows 8, and Windows 8.1 are not supported. Windows desktop + builds target the Windows 10 API floor in CI. * For iOS simulator, CI covers representative supported simulator configurations on the current macOS runner images rather than every supported iOS 12+ runtime. diff --git a/Solutions/net48/net48.vcxproj b/Solutions/net48/net48.vcxproj index 768f1285a..8eea81770 100644 --- a/Solutions/net48/net48.vcxproj +++ b/Solutions/net48/net48.vcxproj @@ -113,7 +113,7 @@ Level4 Disabled - ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;_CRT_SECURE_NO_WARNINGS;WINVER=0x0603;_WIN32_WINNT=0x0603;_DEBUG;_WINDOWS;_USRDLL;NOMINMAX;%(PreprocessorDefinitions) + ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;_CRT_SECURE_NO_WARNINGS;WINVER=0x0A00;_WIN32_WINNT=0x0A00;_DEBUG;_WINDOWS;_USRDLL;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir)..\..\lib\shared;$(ProjectDir)..\..\lib\shared\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) ProgramDatabase true @@ -196,7 +196,7 @@ Disabled true false - ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;_CRT_SECURE_NO_WARNINGS;WINVER=0x0603;_WIN32_WINNT=0x0603;NDEBUG;_WINDOWS;_USRDLL;NOMINMAX;%(PreprocessorDefinitions) + ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;_CRT_SECURE_NO_WARNINGS;WINVER=0x0A00;_WIN32_WINNT=0x0A00;NDEBUG;_WINDOWS;_USRDLL;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir)..\..\lib\shared;$(ProjectDir)..\..\lib\shared\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) true false diff --git a/Solutions/net48/targetver.h b/Solutions/net48/targetver.h index 5110017bd..498108c8d 100644 --- a/Solutions/net48/targetver.h +++ b/Solutions/net48/targetver.h @@ -5,6 +5,6 @@ // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. -#define _WIN32_WINNT 0x0603 +#define _WIN32_WINNT 0x0A00 #include diff --git a/Solutions/win32-dll/win32-dll.vcxproj b/Solutions/win32-dll/win32-dll.vcxproj index fc84c32d9..7f5bce688 100644 --- a/Solutions/win32-dll/win32-dll.vcxproj +++ b/Solutions/win32-dll/win32-dll.vcxproj @@ -162,7 +162,7 @@ NotUsing Level4 Disabled - ORIGINAL_FILENAME="ClientTelemetry.dll";ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;NOMINMAX;%(PreprocessorDefinitions) + ORIGINAL_FILENAME="ClientTelemetry.dll";ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) ProgramDatabase false @@ -253,7 +253,7 @@ MaxSpeed true false - ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;NOMINMAX;%(PreprocessorDefinitions) + ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) false false diff --git a/Solutions/win32-lib/win32-lib.vcxproj b/Solutions/win32-lib/win32-lib.vcxproj index 7cb56f08c..691cceb91 100644 --- a/Solutions/win32-lib/win32-lib.vcxproj +++ b/Solutions/win32-lib/win32-lib.vcxproj @@ -252,7 +252,7 @@ Level4 Disabled - ZLIB_WINAPI;WIN32;WIN32;NOMINMAX;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;NOMINMAX;%(PreprocessorDefinitions) + ZLIB_WINAPI;WIN32;WIN32;NOMINMAX;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) ProgramDatabase false @@ -320,7 +320,7 @@ Level4 Disabled - ZLIB_WINAPI;WIN32;NOMINMAX;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;%(PreprocessorDefinitions) + ZLIB_WINAPI;WIN32;NOMINMAX;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) ProgramDatabase false @@ -395,7 +395,7 @@ MinSpace true false - ZLIB_WINAPI;WIN32;NOMINMAX;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;%(PreprocessorDefinitions) + ZLIB_WINAPI;WIN32;NOMINMAX;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) false false @@ -471,7 +471,7 @@ MinSpace true false - ZLIB_WINAPI;WIN32;NOMINMAX;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;%(PreprocessorDefinitions) + ZLIB_WINAPI;WIN32;NOMINMAX;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) false false diff --git a/Solutions/win32-mini-dll/win32-mini-dll.vcxproj b/Solutions/win32-mini-dll/win32-mini-dll.vcxproj index b541d9bc9..81fca2b6b 100644 --- a/Solutions/win32-mini-dll/win32-mini-dll.vcxproj +++ b/Solutions/win32-mini-dll/win32-mini-dll.vcxproj @@ -164,7 +164,7 @@ NotUsing Level4 MinSpace - CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;NOMINMAX;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;%(PreprocessorDefinitions) + CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;NOMINMAX;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) ProgramDatabase false @@ -287,7 +287,7 @@ MinSpace false false - CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;WIN32;NOMINMAX;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;%(PreprocessorDefinitions) + CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_SHARED_LIB=1;WIN32;NOMINMAX;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) false false diff --git a/Solutions/win32-mini-lib/win32-mini-lib.vcxproj b/Solutions/win32-mini-lib/win32-mini-lib.vcxproj index 35b1a4f5f..8d305209a 100644 --- a/Solutions/win32-mini-lib/win32-mini-lib.vcxproj +++ b/Solutions/win32-mini-lib/win32-mini-lib.vcxproj @@ -255,7 +255,7 @@ NotUsing Level4 MinSpace - CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_STATIC_LIB=1;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;NOMINMAX;%(PreprocessorDefinitions) + CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_STATIC_LIB=1;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) ProgramDatabase false @@ -361,7 +361,7 @@ NotUsing Level4 MinSpace - CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_STATIC_LIB=1;WIN32;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;NOMINMAX;%(PreprocessorDefinitions) + CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_STATIC_LIB=1;WIN32;_DEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) ProgramDatabase false @@ -474,7 +474,7 @@ MinSpace false false - CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_STATIC_LIB=1;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;NOMINMAX;%(PreprocessorDefinitions) + CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_STATIC_LIB=1;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) false false @@ -579,7 +579,7 @@ MinSpace false true - CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_STATIC_LIB=1;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WINBLUE;_WIN32_WINNT=_WIN32_WINNT_WINBLUE;NOMINMAX;%(PreprocessorDefinitions) + CONFIG_CUSTOM_H="config-compact-noutc.h";ZLIB_WINAPI;WIN32;MATSDK_STATIC_LIB=1;WIN32;NDEBUG;_WINDOWS;_USRDLL;WINVER=_WIN32_WINNT_WIN10;_WIN32_WINNT=_WIN32_WINNT_WIN10;NOMINMAX;%(PreprocessorDefinitions) $(ProjectDir)..\..\lib;$(ProjectDir)..\..\lib\include\public;$(ProjectDir)..\..\lib\include\mat;$(ProjectDir)..\..\lib\include;$(ProjectDir)..\..\bondlite\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) false false diff --git a/build-android.cmd b/build-android.cmd index 7b48cc495..28fc448c2 100644 --- a/build-android.cmd +++ b/build-android.cmd @@ -13,6 +13,7 @@ REM Consider using %ANDROID_NDK_ROOT% environment variable REM Install Android tools if necessary call tools\setup-buildtools-android.cmd +if errorlevel 1 exit /b %ERRORLEVEL% set "PATH=%ANDROID_SDK_ROOT%\cmake\%ANDROID_CMAKE_VERSION%\bin;%ANDROID_NDK%;%PATH%" diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index a39e9d858..18172d107 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -299,8 +299,8 @@ target_compile_definitions(matsdk_internal_config INTERFACE USE_BOND _WINDOWS _USRDLL - WINVER=_WIN32_WINNT_WINBLUE - _WIN32_WINNT=_WIN32_WINNT_WINBLUE) + WINVER=_WIN32_WINNT_WIN10 + _WIN32_WINNT=_WIN32_WINNT_WIN10) target_compile_options(matsdk_internal_config INTERFACE /U_MBCS) if(MATSDK_USE_WININET) target_compile_definitions(matsdk_internal_config INTERFACE HAVE_MAT_WININET_HTTP_CLIENT) diff --git a/lib/http/HttpClient_WinHttp.cpp b/lib/http/HttpClient_WinHttp.cpp index 194fccb79..9230f9277 100644 --- a/lib/http/HttpClient_WinHttp.cpp +++ b/lib/http/HttpClient_WinHttp.cpp @@ -1532,8 +1532,7 @@ unsigned HttpClient_WinHttp::s_nextRequestId = 0; HttpClient_WinHttp::HttpClient_WinHttp() { - // WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY (Windows 8.1+) resolves the proxy - // without depending on a logged-on interactive user or that user's + // Resolve the proxy without depending on a logged-on interactive user or that user's // Internet Explorer settings -- unlike WinInet's // INTERNET_OPEN_TYPE_PRECONFIG, which requires one. This is why WinHTTP, // not WinInet, is Microsoft's documented recommendation for services and diff --git a/lib/pal/desktop/NetworkDetector.cpp b/lib/pal/desktop/NetworkDetector.cpp index f1a90e5b8..41ce75ad2 100644 --- a/lib/pal/desktop/NetworkDetector.cpp +++ b/lib/pal/desktop/NetworkDetector.cpp @@ -8,9 +8,6 @@ #pragma comment(lib, "runtimeobject.lib") -// This macro is required for DEFINE_GUID below to declare a local instance of IID_INetworkCostManager GUID -#define INITGUID - #include "NetworkDetector.hpp" #include @@ -19,12 +16,6 @@ #include "utils/Utils.hpp" #include "pal/PAL.hpp" -// Define a GUID that is only available in Windows 8.x+ SDK . We are using Windows 7.1A SDK for Win32 SDK build, -// so we cannot easily add an extra dependency on Windows 8 or later functionality project-wide. It'd be error-prone, -// because when we have all Windows 8+ features - we might fall into temptation of using that features that would -// break Windows 7.1 compatibility. We cannot afford breaking Windows 7.1 compatibility at this time. -DEFINE_GUID(IID_INetworkCostManager2, 0xdcb00008, 0x570f, 0x4a9b, 0x8d, 0x69, 0x19, 0x9f, 0xdb, 0xa5, 0x72, 0x3b); - #define NETDETECTOR_START WM_USER+1 #define NETDETECTOR_STOP WM_USER+2 @@ -151,7 +142,7 @@ namespace MAT_NS_BEGIN DWORD dwCost = NLM_CONNECTION_COST_UNKNOWN; INetworkCostManager* pNetworkCostManager = NULL; - hr = pNlm->QueryInterface(IID_INetworkCostManager2, (void**)&pNetworkCostManager); + hr = pNlm->QueryInterface(IID_INetworkCostManager, (void**)&pNetworkCostManager); if (hr != S_OK) { return result; } @@ -465,27 +456,8 @@ namespace MAT_NS_BEGIN /// /// Register for COM events and block-wait in RegisterAndListen /// -#pragma warning( push ) -#pragma warning(disable:28159) -#pragma warning(disable:4996) -#pragma warning(disable:6320) -// We must use GetVersionEx to retain backwards compat with Win 7 SP1 void NetworkDetector::run() { - // Check Windows version and if below Windows 8, then avoid running Network cost detection logic - OSVERSIONINFO osvi; - BOOL bIsWindows8orLater; - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - bIsWindows8orLater = ((osvi.dwMajorVersion >= 6) && (osvi.dwMinorVersion >= 2)) || (osvi.dwMajorVersion > 6); - // Applications not manifested for Windows 8.1 or Windows 10 will return the Windows 8 OS version value (6.2) - if (!bIsWindows8orLater) - { - LOG_INFO("Running on Windows %d.%d without network detector...", osvi.dwMajorVersion, osvi.dwMinorVersion); - return; - } - __try { HRESULT hr = CoInitialize(nullptr); @@ -519,9 +491,10 @@ namespace MAT_NS_BEGIN Reset(); } } +#pragma warning(suppress:6320) // The constant filter intentionally handles any SEH failure from the COM stack. __except (EXCEPTION_EXECUTE_HANDLER) { - LOG_ERROR("Handled exception in network cost detection (Windows 7?)"); + LOG_ERROR("Handled exception in network cost detection"); } if (isCoInitialized) @@ -529,9 +502,7 @@ namespace MAT_NS_BEGIN CoUninitialize(); isCoInitialized = false; } - } -#pragma warning( pop ) /// /// Start network monitoring thread diff --git a/tests/headers/check_public_headers.cmd b/tests/headers/check_public_headers.cmd index b342bd682..4bb82cd69 100644 --- a/tests/headers/check_public_headers.cmd +++ b/tests/headers/check_public_headers.cmd @@ -51,7 +51,7 @@ if errorlevel 1 ( ) REM /W4 /WX matches ORT; /external:W0 suppresses platform/STL warnings so only our headers gate. -set "WINDOWS_API_FLOOR=/DWINVER=0x0603 /D_WIN32_WINNT=0x0603" +set "WINDOWS_API_FLOOR=/DWINVER=0x0A00 /D_WIN32_WINNT=0x0A00" set "CXX_COMMON=/nologo /permissive- /W4 /WX /EHsc /experimental:external /external:anglebrackets /external:W0 %WINDOWS_API_FLOOR%" set "C_COMMON=/nologo /std:c11 /TC /W4 /WX /experimental:external /external:anglebrackets /external:W0 %WINDOWS_API_FLOOR%" set "FAIL=0" diff --git a/tools/setup-buildtools-android.cmd b/tools/setup-buildtools-android.cmd index 429de7ac1..c19c709be 100644 --- a/tools/setup-buildtools-android.cmd +++ b/tools/setup-buildtools-android.cmd @@ -1,33 +1,63 @@ -if exist ".buildtools" ( - echo Skiping dependencies installation -) else ( - pushd "%~dp0" - where choco >NUL 2>NUL - if %ERRORLEVEL% neq 0 call "%~dp0\setup-choco.cmd" - - echo Installing dependencies [requires Admin / elevated Command prompt] - echo ANDROID_SDK_ROOT = %ANDROID_SDK_ROOT% - echo ANDROID_HOME = %ANDROID_HOME% - echo ANDROID_NDK = %ANDROID_NDK% - echo ANDROID_NDK_HOME = %ANDROID_NDK_HOME% - - if not exist "%USERPROFILE%\.android\repositories.cfg" ( - echo Creating default repositories.cfg ... - copy NUL "%USERPROFILE%\.android\repositories.cfg" - ) - - REM Use chocolatey for basic deps - choco install --no-progress -y android-sdk - choco install --no-progress -y ninja - - REM Use sdkmanager for additional deps - pushd %ANDROID_SDK_ROOT%\tools\bin - echo y | call sdkmanager.bat --include_obsolete --verbose --sdk_root=%ANDROID_SDK_ROOT% "platforms;android-28" "sources;android-28" - echo y | call sdkmanager.bat --include_obsolete --verbose --sdk_root=%ANDROID_SDK_ROOT% "platforms;android-29" "sources;android-29" - echo y | call sdkmanager.bat --include_obsolete --verbose --sdk_root=%ANDROID_SDK_ROOT% "build-tools;29.0.3" - echo y | call sdkmanager.bat --include_obsolete --verbose --sdk_root=%ANDROID_SDK_ROOT% "platform-tools" - echo y | call sdkmanager.bat --install --include_obsolete --verbose --sdk_root=%ANDROID_SDK_ROOT% "ndk-bundle" "cmake;%ANDROID_CMAKE_VERSION%" "ndk;%ANDROID_NDK_VERSION%" - popd - popd - copy NUL .buildtools +@echo off +set "BUILD_TOOLS_MARKER=.buildtools" +set "BUILD_TOOLS_MARKER_VERSION=android-cmake-%ANDROID_CMAKE_VERSION%-ndk-%ANDROID_NDK_VERSION%" +set "BUILD_TOOLS_MARKER_ACTUAL=" + +if not exist "%BUILD_TOOLS_MARKER%" goto install +set /p BUILD_TOOLS_MARKER_ACTUAL=<"%BUILD_TOOLS_MARKER%" +if /I not "%BUILD_TOOLS_MARKER_ACTUAL%"=="%BUILD_TOOLS_MARKER_VERSION%" goto install +if not exist "%ANDROID_SDK_ROOT%\cmake\%ANDROID_CMAKE_VERSION%\bin\cmake.exe" goto install +if not exist "%ANDROID_NDK%" goto install +echo Skipping dependencies installation +exit /b 0 + +:install +del "%BUILD_TOOLS_MARKER%" 2>NUL +pushd "%~dp0" +where choco >NUL 2>NUL +if errorlevel 1 call "%~dp0\setup-choco.cmd" +if errorlevel 1 goto install_failed + +echo Installing dependencies [requires Admin / elevated Command prompt] +echo ANDROID_SDK_ROOT = %ANDROID_SDK_ROOT% +echo ANDROID_HOME = %ANDROID_HOME% +echo ANDROID_NDK = %ANDROID_NDK% +echo ANDROID_NDK_HOME = %ANDROID_NDK_HOME% + +if not exist "%USERPROFILE%\.android\repositories.cfg" ( + echo Creating default repositories.cfg ... + copy NUL "%USERPROFILE%\.android\repositories.cfg" + if errorlevel 1 goto install_failed ) + +REM Use chocolatey for basic deps +call choco install --no-progress -y android-sdk +if errorlevel 1 goto install_failed +call choco install --no-progress -y ninja +if errorlevel 1 goto install_failed + +REM Use sdkmanager for additional deps +pushd "%ANDROID_SDK_ROOT%\tools\bin" +echo y | call .\sdkmanager.bat --include_obsolete --verbose --sdk_root="%ANDROID_SDK_ROOT%" "platforms;android-28" "sources;android-28" +if errorlevel 1 goto sdkmanager_failed +echo y | call .\sdkmanager.bat --include_obsolete --verbose --sdk_root="%ANDROID_SDK_ROOT%" "platforms;android-29" "sources;android-29" +if errorlevel 1 goto sdkmanager_failed +echo y | call .\sdkmanager.bat --include_obsolete --verbose --sdk_root="%ANDROID_SDK_ROOT%" "build-tools;29.0.3" +if errorlevel 1 goto sdkmanager_failed +echo y | call .\sdkmanager.bat --include_obsolete --verbose --sdk_root="%ANDROID_SDK_ROOT%" "platform-tools" +if errorlevel 1 goto sdkmanager_failed +echo y | call .\sdkmanager.bat --install --include_obsolete --verbose --sdk_root="%ANDROID_SDK_ROOT%" "ndk-bundle" "cmake;%ANDROID_CMAKE_VERSION%" "ndk;%ANDROID_NDK_VERSION%" +if errorlevel 1 goto sdkmanager_failed +popd +popd + +if not exist "%ANDROID_SDK_ROOT%\cmake\%ANDROID_CMAKE_VERSION%\bin\cmake.exe" exit /b 1 +if not exist "%ANDROID_NDK%" exit /b 1 +>"%BUILD_TOOLS_MARKER%" echo %BUILD_TOOLS_MARKER_VERSION% +exit /b 0 + +:sdkmanager_failed +popd +:install_failed +popd +exit /b 1 From 809249251b96c6750018cc915fe67f0f56f811d7 Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Tue, 22 Sep 2026 13:28:09 -0500 Subject: [PATCH 10/15] CMake: propagate mbedTLS threading configuration Expose the public mbedTLS threading macros to curl so both dependencies compile public context types with identical layouts and avoid an entropy-context overflow. Files changed: cmake/MatsdkFetchCurl.cmake. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: fa477318-3257-45cd-8711-d5214b5cb119 --- cmake/MatsdkFetchCurl.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/MatsdkFetchCurl.cmake b/cmake/MatsdkFetchCurl.cmake index ddda91aa5..5499e0c7f 100644 --- a/cmake/MatsdkFetchCurl.cmake +++ b/cmake/MatsdkFetchCurl.cmake @@ -96,7 +96,7 @@ function(matsdk_fetch_curl out_target) foreach(target mbedtls mbedx509 mbedcrypto) matsdk_configure_fetched_static_target("${target}") - target_compile_definitions("${target}" PRIVATE + target_compile_definitions("${target}" PUBLIC MBEDTLS_THREADING_C MBEDTLS_THREADING_PTHREAD) endforeach() From da737fed32933f6b3aae9d97d5b00230cfcfb9db Mon Sep 17 00:00:00 2001 From: bmehta001 Date: Wed, 23 Sep 2026 00:58:45 -0500 Subject: [PATCH 11/15] Revert CMake changes --- .github/actions/setup-cmake/action.yml | 12 ---- .github/workflows/build-android.yml | 2 +- .github/workflows/build-ios-mac.yml | 1 - .github/workflows/build-posix-latest.yml | 1 - .github/workflows/build-ubuntu-2204.yml | 1 - .github/workflows/codeql-analysis.yml | 1 - .github/workflows/spm-release.yml | 3 - .github/workflows/test-embedding.yml | 7 --- .github/workflows/test-vcpkg.yml | 5 -- .github/workflows/test-win-latest.yml | 1 - .github/workflows/vcpkg-release-bump.yml | 6 -- CMakeLists.txt | 13 ++-- README.md | 5 +- build-android.cmd | 60 +++++++++---------- build.sh | 17 ++---- cmake/MSTelemetryConfig.cmake.in | 4 -- cmake/MatsdkOptions.cmake | 2 +- cmake/MatsdkRequirePresetSupport.cmake | 8 ++- docs/building-with-vcpkg.md | 2 +- docs/cpp-start-android.md | 2 +- docs/embedding-with-cmake.md | 4 +- docs/linux-setup-build.md | 6 +- examples/c/SampleC-Guest/CMakeLists.txt | 2 +- examples/cpp/EventSender/CMakeLists.txt | 2 +- examples/cpp/MacProxy/CMakeLists.txt | 2 +- examples/cpp/SampleCpp/CMakeLists.txt | 2 +- examples/cpp/SampleCppMini/CMakeLists.txt | 2 +- examples/objc/cocoa-app/CMakeLists.txt | 2 +- lib/android_build/app/build.gradle | 2 +- .../app/src/main/cpp/CMakeLists.txt | 2 +- lib/android_build/maesdk/build.gradle | 2 +- .../maesdk/src/main/cpp/CMakeLists.txt | 2 +- tests/embedding/CMakeLists.txt | 2 +- tests/vcpkg/CMakeLists.txt | 2 +- tools/build-android-aar.sh | 4 +- tools/setup-buildtools.sh | 54 ++++------------- wrappers/obj-c/CMakeLists.txt | 2 +- wrappers/swift/CMakeLists.txt | 2 +- 38 files changed, 87 insertions(+), 162 deletions(-) delete mode 100644 .github/actions/setup-cmake/action.yml diff --git a/.github/actions/setup-cmake/action.yml b/.github/actions/setup-cmake/action.yml deleted file mode 100644 index 2319c0acb..000000000 --- a/.github/actions/setup-cmake/action.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Set up CMake -description: Install the repository's required CMake release. -runs: - using: composite - steps: - - name: Install CMake 4.4.2 - shell: pwsh - run: | - python -m pip install --disable-pip-version-check --upgrade "cmake==4.4.2" - $cmakeBin = python -c "import cmake; print(cmake.CMAKE_BIN_DIR)" - $cmakeBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - & (Join-Path $cmakeBin "cmake") --version diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 12c4ec05f..96cb76c80 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -57,7 +57,7 @@ jobs: java -version gci env:* | sort-object name new-item "$Env:USERPROFILE\.android\repositories.cfg" -ItemType "file" - echo yes | sdkmanager "ndk-bundle" "cmake;4.1.2" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT + echo yes | sdkmanager "ndk-bundle" "cmake;3.22.1" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT - name: Chocolatey run: | choco install --no-progress -y ninja diff --git a/.github/workflows/build-ios-mac.yml b/.github/workflows/build-ios-mac.yml index 6242f732e..d7687200d 100644 --- a/.github/workflows/build-ios-mac.yml +++ b/.github/workflows/build-ios-mac.yml @@ -55,7 +55,6 @@ jobs: run: | sudo chown -R $USER:staff /usr/local - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Initialize googletest run: git submodule update --init --depth=1 third_party/googletest - name: build diff --git a/.github/workflows/build-posix-latest.yml b/.github/workflows/build-posix-latest.yml index f4c2a7c7f..a269238fd 100644 --- a/.github/workflows/build-posix-latest.yml +++ b/.github/workflows/build-posix-latest.yml @@ -44,7 +44,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Initialize googletest run: git submodule update --init --depth=1 third_party/googletest - name: Test ${{ matrix.os }} ${{ matrix.config }} diff --git a/.github/workflows/build-ubuntu-2204.yml b/.github/workflows/build-ubuntu-2204.yml index b82a5b236..ca21ad8c4 100644 --- a/.github/workflows/build-ubuntu-2204.yml +++ b/.github/workflows/build-ubuntu-2204.yml @@ -44,7 +44,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Initialize googletest run: git submodule update --init --depth=1 third_party/googletest - name: Test ${{ matrix.os }} ${{ matrix.config }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 00086362c..f92b37e3e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -41,7 +41,6 @@ jobs: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 continue-on-error: true - - uses: ./.github/actions/setup-cmake # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/spm-release.yml b/.github/workflows/spm-release.yml index 77ce7b933..1782d3229 100644 --- a/.github/workflows/spm-release.yml +++ b/.github/workflows/spm-release.yml @@ -84,9 +84,6 @@ jobs: # port (the optional modules are excluded there too). submodules: false - - uses: ./.github/actions/setup-cmake - if: ${{ steps.ver.outputs.skip != 'true' }} - - name: Skip if this SPM version is already published id: pub if: ${{ steps.ver.outputs.skip != 'true' }} diff --git a/.github/workflows/test-embedding.yml b/.github/workflows/test-embedding.yml index 4cfe66cab..5c13e1e25 100644 --- a/.github/workflows/test-embedding.yml +++ b/.github/workflows/test-embedding.yml @@ -48,7 +48,6 @@ jobs: disable-logging: ON steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Install system dependencies if: matrix.dependencies == 'system' run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libsqlite3-dev ninja-build zlib1g-dev @@ -89,7 +88,6 @@ jobs: runs-on: windows-2022 steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Configure run: > cmake -S tests/embedding -B build-embedding -A x64 @@ -109,7 +107,6 @@ jobs: mode: [system, fetched] steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Install system dependencies if: matrix.mode == 'system' run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libsqlite3-dev zlib1g-dev @@ -155,7 +152,6 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Configure, install, and consume run: | cmake -G Ninja -S . -B build-package \ @@ -184,7 +180,6 @@ jobs: architectures: [arm64, "arm64;x86_64"] steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Configure run: > cmake -G Ninja -S tests/embedding -B build-embedding @@ -209,7 +204,6 @@ jobs: zlib-provider: VENDORED steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Configure run: > cmake -G Xcode -S tests/embedding -B build-embedding @@ -229,7 +223,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Configure run: > cmake -G Ninja -S tests/embedding -B build-embedding diff --git a/.github/workflows/test-vcpkg.yml b/.github/workflows/test-vcpkg.yml index 1cc3c76b0..98ef86429 100644 --- a/.github/workflows/test-vcpkg.yml +++ b/.github/workflows/test-vcpkg.yml @@ -31,7 +31,6 @@ jobs: transport: [WinHTTP, WinInet] steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | @@ -53,7 +52,6 @@ jobs: name: Linux (x64-linux) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | @@ -72,7 +70,6 @@ jobs: name: macOS (native) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | @@ -91,7 +88,6 @@ jobs: name: iOS (arm64-ios cross-compile) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | @@ -110,7 +106,6 @@ jobs: name: Android (arm64-v8a API 23 cross-compile) steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Bootstrap vcpkg run: | diff --git a/.github/workflows/test-win-latest.yml b/.github/workflows/test-win-latest.yml index f42dbaf89..4497493ed 100644 --- a/.github/workflows/test-win-latest.yml +++ b/.github/workflows/test-win-latest.yml @@ -50,7 +50,6 @@ jobs: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: setup-msbuild uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0 diff --git a/.github/workflows/vcpkg-release-bump.yml b/.github/workflows/vcpkg-release-bump.yml index 97405b969..77ed47444 100644 --- a/.github/workflows/vcpkg-release-bump.yml +++ b/.github/workflows/vcpkg-release-bump.yml @@ -130,12 +130,6 @@ jobs: if: ${{ steps.ver.outputs.skip != 'true' }} run: cd vcpkg && ./bootstrap-vcpkg.sh -disableMetrics - - name: Set up CMake - if: ${{ steps.ver.outputs.skip != 'true' }} - run: | - python3 -m pip install --disable-pip-version-check --upgrade "cmake==4.4.2" - cmake --version - - name: Update port REF, SHA512 and version if: ${{ steps.ver.outputs.skip != 'true' }} run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index bbf3e79d8..9dadc7a70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,6 @@ -cmake_minimum_required(VERSION 4.1...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(MSTelemetry LANGUAGES C CXX) -if(CMAKE_VERSION VERSION_LESS 4.3 AND NOT CMAKE_SYSTEM_NAME STREQUAL "Android") - message(FATAL_ERROR - "MSTelemetry requires CMake 4.3 or newer. Android source builds may use " - "the Android SDK's CMake 4.1.2 package.") -endif() if(APPLE) set(MATSDK_BUILD_PLATFORM_APPLE TRUE) else() @@ -243,11 +238,17 @@ endif() ################################################################################################ # Canonical dependency targets ################################################################################################ +if(TARGET SQLite::SQLite3 AND NOT TARGET SQLite3::SQLite3) + matsdk_add_interface_dependency(SQLite3::SQLite3 SQLite::SQLite3) +endif() if(MATSDK_SQLITE_PROVIDER_RESOLVED STREQUAL "SYSTEM" AND NOT TARGET SQLite3::SQLite3) if(APPLE AND NOT MATSDK_USING_VCPKG) matsdk_add_apple_system_library(SQLite3::SQLite3 sqlite3) else() find_package(SQLite3 QUIET) + if(TARGET SQLite::SQLite3 AND NOT TARGET SQLite3::SQLite3) + matsdk_add_interface_dependency(SQLite3::SQLite3 SQLite::SQLite3) + endif() if(NOT TARGET SQLite3::SQLite3 AND MATSDK_USING_VCPKG) find_package(unofficial-sqlite3 CONFIG REQUIRED) matsdk_add_interface_dependency( diff --git a/README.md b/README.md index 5a641fc2b..ba11b35cd 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,8 @@ Platform specific build instructions: Standard configure/build presets are listed with `cmake --list-presets`. `build.sh`, `build-ios.sh`, and `build-cmake.ps1` are thin compatibility -wrappers around those presets. Builds and installed-package consumers require -CMake 4.3 or newer. Android source builds may use the Android SDK's CMake 4.1.2 -package because Google does not currently publish CMake 4.3 through sdkmanager. +wrappers around those presets. Presets require CMake 3.21+; direct CMake builds +retain the project's CMake 3.15 floor. Other resources to learn how to setup the build system: diff --git a/build-android.cmd b/build-android.cmd index 28fc448c2..1ab6da44e 100644 --- a/build-android.cmd +++ b/build-android.cmd @@ -1,30 +1,30 @@ -@echo off -pushd "%~dp0" - -REM Users may override the default %ANDROID_SDK_ROOT% location if necessary - -if "%ANDROID_SDK_ROOT%" == "" set "ANDROID_SDK_ROOT=C:\Android\android-sdk" -if "%ANDROID_NDK_VERSION%" == "" set "ANDROID_NDK_VERSION=27.0.12077973" -if "%ANDROID_CMAKE_VERSION%" == "" set "ANDROID_CMAKE_VERSION=4.1.2" -if "%ANDROID_HOME%" == "" set "ANDROID_HOME=%ANDROID_SDK_ROOT%" -if "%ANDROID_NDK%" == "" set "ANDROID_NDK=%ANDROID_SDK_ROOT%\ndk\%ANDROID_NDK_VERSION%" -if "%ANDROID_NDK_HOME%" == "" set "ANDROID_NDK_HOME=%ANDROID_NDK%" -REM Consider using %ANDROID_NDK_ROOT% environment variable - -REM Install Android tools if necessary -call tools\setup-buildtools-android.cmd -if errorlevel 1 exit /b %ERRORLEVEL% - -set "PATH=%ANDROID_SDK_ROOT%\cmake\%ANDROID_CMAKE_VERSION%\bin;%ANDROID_NDK%;%PATH%" - -echo Building SDK -pushd .\lib\android_build -call .\gradlew.bat maesdk:assemble app:assemble %* -popd - -echo Building Tests -pushd .\lib\android_build -call .\gradlew.bat maesdk:test %* -popd - -popd +@echo off +pushd "%~dp0" + +REM Users may override the default %ANDROID_SDK_ROOT% location if necessary + +if "%ANDROID_SDK_ROOT%" == "" set "ANDROID_SDK_ROOT=C:\Android\android-sdk" +if "%ANDROID_NDK_VERSION%" == "" set "ANDROID_NDK_VERSION=27.0.12077973" +if "%ANDROID_CMAKE_VERSION%" == "" set "ANDROID_CMAKE_VERSION=3.22.1" +if "%ANDROID_HOME%" == "" set "ANDROID_HOME=%ANDROID_SDK_ROOT%" +if "%ANDROID_NDK%" == "" set "ANDROID_NDK=%ANDROID_SDK_ROOT%\ndk\%ANDROID_NDK_VERSION%" +if "%ANDROID_NDK_HOME%" == "" set "ANDROID_NDK_HOME=%ANDROID_NDK%" +REM Consider using %ANDROID_NDK_ROOT% environment variable + +REM Install Android tools if necessary +call tools\setup-buildtools-android.cmd +if errorlevel 1 exit /b %ERRORLEVEL% + +set "PATH=%ANDROID_SDK_ROOT%\cmake\%ANDROID_CMAKE_VERSION%\bin;%ANDROID_NDK%;%PATH%" + +echo Building SDK +pushd .\lib\android_build +call .\gradlew.bat maesdk:assemble app:assemble %* +popd + +echo Building Tests +pushd .\lib\android_build +call .\gradlew.bat maesdk:test %* +popd + +popd diff --git a/build.sh b/build.sh index 5cdaf4556..f701610db 100755 --- a/build.sh +++ b/build.sh @@ -27,6 +27,8 @@ usage() exit 0 } +export PATH=/usr/local/bin:$PATH + DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo "Current directory: $DIR" cd $DIR @@ -138,12 +140,9 @@ echo "macosx deployment target="$MACOSX_DEPLOYMENT_TARGET # Install build tools and recent sqlite3 BUILD_TOOLS_MARKER=.buildtools -BUILD_TOOLS_MARKER_VERSION=cmake-4.4.2 OS_NAME=`uname -a` -if [ ! -f "$BUILD_TOOLS_MARKER" ] || \ - [ "$(cat "$BUILD_TOOLS_MARKER")" != "$BUILD_TOOLS_MARKER_VERSION" ]; then - rm -f "$BUILD_TOOLS_MARKER" +if [ ! -f "$BUILD_TOOLS_MARKER" ]; then buildtools_cmd=() case "$OS_NAME" in *Darwin*) buildtools_cmd=(tools/setup-buildtools-apple.sh "$APPLE_ARCH") ;; @@ -154,8 +153,8 @@ if [ ! -f "$BUILD_TOOLS_MARKER" ] || \ if [[ ${#buildtools_cmd[@]} -gt 0 ]]; then if [[ -z "$NOROOT" ]]; then matsdk_try_buildtools_once "$BUILD_TOOLS_MARKER" \ - "Build-tools installation failed." \ - sudo "${buildtools_cmd[@]}" || exit 1 + "No root: skipping build tools installation." \ + sudo "${buildtools_cmd[@]}" else echo "No root: skipping build tools installation." matsdk_mark_buildtools_checked "$BUILD_TOOLS_MARKER" @@ -163,12 +162,6 @@ if [ ! -f "$BUILD_TOOLS_MARKER" ] || \ else matsdk_mark_buildtools_checked "$BUILD_TOOLS_MARKER" fi - printf '%s\n' "$BUILD_TOOLS_MARKER_VERSION" > "$BUILD_TOOLS_MARKER" -fi - -if ! command -v cmake >/dev/null 2>&1 || \ - [ "$(printf '%s\n' 4.3 "$(cmake --version | head -1 | awk '{print $3}')" | sort -V | head -1)" != "4.3" ]; then - export PATH=/usr/local/bin:$PATH fi matsdk_print_compiler_versions diff --git a/cmake/MSTelemetryConfig.cmake.in b/cmake/MSTelemetryConfig.cmake.in index 16d3c1289..60a3579c2 100644 --- a/cmake/MSTelemetryConfig.cmake.in +++ b/cmake/MSTelemetryConfig.cmake.in @@ -1,9 +1,5 @@ @PACKAGE_INIT@ -if(CMAKE_VERSION VERSION_LESS 4.3) - message(FATAL_ERROR "MSTelemetry requires CMake 4.3 or newer.") -endif() - include(CMakeFindDependencyMacro) include("${CMAKE_CURRENT_LIST_DIR}/MatsdkDependencyTargets.cmake") diff --git a/cmake/MatsdkOptions.cmake b/cmake/MatsdkOptions.cmake index bf89230bd..ed95ec805 100644 --- a/cmake/MatsdkOptions.cmake +++ b/cmake/MatsdkOptions.cmake @@ -129,7 +129,7 @@ string(TOUPPER "${MATSDK_ZLIB_PROVIDER}" MATSDK_ZLIB_PROVIDER_RESOLVED) if(MATSDK_SQLITE_PROVIDER_RESOLVED STREQUAL "AUTO") if(MATSDK_ANDROID_USE_ROOM AND CMAKE_SYSTEM_NAME STREQUAL "Android") set(MATSDK_SQLITE_PROVIDER_RESOLVED NONE) - elseif(TARGET SQLite3::SQLite3) + elseif(TARGET SQLite3::SQLite3 OR TARGET SQLite::SQLite3) set(MATSDK_SQLITE_PROVIDER_RESOLVED SYSTEM) elseif(NOT MATSDK_USING_VCPKG AND (WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Android")) diff --git a/cmake/MatsdkRequirePresetSupport.cmake b/cmake/MatsdkRequirePresetSupport.cmake index e6bacf4e0..18b682ad0 100644 --- a/cmake/MatsdkRequirePresetSupport.cmake +++ b/cmake/MatsdkRequirePresetSupport.cmake @@ -1 +1,7 @@ -cmake_minimum_required(VERSION 4.3) +cmake_minimum_required(VERSION 3.15) + +if(CMAKE_VERSION VERSION_LESS 3.21) + message(FATAL_ERROR + "The 1DS build wrappers require CMake 3.21 or newer for CMakePresets.json " + "support. Direct CMake builds retain the CMake 3.15 minimum.") +endif() diff --git a/docs/building-with-vcpkg.md b/docs/building-with-vcpkg.md index f63e8d8ed..a4aa85a3c 100644 --- a/docs/building-with-vcpkg.md +++ b/docs/building-with-vcpkg.md @@ -201,7 +201,7 @@ The vcpkg port automatically resolves the following dependencies: | Dependency | vcpkg Package | CMake Target | Platforms | | -------------- | --------------- | --------------------------------- | ------------------ | -| SQLite3 | `sqlite3` | `unofficial::sqlite3::sqlite3` | Non-Apple (default; see `minimal-sqlite`). **macOS/iOS link the system `libsqlite3`** (`SQLite3::SQLite3`) | +| SQLite3 | `sqlite3` | `unofficial::sqlite3::sqlite3` | Non-Apple (default; see `minimal-sqlite`). **macOS/iOS link the system `libsqlite3`** (`SQLite::SQLite3`) | | zlib | `zlib` | `ZLIB::ZLIB` | Non-Apple. **macOS/iOS link the system `libz`** | | nlohmann JSON | `nlohmann-json` | `nlohmann_json::nlohmann_json` | All | | libcurl | `curl[openssl]` or `curl[mbedtls]` | `CURL::libcurl` | Linux by default; Android only when `android-curl-openssl` or `android-curl-mbedtls` is selected | diff --git a/docs/cpp-start-android.md b/docs/cpp-start-android.md index f724c3515..8f02b05e7 100644 --- a/docs/cpp-start-android.md +++ b/docs/cpp-start-android.md @@ -25,7 +25,7 @@ Default environment variables used by `build-android.cmd` script: ```console set "ANDROID_NDK_VERSION=27.0.12077973" -set "ANDROID_CMAKE_VERSION=4.1.2" +set "ANDROID_CMAKE_VERSION=3.22.1" set "ANDROID_SDK_ROOT=C:\Android\android-sdk" set "ANDROID_HOME=%ANDROID_SDK_ROOT%" set "ANDROID_NDK=%ANDROID_SDK_ROOT%\ndk\%ANDROID_NDK_VERSION%" diff --git a/docs/embedding-with-cmake.md b/docs/embedding-with-cmake.md index e9c196c1f..6cce81468 100644 --- a/docs/embedding-with-cmake.md +++ b/docs/embedding-with-cmake.md @@ -41,7 +41,7 @@ set(MATSDK_ZLIB_PROVIDER VENDORED CACHE STRING "" FORCE) # SYSTEM or VENDORED `MINIMAL` builds the feature-stripped SQLite amalgamation. `VENDORED` builds the unstripped vendored dependency. `SYSTEM` consumes the canonical `SQLite3::SQLite3` / `ZLIB::ZLIB` targets or uses `find_package()`. `AUTO` -preserves platform defaults: system dependencies on Linux/Apple source builds +preserves platform defaults: system dependencies on desktop/Apple source builds and vendored dependencies on Windows/Android source builds. Recommended packaged-library policy: @@ -94,7 +94,7 @@ leaf consumer target, define the standard CMake targets before adding the SDK: # These may be real targets or aliases to targets owned by your superbuild. add_library(CURL::libcurl ALIAS my_curl_target) add_library(ZLIB::ZLIB ALIAS my_zlib_target) -add_library(SQLite3::SQLite3 ALIAS my_sqlite_target) +add_library(SQLite::SQLite3 ALIAS my_sqlite_target) add_subdirectory(cpp_client_telemetry) target_link_libraries(your_target PRIVATE MSTelemetry::mat) diff --git a/docs/linux-setup-build.md b/docs/linux-setup-build.md index f4d95c57b..2e045fa59 100644 --- a/docs/linux-setup-build.md +++ b/docs/linux-setup-build.md @@ -3,7 +3,6 @@ ## Required dependencies - gcc-5+ or above -- CMake 4.3 or newer - zlib - sqlite3 - libcurl + openssl @@ -12,7 +11,7 @@ ### Installing dependencies as root ```console -sudo apt-get install sqlite3 libsqlite3-dev libcurl4-openssl-dev libgtest-dev +sudo apt-get install cmake3 sqlite3 libsqlite3-dev libcurl4-openssl-dev libgtest-dev ``` There is a helper script in source code distribution that can be invoked as follows: @@ -21,9 +20,6 @@ There is a helper script in source code distribution that can be invoked as foll source tools/setup-buildtools.sh ``` -The helper installs the pinned CMake 4.4.2 binary distribution when the -available CMake is older than 4.3. - ### Debian 8.x Jesse (old stable) specific instructions 1DS SDK requires gcc-5+. Latest available in Debian 8 and below is 4.9. gcc-5 and g++-5 must to be installed manually: diff --git a/examples/c/SampleC-Guest/CMakeLists.txt b/examples/c/SampleC-Guest/CMakeLists.txt index 0c1a623b5..f64d0bcd6 100644 --- a/examples/c/SampleC-Guest/CMakeLists.txt +++ b/examples/c/SampleC-Guest/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(SampleC-Guest) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/cpp/EventSender/CMakeLists.txt b/examples/cpp/EventSender/CMakeLists.txt index ff0369568..76a86982b 100644 --- a/examples/cpp/EventSender/CMakeLists.txt +++ b/examples/cpp/EventSender/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(EventSender) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/cpp/MacProxy/CMakeLists.txt b/examples/cpp/MacProxy/CMakeLists.txt index e7d928649..082ee5fed 100644 --- a/examples/cpp/MacProxy/CMakeLists.txt +++ b/examples/cpp/MacProxy/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(MacProxy) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/cpp/SampleCpp/CMakeLists.txt b/examples/cpp/SampleCpp/CMakeLists.txt index b4974fd05..4cc763ceb 100644 --- a/examples/cpp/SampleCpp/CMakeLists.txt +++ b/examples/cpp/SampleCpp/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(SampleCpp) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/cpp/SampleCppMini/CMakeLists.txt b/examples/cpp/SampleCppMini/CMakeLists.txt index a59790dc3..181aff4ce 100644 --- a/examples/cpp/SampleCppMini/CMakeLists.txt +++ b/examples/cpp/SampleCppMini/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(SampleCppMini) # Uncomment for building i386 binary on x86_64 system diff --git a/examples/objc/cocoa-app/CMakeLists.txt b/examples/objc/cocoa-app/CMakeLists.txt index 08193d7f3..70285039a 100644 --- a/examples/objc/cocoa-app/CMakeLists.txt +++ b/examples/objc/cocoa-app/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(foo) include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/MSTelemetrySample.cmake) diff --git a/lib/android_build/app/build.gradle b/lib/android_build/app/build.gradle index abf4dfe12..544239e58 100644 --- a/lib/android_build/app/build.gradle +++ b/lib/android_build/app/build.gradle @@ -29,7 +29,7 @@ android { externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" - version "4.1.2" + version "3.22.1" } } compileOptions { diff --git a/lib/android_build/app/src/main/cpp/CMakeLists.txt b/lib/android_build/app/src/main/cpp/CMakeLists.txt index 4d6142ec0..64e93ab16 100644 --- a/lib/android_build/app/src/main/cpp/CMakeLists.txt +++ b/lib/android_build/app/src/main/cpp/CMakeLists.txt @@ -3,7 +3,7 @@ # Sets the minimum version of CMake required to build the native library. -cmake_minimum_required(VERSION 4.1...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(MaesdkAndroidTests LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/lib/android_build/maesdk/build.gradle b/lib/android_build/maesdk/build.gradle index 3ab3082c9..9a043215e 100644 --- a/lib/android_build/maesdk/build.gradle +++ b/lib/android_build/maesdk/build.gradle @@ -61,7 +61,7 @@ android { externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" - version "4.1.2" + version "3.22.1" } } } diff --git a/lib/android_build/maesdk/src/main/cpp/CMakeLists.txt b/lib/android_build/maesdk/src/main/cpp/CMakeLists.txt index a9be66e5b..6712289dd 100644 --- a/lib/android_build/maesdk/src/main/cpp/CMakeLists.txt +++ b/lib/android_build/maesdk/src/main/cpp/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.1...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(MaesdkAndroid LANGUAGES C CXX) get_filename_component(SDK_ROOT diff --git a/tests/embedding/CMakeLists.txt b/tests/embedding/CMakeLists.txt index d9692b8ec..7b6a77370 100644 --- a/tests/embedding/CMakeLists.txt +++ b/tests/embedding/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.1...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(cpp-client-telemetry_embedding_test LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 11) diff --git a/tests/vcpkg/CMakeLists.txt b/tests/vcpkg/CMakeLists.txt index 1a51e1bcf..709b3038c 100644 --- a/tests/vcpkg/CMakeLists.txt +++ b/tests/vcpkg/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) project(cpp-client-telemetry_vcpkg_test LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) diff --git a/tools/build-android-aar.sh b/tools/build-android-aar.sh index 5263b3680..8ace0f78c 100755 --- a/tools/build-android-aar.sh +++ b/tools/build-android-aar.sh @@ -14,7 +14,7 @@ set -euo pipefail # - Requires ANDROID_SDK_ROOT (or ANDROID_HOME) when installing NDK. ANDROID_NDK_VERSION_DEFAULT="27.0.12077973" -CMAKE_VERSION_DEFAULT="4.1.2" +CMAKE_VERSION_DEFAULT="3.22.1" INSTALL_NDK=0 CLEAN=0 @@ -29,7 +29,7 @@ Build MAESDK Android AAR locally. Options: --install-ndk Install the pinned NDK + CMake via sdkmanager. --ndk-version Override NDK version (default: 27.0.12077973). - --cmake-version Override CMake version (default: 4.1.2). + --cmake-version Override CMake version (default: 3.22.1). --output-dir Output directory (default: /dist/android-aar). --clean Run a clean build (gradle clean). -h, --help Show help. diff --git a/tools/setup-buildtools.sh b/tools/setup-buildtools.sh index e82448968..fa023f6c4 100755 --- a/tools/setup-buildtools.sh +++ b/tools/setup-buildtools.sh @@ -1,44 +1,5 @@ #!/bin/bash -CMAKE_VERSION=4.4.2 - -install_cmake() -{ -if command -v cmake >/dev/null 2>&1 && \ - [ "$(printf '%s\n' 4.3 "$(cmake --version | head -1 | awk '{print $3}')" | sort -V | head -1)" = "4.3" ]; then -return -fi - -case "$(uname -m)" in -x86_64) - CMAKE_ARCH=x86_64 - CMAKE_SHA256=3ada9a3f5d8a85413579bdd0ea6aa8e8da86efdd6d15c91a1afa517f2021956c - ;; -aarch64|arm64) - CMAKE_ARCH=aarch64 - CMAKE_SHA256=9ca1aadb4451c5dcbdc67f9b4aff42dab52abbaebd8db9e2900026502dbed671 - ;; -*) - echo "No prebuilt CMake is configured for $(uname -m)." >&2 - echo "Install CMake 4.3 or newer and rerun the build." >&2 - exit 1 - ;; -esac - -CMAKE_ARCHIVE="cmake-${CMAKE_VERSION}-linux-${CMAKE_ARCH}.tar.gz" -CMAKE_URL="https://cmake.org/files/v4.4/${CMAKE_ARCHIVE}" -CMAKE_INSTALL_DIR="/opt/cmake-${CMAKE_VERSION}" -wget -q "${CMAKE_URL}" -O "/tmp/${CMAKE_ARCHIVE}" || return 1 -echo "${CMAKE_SHA256} /tmp/${CMAKE_ARCHIVE}" | sha256sum --check - || return 1 -mkdir -p "${CMAKE_INSTALL_DIR}" || return 1 -tar -xzf "/tmp/${CMAKE_ARCHIVE}" \ - --strip-components=1 -C "${CMAKE_INSTALL_DIR}" || return 1 -rm -f "/tmp/${CMAKE_ARCHIVE}" || return 1 -for tool in cmake cpack ctest; do - ln -sf "${CMAKE_INSTALL_DIR}/bin/${tool}" "/usr/local/bin/${tool}" || return 1 -done -} - if [ -f /bin/yum ]; then if [ `cat /etc/redhat-release | tr -dc '0-9.'|cut -d \. -f1` == "7" ]; then # Prefer yum over apt-get @@ -69,6 +30,18 @@ echo "*********************************************************" exit 3 fi +if ! command -v cmake >/dev/null 2>&1 || \ + [ "$(printf '%s\n' 3.21.7 "$(cmake --version | head -1 | awk '{print $3}')" | sort -V | head -1)" != "3.21.7" ]; then +yum -y remove cmake +wget https://cmake.org/files/v3.21/cmake-3.21.7.tar.gz +tar -zxvf cmake-3.21.7.tar.gz +cd cmake-3.21.7 +./bootstrap --prefix=/usr/local +make +make install +cd .. +fi + else echo "*** Nothing to install for that version CentOS ***" fi @@ -78,6 +51,7 @@ export DEBIAN_FRONTEND=noninteractive apt-get update -y apt-get install -y automake apt-get install -y libtool-bin +apt-get install -y cmake apt-get install -y sqlite apt-get install -y curl apt-get install -y libcurl4-openssl-dev nghttp2 @@ -91,8 +65,6 @@ apt-get install -y libsqlite3-dev apt-get install -y wget fi -install_cmake || exit 1 - ## Install sqlite 3.22 export SQLITE_PKG=sqlite-autoconf-3220000 wget https://www.sqlite.org/2018/$SQLITE_PKG.tar.gz -O /tmp/sqlite-snapshot.tar.gz diff --git a/wrappers/obj-c/CMakeLists.txt b/wrappers/obj-c/CMakeLists.txt index 39e53751f..e20b5a158 100644 --- a/wrappers/obj-c/CMakeLists.txt +++ b/wrappers/obj-c/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) PROJECT(ObjC_Wrapper) diff --git a/wrappers/swift/CMakeLists.txt b/wrappers/swift/CMakeLists.txt index a82dee693..cc751726e 100644 --- a/wrappers/swift/CMakeLists.txt +++ b/wrappers/swift/CMakeLists.txt @@ -15,7 +15,7 @@ # and linking the static libs to generate the executable. # ------------------------------------------------------------------------------------------------------------ -cmake_minimum_required(VERSION 4.3...4.4) +cmake_minimum_required(VERSION 3.15...3.31) # Set build and path related variables string(TOLOWER ${CMAKE_BUILD_TYPE} LOWER_BUILD_TYPE) From 416888a6f04f084b057853c628425c06c3863b1e Mon Sep 17 00:00:00 2001 From: bmehta001 Date: Wed, 23 Sep 2026 01:02:47 -0500 Subject: [PATCH 12/15] Rm more --- .github/workflows/build-posix-latest.yml | 1 - .github/workflows/codeql-analysis.yml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build-posix-latest.yml b/.github/workflows/build-posix-latest.yml index a269238fd..95c387fd0 100644 --- a/.github/workflows/build-posix-latest.yml +++ b/.github/workflows/build-posix-latest.yml @@ -66,7 +66,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - uses: ./.github/actions/setup-cmake - name: Install Curl development package run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev - name: Configure diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index f92b37e3e..bad283b5f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -139,7 +139,7 @@ jobs: java -version gci env:* | sort-object name new-item "$Env:USERPROFILE\.android\repositories.cfg" -ItemType "file" - echo yes | sdkmanager "ndk-bundle" "cmake;4.1.2" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT + echo yes | sdkmanager "ndk-bundle" "cmake;3.22.1" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT - name: Chocolatey run: | choco install --no-progress -y ninja From 5f0409db211a64d48e4dea1ba176790c44057c1c Mon Sep 17 00:00:00 2001 From: bmehta001 Date: Wed, 23 Sep 2026 16:31:10 -0500 Subject: [PATCH 13/15] Update setup-buildtools-android.cmd for SDK installation Added commands to install Android SDK platforms and sources. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- tools/setup-buildtools-android.cmd | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/setup-buildtools-android.cmd b/tools/setup-buildtools-android.cmd index c19c709be..188bf073a 100644 --- a/tools/setup-buildtools-android.cmd +++ b/tools/setup-buildtools-android.cmd @@ -38,6 +38,7 @@ if errorlevel 1 goto install_failed REM Use sdkmanager for additional deps pushd "%ANDROID_SDK_ROOT%\tools\bin" +if errorlevel 1 goto install_failed echo y | call .\sdkmanager.bat --include_obsolete --verbose --sdk_root="%ANDROID_SDK_ROOT%" "platforms;android-28" "sources;android-28" if errorlevel 1 goto sdkmanager_failed echo y | call .\sdkmanager.bat --include_obsolete --verbose --sdk_root="%ANDROID_SDK_ROOT%" "platforms;android-29" "sources;android-29" From 1fc93da11f91014a2b89f9307a3afc12e48d5feb Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Wed, 23 Sep 2026 16:37:19 -0500 Subject: [PATCH 14/15] CMake: link Windows GUID definitions explicitly Add uuid to the Windows target dependencies so SDK-declared COM GUID symbols resolve for CMake consumers instead of relying on toolchain defaults. Files changed: - lib/CMakeLists.txt: propagate the Windows UUID import library through mat. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: c72c9f67-f709-4c28-a8fa-809e0aefc14d --- lib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 18172d107..e775caf08 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -689,7 +689,7 @@ elseif(PAL_IMPLEMENTATION STREQUAL "WIN32") else() target_link_libraries(mat PRIVATE winhttp) endif() - target_link_libraries(mat PRIVATE crypt32) + target_link_libraries(mat PRIVATE crypt32 uuid) elseif(APPLE) target_link_libraries(mat PUBLIC "-framework CoreFoundation" From 4d3a49c7837eddb54b21e5762979ec79b46b687b Mon Sep 17 00:00:00 2001 From: Bhagirath Mehta Date: Wed, 23 Sep 2026 17:19:52 -0500 Subject: [PATCH 15/15] CMake: defer fetched curl CA selection to runtime Disable curl's build-host CA auto-detection and remove generated CA path macros so redistributable Linux binaries rely on the target host's runtime CA selection. Files changed: - cmake/MatsdkFetchCurl.cmake: sanitize fetched curl CA defaults and enforce that no build-time path remains. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: c72c9f67-f709-4c28-a8fa-809e0aefc14d --- cmake/MatsdkFetchCurl.cmake | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/cmake/MatsdkFetchCurl.cmake b/cmake/MatsdkFetchCurl.cmake index 5499e0c7f..249f37b8e 100644 --- a/cmake/MatsdkFetchCurl.cmake +++ b/cmake/MatsdkFetchCurl.cmake @@ -81,6 +81,10 @@ function(matsdk_fetch_curl out_target) set(${option} ON) endforeach() + set(CURL_CA_BUNDLE none) + set(CURL_CA_PATH none) + set(CURL_CA_EMBED "") + if(MATSDK_CURL_TLS_BACKEND_UPPER STREQUAL "MBEDTLS") set(LINK_WITH_PTHREAD ON) set(USE_STATIC_MBEDTLS_LIBRARY ON) @@ -128,6 +132,26 @@ function(matsdk_fetch_curl out_target) message(FATAL_ERROR "The embedded static CURL::libcurl target was not created.") endif() + set(_matsdk_curl_config "${matsdk_curl_BINARY_DIR}/lib/curl_config.h") + if(NOT EXISTS "${_matsdk_curl_config}") + message(FATAL_ERROR + "The embedded curl configuration was not generated: ${_matsdk_curl_config}") + endif() + file(READ "${_matsdk_curl_config}" _matsdk_curl_config_contents) + foreach(definition CURL_CA_BUNDLE CURL_CA_PATH) + string(REGEX REPLACE + "#define ${definition} \"[^\"]*\"" + "/* #undef ${definition} */" + _matsdk_curl_config_contents + "${_matsdk_curl_config_contents}") + endforeach() + if(_matsdk_curl_config_contents MATCHES + "#define CURL_CA_(BUNDLE|PATH)") + message(FATAL_ERROR + "Embedded curl retained a build-time certificate authority path.") + endif() + file(WRITE "${_matsdk_curl_config}" "${_matsdk_curl_config_contents}") + matsdk_configure_fetched_static_target(libcurl_static) set(_matsdk_fetched_curl_targets libcurl_static)