diff --git a/.gitattributes b/.gitattributes index 8fc60d592..429fefd5c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -87,6 +87,12 @@ GNUmakefile text *.xml text *.cfg text +## Exclude vcpkg port and test scaffolding from GitHub tarballs. +## This avoids a chicken-and-egg problem: the portfile contains a SHA512 +## of the tarball, so changes to the portfile must not change the tarball. +tools/ports/ export-ignore +tests/vcpkg/ export-ignore + ## Self-reference =) .gitignore text .gitattributes text diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 06bce4267..d25e81e72 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -17,13 +17,18 @@ on: - main - dev + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: runs-on: windows-latest name: Build for Android steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: false - name: Update submodules @@ -32,7 +37,7 @@ jobs: git config --global submodule.lib/modules.update none git -c protocol.version=2 submodule update --init --force --depth=1 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v5 with: distribution: 'adopt' java-version: '17' @@ -40,14 +45,13 @@ jobs: # Workaround for: 'Unable to decrypt local Maven settings credentials' run: rm $Env:USERPROFILE\.m2\settings.xml - name: Setup Android SDK - uses: android-actions/setup-android@v2 + uses: android-actions/setup-android@v3 - name: Install NDK run: | java -version gci env:* | sort-object name - new-item "C:\Users\runneradmin\.android\repositories.cfg" -ItemType "file" - echo yes | .\sdkmanager.bat "ndk-bundle" "cmake;3.10.2.4988404" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT - working-directory: ${{ env.ANDROID_SDK_ROOT }}\cmdline-tools\7.0\bin + new-item "$Env:USERPROFILE\.android\repositories.cfg" -ItemType "file" + echo yes | sdkmanager "ndk-bundle" "cmake;3.10.2.4988404" "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 80c5f981d..2ed1ac867 100644 --- a/.github/workflows/build-ios-mac.yml +++ b/.github/workflows/build-ios-mac.yml @@ -19,17 +19,22 @@ on: schedule: - cron: 0 2 * * 1-5 + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: strategy: matrix: - os: [macos-13, macos-15] + os: [macos-14, macos-15] config: [release, debug] simulator: ["'iPhone 15'", "'iPad Pro (11-inch) (4th generation)'", "'iPhone 16'", "'iPad Air 11-inch (M2)'"] exclude: - - os: macos-13 + - os: macos-14 simulator: "'iPhone 16'" - - os: macos-13 + - os: macos-14 simulator: "'iPad Air 11-inch (M2)'" - os: macos-15 simulator: "'iPhone 15'" @@ -42,14 +47,14 @@ jobs: - name: Grant write permissions to /usr/local run: | sudo chown -R $USER:staff /usr/local - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: submodules: 'true' continue-on-error: true - name: build run: | - if [[ "${{ matrix.os }}" == "macos-13" ]]; then - export IOS_DEPLOYMENT_TARGET=13.0; + if [[ "${{ matrix.os }}" == "macos-14" ]]; then + export IOS_DEPLOYMENT_TARGET=14.0; elif [[ "${{ matrix.os }}" == "macos-15" ]]; then export IOS_DEPLOYMENT_TARGET=15.0; fi diff --git a/.github/workflows/build-posix-latest.yml b/.github/workflows/build-posix-latest.yml index 2271a459b..9990c6bb2 100644 --- a/.github/workflows/build-posix-latest.yml +++ b/.github/workflows/build-posix-latest.yml @@ -19,6 +19,11 @@ on: schedule: - cron: 0 2 * * 1-5 + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: @@ -32,7 +37,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v1 + uses: actions/checkout@v4 continue-on-error: true - name: Test ${{ matrix.os }} ${{ matrix.config }} run: ./build-tests.sh ${{ matrix.config }} diff --git a/.github/workflows/build-ubuntu-2204.yml b/.github/workflows/build-ubuntu-2204.yml index e8f456bbc..4a74cf84f 100644 --- a/.github/workflows/build-ubuntu-2204.yml +++ b/.github/workflows/build-ubuntu-2204.yml @@ -19,6 +19,11 @@ on: schedule: - cron: 0 2 * * 1-5 + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: @@ -32,7 +37,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v1 + uses: actions/checkout@v4 continue-on-error: true - name: Test ${{ matrix.os }} ${{ matrix.config }} run: ./build-tests.sh ${{ matrix.config }} \ No newline at end of file diff --git a/.github/workflows/build-windows-clang.yaml.off b/.github/workflows/build-windows-clang.yaml.off index 9f2c790ea..2621613c1 100644 --- a/.github/workflows/build-windows-clang.yaml.off +++ b/.github/workflows/build-windows-clang.yaml.off @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 continue-on-error: true - name: Setup Tools diff --git a/.github/workflows/build-windows-vs2017.yaml.off b/.github/workflows/build-windows-vs2017.yaml.off index 1db4607db..a2d22827b 100644 --- a/.github/workflows/build-windows-vs2017.yaml.off +++ b/.github/workflows/build-windows-vs2017.yaml.off @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 continue-on-error: true - name: Setup Tools diff --git a/.github/workflows/build-windows-vs2022.yaml b/.github/workflows/build-windows-vs2022.yaml index a8a18394e..20605b442 100644 --- a/.github/workflows/build-windows-vs2022.yaml +++ b/.github/workflows/build-windows-vs2022.yaml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 continue-on-error: true - name: Build diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 503cae673..d0a392690 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -14,6 +14,11 @@ on: schedule: - cron: '0 8 * * 1' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: analyze: name: Analyze @@ -34,7 +39,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 continue-on-error: true # Initializes the CodeQL tools for scanning. @@ -87,7 +92,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 continue-on-error: true - name: Update submodules @@ -102,21 +107,20 @@ jobs: languages: java - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v5 with: distribution: 'adopt' java-version: '17' - name: Remove default github maven configuration run: rm $Env:USERPROFILE\.m2\settings.xml - name: Setup Android SDK - uses: android-actions/setup-android@v2 + uses: android-actions/setup-android@v3 - name: Install NDK run: | java -version gci env:* | sort-object name - new-item "C:\Users\runneradmin\.android\repositories.cfg" -ItemType "file" - echo yes | .\sdkmanager.bat "ndk-bundle" "cmake;3.10.2.4988404" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT - working-directory: ${{ env.ANDROID_SDK_ROOT }}\cmdline-tools\7.0\bin + new-item "$Env:USERPROFILE\.android\repositories.cfg" -ItemType "file" + echo yes | sdkmanager "ndk-bundle" "cmake;3.10.2.4988404" "ndk;27.0.12077973" --sdk_root=$Env:ANDROID_SDK_ROOT - name: Chocolatey run: | choco install --no-progress -y ninja diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 69b136fa1..f7e594992 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -6,6 +6,11 @@ on: pull_request: branches: [ master, main ] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: runs-on: ubuntu-latest @@ -13,7 +18,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 continue-on-error: true - name: install misspell diff --git a/.github/workflows/test-android-mac.yml.off b/.github/workflows/test-android-mac.yml.off index 56b87579a..96e17c4a5 100644 --- a/.github/workflows/test-android-mac.yml.off +++ b/.github/workflows/test-android-mac.yml.off @@ -26,7 +26,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: submodules: true depth: 1 @@ -42,7 +42,7 @@ jobs: script: ./testandlog - name: Upload if: ${{ always() }} - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: logcat path: ./lib/android_build/logcat.txt \ No newline at end of file diff --git a/.github/workflows/test-vcpkg.yml b/.github/workflows/test-vcpkg.yml new file mode 100644 index 000000000..cdd8ee1bb --- /dev/null +++ b/.github/workflows/test-vcpkg.yml @@ -0,0 +1,111 @@ +name: Vcpkg port tests + +on: + push: + branches: + - master + - main + - dev + - dev/* + - release/* + - buildme/* + + pull_request: + branches: + - master + - main + - dev + + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + windows: + runs-on: windows-latest + name: Windows (x64-windows-static) + steps: + - uses: actions/checkout@v4 + + - name: Bootstrap vcpkg + run: | + git clone https://github.com/microsoft/vcpkg.git ${{ runner.temp }}\vcpkg + & "${{ runner.temp }}\vcpkg\bootstrap-vcpkg.bat" -disableMetrics + shell: pwsh + + - name: Run vcpkg port test + run: .\tests\vcpkg\test-vcpkg-windows.ps1 -VcpkgRoot "${{ runner.temp }}\vcpkg" + shell: pwsh + + linux: + runs-on: ubuntu-latest + name: Linux (x64-linux) + steps: + - uses: actions/checkout@v4 + + - name: Bootstrap vcpkg + run: | + git clone https://github.com/microsoft/vcpkg.git "${{ runner.temp }}/vcpkg" + "${{ runner.temp }}/vcpkg/bootstrap-vcpkg.sh" -disableMetrics + + - name: Run vcpkg port test + env: + VCPKG_ROOT: ${{ runner.temp }}/vcpkg + run: | + chmod +x tests/vcpkg/test-vcpkg-linux.sh + ./tests/vcpkg/test-vcpkg-linux.sh + + macos: + runs-on: macos-latest + name: macOS (native) + steps: + - uses: actions/checkout@v4 + + - name: Bootstrap vcpkg + run: | + git clone https://github.com/microsoft/vcpkg.git "${{ runner.temp }}/vcpkg" + "${{ runner.temp }}/vcpkg/bootstrap-vcpkg.sh" -disableMetrics + + - name: Run vcpkg port test + env: + VCPKG_ROOT: ${{ runner.temp }}/vcpkg + run: | + chmod +x tests/vcpkg/test-vcpkg-macos.sh + ./tests/vcpkg/test-vcpkg-macos.sh + + ios: + runs-on: macos-latest + name: iOS (arm64-ios cross-compile) + steps: + - uses: actions/checkout@v4 + + - name: Bootstrap vcpkg + run: | + git clone https://github.com/microsoft/vcpkg.git "${{ runner.temp }}/vcpkg" + "${{ runner.temp }}/vcpkg/bootstrap-vcpkg.sh" -disableMetrics + + - name: Run vcpkg port test (device) + env: + VCPKG_ROOT: ${{ runner.temp }}/vcpkg + run: | + chmod +x tests/vcpkg/test-vcpkg-ios.sh + ./tests/vcpkg/test-vcpkg-ios.sh + + android: + runs-on: ubuntu-latest + name: Android (arm64-v8a cross-compile) + steps: + - uses: actions/checkout@v4 + + - name: Bootstrap vcpkg + run: | + git clone https://github.com/microsoft/vcpkg.git "${{ runner.temp }}/vcpkg" + "${{ runner.temp }}/vcpkg/bootstrap-vcpkg.sh" -disableMetrics + + - name: Run vcpkg port test + env: + VCPKG_ROOT: ${{ runner.temp }}/vcpkg + run: | + chmod +x tests/vcpkg/test-vcpkg-android.sh + ./tests/vcpkg/test-vcpkg-android.sh arm64-v8a diff --git a/.github/workflows/test-win-latest.yml b/.github/workflows/test-win-latest.yml index 760c88fb0..0fad50e9f 100644 --- a/.github/workflows/test-win-latest.yml +++ b/.github/workflows/test-win-latest.yml @@ -19,6 +19,11 @@ on: schedule: - cron: 0 2 * * 1-5 + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: test: name: Test on Windows ${{ matrix.arch }}-${{ matrix.build }} @@ -32,13 +37,13 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v1 + uses: actions/checkout@v4 continue-on-error: true - name: setup-msbuild - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 with: - vs-version: '[16,)' + vs-version: '[17,)' - name: Test ${{ matrix.arch }} ${{ matrix.build }} shell: cmd diff --git a/.gitignore b/.gitignore index 515445ff7..af5733868 100644 --- a/.gitignore +++ b/.gitignore @@ -405,3 +405,6 @@ build/.cmake/api/v1/query/client-vscode/query.json #Test files generated locally. *.ses + +# vcpkg test build directories +tests/vcpkg/build-*/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 959134a61..2f75446bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,15 @@ cmake_minimum_required(VERSION 3.1.0) -project(MSTelemetry) +project(MSTelemetry LANGUAGES C CXX) -# Set installation prefix for macOS and Linux -if(UNIX AND NOT DEFINED CMAKE_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation directory prefix" FORCE) +################################################################################################ +# Vcpkg dependency mode: detect early so it can guard platform-specific flag logic +################################################################################################ +if(DEFINED VCPKG_TOOLCHAIN OR DEFINED VCPKG_TARGET_TRIPLET) + option(MATSDK_USE_VCPKG_DEPS "Use vcpkg-provided dependencies via find_package()" ON) +else() + option(MATSDK_USE_VCPKG_DEPS "Use vcpkg-provided dependencies via find_package()" OFF) endif() - -set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") -set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") -set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") +message(STATUS "MATSDK_USE_VCPKG_DEPS: ${MATSDK_USE_VCPKG_DEPS}") # Begin Uncomment for i386 build #set(CMAKE_SYSTEM_PROCESSOR i386) @@ -16,16 +17,27 @@ set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation d #set(CMAKE_CXX_FLAGS -m32) # End of i386 build -# We ask for 14, but we may get C++11 on older gcc-4.x and gcc-5.x set(CMAKE_CXX_STANDARD 14) +# Uncomment these for stricter C++14 enforcement. Left commented out to avoid +# breaking older toolchains that may only partially support C++14. +# set(CMAKE_CXX_STANDARD_REQUIRED ON) +# set(CMAKE_CXX_EXTENSIONS OFF) if (NOT TARGET_ARCH) set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) endif() # Enable ARC for obj-c on Apple +# Initialize platform options before conditional blocks (needed for config templates) +if(NOT DEFINED BUILD_IOS) + set(BUILD_IOS OFF) +endif() +if(NOT APPLE AND NOT DEFINED BUILD_APPLE_HTTP) + set(BUILD_APPLE_HTTP OFF) +endif() + if(APPLE) - message("-- BUILD_IOS: ${BUILD_IOS}") + message(STATUS "BUILD_IOS: ${BUILD_IOS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-arc") # iOS build options @@ -35,103 +47,125 @@ if(APPLE) set(FORCE_RESET_OSX_DEPLOYMENT_TARGET ${FORCE_RESET_DEPLOYMENT_TARGET}) endif() - if(BUILD_IOS) - set(TARGET_ARCH "APPLE") - set(IOS True) - set(APPLE True) + # When building via vcpkg, the toolchain file handles architecture, sysroot, + # deployment target, and platform flags. Skip manual flag configuration. + if(NOT MATSDK_USE_VCPKG_DEPS) + if(BUILD_IOS) + set(TARGET_ARCH "APPLE") + set(IOS True) + set(APPLE True) - if(FORCE_RESET_OSX_DEPLOYMENT_TARGET) - set(CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE) - if (${IOS_PLAT} STREQUAL "iphonesimulator") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mios-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") + if(FORCE_RESET_OSX_DEPLOYMENT_TARGET) + set(CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE) + if (${IOS_PLAT} STREQUAL "iphonesimulator") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mios-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -miphoneos-version-min=${IOS_DEPLOYMENT_TARGET}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IOS_DEPLOYMENT_TARGET}") + endif() + endif() + + if((${IOS_PLAT} STREQUAL "iphoneos") OR (${IOS_PLAT} STREQUAL "iphonesimulator") OR (${IOS_PLAT} STREQUAL "xros") OR (${IOS_PLAT} STREQUAL "xrsimulator")) + set(IOS_PLATFORM "${IOS_PLAT}") else() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -miphoneos-version-min=${IOS_DEPLOYMENT_TARGET}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IOS_DEPLOYMENT_TARGET}") + message(FATAL_ERROR "Unrecognized iOS platform '${IOS_PLAT}'") endif() - endif() - if((${IOS_PLAT} STREQUAL "iphoneos") OR (${IOS_PLAT} STREQUAL "iphonesimulator") OR (${IOS_PLAT} STREQUAL "xros") OR (${IOS_PLAT} STREQUAL "xrsimulator")) - set(IOS_PLATFORM "${IOS_PLAT}") - else() - message(FATAL_ERROR "Unrecognized iOS platform '${IOS_PLAT}'") - endif() + if(${IOS_ARCH} STREQUAL "x86_64") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch x86_64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch x86_64") + set(CMAKE_SYSTEM_PROCESSOR x86_64) + elseif(${IOS_ARCH} STREQUAL "arm64") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch arm64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch arm64") + set(CMAKE_SYSTEM_PROCESSOR arm64) + elseif(${IOS_ARCH} STREQUAL "arm64e") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch arm64e") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch arm64e") + set(CMAKE_SYSTEM_PROCESSOR arm64e) + else() + message(FATAL_ERROR "Unrecognized iOS architecture '${IOS_ARCH}'") + endif() - if(${IOS_ARCH} STREQUAL "x86_64") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch x86_64") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch x86_64") - set(CMAKE_SYSTEM_PROCESSOR x86_64) - elseif(${IOS_ARCH} STREQUAL "arm64") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch arm64") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch arm64") - set(CMAKE_SYSTEM_PROCESSOR arm64) - elseif(${IOS_ARCH} STREQUAL "arm64e") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch arm64e") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch arm64e") - set(CMAKE_SYSTEM_PROCESSOR arm64e) + execute_process(COMMAND xcodebuild -version -sdk ${IOS_PLATFORM} ONLY_ACTIVE_ARCH=NO Path + OUTPUT_VARIABLE CMAKE_OSX_SYSROOT + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT}") + message(STATUS "ARCHITECTURE: ${CMAKE_SYSTEM_PROCESSOR}") + message(STATUS "PLATFORM: ${IOS_PLATFORM}") else() - message(FATAL_ERROR "Unrecognized iOS architecture '${IOS_ARCH}'") + if("${MAC_ARCH}" STREQUAL "x86_64") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch x86_64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch x86_64") + set(CMAKE_SYSTEM_PROCESSOR x86_64) + set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) + set(CMAKE_OSX_ARCHITECTURES ${MAC_ARCH}) + set(APPLE True) + elseif("${MAC_ARCH}" STREQUAL "arm64") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch arm64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch arm64") + set(CMAKE_SYSTEM_PROCESSOR arm64) + set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) + set(CMAKE_OSX_ARCHITECTURES ${MAC_ARCH}) + set(APPLE True) + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch x86_64 -arch arm64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch x86_64 -arch arm64") + endif() + message(STATUS "MAC_ARCH: ${MAC_ARCH}") endif() - - execute_process(COMMAND xcodebuild -version -sdk ${IOS_PLATFORM} ONLY_ACTIVE_ARCH=NO Path - OUTPUT_VARIABLE CMAKE_OSX_SYSROOT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - message("-- CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT}") - message("-- ARCHITECTURE: ${CMAKE_SYSTEM_PROCESSOR}") - message("-- PLATFORM: ${IOS_PLATFORM}") else() - if(${MAC_ARCH} STREQUAL "x86_64") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch x86_64") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch x86_64") - set(CMAKE_SYSTEM_PROCESSOR x86_64) - set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) - set(CMAKE_OSX_ARCHITECTURES ${MAC_ARCH}) - set(APPLE True) - elseif(${MAC_ARCH} STREQUAL "arm64") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch arm64") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch arm64") - set(CMAKE_SYSTEM_PROCESSOR arm64) - set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) - set(CMAKE_OSX_ARCHITECTURES ${MAC_ARCH}) - set(APPLE True) - else() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch x86_64 -arch arm64") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch x86_64 -arch arm64") + # vcpkg mode: just set internal flags from what the toolchain provides + if(BUILD_IOS OR CMAKE_SYSTEM_NAME STREQUAL "iOS") + set(BUILD_IOS ON) + set(TARGET_ARCH "APPLE") + set(IOS True) endif() - message("-- MAC_ARCH: ${MAC_ARCH}") + message(STATUS "vcpkg toolchain managing architecture and platform flags") endif() endif() -message("-- CMAKE_SYSTEM_INFO_FILE: ${CMAKE_SYSTEM_INFO_FILE}") -message("-- CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") -message("-- CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") -message("-- CMAKE_SYSTEM: ${CMAKE_SYSTEM}") -message("-- CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}") -message("-- CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") -message("-- TARGET_ARCH: ${TARGET_ARCH}") -message("-- CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_SYSTEM: ${CMAKE_SYSTEM}") +message(STATUS "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}") +message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") +message(STATUS "TARGET_ARCH: ${TARGET_ARCH}") +message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") include(tools/ParseOsRelease.cmake) +# When building via vcpkg, let the toolchain manage compiler flags. +# Only apply project-specific flags for non-vcpkg (legacy) builds. +if(NOT MATSDK_USE_VCPKG_DEPS) + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") -set(WARN_FLAGS "/W4 /WX") + set(WARN_FLAGS "/W4 /WX") +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # -Wno-unknown-warning-option is Clang-only, omitted here + set(WARN_FLAGS "-Wall -Werror -Wextra -Wno-unused-parameter -Wno-unused-but-set-variable") + # -Wno-reorder is C++-only; added to CXX_FLAGS below (suppresses member-init-order warnings in submodule code) + set(CXX_EXTRA_WARN_FLAGS "-Wno-reorder") else() -# No -pedantic -Wno-extra-semi -Wno-gnu-zero-variadic-macro-arguments -set(WARN_FLAGS "-Wall -Werror -Wextra -Wno-unused-parameter -Wno-unknown-warning-option -Wno-unused-but-set-variable") + # Clang / AppleClang + set(WARN_FLAGS "-Wall -Werror -Wextra -Wno-unused-parameter -Wno-unknown-warning-option -Wno-unused-but-set-variable") + # -Wno-reorder is C++-only; added to CXX_FLAGS below (suppresses member-init-order warnings in submodule code) + set(CXX_EXTRA_WARN_FLAGS "-Wno-reorder") endif() if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # Using GCC with -s and -Wl linker flags - set(REL_FLAGS "-s -Wl,--gc-sections -Os ${WARN_FLAGS} -ffunction-sections -fdata-sections -fmerge-all-constants -ffast-math") + set(REL_FLAGS "-s -Wl,--gc-sections -Os ${WARN_FLAGS} -ffunction-sections -fdata-sections -fmerge-all-constants -ffast-math -fno-finite-math-only") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") set(REL_FLAGS "${WARN_FLAGS}") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") # AppleClang does not support -ffunction-sections and -fdata-sections with the -fembed-bitcode and -fembed-bitcode-marker - set(REL_FLAGS "-Os ${WARN_FLAGS} -fmerge-all-constants -ffast-math") + set(REL_FLAGS "-Os ${WARN_FLAGS} -fmerge-all-constants -ffast-math -fno-finite-math-only") else() # Using clang - strip unsupported GCC options - set(REL_FLAGS "-Os ${WARN_FLAGS} -ffunction-sections -fmerge-all-constants -ffast-math") + set(REL_FLAGS "-Os ${WARN_FLAGS} -ffunction-sections -fmerge-all-constants -ffast-math -fno-finite-math-only") endif() ## Uncomment this to reduce the volume of note warnings on RPi4 w/gcc-8 Ref. https://gcc.gnu.org/ml/gcc/2017-05/msg00073.html @@ -144,15 +178,15 @@ set(DBG_FLAGS "-ggdb -gdwarf-2 -O0 ${WARN_FLAGS} -fno-builtin-malloc -fno-built if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") #TODO: -fno-rtti - message("Building Release ...") + message(STATUS "Building Release ...") set(CMAKE_C_FLAGS "$ENV{CFLAGS} ${CMAKE_C_FLAGS} -std=c11 ${REL_FLAGS}") - set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} ${CMAKE_CXX_FLAGS} -std=c++11 ${REL_FLAGS}") + set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} ${CMAKE_CXX_FLAGS} -std=c++11 ${REL_FLAGS} ${CXX_EXTRA_WARN_FLAGS}") else() set(USE_TCMALLOC 1) - message("Building Debug ...") + message(STATUS "Building Debug ...") include(tools/FindTcmalloc.cmake) set(CMAKE_C_FLAGS "$ENV{CFLAGS} ${CMAKE_C_FLAGS} -std=c11 ${DBG_FLAGS}") - set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} ${CMAKE_CXX_FLAGS} -std=c++11 ${DBG_FLAGS}") + set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} ${CMAKE_CXX_FLAGS} -std=c++11 ${DBG_FLAGS} ${CXX_EXTRA_WARN_FLAGS}") endif() #Remove /Zi for Win32 debug compiler issue @@ -164,20 +198,17 @@ if(MSVC) endif() endif() -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - # using Clang -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - # using GCC - # Prefer to generate position-independent code +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # GCC needs explicit position-independent code set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") - # using Intel C++ -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - # using Visual Studio C++ endif() +endif() # NOT MATSDK_USE_VCPKG_DEPS (compiler flags) + include(tools/Utils.cmake) +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) if (NOT DEFAULT_PAL_IMPLEMENTATION) if(MSVC) @@ -190,7 +221,7 @@ endif() set(PAL_IMPLEMENTATION ${DEFAULT_PAL_IMPLEMENTATION}) -message(STATUS "-- PAL implementation: ${PAL_IMPLEMENTATION}") +message(STATUS "PAL implementation: ${PAL_IMPLEMENTATION}") string(TOUPPER ${PAL_IMPLEMENTATION} PAL_IMPLEMENTATION_UPPER) add_definitions(-DMATSDK_PAL_${PAL_IMPLEMENTATION_UPPER}=1) @@ -209,7 +240,7 @@ if(USE_ONEDS_SECURE_MEM_FUNCTIONS) add_definitions(-DUSE_ONEDS_SECURE_MEM_FUNCTIONS) endif() -if(PAL_IMPLEMENTATION STREQUAL "WIN32") +if(PAL_IMPLEMENTATION STREQUAL "WIN32" AND NOT MATSDK_USE_VCPKG_DEPS) add_definitions(-DZLIB_WINAPI) endif() @@ -222,7 +253,7 @@ add_definitions(-DNOMINMAX) set(SDK_VERSION_PREFIX "EVT") add_definitions("-DMATSDK_VERSION_PREFIX=\"${SDK_VERSION_PREFIX}\"") -set(MATSDK_API_VERSION "3.4") +set(MATSDK_API_VERSION "3.10") string(TIMESTAMP DAYNUMBER "%j") string(REGEX REPLACE "^00" "" DAYNUMBER ${DAYNUMBER}) string(REGEX REPLACE "^0" "" DAYNUMBER ${DAYNUMBER}) @@ -238,29 +269,10 @@ else() set(MATSDK_BUILD_VERSION ${MATSDK_API_VERSION}.${DAYNUMBER}.0) endif() -message(STATUS "-- SDK version: ${SDK_VERSION_PREFIX}-${MATSDK_BUILD_VERSION}") +message(STATUS "SDK version: ${SDK_VERSION_PREFIX}-${MATSDK_BUILD_VERSION}") ################################################################################################ -# HTTP stack section -################################################################################################ - -# Only use custom curl if compiling with CPP11 PAL -if (PAL_IMPLEMENTATION STREQUAL "CPP11") - - if(NOT BUILD_IOS) - include(FindCURL) - find_package(CURL REQUIRED) - if (NOT CURL_FOUND) - message (FATAL_ERROR "libcurl not found! Have you installed deps?") - endif (NOT CURL_FOUND) - include_directories(CURL_INCLUDE_DIRS) - set(CMAKE_REQUIRED_LIBRARIES "${CURL_LIBRARIES}") - list(APPEND LIBS "${CURL_LIBRARIES}") - endif() -endif() - -################################################################################################ -# User options +# User options (must be before HTTP stack section for BUILD_APPLE_HTTP) ################################################################################################ option(BUILD_HEADERS "Build API headers" YES) option(BUILD_LIBRARY "Build library" YES) @@ -285,30 +297,53 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") option(BUILD_APPLE_HTTP "Build Apple HTTP client" YES) endif() -if(BUILD_UNIT_TESTS OR BUILD_FUNC_TESTS) - message("Adding gtest") - add_library(gtest STATIC IMPORTED GLOBAL) - message("Adding gmock") - add_library(gmock STATIC IMPORTED GLOBAL) -endif() - if(BUILD_APPLE_HTTP) add_definitions(-DAPPLE_HTTP=1) endif() -# Bond Lite subdirectories -include_directories(bondlite/include) +################################################################################################ +# HTTP stack section +################################################################################################ -include_directories(lib/pal) +# Only use custom curl if compiling with CPP11 PAL +set(MATSDK_NEEDS_CURL OFF) +if(PAL_IMPLEMENTATION STREQUAL "CPP11" + AND NOT BUILD_IOS + AND NOT CMAKE_SYSTEM_NAME STREQUAL "Android" + AND NOT BUILD_APPLE_HTTP) + set(MATSDK_NEEDS_CURL ON) + find_package(CURL REQUIRED) + if(MATSDK_USE_VCPKG_DEPS) + list(APPEND LIBS CURL::libcurl) + else() + include_directories(CURL_INCLUDE_DIRS) + set(CMAKE_REQUIRED_LIBRARIES "${CURL_LIBRARIES}") + list(APPEND LIBS "${CURL_LIBRARIES}") + endif() +endif() -#if(BUILD_UNIT_TESTS) -# message("Adding bondlite tests") -# enable_testing() -# add_subdirectory(bondlite/tests) -#endif() +################################################################################################ +# Dependency resolution (vcpkg mode vs vendored) +################################################################################################ +if(MATSDK_USE_VCPKG_DEPS) + find_package(unofficial-sqlite3 CONFIG REQUIRED) + find_package(ZLIB REQUIRED) + find_package(nlohmann_json CONFIG REQUIRED) + message(STATUS "Using vcpkg-provided sqlite3, zlib, nlohmann-json") +else() + # Include repo root to allow includes of vendored sqlite, zlib, and nlohmann + include_directories(${CMAKE_SOURCE_DIR}) + message(STATUS "Using vendored sqlite3, zlib, nlohmann-json") +endif() + +if(BUILD_UNIT_TESTS OR BUILD_FUNC_TESTS) + message(STATUS "Adding gtest") + add_library(gtest STATIC IMPORTED GLOBAL) + message(STATUS "Adding gmock") + add_library(gmock STATIC IMPORTED GLOBAL) +endif() -# Include repo root to allow includes of sqlite, zlib, and nlohmann -include_directories(${CMAKE_SOURCE_DIR}) +include_directories(lib/pal) if(BUILD_HEADERS) add_subdirectory(lib/include) @@ -320,7 +355,7 @@ if(BUILD_LIBRARY) endif() if(BUILD_UNIT_TESTS OR BUILD_FUNC_TESTS) - message("Building tests") + message(STATUS "Building tests") enable_testing() add_subdirectory(tests) endif() @@ -331,18 +366,12 @@ endif() if (BUILD_PACKAGE) if ("${CMAKE_PACKAGE_TYPE}" STREQUAL "deb") - # FIXME: hardcode it for 64-bit Linux for now - set(INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/${CPACK_DEBIAN_ARCHITECTURE}-linux-gnu) include(tools/MakeDeb.cmake) endif() if ("${CMAKE_PACKAGE_TYPE}" STREQUAL "rpm") - # TODO: [MG] - fix path - set(INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) include(tools/MakeRpm.cmake) endif() if ("${CMAKE_PACKAGE_TYPE}" STREQUAL "tgz") - # TODO: [MG] - fix path... should we simply use /usr/local/lib without CPU? - # TODO: [MG] - Windows path is not ideal -- C:/Program Files (x86)/MSTelemetry/* - what should we use instead? include(tools/MakeTgz.cmake) endif() endif() diff --git a/Solutions/before.targets b/Solutions/before.targets index 63a526c90..a31ed4e93 100644 --- a/Solutions/before.targets +++ b/Solutions/before.targets @@ -6,8 +6,9 @@ v141 v142 v143 - - v141 + v145 + + $(DefaultPlatformToolset) $(PlatformToolset) $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) diff --git a/Solutions/build.MIP.props b/Solutions/build.MIP.props index 9bd6e6d91..14ed449b9 100644 --- a/Solutions/build.MIP.props +++ b/Solutions/build.MIP.props @@ -10,8 +10,7 @@ true - v141 - 14.1 + $(DefaultPlatformToolset) mip_ClientTelemetry diff --git a/build-tests-ios.sh b/build-tests-ios.sh index bf29a50b3..86928267a 100755 --- a/build-tests-ios.sh +++ b/build-tests-ios.sh @@ -7,14 +7,23 @@ set -e ./build-ios.sh ${SKU} -# dyld_info /Users/runner/work/cpp_client_telemetry/cpp_client_telemetry/out/lib/libmat.a - cd tests/unittests xcrun simctl list devices available echo 'End of xcrun simctl list devices available' -xcodebuild test -scheme iOSUnitTests -destination "platform=iOS Simulator,name=$SIMULATOR" +# Resolve simulator UUID to avoid ambiguous destination matching. +# Grab the last (newest OS) available device matching the requested name. +SIM_ID=$(xcrun simctl list devices available | grep "$SIMULATOR" | grep -oE '[A-F0-9-]{36}' | tail -1) + +if [ -z "$SIM_ID" ]; then + echo "ERROR: No available simulator found for '$SIMULATOR'" + exit 1 +fi + +echo "Using simulator: $SIMULATOR (id=$SIM_ID)" + +xcodebuild test -scheme iOSUnitTests -destination "id=$SIM_ID" cd ../functests -xcodebuild test -scheme iOSFuncTests -destination "platform=iOS Simulator,name=$SIMULATOR" +xcodebuild test -scheme iOSFuncTests -destination "id=$SIM_ID" diff --git a/cmake/MSTelemetryConfig.cmake.in b/cmake/MSTelemetryConfig.cmake.in new file mode 100644 index 000000000..6c15631ca --- /dev/null +++ b/cmake/MSTelemetryConfig.cmake.in @@ -0,0 +1,27 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) + +# Re-find dependencies that consumers need +if(@MATSDK_USE_VCPKG_DEPS@) + find_dependency(unofficial-sqlite3 CONFIG) + find_dependency(ZLIB) + find_dependency(nlohmann_json CONFIG) +endif() + +# Curl is needed on Linux (not Windows/iOS/Android/macOS-with-Apple-HTTP). +# We capture the build-time decision as a boolean rather than re-deriving +# it, because the macOS BUILD_APPLE_HTTP edge case can't be inferred from +# CMAKE_SYSTEM_NAME alone. +if(@MATSDK_NEEDS_CURL@) + find_dependency(CURL) +endif() + +# Pthreads are needed on Linux and Android (POSIX threading) +if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") + find_dependency(Threads) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/MSTelemetryTargets.cmake") + +check_required_components(MSTelemetry) diff --git a/docs/building-with-vcpkg.md b/docs/building-with-vcpkg.md index 6312fa18d..aaa831351 100644 --- a/docs/building-with-vcpkg.md +++ b/docs/building-with-vcpkg.md @@ -1,10 +1,12 @@ # Building 1DS C++ SDK with vcpkg -vcpkg is a Microsoft cross-platform open source C++ package manager. Onboarding instructions for Windows, Linux and Mac OS X [available here](https://docs.microsoft.com/en-us/cpp/build/vcpkg). This document assumes that the customer build system is already configured to use vcpkg. 1DS C++ SDK maintainers provide a build recipe, `mstelemetry` port or CONTROL file for vcpkg. Mainline vcpkg repo is refreshed to point to latest stable open source release of 1DS C++ SDK. Public build of SDK does not include private submodules. However, local port / CONTROL file included in 1DS C++ SDK git repo allows to build SDK with additional Microsoft-proprietary private submodules. +[vcpkg](https://vcpkg.io/) is a Microsoft cross-platform open source C++ package manager. Onboarding instructions for Windows, Linux and Mac OS X [available here](https://docs.microsoft.com/en-us/cpp/build/vcpkg). This document assumes that the customer build system is already configured to use vcpkg ([getting started guide](https://learn.microsoft.com/en-us/vcpkg/get_started/overview)). 1DS C++ SDK maintainers provide a build recipe, `mstelemetry` port or CONTROL file for vcpkg. The mainline vcpkg repo is refreshed to point to latest stable open source release of 1DS C++ SDK. -## Installing open source mstelemetry package +## Quick Start -The following command can be used to install the public open source release: +### Installing from the vcpkg registry + +Once a new port has been accepted into the official vcpkg registry, install with: ```console vcpkg install mstelemetry @@ -12,83 +14,184 @@ vcpkg install mstelemetry That's it! The package should be compiled for the current OS. -See instructions below to build the SDK with additional Microsoft-proprietary modules. - -## Windows build with submodules +### Installing from the overlay port (development / pre-release) -`cmd.exe` command line prompt commands: +Before the port is published, or to test local changes, use the overlay port +shipped in this repository: ```console -git clone --recurse-submodules https://github.com/microsoft/cpp_client_telemetry +git clone https://github.com/microsoft/cpp_client_telemetry cd cpp_client_telemetry -vcpkg install --head --overlay-ports=%CD%\tools\ports mstelemetry +vcpkg install --overlay-ports=tools/ports mstelemetry ``` -## POSIX (Linux and Mac) build with submodules +### Using in your CMake project -Shell commands: +After installing, add the SDK to your CMake project: -```console -git clone --recurse-submodules https://github.com/microsoft/cpp_client_telemetry -cd cpp_client_telemetry -vcpkg install --head --overlay-ports=`pwd`/tools/ports mstelemetry +```cmake +find_package(MSTelemetry CONFIG REQUIRED) +target_link_libraries(your_target PRIVATE MSTelemetry::mat) ``` -## Using response files to specify dependencies +If you use vcpkg manifest mode (recommended), add `mstelemetry` to your +project's `vcpkg.json`: -vcpkg allows to consolidate parameters passed to vcpkg in a response file. All 3rd party dependencies needed for 1DS SDK can be described and installed via response file. +```json +{ + "dependencies": ["mstelemetry"] +} +``` -Example for Mac: +## Platform-Specific Instructions -```console -vcpkg install @tools/ports/mstelemetry/response_file_mac.txt +### Windows + +```powershell +vcpkg install mstelemetry --triplet=x64-windows-static ``` -Example for Linux: +### Linux -```console -vcpkg install @tools/ports/mstelemetry/response_file_linux.txt +```bash +vcpkg install mstelemetry --triplet=x64-linux ``` -vcpkg build log files are created in `${VCPKG_INSTALL_DIR}/buildtrees/mstelemetry/build-[err|out].log` . Review the logs in case if you encounter package installation failures. +### macOS -## Using triplets +```bash +# Apple Silicon +vcpkg install mstelemetry --triplet=arm64-osx -In order to enable custom build flags - vcpkg triplets and custom environment variables may be used. Please see [triplets instruction here](https://vcpkg.readthedocs.io/en/latest/users/triplets/). Response file for a custom build, e.g. `response_file_linux_PRODUCTNAME.txt` may specify a custom triplet. For example, custom triplet controls if the library is built as static or dynamic. Default triplets may also be overridden with [custom triplets](https://vcpkg.readthedocs.io/en/latest/examples/overlay-triplets-linux-dynamic/#overlay-triplets-example). Custom triplets specific to various products must be maintained by product teams. Product teams may optionally decide to integrate their triplets in the mainline 1DS C++ SDK repo as-needed. +# Intel +vcpkg install mstelemetry --triplet=x64-osx +``` -## Build with vcpkg dependencies +### iOS (cross-compile) -This section needs to be updated with more detailed info. Default `CMakeLists.txt` in top-level directory utilize the following dependencies: +```bash +vcpkg install mstelemetry --triplet=arm64-ios +``` -- OS-provided `sqlite3` library. -- OS-provided `zlib` library. -- SDK-provided snapshot of `nlohmann-json` header-only library. +### iOS Simulator -It is possible to adjust the build system to use vcpkg-installed dependencies instead. +vcpkg ships a built-in community triplet for the iOS Simulator: -### nlohmann-json +```bash +vcpkg install mstelemetry --triplet=arm64-ios-simulator +``` -The package `nlohmann-json` provides CMake targets: +See the [vcpkg triplet documentation](https://learn.microsoft.com/en-us/vcpkg/users/triplets) +for details on creating your own custom triplets for other platforms. -```console - find_package(nlohmann_json CONFIG REQUIRED) - target_link_libraries(main PRIVATE nlohmann_json nlohmann_json::nlohmann_json) +### Android (cross-compile) + +Requires the Android NDK (`ANDROID_NDK_HOME` must be set): + +```bash +vcpkg install mstelemetry --triplet=arm64-android ``` -### sqlite3 +Supported triplets: `arm64-android`, `arm-neon-android`, `x64-android`, +`x86-android`. + +## Dependencies + +The vcpkg port automatically resolves the following dependencies: -The package `sqlite3` provides CMake targets: +| Dependency | vcpkg Package | CMake Target | Platforms | +| -------------- | --------------- | --------------------------------- | ------------------ | +| SQLite3 | `sqlite3` | `unofficial::sqlite3::sqlite3` | All | +| zlib | `zlib` | `ZLIB::ZLIB` | All | +| nlohmann JSON | `nlohmann-json` | `nlohmann_json::nlohmann_json` | All | +| libcurl | `curl[ssl]` | `CURL::libcurl` | Linux | + +Windows, macOS/iOS, and Android use platform-native HTTP clients (WinInet, +NSURLSession, and HttpClient_Android respectively), so curl is not required +on those platforms. + +## Optional: SIMD-Optimized zlib with zlib-ng + +The vcpkg port depends on stock `zlib` by default. If you want SIMD-optimized +compression (Intel PCLMULQDQ/AVX2, ARM NEON, etc.), you can transparently +replace zlib with [zlib-ng](https://github.com/zlib-ng/zlib-ng) in +compatibility mode. No changes to the port or SDK code are needed. + +**Add one line to your vcpkg triplet file** (e.g., `x64-windows-static.cmake`): + +```cmake +set(ZLIB_COMPAT ON) +``` + +Then install `zlib-ng` instead of `zlib`: ```console - find_package(unofficial-sqlite3 CONFIG REQUIRED) - target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3) +vcpkg install zlib-ng mstelemetry --triplet=x64-windows-static ``` -### zlib +With `ZLIB_COMPAT=ON`, zlib-ng installs as a drop-in replacement — it provides +the same `zlib.h` header, the same function names (`deflate`, `inflate`, +`crc32`), and the same `ZLIB::ZLIB` CMake target. All packages that depend on +`zlib` (including `mstelemetry` and any other libraries like `onnxruntime`) +will automatically use the optimized zlib-ng build. -The package zlib is compatible with built-in CMake targets: +> **Important:** All libraries in the same binary should link against the same +> zlib. When using `ZLIB_COMPAT=ON`, ensure all dependencies resolve to +> zlib-ng rather than mixing stock zlib and zlib-ng. -```console - find_package(ZLIB REQUIRED) - target_link_libraries(main PRIVATE ZLIB::ZLIB) +## How It Works: MATSDK_USE_VCPKG_DEPS + +When the SDK detects it is being built via vcpkg (by checking for +`VCPKG_TOOLCHAIN` or `VCPKG_TARGET_TRIPLET`), it automatically sets +`MATSDK_USE_VCPKG_DEPS=ON`. This switches dependency resolution from +vendored sources to vcpkg-provided packages via `find_package()`. + +You can also set this explicitly for custom CMake workflows: + +```bash +cmake -DMATSDK_USE_VCPKG_DEPS=ON \ + -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \ + .. +``` + +## Troubleshooting + +vcpkg build log files are created in +`${VCPKG_INSTALL_DIR}/buildtrees/mstelemetry/`. Review the following logs +if you encounter package installation failures: + +| File | Contents | +| ---- | -------- | +| `build-out.log` | Build stdout (compiler output) | +| `build-err.log` | Build stderr (compiler errors/warnings) | +| `config-*.log` | CMake configure output | + +You can also pass `--debug` to `vcpkg install` for verbose diagnostics. + +## Testing the Port + +Integration tests are provided in `tests/vcpkg/`. Each script builds the +port from the overlay, compiles a test consumer, and runs runtime checks: + +```bash +# Windows (from Developer Command Prompt) +.\tests\vcpkg\test-vcpkg-windows.ps1 -VcpkgRoot C:\path\to\vcpkg + +# Linux +./tests/vcpkg/test-vcpkg-linux.sh + +# macOS +./tests/vcpkg/test-vcpkg-macos.sh + +# iOS (cross-compile — verifies binary is produced) +./tests/vcpkg/test-vcpkg-ios.sh + +# iOS Simulator (builds and runs on simulator) +./tests/vcpkg/test-vcpkg-ios.sh --simulator + +# Android (cross-compile — verifies binary is produced) +./tests/vcpkg/test-vcpkg-android.sh ``` + +See [tests/vcpkg/README.md](../tests/vcpkg/README.md) for prerequisites and +detailed usage. diff --git a/examples/c/SampleC-Guest/CMakeLists.txt b/examples/c/SampleC-Guest/CMakeLists.txt index d5932af4e..2022c4d76 100644 --- a/examples/c/SampleC-Guest/CMakeLists.txt +++ b/examples/c/SampleC-Guest/CMakeLists.txt @@ -4,43 +4,24 @@ project(SampleC-Guest) # Uncomment for building i386 binary on x86_64 system #set(CMAKE_SYSTEM_PROCESSOR i386) -# For ARM / Raspberry Pi 3 cross-compile -# set(MATSDK_LIB /usr/local/lib/armv7l-linux-gnu) - -# Point example to SDK dirs for x86_64 Desktop -if(EXISTS "/usr/local/lib/libmat.a") -# Use local libmat.a -set(MATSDK_LIB /usr/local/lib/) -else() -# Use architecture-specific libmat.a -set(MATSDK_LIB /usr/local/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) -endif() +include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/MSTelemetrySample.cmake) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb -gdwarf-2 -std=c11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb -gdwarf-2 -std=c++11") find_package (Threads) -set(MATSDK_INCLUDE /usr/local/include/mat) - # 1DS SDK to include dirs -include_directories( . ${MATSDK_INCLUDE} ) +include_directories(. ${MATSDK_SAMPLE_INCLUDE_DIRS}) # Link main.cpp to executable add_executable(SampleC-Guest main.cpp demo.c) source_group(" " REGULAR_EXPRESSION "") -# Prefer linking to more recent local sqlite3 -if(EXISTS "/usr/local/lib/libsqlite3.a") -set (SQLITE3_LIB "/usr/local/lib/libsqlite3.a") -else() -set (SQLITE3_LIB "sqlite3") -endif() - set (PLATFORM_LIBS "") # Add flags for obtaining system UUID via IOKit if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") set (PLATFORM_LIBS "-framework CoreFoundation -framework IOKit") endif() -target_link_libraries(SampleC-Guest ${MATSDK_LIB}/libmat.a curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} ${PLATFORM_LIBS} dl) +target_link_libraries(SampleC-Guest ${MATSDK_LIBRARY} curl z ${CMAKE_THREAD_LIBS_INIT} ${MATSDK_SQLITE3_LIB} ${MATSDK_SAMPLE_PLATFORM_LIBS} ${PLATFORM_LIBS} dl) diff --git a/examples/cmake/MSTelemetrySample.cmake b/examples/cmake/MSTelemetrySample.cmake new file mode 100644 index 000000000..588dd6727 --- /dev/null +++ b/examples/cmake/MSTelemetrySample.cmake @@ -0,0 +1,48 @@ +set(_MATSDK_DEFAULT_INSTALL_DIR "/usr/local") +if(NOT "$ENV{MATSDK_INSTALL_DIR}" STREQUAL "") + set(_MATSDK_DEFAULT_INSTALL_DIR "$ENV{MATSDK_INSTALL_DIR}") +endif() + +set(MATSDK_INSTALL_DIR "${_MATSDK_DEFAULT_INSTALL_DIR}" CACHE PATH "MSTelemetry install prefix") +set(MATSDK_INCLUDE_DIR "${MATSDK_INSTALL_DIR}/include/mat" CACHE PATH "MSTelemetry public headers") +set(MATSDK_LIB_DIR "${MATSDK_INSTALL_DIR}/lib" CACHE PATH "MSTelemetry library directory") + +if(NOT EXISTS "${MATSDK_LIB_DIR}/libmat.a" + AND NOT EXISTS "${MATSDK_LIB_DIR}/libmat.dylib" + AND EXISTS "${MATSDK_LIB_DIR}/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/libmat.a") + set(MATSDK_LIB_DIR "${MATSDK_LIB_DIR}/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu" CACHE PATH "MSTelemetry library directory" FORCE) +endif() + +find_library(MATSDK_LIBRARY NAMES mat HINTS "${MATSDK_LIB_DIR}" NO_DEFAULT_PATH) +if(NOT MATSDK_LIBRARY) + message(FATAL_ERROR "Could not find libmat under ${MATSDK_LIB_DIR}. Set MATSDK_INSTALL_DIR or MATSDK_LIB_DIR.") +endif() + +if(NOT EXISTS "${MATSDK_INCLUDE_DIR}") + message(FATAL_ERROR "Could not find mat headers under ${MATSDK_INCLUDE_DIR}. Set MATSDK_INSTALL_DIR or MATSDK_INCLUDE_DIR.") +endif() + +set(MATSDK_SAMPLE_INCLUDE_DIRS "${MATSDK_INCLUDE_DIR}") + +set(MATSDK_SAMPLE_PLATFORM_LIBS "") +if(APPLE) + list(APPEND MATSDK_SAMPLE_PLATFORM_LIBS + "-framework CoreFoundation" + "-framework Foundation" + "-framework CFNetwork" + "-framework Network" + "-framework SystemConfiguration" + ) + if(CMAKE_SYSTEM_NAME STREQUAL "iOS") + list(APPEND MATSDK_SAMPLE_PLATFORM_LIBS "-framework UIKit") + else() + list(APPEND MATSDK_SAMPLE_PLATFORM_LIBS "-framework IOKit") + endif() +endif() + +find_library(MATSDK_SQLITE3_LIB NAMES sqlite3 HINTS "${MATSDK_INSTALL_DIR}/lib" NO_DEFAULT_PATH) +if(NOT MATSDK_SQLITE3_LIB) + set(MATSDK_SQLITE3_LIB sqlite3) +endif() + +mark_as_advanced(MATSDK_INSTALL_DIR MATSDK_INCLUDE_DIR MATSDK_LIB_DIR MATSDK_LIBRARY MATSDK_SQLITE3_LIB) diff --git a/examples/cpp/EventSender/CMakeLists.txt b/examples/cpp/EventSender/CMakeLists.txt index 67a1a3ae6..14d4b95af 100644 --- a/examples/cpp/EventSender/CMakeLists.txt +++ b/examples/cpp/EventSender/CMakeLists.txt @@ -4,39 +4,20 @@ project(EventSender) # Uncomment for building i386 binary on x86_64 system #set(CMAKE_SYSTEM_PROCESSOR i386) -# For ARM / Raspberry Pi 3 cross-compile -# set(MAT_SDK_LIB /usr/local/lib/armv7l-linux-gnu) - -# Point example to SDK dirs for x86_64 Desktop -if(EXISTS "/usr/local/lib/libmat.a") -# Use local libmat.a -set(MAT_SDK_LIB /usr/local/lib/) -else() -# Use architecture-specific libmat.a -set(MAT_SDK_LIB /usr/local/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) -endif() +include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/MSTelemetrySample.cmake) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb -gdwarf-2 -std=c11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb -gdwarf-2 -std=c++11") find_package (Threads) -set(MAT_SDK_INCLUDE /usr/local/include/mat) - # 1DS SDK to include dirs -include_directories( . ${MAT_SDK_INCLUDE} ) +include_directories(. ${MATSDK_SAMPLE_INCLUDE_DIRS}) # Link main.cpp to executable add_executable(EventSender EventSender.cpp) source_group(" " REGULAR_EXPRESSION "") -# Prefer linking to more recent local sqlite3 -if(EXISTS "/usr/local/lib/libsqlite3.a") -set (SQLITE3_LIB "/usr/local/lib/libsqlite3.a") -else() -set (SQLITE3_LIB "sqlite3") -endif() - set (PLATFORM_LIBS "") # Add flags for obtaining system UUID via IOKit if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") @@ -46,4 +27,4 @@ endif() #tcmalloc turned off by default #target_link_libraries(EventSender ${MAT_SDK_LIB}/libmat.a curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} dl tcmalloc) -target_link_libraries(EventSender ${MAT_SDK_LIB}/libmat.a curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} ${PLATFORM_LIBS} dl) +target_link_libraries(EventSender ${MATSDK_LIBRARY} curl z ${CMAKE_THREAD_LIBS_INIT} ${MATSDK_SQLITE3_LIB} ${MATSDK_SAMPLE_PLATFORM_LIBS} ${PLATFORM_LIBS} dl) diff --git a/examples/cpp/MacProxy/CMakeLists.txt b/examples/cpp/MacProxy/CMakeLists.txt index 89d4cb233..f10ef1609 100644 --- a/examples/cpp/MacProxy/CMakeLists.txt +++ b/examples/cpp/MacProxy/CMakeLists.txt @@ -4,39 +4,20 @@ project(MacProxy) # Uncomment for building i386 binary on x86_64 system #set(CMAKE_SYSTEM_PROCESSOR i386) -# For ARM / Raspberry Pi 3 cross-compile -# set(MAT_SDK_LIB /usr/local/lib/armv7l-linux-gnu) - -# Point example to SDK dirs for x86_64 Desktop -if(EXISTS "/usr/local/lib/libmat.a") -# Use local libmat.a -set(MAT_SDK_LIB /usr/local/lib/) -else() -# Use architecture-specific libmat.a -set(MAT_SDK_LIB /usr/local/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) -endif() +include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/MSTelemetrySample.cmake) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb -gdwarf-2 -std=c11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb -gdwarf-2 -std=c++11") find_package (Threads) -set(MAT_SDK_INCLUDE /usr/local/include/mat) - # 1DS SDK to include dirs -include_directories( . ${MAT_SDK_INCLUDE} ) +include_directories(. ${MATSDK_SAMPLE_INCLUDE_DIRS}) # Link main.cpp to executable add_executable(MacProxy main.cpp HttpEventListener.cpp) source_group(" " REGULAR_EXPRESSION "") -# Prefer linking to more recent local sqlite3 -if(EXISTS "/usr/local/lib/libsqlite3.a") -set (SQLITE3_LIB "/usr/local/lib/libsqlite3.a") -else() -set (SQLITE3_LIB "sqlite3") -endif() - set (PLATFORM_LIBS "") # Add flags for obtaining system UUID via IOKit if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") @@ -48,4 +29,4 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") set (PLATFORM_LIBS "atomic") endif() -target_link_libraries(MacProxy ${MAT_SDK_LIB}/libmat.a curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} ${PLATFORM_LIBS} dl) +target_link_libraries(MacProxy ${MATSDK_LIBRARY} curl z ${CMAKE_THREAD_LIBS_INIT} ${MATSDK_SQLITE3_LIB} ${MATSDK_SAMPLE_PLATFORM_LIBS} ${PLATFORM_LIBS} dl) diff --git a/examples/cpp/SampleCpp/CMakeLists.txt b/examples/cpp/SampleCpp/CMakeLists.txt index b377d0ab2..4118eb463 100644 --- a/examples/cpp/SampleCpp/CMakeLists.txt +++ b/examples/cpp/SampleCpp/CMakeLists.txt @@ -4,43 +4,20 @@ project(SampleCpp) # Uncomment for building i386 binary on x86_64 system #set(CMAKE_SYSTEM_PROCESSOR i386) -if (NOT TARGET_ARCH) - set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR}) -endif() - -# For ARM / Raspberry Pi 3 cross-compile -# set(MAT_SDK_LIB /usr/local/lib/armv7l-linux-gnu) - -# Search for static lib first -find_path(MAT_SDK_LIB_PATH NAMES libmat.a PATHS /usr/lib /usr/local/lib /usr/local/lib/${TARGET_ARCH}-linux-gnu) -if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") - # Search for .dylib on Mac OS X - find_path(MAT_SDK_DYLIB_PATH NAMES libmat.dylib PATHS /usr/lib /usr/local/lib) -endif() -find_library(LIBMAT NAMES libmat.a libmat.dylib HINTS ${MAT_SDK_LIB_PATH} ${MAT_SDK_DYLIB_PATH}) +include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/MSTelemetrySample.cmake) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb -gdwarf-2 -std=c11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb -gdwarf-2 -std=c++11") find_package (Threads) -set(MAT_SDK_INCLUDE /usr/local/include/mat) - # 1DS SDK to include dirs -include_directories( . ${MAT_SDK_INCLUDE} ) +include_directories(. ${MATSDK_SAMPLE_INCLUDE_DIRS}) # Link main.cpp to executable add_executable(SampleCpp main.cpp DebugCallback.cpp demo.c) source_group(" " REGULAR_EXPRESSION "") -# NOTE: modify this sample if necessary to use vcpkg-provided sqlite library -# Prefer linking to more recent local sqlite3 -if(EXISTS "/usr/local/lib/libsqlite3.a") -set (SQLITE3_LIB "/usr/local/lib/libsqlite3.a") -else() -set (SQLITE3_LIB "sqlite3") -endif() - set (PLATFORM_LIBS "") # Add flags for obtaining system UUID via IOKit if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") @@ -55,5 +32,5 @@ endif() #tcmalloc turned off by default #target_link_libraries(SampleCpp ${MAT_SDK_LIB}/libmat.a curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} dl tcmalloc) -# TODO: use add_library to allow linking against ${LIBMAT_STATIC} -target_link_libraries(SampleCpp ${LIBMAT} curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} ${PLATFORM_LIBS} dl) +# TODO: use add_library to allow linking against a proper exported SDK target +target_link_libraries(SampleCpp ${MATSDK_LIBRARY} curl z ${CMAKE_THREAD_LIBS_INIT} ${MATSDK_SQLITE3_LIB} ${MATSDK_SAMPLE_PLATFORM_LIBS} ${PLATFORM_LIBS} dl) diff --git a/examples/cpp/SampleCpp/SampleCpp.vcxproj b/examples/cpp/SampleCpp/SampleCpp.vcxproj index 500d966f6..ffa49633a 100644 --- a/examples/cpp/SampleCpp/SampleCpp.vcxproj +++ b/examples/cpp/SampleCpp/SampleCpp.vcxproj @@ -1080,7 +1080,6 @@ - diff --git a/examples/cpp/SampleCpp/SampleCpp.vcxproj.filters b/examples/cpp/SampleCpp/SampleCpp.vcxproj.filters index 9a605a027..ae87cc1f8 100644 --- a/examples/cpp/SampleCpp/SampleCpp.vcxproj.filters +++ b/examples/cpp/SampleCpp/SampleCpp.vcxproj.filters @@ -15,9 +15,6 @@ - - Header Files - Source Files diff --git a/examples/cpp/SampleCppMini/CMakeLists.txt b/examples/cpp/SampleCppMini/CMakeLists.txt index af0fbf873..4d1cefe3c 100644 --- a/examples/cpp/SampleCppMini/CMakeLists.txt +++ b/examples/cpp/SampleCppMini/CMakeLists.txt @@ -4,39 +4,20 @@ project(SampleCppMini) # Uncomment for building i386 binary on x86_64 system #set(CMAKE_SYSTEM_PROCESSOR i386) -# For ARM / Raspberry Pi 3 cross-compile -# set(MAT_SDK_LIB /usr/local/lib/armv7l-linux-gnu) - -# Point example to SDK dirs for x86_64 Desktop -if(EXISTS "/usr/local/lib/libmat.a") -# Use local libmat.a -set(MAT_SDK_LIB /usr/local/lib/) -else() -# Use architecture-specific libmat.a -set(MAT_SDK_LIB /usr/local/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) -endif() +include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/MSTelemetrySample.cmake) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb -gdwarf-2 -std=c11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb -gdwarf-2 -std=c++11") find_package (Threads) -set(MAT_SDK_INCLUDE /usr/local/include/aria) - # 1DS SDK to include dirs -include_directories( . ${MAT_SDK_INCLUDE} ) +include_directories(. ${MATSDK_SAMPLE_INCLUDE_DIRS}) # Link main.cpp to executable -add_executable(SampleCppMini main.cpp DebugCallback.cpp demo.c) +add_executable(SampleCppMini main.cpp demo.c) source_group(" " REGULAR_EXPRESSION "") -# Prefer linking to more recent local sqlite3 -if(EXISTS "/usr/local/lib/libsqlite3.a") -set (SQLITE3_LIB "/usr/local/lib/libsqlite3.a") -else() -set (SQLITE3_LIB "sqlite3") -endif() - set (PLATFORM_LIBS "") # Add flags for obtaining system UUID via IOKit if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") @@ -46,4 +27,4 @@ endif() #tcmalloc turned off by default #target_link_libraries(SampleCppMini ${MAT_SDK_LIB}/libmat.a curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} dl tcmalloc) -target_link_libraries(SampleCppMini ${MAT_SDK_LIB}/libmat.a curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} ${PLATFORM_LIBS} dl) +target_link_libraries(SampleCppMini ${MATSDK_LIBRARY} curl z ${CMAKE_THREAD_LIBS_INIT} ${MATSDK_SQLITE3_LIB} ${MATSDK_SAMPLE_PLATFORM_LIBS} ${PLATFORM_LIBS} dl) diff --git a/examples/cpp/SampleCppMini/SampleCppMini.vcxproj b/examples/cpp/SampleCppMini/SampleCppMini.vcxproj index 88bca8d6d..424394f7e 100644 --- a/examples/cpp/SampleCppMini/SampleCppMini.vcxproj +++ b/examples/cpp/SampleCppMini/SampleCppMini.vcxproj @@ -1542,7 +1542,6 @@ - diff --git a/examples/cpp/SampleCppMini/SampleCppMini.vcxproj.filters b/examples/cpp/SampleCppMini/SampleCppMini.vcxproj.filters index ad3de7523..2df19ab39 100644 --- a/examples/cpp/SampleCppMini/SampleCppMini.vcxproj.filters +++ b/examples/cpp/SampleCppMini/SampleCppMini.vcxproj.filters @@ -14,11 +14,6 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - Header Files - - Source Files diff --git a/examples/cpp/SampleCppMini/main.cpp b/examples/cpp/SampleCppMini/main.cpp index 5214ebc22..9a94146ce 100644 --- a/examples/cpp/SampleCppMini/main.cpp +++ b/examples/cpp/SampleCppMini/main.cpp @@ -56,8 +56,10 @@ void test_cpp_api(const char * token, int ticketType, const char *ticket) // Log detailed event with various properties EventProperties detailed_event("MyApp.detailed_event", { +#ifdef _MSC_VER // Log compiler version { "_MSC_VER", _MSC_VER }, +#endif // Pii-typed fields { "piiKind.None", EventProperty("field_value", PiiKind_None) }, { "piiKind.DistinguishedName", EventProperty("/CN=Jack Frost,OU=PIE,DC=REDMOND,DC=COM", PiiKind_DistinguishedName) }, @@ -75,7 +77,7 @@ void test_cpp_api(const char * token, int ticketType, const char *ticket) // Various typed key-values { "strKey1", "hello1" }, { "strKey2", "hello2" }, - { "int64Key", 1L }, + { "int64Key", 1LL }, { "dblKey", 3.14 }, { "boolKey", false }, { "guidKey0", GUID_t("00000000-0000-0000-0000-000000000000") }, diff --git a/examples/objc/cocoa-app/CMakeLists.txt b/examples/objc/cocoa-app/CMakeLists.txt index 4d5456a83..188fbc4ee 100644 --- a/examples/objc/cocoa-app/CMakeLists.txt +++ b/examples/objc/cocoa-app/CMakeLists.txt @@ -1,31 +1,15 @@ cmake_minimum_required(VERSION 2.8.8) project(foo) -# Point example to SDK dirs for x86_64 Desktop -if(EXISTS "/usr/local/lib/libmat.a") -# Use local libmat.a -set(MATSDK_LIB /usr/local/lib/) -else() -# Use architecture-specific libmat.a -set(MATSDK_LIB /usr/local/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) -endif() +include(${CMAKE_CURRENT_LIST_DIR}/../../cmake/MSTelemetrySample.cmake) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb -gdwarf-2 -std=c11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb -gdwarf-2 -std=c++11") find_package (Threads) -set(MATSDK_INCLUDE /usr/local/include/mat) - # 1DS SDK to include dirs -include_directories( . ${MATSDK_INCLUDE} ) - -# Prefer linking to more recent local sqlite3 -if(EXISTS "/usr/local/lib/libsqlite3.a") -set (SQLITE3_LIB "/usr/local/lib/libsqlite3.a") -else() -set (SQLITE3_LIB "sqlite3") -endif() +include_directories(. ${MATSDK_SAMPLE_INCLUDE_DIRS}) set (PLATFORM_LIBS "") # Add flags for obtaining system UUID via IOKit @@ -57,4 +41,4 @@ set_target_properties( ${CMAKE_CURRENT_LIST_DIR}/plist.in ) -target_link_libraries(foo ${MATSDK_LIB}/libmat.a curl z ${CMAKE_THREAD_LIBS_INIT} ${SQLITE3_LIB} ${PLATFORM_LIBS} dl) +target_link_libraries(foo ${MATSDK_LIBRARY} curl z ${CMAKE_THREAD_LIBS_INIT} ${MATSDK_SQLITE3_LIB} ${MATSDK_SAMPLE_PLATFORM_LIBS} ${PLATFORM_LIBS} dl) diff --git a/examples/swift/SamplePackage/Package.swift b/examples/swift/SamplePackage/Package.swift index eb32822c2..66930e19b 100644 --- a/examples/swift/SamplePackage/Package.swift +++ b/examples/swift/SamplePackage/Package.swift @@ -2,6 +2,9 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription +import Foundation + +let matsdkInstallDir = ProcessInfo.processInfo.environment["MATSDK_INSTALL_DIR"] ?? "/usr/local" let package = Package( name: "SamplePackage", @@ -26,7 +29,7 @@ let package = Package( .unsafeFlags(["-Xcc", "-I../../../wrappers/swift/Modules/"]), ], linkerSettings: [ - .unsafeFlags(["-L/usr/local/lib"]), + .unsafeFlags(["-L\(matsdkInstallDir)/lib"]), // Libs to be linked. .linkedLibrary("mat"), .linkedLibrary("sqlite3"), diff --git a/examples/swift/SampleXcodeApp/SwiftWrapperApp.xcodeproj/project.pbxproj b/examples/swift/SampleXcodeApp/SwiftWrapperApp.xcodeproj/project.pbxproj index 50111aaf0..b7f659e73 100644 --- a/examples/swift/SampleXcodeApp/SwiftWrapperApp.xcodeproj/project.pbxproj +++ b/examples/swift/SampleXcodeApp/SwiftWrapperApp.xcodeproj/project.pbxproj @@ -12,7 +12,7 @@ 2711D26D2A45438C000712BD /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2711D26C2A45438C000712BD /* Preview Assets.xcassets */; }; A34744202A4642300039D419 /* OneDSSwift in Frameworks */ = {isa = PBXBuildFile; productRef = A347441F2A4642300039D419 /* OneDSSwift */; }; A34744242A4643B20039D419 /* libmat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A34744232A4643B20039D419 /* libmat.a */; }; - A34744262A4643FE0039D419 /* libsqlite3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A34744252A4643FE0039D419 /* libsqlite3.a */; }; + A34744262A4643FE0039D419 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A34744252A4643FE0039D419 /* libsqlite3.tbd */; }; A34744282A46440F0039D419 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A34744272A46440F0039D419 /* SystemConfiguration.framework */; }; A347442A2A46441A0039D419 /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A34744292A46441A0039D419 /* Network.framework */; }; A347442C2A46442C0039D419 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A347442B2A46442C0039D419 /* libz.tbd */; }; @@ -26,8 +26,8 @@ 2711D26C2A45438C000712BD /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 2711D2732A45452E000712BD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 277E76FF2A45FE4D004A3A8F /* swift */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = swift; path = ../../../wrappers/swift; sourceTree = ""; }; - A34744232A4643B20039D419 /* libmat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmat.a; path = /usr/local/lib/libmat.a; sourceTree = ""; }; - A34744252A4643FE0039D419 /* libsqlite3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsqlite3.a; path = /usr/local/lib/libsqlite3.a; sourceTree = ""; }; + A34744232A4643B20039D419 /* libmat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmat.a; path = "$(MATSDK_INSTALL_DIR)/lib/libmat.a"; sourceTree = ""; }; + A34744252A4643FE0039D419 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; A34744272A46440F0039D419 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; A34744292A46441A0039D419 /* Network.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Network.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk/System/Library/Frameworks/Network.framework; sourceTree = DEVELOPER_DIR; }; A347442B2A46442C0039D419 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; @@ -43,7 +43,7 @@ A34744282A46440F0039D419 /* SystemConfiguration.framework in Frameworks */, A34744202A4642300039D419 /* OneDSSwift in Frameworks */, A34744242A4643B20039D419 /* libmat.a in Frameworks */, - A34744262A4643FE0039D419 /* libsqlite3.a in Frameworks */, + A34744262A4643FE0039D419 /* libsqlite3.tbd in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -102,7 +102,7 @@ A347442B2A46442C0039D419 /* libz.tbd */, A34744292A46441A0039D419 /* Network.framework */, A34744272A46440F0039D419 /* SystemConfiguration.framework */, - A34744252A4643FE0039D419 /* libsqlite3.a */, + A34744252A4643FE0039D419 /* libsqlite3.tbd */, A34744232A4643B20039D419 /* libmat.a */, ); name = Frameworks; @@ -332,9 +332,10 @@ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[arch=*]" = /usr/local/lib/; + "LD_RUNPATH_SEARCH_PATHS[arch=*]" = "$(MATSDK_INSTALL_DIR)/lib"; + LIBRARY_SEARCH_PATHS = "$(MATSDK_INSTALL_DIR)/lib"; + MATSDK_INSTALL_DIR = /usr/local; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - LIBRARY_SEARCH_PATHS = /usr/local/lib; MACOSX_DEPLOYMENT_TARGET = 13.3; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = OneDSSwift.SwiftWrapperApp; @@ -371,9 +372,11 @@ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[arch=*]" = "$(MATSDK_INSTALL_DIR)/lib"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - LIBRARY_SEARCH_PATHS = /usr/local/lib; + LIBRARY_SEARCH_PATHS = "$(MATSDK_INSTALL_DIR)/lib"; MACOSX_DEPLOYMENT_TARGET = 13.3; + MATSDK_INSTALL_DIR = /usr/local; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = OneDSSwift.SwiftWrapperApp; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index a39e65b98..3c66bf7e7 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,7 +1,15 @@ # Honor visibility properties for all target types cmake_policy(SET CMP0063 NEW) -include_directories( . ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/public ${CMAKE_CURRENT_SOURCE_DIR}/include/public ${CMAKE_CURRENT_SOURCE_DIR}/include/mat ${CMAKE_CURRENT_SOURCE_DIR}/pal ${CMAKE_CURRENT_SOURCE_DIR}/utils ${CMAKE_CURRENT_SOURCE_DIR}/modules/exp ${CMAKE_CURRENT_SOURCE_DIR}/modules/dataviewer ${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard ${CMAKE_CURRENT_SOURCE_DIR}/modules/liveeventinspector ${CMAKE_CURRENT_SOURCE_DIR}/../third_party/Reachability ${CMAKE_CURRENT_SOURCE_DIR}/modules/cds ${CMAKE_CURRENT_SOURCE_DIR}/modules/signals ${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer /usr/local/include ) +# Legacy (non-target) include paths that apply globally within this directory and +# are used by build.sh / MSBuild / standalone CMake workflows. They do NOT propagate +# to downstream consumers via find_package() (see target_include_directories below). +include_directories( . ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/public ${CMAKE_CURRENT_SOURCE_DIR}/include/mat ${CMAKE_CURRENT_SOURCE_DIR}/pal ${CMAKE_CURRENT_SOURCE_DIR}/utils ${CMAKE_CURRENT_SOURCE_DIR}/modules/exp ${CMAKE_CURRENT_SOURCE_DIR}/modules/dataviewer ${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard ${CMAKE_CURRENT_SOURCE_DIR}/modules/liveeventinspector ${CMAKE_CURRENT_SOURCE_DIR}/../third_party/Reachability ${CMAKE_CURRENT_SOURCE_DIR}/modules/cds ${CMAKE_CURRENT_SOURCE_DIR}/modules/signals ${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer ) + +# Legacy builds may need system-installed deps from /usr/local/include +if(NOT MATSDK_USE_VCPKG_DEPS) + include_directories(/usr/local/include) +endif() set(SRCS decorators/BaseDecorator.cpp packager/BondSplicer.cpp @@ -60,7 +68,7 @@ if(BUILD_AZMON) include(modules/azmon/CMakeLists.txt OPTIONAL) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/exp/) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/exp/") list(APPEND SRCS modules/exp/afd/afdclient/AFDClientUtils.cpp modules/exp/afd/afdclient/AFDClient.cpp @@ -74,14 +82,14 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/exp/) ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/dataviewer/) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/dataviewer/") list(APPEND SRCS modules/dataviewer/DefaultDataViewer.cpp modules/dataviewer/OnDisableNotificationCollection.cpp ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/ AND BUILD_PRIVACYGUARD) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/" AND BUILD_PRIVACYGUARD) list(APPEND SRCS modules/privacyguard/PrivacyGuard.cpp modules/privacyguard/RegisteredFileTypes.cpp @@ -89,14 +97,14 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/ AND BUILD_PRIVACYGUA ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/liveeventinspector/ AND BUILD_LIVEEVENTINSPECTOR) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/liveeventinspector/" AND BUILD_LIVEEVENTINSPECTOR) list(APPEND SRCS modules/liveeventinspector/LiveEventInspector.cpp modules/liveeventinspector/LiveEventInspector.hpp ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/cds/ AND BUILD_CDS) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cds/" AND BUILD_CDS) add_definitions(-DHAVE_MAT_CDS) list(APPEND SRCS modules/cds/CdsFactory.hpp @@ -104,14 +112,14 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/cds/ AND BUILD_CDS) ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/signals/ AND BUILD_SIGNALS) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/signals/" AND BUILD_SIGNALS) list(APPEND SRCS modules/signals/Signals.cpp modules/signals/SignalsEncoder.cpp ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/ AND BUILD_SANITIZER) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/" AND BUILD_SANITIZER) list(APPEND SRCS modules/sanitizer/detectors/EmailAddressDetector.cpp modules/sanitizer/detectors/JwtDetector.cpp @@ -165,14 +173,21 @@ if(PAL_IMPLEMENTATION STREQUAL "CPP11") ../third_party/Reachability/ODWReachability.m ) else() - list(APPEND SRCS - http/HttpClient_Curl.cpp - http/HttpClient_Curl.hpp - pal/posix/NetworkInformationImpl.cpp - ) + list(APPEND SRCS pal/posix/NetworkInformationImpl.cpp) + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + list(APPEND SRCS + http/HttpClient_Android.cpp + http/HttpClient_Android.hpp + ) + else() + list(APPEND SRCS + http/HttpClient_Curl.cpp + http/HttpClient_Curl.hpp + ) + endif() endif() if(APPLE AND BUILD_OBJC_WRAPPER) - message("Include ObjC Wrappers") + message(STATUS "Include ObjC Wrappers") list(APPEND SRCS ../wrappers/obj-c/ODWLogger.mm ../wrappers/obj-c/ODWLogManager.mm @@ -180,19 +195,19 @@ if(PAL_IMPLEMENTATION STREQUAL "CPP11") ../wrappers/obj-c/ODWLogConfiguration.mm ../wrappers/obj-c/ODWSemanticContext.mm ) - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/dataviewer/) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/dataviewer/") list(APPEND SRCS ../wrappers/obj-c/ODWDiagnosticDataViewer.mm ) endif() - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/ AND BUILD_PRIVACYGUARD) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/" AND BUILD_PRIVACYGUARD) list(APPEND SRCS ../wrappers/obj-c/ODWCommonDataContext.mm ../wrappers/obj-c/ODWPrivacyGuard.mm ../wrappers/obj-c/ODWPrivacyGuardInitConfig.mm ) endif() - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/ AND BUILD_SANITIZER) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/" AND BUILD_SANITIZER) list(APPEND SRCS ../wrappers/obj-c/ODWSanitizerInitConfig.mm ../wrappers/obj-c/ODWSanitizer.mm @@ -201,7 +216,7 @@ if(PAL_IMPLEMENTATION STREQUAL "CPP11") endif() if(APPLE AND BUILD_SWIFT_WRAPPER) - message("Building Swift Wrappers") + message(STATUS "Building Swift Wrappers") # Run swift build for the Swift Wrappers Package string(TOLOWER ${CMAKE_BUILD_TYPE} LOWER_BUILD_TYPE) execute_process( @@ -213,9 +228,9 @@ if(PAL_IMPLEMENTATION STREQUAL "CPP11") ) if(SWIFT_BUILD_RESULT EQUAL 0) - message("Swift Wrappers build succeeded!") + message(STATUS "Swift Wrappers build succeeded!") else() - message(FATAL_ERROR, "Swift build failed with error code: ${SWIFT_BUILD_RESULT}") + message(FATAL_ERROR "Swift build failed with error code: ${SWIFT_BUILD_RESULT}") endif() endif() @@ -223,8 +238,10 @@ if(PAL_IMPLEMENTATION STREQUAL "CPP11") elseif(PAL_IMPLEMENTATION STREQUAL "WIN32") # Win32 Desktop for now. # TODO: define a separate PAL for Win10 cmake build -include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../zlib ${CMAKE_CURRENT_SOURCE_DIR}/../sqlite) -add_definitions(-D_UNICODE -DUNICODE -DZLIB_WINAPI -DWIN32 -DMATSDK_PLATFORM_WINDOWS=1 -DMATSDK_SHARED_LIB=1 -D_UTC_SDK -DUSE_BOND -D_WINDOWS -D_USRDLL -DWINVER=_WIN32_WINNT_WIN7) +if(NOT MATSDK_USE_VCPKG_DEPS) + include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../zlib ${CMAKE_CURRENT_SOURCE_DIR}/../sqlite) +endif() +add_definitions(-D_UNICODE -DUNICODE -DWIN32 -DMATSDK_PLATFORM_WINDOWS=1 -DMATSDK_SHARED_LIB=1 -D_UTC_SDK -DUSE_BOND -D_WINDOWS -D_USRDLL -DWINVER=_WIN32_WINNT_WIN7) remove_definitions(-D_MBCS) list(APPEND SRCS http/HttpClient_WinInet.cpp @@ -238,7 +255,7 @@ remove_definitions(-D_MBCS) ) # UTC module - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/utc) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/utc") list(APPEND SRCS modules/utc/desktop/UtcHelpers.cpp modules/utc/UtcTelemetrySystem.cpp @@ -250,7 +267,7 @@ else() endif() # Filtering module -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/filter") list(APPEND SRCS modules/filter/CompliantByDefaultEventFilterModule.cpp modules/filter/CompliantByDefaultFilterApi.cpp @@ -260,71 +277,176 @@ endif() create_source_files_groups_per_folder(${SRCS}) -# MinGW does not require pthread -if (CMAKE_SYSTEM_NAME STREQUAL "Linux") +# Linux and Android require pthreads +if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") find_package(Threads REQUIRED) - if(THREADS_HAVE_PTHREAD_ARG) - target_compile_options(mat PUBLIC "-pthread") - endif() endif() +################################################################################################ +# Build the library +################################################################################################ if(BUILD_SHARED_LIBS STREQUAL "ON") - message("-- Building shared SDK library") - - # include(FindCURL) - # find_package(CURL REQUIRED) - # set(CMAKE_REQUIRED_LIBRARIES "${CURL_LIBRARIES}") - - # find_package(sqlite3 REQUIRED) - + message(STATUS "Building shared SDK library") add_library(mat SHARED ${SRCS}) +else() + message(STATUS "Building static SDK library") + add_library(mat STATIC ${SRCS}) +endif() + +# Target-based include paths for vcpkg / install workflow. +# PUBLIC propagates to consumers; PRIVATE is SDK-internal only. +# BUILD_INTERFACE is used during the SDK build; INSTALL_INTERFACE is used +# by consumers after cmake --install. +target_include_directories(mat + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/pal + ${CMAKE_CURRENT_SOURCE_DIR}/utils +) - # Add flags for obtaining system UUID via IOKit - if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(CMAKE_SHARED_LINKER_FLAGS - "-framework CoreFoundation -framework IOKit -framework Foundation" +################################################################################################ +# Link dependencies +################################################################################################ +if(MATSDK_USE_VCPKG_DEPS) + # vcpkg mode: all deps resolved via find_package() in root CMakeLists.txt + target_link_libraries(mat + PRIVATE + unofficial::sqlite3::sqlite3 + ZLIB::ZLIB + nlohmann_json::nlohmann_json + ${LIBS} + ) +else() + # Legacy mode: use vendored or system-installed deps + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + # Android NDK has no system sqlite3 or zlib — build from bundled source. + add_library(sqlite3_bundled STATIC "${CMAKE_CURRENT_SOURCE_DIR}/../sqlite/sqlite3.c") + target_include_directories(sqlite3_bundled PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../sqlite") + # When -ffast-math is enabled globally, re-enable finite math for sqlite3 (uses INFINITY macro). + # Also suppress warnings treated as errors in vendored code. + target_compile_options(sqlite3_bundled PRIVATE -fno-finite-math-only -Wno-unused-function) + + # Build zlib from bundled source, excluding Intel SIMD files (crc_folding.c, + # fill_window_sse.c, x86.c) that require SSE4.2/PCLMULQDQ and cannot compile + # on ARM. simd_stub.c provides the necessary stubs instead. + add_library(zlib_bundled STATIC + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/adler32.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/compress.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/crc32.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/deflate.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/gzclose.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/gzlib.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/gzread.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/gzwrite.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/infback.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/inffast.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/inflate.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/inftrees.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/trees.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/uncompr.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/zutil.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../zlib/simd_stub.c" ) + target_include_directories(zlib_bundled PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../zlib") + # Bundled zlib 1.2.11 uses K&R-style function definitions and POSIX functions + # (close/read/write) without explicit includes; suppress warnings from + # vendored code we don't modify. + target_compile_options(zlib_bundled PRIVATE + -Wno-strict-prototypes -Wno-deprecated-non-prototype -Wno-implicit-function-declaration) + + target_link_libraries(mat PRIVATE sqlite3_bundled zlib_bundled ${LIBS}) + elseif(PAL_IMPLEMENTATION STREQUAL "WIN32") + # Windows legacy: vendored sqlite/zlib headers are included via + # include_directories in the PAL section above; link only ${LIBS} + # (e.g. CURL if needed — sqlite/zlib come from .vcxproj references). + target_link_libraries(mat PRIVATE ${LIBS}) + else() + # Linux/macOS legacy: link system-installed sqlite3 and zlib + target_link_libraries(mat PRIVATE sqlite3 z ${LIBS}) endif() +endif() - # - # TODO: allow adding "${Tcmalloc_LIBRARIES}" to target_link_libraries for memory leak debugging - # - if (BUILD_STATIC_SQLITE STREQUAL "ON") - # Build dynamic library, but prefer statically linking sqlite3 and zlib - add_library(sqlite3 STATIC IMPORTED GLOBAL) - add_library(z STATIC IMPORTED GLOBAL) - target_link_libraries(mat PRIVATE sqlite3 PUBLIC z ${LIBS} "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}" "${CMAKE_REQUIRED_LIBRARIES}") +# Platform-specific link dependencies +if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") + target_link_libraries(mat PUBLIC "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}") + if(THREADS_HAVE_PTHREAD_ARG) + target_compile_options(mat PUBLIC "-pthread") + endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + target_link_libraries(mat PUBLIC log) + endif() +elseif(PAL_IMPLEMENTATION STREQUAL "WIN32") + target_link_libraries(mat PUBLIC wininet crypt32 ws2_32) +elseif(APPLE) + target_link_libraries(mat PUBLIC + "-framework CoreFoundation" + "-framework Foundation" + "-framework CFNetwork" + "-framework Network" + "-framework SystemConfiguration" + ) + if(BUILD_IOS OR CMAKE_SYSTEM_NAME STREQUAL "iOS") + target_link_libraries(mat PUBLIC "-framework UIKit") else() - # Prefer shared libraries for sqlite3 and zlib - add_library(sqlite3 SHARED IMPORTED GLOBAL) - add_library(z SHARED IMPORTED GLOBAL) - target_link_libraries(mat PUBLIC sqlite3 PUBLIC z ${LIBS} "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}" "${CMAKE_REQUIRED_LIBRARIES}") + target_link_libraries(mat PUBLIC "-framework IOKit") endif() +endif() - # target_link_libraries(mat PUBLIC libsqlite3 libcurl.a libz.a libssl.a libcrypto.a "${SQLITE_LIBRARY}" "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}" ) - install(TARGETS mat EXPORT mat LIBRARY DESTINATION ${INSTALL_LIB_DIR}) -else() - message("-- Building static SDK library") - add_library(mat STATIC ${SRCS}) - if(LINK_STATIC_DEPENDS) - if(PAL_IMPLEMENTATION STREQUAL "WIN32") - target_link_libraries(mat ${LIBS} "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}" ) - else() - add_library(sqlite3 STATIC IMPORTED GLOBAL) - add_library(z STATIC IMPORTED GLOBAL) - # - # TODO: allow adding "${Tcmalloc_LIBRARIES}" to target_link_libraries for memory leak debugging - # - target_link_libraries(mat PRIVATE libsqlite3.a PUBLIC libz.a ${LIBS} "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}" ) - endif() +################################################################################################ +# Installation +################################################################################################ +# The CMake package config / export workflow is used by vcpkg and any CMake-based +# consumer that does find_package(MSTelemetry). Legacy (non-vcpkg) builds install +# via install.sh or MSBuild output directories and don't need this. +if(MATSDK_USE_VCPKG_DEPS) + install(TARGETS mat + EXPORT MSTelemetryTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + + message(STATUS "Library will be installed to ${CMAKE_INSTALL_LIBDIR}") + + # Generate and install CMake package config files + install(EXPORT MSTelemetryTargets + FILE MSTelemetryTargets.cmake + NAMESPACE MSTelemetry:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MSTelemetry + ) + + configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/MSTelemetryConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/MSTelemetryConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MSTelemetry + ) + + if(NOT DEFINED MATSDK_BUILD_VERSION OR MATSDK_BUILD_VERSION STREQUAL "") + message(FATAL_ERROR "MATSDK_BUILD_VERSION is not set. Cannot generate package version file.") endif() - install(TARGETS mat EXPORT mat ARCHIVE DESTINATION ${INSTALL_LIB_DIR}) -endif() -message("-- Library will be installed to ${INSTALL_LIB_DIR}") + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/MSTelemetryConfigVersion.cmake" + VERSION ${MATSDK_BUILD_VERSION} + COMPATIBILITY AnyNewerVersion + ) -#if(PAL_IMPLEMENTATION STREQUAL "CPP11") -# #target_link_libraries(mat PUBLIC libcurl.a libz.a libssl.a libcrypto.a "${SQLITE_LIBRARY}" "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}" ) -# #target_link_libraries(mat PUBLIC libsqlite3.a libz.a ${LIBS} "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}" ) -#endif() + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/MSTelemetryConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/MSTelemetryConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MSTelemetry + ) +else() + # Legacy install: just put the library and headers in standard locations + install(TARGETS mat + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + message(STATUS "Library will be installed to ${CMAKE_INSTALL_LIBDIR}") +endif() diff --git a/lib/api/Logger.cpp b/lib/api/Logger.cpp index 54d883664..f76f85734 100644 --- a/lib/api/Logger.cpp +++ b/lib/api/Logger.cpp @@ -127,7 +127,8 @@ namespace MAT_NS_BEGIN Logger::~Logger() noexcept { - LOG_TRACE("%p: Destroyed", this); + // Intentionally empty — logging here triggers a static-destruction-order + // crash on iOS simulator (recursive_mutex used after teardown). } ISemanticContext* Logger::GetSemanticContext() const diff --git a/lib/http/HttpClientFactory.cpp b/lib/http/HttpClientFactory.cpp index 5419f161d..9424c853a 100644 --- a/lib/http/HttpClientFactory.cpp +++ b/lib/http/HttpClientFactory.cpp @@ -22,9 +22,9 @@ #elif defined(MATSDK_PAL_CPP11) #if TARGET_OS_IPHONE || (defined(__APPLE__) && defined(APPLE_HTTP)) #include "http/HttpClient_Apple.hpp" - #elif defined(HAVE_MAT_CURL_HTTP_CLIENT) || !defined(ANDROID) + #elif defined(HAVE_MAT_CURL_HTTP_CLIENT) || !defined(__ANDROID__) #include "http/HttpClient_Curl.hpp" - #elif defined(ANDROID) + #elif defined(__ANDROID__) #include "http/HttpClient_Android.hpp" #endif #else @@ -61,7 +61,7 @@ namespace MAT_NS_BEGIN { LOG_TRACE("Creating HttpClient_Apple"); return std::make_shared(); } -#elif defined(ANDROID) +#elif defined(__ANDROID__) std::shared_ptr HttpClientFactory::Create() { LOG_TRACE("Creating HttpClient_Android"); return HttpClient_Android::GetClientInstance(); diff --git a/lib/http/HttpClientManager.cpp b/lib/http/HttpClientManager.cpp index 58fa5fb4a..a1c228556 100644 --- a/lib/http/HttpClientManager.cpp +++ b/lib/http/HttpClientManager.cpp @@ -149,8 +149,15 @@ namespace MAT_NS_BEGIN { void HttpClientManager::cancelAllRequests() { cancelAllRequestsAsync(); - while (!m_httpCallbacks.empty()) + while (true) + { + { + LOCKGUARD(m_httpCallbacksMtx); + if (m_httpCallbacks.empty()) + break; + } std::this_thread::yield(); + } } // start async cancellation diff --git a/lib/http/HttpClient_Android.cpp b/lib/http/HttpClient_Android.cpp index dbbe0eee1..1410ad399 100644 --- a/lib/http/HttpClient_Android.cpp +++ b/lib/http/HttpClient_Android.cpp @@ -11,7 +11,8 @@ namespace MAT_NS_BEGIN { - constexpr static auto Tag = "HttpClient_Android"; + // Log tag for __android_log_print (reserved for future diagnostics) + constexpr static auto Tag __attribute__((unused)) = "HttpClient_Android"; HttpClient_Android::HttpRequest::~HttpRequest() noexcept { diff --git a/lib/http/HttpClient_Apple.hpp b/lib/http/HttpClient_Apple.hpp index e9b22b1f0..1eee21b97 100644 --- a/lib/http/HttpClient_Apple.hpp +++ b/lib/http/HttpClient_Apple.hpp @@ -25,10 +25,13 @@ namespace MAT_NS_BEGIN { void Erase(IHttpRequest* req); void Add(IHttpRequest* req); + void* GetOrCreateSession(); private: + void ensureSession(); std::mutex m_requestsMtx; std::map m_requests; + void* m_session = nullptr; // NSURLSession*, opaque in header }; } MAT_NS_END diff --git a/lib/http/HttpClient_Apple.mm b/lib/http/HttpClient_Apple.mm index 05817087a..7b075f472 100644 --- a/lib/http/HttpClient_Apple.mm +++ b/lib/http/HttpClient_Apple.mm @@ -29,9 +29,6 @@ return std::string("RESP-") + std::to_string(seq.fetch_add(1)); } -static dispatch_once_t once; -static NSURLSession* session; - class HttpRequestApple : public SimpleHttpRequest { public: @@ -40,10 +37,6 @@ m_parent(parent) { m_parent->Add(static_cast(this)); - dispatch_once(&once, ^{ - NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; - session = [NSURLSession sessionWithConfiguration:sessionConfig]; - }); } ~HttpRequestApple() noexcept @@ -72,16 +65,18 @@ void SendAsync(IHttpResponseCallback* callback) HandleResponse(data, response, error); }; + NSURLSession* sess = (__bridge NSURLSession*)m_parent->GetOrCreateSession(); + if(equalsIgnoreCase(m_method, "get")) { [m_urlRequest setHTTPMethod:@"GET"]; - m_dataTask = [session dataTaskWithRequest:m_urlRequest completionHandler:m_completionMethod]; + m_dataTask = [sess dataTaskWithRequest:m_urlRequest completionHandler:m_completionMethod]; } else { [m_urlRequest setHTTPMethod:@"POST"]; NSData* postData = [NSData dataWithBytes:m_body.data() length:m_body.size()]; - m_dataTask = [session uploadTaskWithRequest:m_urlRequest fromData:postData completionHandler:m_completionMethod]; + m_dataTask = [sess uploadTaskWithRequest:m_urlRequest fromData:postData completionHandler:m_completionMethod]; } [m_dataTask resume]; @@ -132,23 +127,6 @@ void HandleResponse(NSData* data, NSURLResponse* response, NSError* error) void Cancel() { [m_dataTask cancel]; - [session getTasksWithCompletionHandler:^(NSArray* dataTasks, NSArray* uploadTasks, NSArray* downloadTasks) - { - for (NSURLSessionTask* _task in dataTasks) - { - [_task cancel]; - } - - for (NSURLSessionTask* _task in downloadTasks) - { - [_task cancel]; - } - - for (NSURLSessionTask* _task in uploadTasks) - { - [_task cancel]; - } - }]; } private: @@ -161,14 +139,38 @@ void Cancel() HttpClient_Apple::HttpClient_Apple() { + ensureSession(); LOG_TRACE("Initializing HttpClient_Apple..."); } HttpClient_Apple::~HttpClient_Apple() noexcept { + // Release the session object. By this point, CancelAllRequests should + // have already invalidated the session and drained all tasks. + if (m_session) { + NSURLSession* sess = (__bridge_transfer NSURLSession*)m_session; + [sess invalidateAndCancel]; + m_session = nullptr; + } LOG_TRACE("Shutting down HttpClient_Apple..."); } +void HttpClient_Apple::ensureSession() +{ + if (!m_session) { + @autoreleasepool { + NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration ephemeralSessionConfiguration]; + m_session = (__bridge_retained void*)[NSURLSession sessionWithConfiguration:sessionConfig]; + } + } +} + +void* HttpClient_Apple::GetOrCreateSession() +{ + ensureSession(); + return m_session; +} + IHttpRequest* HttpClient_Apple::CreateRequest() { auto request = new HttpRequestApple(this); @@ -219,6 +221,15 @@ void Cancel() PAL::sleep(100); std::this_thread::yield(); } + + // Invalidate the session so no stale completion handlers can fire after + // the caller (HttpClientManager) finishes tearing down. A fresh session + // is created lazily on the next CreateRequest if the SDK is reinitialized. + if (m_session) { + NSURLSession* sess = (__bridge_transfer NSURLSession*)m_session; + [sess invalidateAndCancel]; + m_session = nullptr; + } } void HttpClient_Apple::Erase(IHttpRequest* req) diff --git a/lib/http/HttpResponseDecoder.cpp b/lib/http/HttpResponseDecoder.cpp index 11e9d4096..2bb652fdf 100644 --- a/lib/http/HttpResponseDecoder.cpp +++ b/lib/http/HttpResponseDecoder.cpp @@ -67,13 +67,11 @@ namespace MAT_NS_BEGIN { break; case HttpResult_Aborted: - ctx->httpResponse = nullptr; outcome = Abort; break; case HttpResult_LocalFailure: case HttpResult_NetworkFailure: - ctx->httpResponse = nullptr; outcome = RetryNetwork; break; } @@ -129,6 +127,7 @@ namespace MAT_NS_BEGIN { evt.param1 = 0; // response.GetStatusCode(); DispatchEvent(evt); } + delete ctx->httpResponse; ctx->httpResponse = nullptr; // eventsRejected(ctx); // FIXME: [MG] - investigate why ctx gets corrupt after eventsRejected requestAborted(ctx); @@ -159,6 +158,8 @@ namespace MAT_NS_BEGIN { evt.param1 = response.GetStatusCode(); DispatchEvent(evt); } + delete ctx->httpResponse; + ctx->httpResponse = nullptr; temporaryNetworkFailure(ctx); break; } diff --git a/lib/include/mat/config-default.h b/lib/include/mat/config-default.h index 9617611c9..e5ce48e49 100644 --- a/lib/include/mat/config-default.h +++ b/lib/include/mat/config-default.h @@ -8,16 +8,24 @@ #if defined(_WIN32) #if defined __has_include # if __has_include ("modules/azmon/AITelemetrySystem.hpp") -# define HAVE_MAT_AI +# ifndef HAVE_MAT_AI +# define HAVE_MAT_AI +# endif # endif # if __has_include ("modules/utc/UtcTelemetrySystem.hpp") -# define HAVE_MAT_UTC +# ifndef HAVE_MAT_UTC +# define HAVE_MAT_UTC +# endif # endif # if __has_include("modules/signals/Signals.hpp") -# define HAVE_MAT_SIGNALS +# ifndef HAVE_MAT_SIGNALS +# define HAVE_MAT_SIGNALS +# endif # endif # if __has_include("modules/sanitizer/Sanitizer.hpp") -# define HAVE_MAT_SANITIZER +# ifndef HAVE_MAT_SANITIZER +# define HAVE_MAT_SANITIZER +# endif # endif #endif #endif diff --git a/lib/pal/WorkerThread.cpp b/lib/pal/WorkerThread.cpp index 2bdbf6c67..8a9c21f97 100644 --- a/lib/pal/WorkerThread.cpp +++ b/lib/pal/WorkerThread.cpp @@ -56,22 +56,26 @@ namespace PAL_NS_BEGIN { auto item = new WorkerThreadShutdownItem(); Queue(item); std::thread::id this_id = std::this_thread::get_id(); + bool joined = false; try { - if (m_hThread.joinable() && (m_hThread.get_id() != this_id)) + if (m_hThread.joinable() && (m_hThread.get_id() != this_id)) { m_hThread.join(); - else + joined = true; + } else { m_hThread.detach(); + } } catch (...) {}; - // TODO: [MG] - investigate if we ever drop work items on shutdown. - if (!m_queue.empty()) - { - LOG_WARN("m_queue is not empty!"); - } - if (!m_timerQueue.empty()) - { - LOG_WARN("m_timerQueue is not empty!"); + // Clean up any tasks remaining in the queues after shutdown. + // Only safe after join() — the thread has fully exited. + // After detach(), the thread still needs the shutdown item + // and may still be accessing the queues. + if (joined) { + for (auto task : m_queue) { delete task; } + m_queue.clear(); + for (auto task : m_timerQueue) { delete task; } + m_timerQueue.clear(); } } diff --git a/lib/shared/Shared.vcxitems b/lib/shared/Shared.vcxitems index bf3d5df64..4b7c095ff 100644 --- a/lib/shared/Shared.vcxitems +++ b/lib/shared/Shared.vcxitems @@ -24,7 +24,6 @@ - diff --git a/lib/shared/Shared.vcxitems.filters b/lib/shared/Shared.vcxitems.filters index c488b869b..1868316bf 100644 --- a/lib/shared/Shared.vcxitems.filters +++ b/lib/shared/Shared.vcxitems.filters @@ -1,7 +1,6 @@  - diff --git a/lib/tpm/TransmissionPolicyManager.cpp b/lib/tpm/TransmissionPolicyManager.cpp index 83b82cf2a..3b79bb5d5 100644 --- a/lib/tpm/TransmissionPolicyManager.cpp +++ b/lib/tpm/TransmissionPolicyManager.cpp @@ -154,7 +154,7 @@ namespace MAT_NS_BEGIN { // m_isUploadScheduled check does not have to be strictly atomic because // the completion of upload will schedule more uploads as-needed, we only // want to avoid the unnecessary wasteful rescheduling. - LOG_TRACE("WAIT upload %d ms for lat=%d", delta, m_runningLatency); + LOG_TRACE("WAIT upload %d ms for lat=%d", delta, m_runningLatency.load()); return; } } @@ -173,7 +173,7 @@ namespace MAT_NS_BEGIN { { m_scheduledUploadTime = PAL::getMonotonicTimeMs() + delay.count(); m_runningLatency = latency; - LOG_TRACE("SCHED upload %d ms for lat=%d", delay.count(), m_runningLatency); + LOG_TRACE("SCHED upload %d ms for lat=%d", delay.count(), m_runningLatency.load()); m_scheduledUpload = PAL::scheduleTask(&m_taskDispatcher, static_cast(delay.count()), this, &TransmissionPolicyManager::uploadAsync, latency); } } @@ -185,10 +185,9 @@ namespace MAT_NS_BEGIN { return; } m_runningLatency = latency; - m_scheduledUploadTime = std::numeric_limits::max(); - { LOCKGUARD(m_scheduledUploadMutex); + m_scheduledUploadTime = std::numeric_limits::max(); m_isUploadScheduled = false; // Allow to schedule another uploadAsync if ((m_isPaused) || (m_scheduledUploadAborted)) { diff --git a/lib/tpm/TransmissionPolicyManager.hpp b/lib/tpm/TransmissionPolicyManager.hpp index e1a91ad10..003315a8a 100644 --- a/lib/tpm/TransmissionPolicyManager.hpp +++ b/lib/tpm/TransmissionPolicyManager.hpp @@ -131,7 +131,7 @@ constexpr const char* const DefaultBackoffConfig = "E,3000,300000,2,1"; size_t uploadCount() const noexcept; std::chrono::milliseconds m_timerdelay { std::chrono::seconds { 2 } }; - EventLatency m_runningLatency { EventLatency_RealTime }; + std::atomic m_runningLatency { EventLatency_RealTime }; TimerArray m_timers; public: diff --git a/tests/functests/AISendTests.cpp b/tests/functests/AISendTests.cpp index 180e9b074..31d4e9d38 100644 --- a/tests/functests/AISendTests.cpp +++ b/tests/functests/AISendTests.cpp @@ -118,7 +118,7 @@ class AISendTests : public ::testing::Test, } int port = server.addListeningPort(HTTP_PORT); std::ostringstream os; - os << "localhost:" << port; + os << "127.0.0.1:" << port; serverAddress = "http://" + os.str() + "/v2/track"; server.setServerName(os.str()); server.addHandler("/v2/track", *this); diff --git a/tests/functests/APITest.cpp b/tests/functests/APITest.cpp index 11524cd5a..4b6c38a15 100644 --- a/tests/functests/APITest.cpp +++ b/tests/functests/APITest.cpp @@ -391,6 +391,10 @@ TEST(APITest, LogManager_Initialize_DebugEventListener) LogManager::GetLogger()->LogEvent(eventToLog); } LogManager::Flush(); + // Storage-full callback fires asynchronously; give it time to arrive + for (int i = 0; i < 50 && debugListener.storageFullPct.load() < 100; i++) { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } EXPECT_GE(debugListener.storageFullPct.load(), (unsigned)100); LogManager::FlushAndTeardown(); diff --git a/tests/functests/BasicFuncTests.cpp b/tests/functests/BasicFuncTests.cpp index 51848d054..f2133c5e8 100644 --- a/tests/functests/BasicFuncTests.cpp +++ b/tests/functests/BasicFuncTests.cpp @@ -154,7 +154,7 @@ class BasicFuncTests : public ::testing::Test, } int port = server.addListeningPort(HTTP_PORT); std::ostringstream os; - os << "localhost:" << port; + os << "127.0.0.1:" << port; serverAddress = "http://" + os.str() + "/simple/"; server.setServerName(os.str()); server.addHandler("/simple/", *this); @@ -257,15 +257,16 @@ class BasicFuncTests : public ::testing::Test, size_t lastIdx = 0; while ( ((PAL::getUtcSystemTimeMs()-start)<(1000* timeOutSec)) && (receivedEvents!=expected_count) ) { - /* Give time for our friendly HTTP server thread to process incoming request */ - std::this_thread::yield(); + /* Give time for HTTP server thread to process incoming request. + * sleep(10) instead of yield() reduces CPU contention on single-core + * iOS simulator runners and gives the network stack time to deliver. */ + PAL::sleep(10); { LOCKGUARD(mtx_requests); if (receivedRequests.size()) { size_t size = receivedRequests.size(); - //requests can come within 100 milisec sleep for (size_t index = lastIdx; index < size; index++) { auto request = receivedRequests.at(index); @@ -574,7 +575,7 @@ TEST_F(BasicFuncTests, sendNoPriorityEvents) logger->LogEvent(event2); LogManager::UploadNow(); - waitForEvents(1, 3); + waitForEvents(5, 3); EXPECT_GE(receivedRequests.size(), (size_t)1); LogManager::RemoveEventListener(EVT_HTTP_OK, listener); FlushAndTeardown(); @@ -673,7 +674,7 @@ TEST_F(BasicFuncTests, sendDifferentPriorityEvents) LogManager::UploadNow(); // 2 x customer events + 1 x evt_stats on start - waitForEvents(1, 3); + waitForEvents(5, 3); for (const auto &evt : { event, event2 }) { @@ -721,7 +722,7 @@ TEST_F(BasicFuncTests, sendMultipleTenantsTogether) LogManager::UploadNow(); // 2 x customer events + 1 x evt_stats on start - waitForEvents(1, 3); + waitForEvents(5, 3); for (const auto &evt : { event1, event2 }) { verifyEvent(evt, find(evt.GetName())); @@ -749,7 +750,7 @@ TEST_F(BasicFuncTests, configDecorations) logger->LogEvent(event4); LogManager::UploadNow(); - waitForEvents(2, 5); + waitForEvents(5, 5); for (const auto &evt : { event1, event2, event3, event4 }) { @@ -788,7 +789,7 @@ TEST_F(BasicFuncTests, restartRecoversEventsFromStorage) LogManager::UploadNow(); // 1st request for realtime event - waitForEvents(3, 5); // start, first_event, second_event, ongoing, stop, start, fooEvent + waitForEvents(10, 5); // start, first_event, second_event, ongoing, stop, start, fooEvent // we drop two of the events during pause, though. EXPECT_GE(receivedRequests.size(), (size_t)1); if (receivedRequests.size() != 0) @@ -852,7 +853,7 @@ TEST_F(BasicFuncTests, storageFileSizeDoesntExceedConfiguredSize) { Initialize(); - waitForEvents(2, 8); + waitForEvents(5, 8); if (receivedRequests.size()) { auto payload = decodeRequest(receivedRequests[0], false); @@ -898,7 +899,7 @@ TEST_F(BasicFuncTests, sendMetaStatsOnStart) Initialize(); LogManager::ResumeTransmission(); // ? LogManager::UploadNow(); - PAL::sleep(2000); + waitForEvents(5, 4); // (start + stop) + (2 events + start) auto r2 = records(); ASSERT_GE(r2.size(), (size_t)4); // (start + stop) + (2 events + start) @@ -928,7 +929,7 @@ TEST_F(BasicFuncTests, DiagLevelRequiredOnly_OneEventWithoutLevelOneWithButNotAl logger->LogEvent(eventWithAllowedLevel); LogManager::UploadNow(); - waitForEvents(1 /*timeout*/, 2 /*expected count*/); // Start and EventWithAllowedLevel + waitForEvents(5 /*timeout*/, 2 /*expected count*/); // Start and EventWithAllowedLevel ASSERT_EQ(records().size(), static_cast(2)); // Start and EventWithAllowedLevel @@ -971,7 +972,7 @@ TEST_F(BasicFuncTests, DiagLevelRequiredOnly_SendTwoEventsUpdateAllowedLevelsSen SendEventWithOptionalThenRequired(logger); LogManager::UploadNow(); - waitForEvents(2 /*timeout*/, 4 /*expected count*/); // Start and EventWithAllowedLevel + waitForEvents(5 /*timeout*/, 4 /*expected count*/); // Start and EventWithAllowedLevel auto sentRecords = records(); ASSERT_EQ(sentRecords.size(), static_cast(4)); // Start and EventWithAllowedLevel @@ -1173,9 +1174,9 @@ TEST_F(BasicFuncTests, killSwitchWorks) myLogger->LogEvent(event2); } } - // Try to upload and wait for 2 seconds to complete + // Try to upload and wait for completion LogManager::UploadNow(); - PAL::sleep(2000); + PAL::sleep(5000); // Log 100 events with valid logger LogManager::Initialize(TEST_TOKEN, configuration); diff --git a/tests/functests/CMakeLists.txt b/tests/functests/CMakeLists.txt index 656f8f866..afffaf283 100644 --- a/tests/functests/CMakeLists.txt +++ b/tests/functests/CMakeLists.txt @@ -1,4 +1,4 @@ -message("--- functests") +message(STATUS "Building functests") set(SRCS APITest.cpp @@ -8,47 +8,40 @@ set(SRCS MultipleLogManagersTests.cpp ) -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/ AND BUILD_PRIVACYGUARD) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/" AND BUILD_PRIVACYGUARD) add_definitions(-DHAVE_MAT_PRIVACYGUARD) list(APPEND SRCS PrivacyGuardFuncTests.cpp ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/ AND BUILD_SANITIZER) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/" AND BUILD_SANITIZER) list(APPEND SRCS SanitizerFuncTests.cpp ) endif() -if(EXISTS ${CMAKE_SOURCE_DIR}/lib/modules/dataviewer/) +if(EXISTS "${CMAKE_SOURCE_DIR}/lib/modules/dataviewer/") list(APPEND SRCS ${CMAKE_SOURCE_DIR}/lib/modules/dataviewer/tests/functests/DefaultDataViewerFuncTests.cpp ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/liveeventinspector/ AND BUILD_LIVEEVENTINSPECTOR) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/liveeventinspector/" AND BUILD_LIVEEVENTINSPECTOR) add_definitions(-DHAVE_MAT_LIVEEVENTINSPECTOR) list(APPEND SRCS LiveEventInspectorFuncTests.cpp ) endif() -if (EXISTS ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests) +if (EXISTS "${CMAKE_SOURCE_DIR}/lib/modules/exp/tests") list(APPEND SRCS ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/functests/ECSClientFuncTests.cpp ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/functests/ECSClientRealworldFuncTests.cpp ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/functests/ECSConfigCacheFuncTests.cpp ) - if (EXISTS ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/functests/test.json) - if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.21") - # Use file(COPY_FILE ...) for CMake 3.21 and later - file(COPY_FILE ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/functests/test.json ${CMAKE_BINARY_DIR}/test.json) - else() - # Use file(COPY ...) as an alternative for older versions - file(COPY ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/functests/test.json - DESTINATION ${CMAKE_BINARY_DIR}) - endif() + if (EXISTS "${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/functests/test.json") + configure_file(${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/functests/test.json ${CMAKE_BINARY_DIR}/test.json COPYONLY) endif() endif() @@ -63,11 +56,11 @@ endif() if(PAL_IMPLEMENTATION STREQUAL "WIN32") # Link against prebuilt libraries on Windows - message("--- WIN32: Linking against prebuilt libraries") - message("--- WIN32: ... ${CMAKE_BINARY_DIR}/gtest") - message("--- WIN32: ... ${CMAKE_BINARY_DIR}/gmock") - message("--- WIN32: ... ${CMAKE_BINARY_DIR}/zlib") - message("--- WIN32: ... ${CMAKE_BINARY_DIR}/sqlite") + message(STATUS "WIN32: Linking against prebuilt libraries") + message(STATUS "WIN32: ... ${CMAKE_BINARY_DIR}/gtest") + message(STATUS "WIN32: ... ${CMAKE_BINARY_DIR}/gmock") + message(STATUS "WIN32: ... ${CMAKE_BINARY_DIR}/zlib") + message(STATUS "WIN32: ... ${CMAKE_BINARY_DIR}/sqlite") # link_directories(${CMAKE_BINARY_DIR}/gtest/ ${CMAKE_BINARY_DIR}/gmock/ ${CMAKE_BINARY_DIR}/zlib/ ${CMAKE_BINARY_DIR}/sqlite/) include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../../zlib ) target_link_libraries(FuncTests @@ -109,10 +102,9 @@ else() set (PLATFORM_LIBS "atomic") endif() - # Find libraries - message("--- Linking libraries! ") - message("Current Dir: ${CMAKE_CURRENT_SOURCE_DIR}") - message("Binary Dir: ${CMAKE_BINARY_DIR}") + message(STATUS "Linking libraries") + message(STATUS "Current Dir: ${CMAKE_CURRENT_SOURCE_DIR}") + message(STATUS "Binary Dir: ${CMAKE_BINARY_DIR}") set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) diff --git a/tests/functests/FuncTests.vcxproj b/tests/functests/FuncTests.vcxproj index 50f4e2427..87b0b5b53 100644 --- a/tests/functests/FuncTests.vcxproj +++ b/tests/functests/FuncTests.vcxproj @@ -436,7 +436,6 @@ - diff --git a/tests/functests/FuncTests.vcxproj.filters b/tests/functests/FuncTests.vcxproj.filters index 22f2ac5d9..e19381a72 100644 --- a/tests/functests/FuncTests.vcxproj.filters +++ b/tests/functests/FuncTests.vcxproj.filters @@ -53,9 +53,6 @@ mocks - - mocks - mocks diff --git a/tests/functests/MultipleLogManagersTests.cpp b/tests/functests/MultipleLogManagersTests.cpp index 25f99f175..eac2bfd00 100644 --- a/tests/functests/MultipleLogManagersTests.cpp +++ b/tests/functests/MultipleLogManagersTests.cpp @@ -54,7 +54,7 @@ class RequestHandler : public HttpServer::Callback } private: - size_t m_count {}; + std::atomic m_count {}; int m_id ; }; @@ -63,9 +63,9 @@ class MultipleLogManagersTests : public ::testing::Test protected: std::string serverAddress; ILogConfiguration config1, config2, config3; - RequestHandler callback1 = RequestHandler(1); - RequestHandler callback2 = RequestHandler(2); - RequestHandler callback3 = RequestHandler(3); + RequestHandler callback1{1}; + RequestHandler callback2{2}; + RequestHandler callback3{3}; HttpServer server; @@ -74,7 +74,7 @@ class MultipleLogManagersTests : public ::testing::Test { int port = server.addListeningPort(0); std::ostringstream os; - os << "localhost:" << port; + os << "127.0.0.1:" << port; server.setServerName(os.str()); serverAddress = "http://" + os.str(); @@ -196,7 +196,7 @@ TEST_F(MultipleLogManagersTests, ThreeInstancesCoexist) lm2->GetLogController()->UploadNow(); lm3->GetLogController()->UploadNow(); - waitForRequestsMultipleLogManager(10000, 1, 1, 1); + waitForRequestsMultipleLogManager(20000, 1, 1, 1); lm1.reset(); lm2.reset(); @@ -224,7 +224,7 @@ TEST_F(MultipleLogManagersTests, MultiProcessesLogManager) CAPTURE_PERF_STATS("Events Sent"); lm->GetLogController()->UploadNow(); CAPTURE_PERF_STATS("Events Uploaded"); - waitForRequestsSingleLogManager(10000, 2); + waitForRequestsSingleLogManager(20000, 2); lm.reset(); CAPTURE_PERF_STATS("Log Manager deleted"); } diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt index 891150d34..c6da0c9b2 100644 --- a/tests/unittests/CMakeLists.txt +++ b/tests/unittests/CMakeLists.txt @@ -1,4 +1,4 @@ -message("--- unittests") +message(STATUS "Building unittests") set(SRCS AIJsonSerializerTests.cpp @@ -53,7 +53,7 @@ set_source_files_properties(${SRCS} PROPERTIES COMPILE_FLAGS -Wno-deprecated-dec # Enable Azure Monitor unit tests when the module is present. # The AIJsonSerializer test sources are guarded by HAVE_MAT_AI. -if (EXISTS ${CMAKE_SOURCE_DIR}/lib/modules/azmon/AIJsonSerializer.hpp) +if (EXISTS "${CMAKE_SOURCE_DIR}/lib/modules/azmon/AIJsonSerializer.hpp") add_definitions(-DHAVE_MAT_AI) endif() @@ -65,7 +65,7 @@ if (APPLE) endif() endif() -if (EXISTS ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests) +if (EXISTS "${CMAKE_SOURCE_DIR}/lib/modules/exp/tests") list(APPEND SRCS ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/unittests/ECSConfigCacheTests.cpp ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests/unittests/ECSClientUtilsTests.cpp @@ -73,7 +73,7 @@ if (EXISTS ${CMAKE_SOURCE_DIR}/lib/modules/exp/tests) ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/ AND BUILD_PRIVACYGUARD) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/" AND BUILD_PRIVACYGUARD) add_definitions(-DHAVE_MAT_PRIVACYGUARD) list(APPEND SRCS ${CMAKE_SOURCE_DIR}/lib/modules/privacyguard/tests/unittests/InitializationConfigurationTests.cpp @@ -84,7 +84,7 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/privacyguard/ AND BUILD_PRIVACYGUA ) endif() -if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/ AND BUILD_SANITIZER) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/" AND BUILD_SANITIZER) list(APPEND SRCS ${CMAKE_SOURCE_DIR}/lib/modules/sanitizer/tests/unittests/SanitizerJwtTests.cpp ${CMAKE_SOURCE_DIR}/lib/modules/sanitizer/tests/unittests/SanitizerProviderTests.cpp @@ -96,7 +96,7 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/modules/sanitizer/ AND BUILD_SANITIZER) ) endif() -if(EXISTS ${CMAKE_SOURCE_DIR}/lib/modules/dataviewer/) +if(EXISTS "${CMAKE_SOURCE_DIR}/lib/modules/dataviewer/") list(APPEND SRCS ${CMAKE_SOURCE_DIR}/lib/modules/dataviewer/tests/unittests/DefaultDataViewerTests.cpp DataViewerCollectionTests.cpp @@ -114,11 +114,11 @@ endif() if(PAL_IMPLEMENTATION STREQUAL "WIN32") # Link against prebuilt libraries on Windows - message("--- WIN32: Linking against prebuilt libraries") - message("--- WIN32: ... ${CMAKE_BINARY_DIR}/gtest") - message("--- WIN32: ... ${CMAKE_BINARY_DIR}/gmock") - message("--- WIN32: ... ${CMAKE_BINARY_DIR}/zlib") - message("--- WIN32: ... ${CMAKE_BINARY_DIR}/sqlite") + message(STATUS "WIN32: Linking against prebuilt libraries") + message(STATUS "WIN32: ... ${CMAKE_BINARY_DIR}/gtest") + message(STATUS "WIN32: ... ${CMAKE_BINARY_DIR}/gmock") + message(STATUS "WIN32: ... ${CMAKE_BINARY_DIR}/zlib") + message(STATUS "WIN32: ... ${CMAKE_BINARY_DIR}/sqlite") # link_directories(${CMAKE_BINARY_DIR}/gtest/ ${CMAKE_BINARY_DIR}/gmock/ ${CMAKE_BINARY_DIR}/zlib/ ${CMAKE_BINARY_DIR}/sqlite/) include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../../zlib ) target_link_libraries(UnitTests @@ -158,10 +158,9 @@ else() set (PLATFORM_LIBS "atomic") endif() - # Find libraries - message("--- Linking libraries! ") - message("Current Dir: ${CMAKE_CURRENT_SOURCE_DIR}") - message("Binary Dir: ${CMAKE_BINARY_DIR}") + message(STATUS "Linking libraries") + message(STATUS "Current Dir: ${CMAKE_CURRENT_SOURCE_DIR}") + message(STATUS "Binary Dir: ${CMAKE_BINARY_DIR}") include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../../lib/ ) @@ -179,8 +178,8 @@ else() ${CMAKE_CURRENT_SOURCE_DIR}/../../third_party/googletest/build/lib/ ) - message("GTEST: ${LIBGTEST}") - message("GMOCK: ${LIBGMOCK}") + message(STATUS "GTEST: ${LIBGTEST}") + message(STATUS "GMOCK: ${LIBGMOCK}") target_link_libraries(UnitTests ${LIBGTEST} diff --git a/tests/unittests/HttpClientTests.cpp b/tests/unittests/HttpClientTests.cpp index 99d73248b..4b17bcce5 100644 --- a/tests/unittests/HttpClientTests.cpp +++ b/tests/unittests/HttpClientTests.cpp @@ -53,7 +53,7 @@ class HttpClientTests : public ::testing::Test, { _port = _server.addListeningPort(0); std::ostringstream os; - os << "localhost:" << _port; + os << "127.0.0.1:" << _port; _hostname = os.str(); _server.setServerName(_hostname); _server.addHandler("/simple/", *this); diff --git a/tests/unittests/PalTests.cpp b/tests/unittests/PalTests.cpp index 1ec078916..15bb98e5e 100644 --- a/tests/unittests/PalTests.cpp +++ b/tests/unittests/PalTests.cpp @@ -85,7 +85,7 @@ TEST_F(PalTests, SystemTime) int64_t t1 = PAL::getUtcSystemTimeMs(); EXPECT_THAT(t1, Gt(t0 + 360)); - EXPECT_THAT(t1, Lt(t0 + 550)); + EXPECT_THAT(t1, Lt(t0 + 1000)); } TEST_F(PalTests, FormatUtcTimestampMsAsISO8601) @@ -103,7 +103,7 @@ TEST_F(PalTests, MonotonicTime) int64_t t1 = PAL::getMonotonicTimeMs(); EXPECT_THAT(t1 - t0, Gt(780)); - EXPECT_THAT(t1 - t0, Lt(950)); + EXPECT_THAT(t1 - t0, Lt(1500)); } TEST_F(PalTests, SemanticContextPopulation) diff --git a/tests/unittests/UnitTests.vcxproj b/tests/unittests/UnitTests.vcxproj index 579c52a83..12f44eae7 100644 --- a/tests/unittests/UnitTests.vcxproj +++ b/tests/unittests/UnitTests.vcxproj @@ -495,7 +495,6 @@ - diff --git a/tests/vcpkg/CMakeLists.txt b/tests/vcpkg/CMakeLists.txt new file mode 100644 index 000000000..42636fa16 --- /dev/null +++ b/tests/vcpkg/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.15) +project(mstelemetry_vcpkg_test LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Match vcpkg static triplet CRT linkage +if(MSVC AND VCPKG_TARGET_TRIPLET MATCHES "-static$") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") +endif() + +find_package(MSTelemetry CONFIG REQUIRED) + +add_executable(vcpkg_test main.cpp) +target_link_libraries(vcpkg_test PRIVATE MSTelemetry::mat) + +enable_testing() +add_test(NAME vcpkg_integration_test COMMAND vcpkg_test) diff --git a/tests/vcpkg/README.md b/tests/vcpkg/README.md new file mode 100644 index 000000000..d9ffcba72 --- /dev/null +++ b/tests/vcpkg/README.md @@ -0,0 +1,111 @@ +# Vcpkg Port Integration Tests + +End-to-end tests that verify the `mstelemetry` vcpkg port can be installed, found via `find_package(MSTelemetry CONFIG)`, linked, and executed on all supported platforms. + +## Prerequisites + +1. **vcpkg** — [Install and bootstrap](https://vcpkg.io/en/getting-started): + ```bash + git clone https://github.com/microsoft/vcpkg ~/vcpkg + ~/vcpkg/bootstrap-vcpkg.sh # Linux/macOS + ``` + ```powershell + git clone https://github.com/microsoft/vcpkg C:\vcpkg + .\vcpkg\bootstrap-vcpkg.bat # Windows + ``` +2. **Set `VCPKG_ROOT`**: + ```bash + export VCPKG_ROOT=~/vcpkg # Linux/macOS (add to ~/.bashrc) + ``` + ```powershell + $env:VCPKG_ROOT = "$HOME\vcpkg" # Windows (or set system env var) + ``` +3. **Platform tools** — see per-platform sections below. + +## Running Tests + +All scripts are run from the repo root. + +### Windows + +**Requires:** Visual Studio 2019+ with C++ workload, cmake + +Best run from a **VS Developer Command Prompt** (ensures the same compiler version as vcpkg uses): +```powershell +.\tests\vcpkg\test-vcpkg-windows.ps1 -VcpkgRoot C:\path\to\vcpkg +``` + +> **Note:** Visual Studio's `vcvarsall.bat` overrides the `VCPKG_ROOT` environment variable. +> Always pass `-VcpkgRoot` explicitly to point at your vcpkg installation. + +Optional: specify a different triplet (default auto-detects host architecture): +```powershell +.\tests\vcpkg\test-vcpkg-windows.ps1 -VcpkgRoot C:\path\to\vcpkg -Triplet x64-windows +``` + +### Linux + +**Requires:** gcc/g++, cmake, pkg-config + +```bash +./tests/vcpkg/test-vcpkg-linux.sh +``` + +### macOS + +**Requires:** Xcode command line tools, cmake + +```bash +./tests/vcpkg/test-vcpkg-macos.sh +``` + +### iOS + +**Requires:** macOS with Xcode + iOS SDK, cmake + +**Device build** (cross-compile only — verifies the binary is produced): +```bash +./tests/vcpkg/test-vcpkg-ios.sh +``` + +**Simulator build** (builds and runs on iOS Simulator): +```bash +./tests/vcpkg/test-vcpkg-ios.sh --simulator +``` + +The simulator mode uses the built-in vcpkg community triplet `arm64-ios-simulator` that targets the `iphonesimulator` SDK, then executes the binary via `xcrun simctl spawn`. + +### Android (cross-compile) + +**Requires:** Android NDK, cmake, VCPKG_ROOT set + +```bash +# Default: arm64-v8a +./tests/vcpkg/test-vcpkg-android.sh + +# Other ABIs: +./tests/vcpkg/test-vcpkg-android.sh armeabi-v7a +./tests/vcpkg/test-vcpkg-android.sh x86_64 +``` + +Set `ANDROID_NDK_HOME` if the script can't find your NDK automatically. Cross-compiled binary can be tested on device via `adb push`/`adb shell`. + +## What Gets Tested + +Each script runs 3 steps: + +1. **Configure** — CMake configures a minimal consumer project with the vcpkg toolchain. Dependencies (including the `mstelemetry` overlay port) are installed automatically. +2. **Build** — The consumer links against `MSTelemetry::mat` +3. **Run** — The test binary exercises `LogManager`, `EventProperties`, and verifies all symbols resolve + +## Troubleshooting + +| Problem | Fix | +|---------|-----| +| `VCPKG_ROOT is not set` | Set the environment variable to your vcpkg installation | +| vcvarsall overrides `VCPKG_ROOT` | Pass `-VcpkgRoot C:\path\to\vcpkg` explicitly on Windows | +| `RuntimeLibrary mismatch` (Windows) | Run from a VS Developer Command Prompt matching vcpkg's compiler | +| Dependency build fails | Check vcpkg logs in `build-*/consumer/vcpkg-manifest-install.log` | +| iOS SDK not found | Install Xcode and run `xcode-select --install` | +| Android NDK not found | Set `ANDROID_NDK_HOME` to your NDK path (e.g., `$ANDROID_HOME/ndk/26.x.x`) | +| First run is slow | Dependencies (sqlite3, zlib, nlohmann-json, curl) are built on first run | diff --git a/tests/vcpkg/main.cpp b/tests/vcpkg/main.cpp new file mode 100644 index 000000000..6a5e3bbc6 --- /dev/null +++ b/tests/vcpkg/main.cpp @@ -0,0 +1,81 @@ +// Vcpkg integration test for mstelemetry +// Verifies that find_package(MSTelemetry) works and core APIs are callable + +#include +#include +#include +#include + +#include "LogManager.hpp" + +LOGMANAGER_INSTANCE + +using namespace MAT; + +static int test_count = 0; +static int pass_count = 0; + +static void check(bool cond, const char* name) +{ + test_count++; + if (cond) { + pass_count++; + printf(" [PASS] %s\n", name); + } else { + printf(" [FAIL] %s\n", name); + } +} + +int main() +{ + printf("=== MSTelemetry vcpkg integration test ===\n"); + + // ---- Core API tests ---- + printf("\n-- Core API --\n"); + + // 1. Verify headers compile and link + check(true, "Headers found and compiled successfully"); + + // 2. LogManager configuration + auto& config = LogManager::GetLogConfiguration(); + check(true, "LogManager::GetLogConfiguration() callable"); + + // 3. EventProperties with multiple types + { + EventProperties props("TestEvent"); + props.SetProperty("strProp", "value"); + props.SetProperty("intProp", (int64_t)42); + props.SetProperty("dblProp", 3.14); + props.SetProperty("boolProp", true); + check(props.GetName() == "TestEvent", "Event name matches"); + check(true, "SetProperty for string, int, double, bool"); + } + + // 4. Multiple event types + { + std::vector names = {"App.Started", "App.PageView", "App.Error"}; + for (const auto& name : names) { + EventProperties ep(name); + ep.SetProperty("timestamp", (int64_t)1234567890); + } + check(true, "Created multiple event types"); + } + + // 5. PII annotations + { + EventProperties props("PiiTest"); + props.SetProperty("userId", "user@example.com", PiiKind_Identity); + props.SetProperty("ip", "127.0.0.1", PiiKind_IPv4Address); + check(true, "PII-annotated properties compile and link"); + } + + // 6. Event priority + { + EventProperties props("PriorityTest"); + props.SetPriority(EventPriority_High); + check(true, "SetPriority compiles and links"); + } + + printf("\n=== Results: %d/%d passed ===\n", pass_count, test_count); + return (pass_count == test_count) ? 0 : 1; +} diff --git a/tests/vcpkg/test-vcpkg-android.sh b/tests/vcpkg/test-vcpkg-android.sh new file mode 100644 index 000000000..6d57c232c --- /dev/null +++ b/tests/vcpkg/test-vcpkg-android.sh @@ -0,0 +1,99 @@ +#!/bin/bash +# Test script: Verify mstelemetry vcpkg port for Android (cross-compile only) +# Usage: ./tests/vcpkg/test-vcpkg-android.sh [ABI] +# ABI: arm64-v8a (default), armeabi-v7a, x86_64, x86 +# Prerequisites: VCPKG_ROOT set, ANDROID_NDK_HOME set, cmake +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +OVERLAY_PORTS="${REPO_ROOT}/tools/ports" + +# Android ABI (default: arm64-v8a) +ANDROID_ABI="${1:-arm64-v8a}" + +# Map ABI to vcpkg triplet +case "${ANDROID_ABI}" in + arm64-v8a) TRIPLET="arm64-android" ;; + armeabi-v7a) TRIPLET="arm-neon-android" ;; + x86_64) TRIPLET="x64-android" ;; + x86) TRIPLET="x86-android" ;; + *) + echo "ERROR: Unsupported ABI '${ANDROID_ABI}'. Use: arm64-v8a, armeabi-v7a, x86_64, x86" + exit 1 + ;; +esac + +BUILD_DIR="${SCRIPT_DIR}/build-android-${ANDROID_ABI}" + +echo "=== MSTelemetry vcpkg port test (Android cross-compile) ===" +echo "Repository root: ${REPO_ROOT}" +echo "ABI: ${ANDROID_ABI}" +echo "Triplet: ${TRIPLET}" + +# Check prerequisites +if [ -z "${VCPKG_ROOT}" ]; then + echo "ERROR: VCPKG_ROOT is not set. Please set it to your vcpkg installation directory." + exit 1 +fi + +VCPKG_TOOLCHAIN="${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" +if [ ! -f "${VCPKG_TOOLCHAIN}" ]; then + echo "ERROR: vcpkg toolchain not found at ${VCPKG_TOOLCHAIN}" + exit 1 +fi + +# Find NDK +if [ -z "${ANDROID_NDK_HOME}" ]; then + # Try common locations + if [ -n "${ANDROID_HOME}" ] && [ -d "${ANDROID_HOME}/ndk" ]; then + ANDROID_NDK_HOME=$(ls -d "${ANDROID_HOME}/ndk/"* 2>/dev/null | sort -t. -k1,1n -k2,2n -k3,3n | tail -1) + elif [ -n "${ANDROID_SDK_ROOT}" ] && [ -d "${ANDROID_SDK_ROOT}/ndk" ]; then + ANDROID_NDK_HOME=$(ls -d "${ANDROID_SDK_ROOT}/ndk/"* 2>/dev/null | sort -t. -k1,1n -k2,2n -k3,3n | tail -1) + fi +fi + +if [ -z "${ANDROID_NDK_HOME}" ] || [ ! -d "${ANDROID_NDK_HOME}" ]; then + echo "ERROR: Android NDK not found. Set ANDROID_NDK_HOME to your NDK path." + echo " e.g., export ANDROID_NDK_HOME=\$ANDROID_HOME/ndk/26.1.10909125" + exit 1 +fi +echo "NDK: ${ANDROID_NDK_HOME}" + +# Clean previous build +rm -rf "${BUILD_DIR}" +mkdir -p "${BUILD_DIR}" + +echo "" +echo "--- Step 1: Configure (vcpkg installs deps automatically) ---" +cmake -S "${SCRIPT_DIR}" -B "${BUILD_DIR}/consumer" \ + -DCMAKE_TOOLCHAIN_FILE="${VCPKG_TOOLCHAIN}" \ + -DVCPKG_TARGET_TRIPLET="${TRIPLET}" \ + -DVCPKG_OVERLAY_PORTS="${OVERLAY_PORTS}" \ + -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE="${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake" \ + -DANDROID_ABI="${ANDROID_ABI}" \ + -DANDROID_PLATFORM=android-24 \ + -DCMAKE_BUILD_TYPE=Release + +echo "" +echo "--- Step 2: Build test consumer for Android ---" +cmake --build "${BUILD_DIR}/consumer" --config Release + +echo "" +echo "--- Step 3: Verify output ---" +BINARY=$(find "${BUILD_DIR}/consumer" -name "vcpkg_test" -type f 2>/dev/null | head -1) +if [ -n "${BINARY}" ]; then + echo "[PASS] Android binary produced: ${BINARY}" + file "${BINARY}" + echo "" + echo "NOTE: Cross-compiled binary cannot be executed on the host." + echo " Deploy to device or emulator via adb for runtime verification:" + echo " adb push ${BINARY} /data/local/tmp/" + echo " adb shell /data/local/tmp/vcpkg_test" +else + echo "[FAIL] Android binary not found" + exit 1 +fi + +echo "" +echo "=== Android vcpkg port cross-compile test PASSED ===" diff --git a/tests/vcpkg/test-vcpkg-ios.sh b/tests/vcpkg/test-vcpkg-ios.sh new file mode 100755 index 000000000..37f5391f2 --- /dev/null +++ b/tests/vcpkg/test-vcpkg-ios.sh @@ -0,0 +1,153 @@ +#!/bin/bash +# Test script: Verify mstelemetry vcpkg port for iOS +# Usage: ./tests/vcpkg/test-vcpkg-ios.sh [--simulator] +# Prerequisites: VCPKG_ROOT set, macOS with Xcode + iOS SDK, cmake +# +# By default builds for arm64-ios (device). With --simulator, builds for +# the iOS Simulator and runs the binary via xcrun simctl. +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +OVERLAY_PORTS="${REPO_ROOT}/tools/ports" +USE_SIMULATOR=false + +for arg in "$@"; do + case "$arg" in + --simulator) USE_SIMULATOR=true ;; + *) echo "Unknown option: $arg"; exit 1 ;; + esac +done + +if [ "${USE_SIMULATOR}" = true ]; then + TRIPLET="arm64-ios-simulator" + BUILD_DIR="${SCRIPT_DIR}/build-iossim" + APPLE_SDK="iphonesimulator" + echo "=== MSTelemetry vcpkg port test (iOS Simulator) ===" +else + TRIPLET="arm64-ios" + BUILD_DIR="${SCRIPT_DIR}/build-ios" + APPLE_SDK="iphoneos" + echo "=== MSTelemetry vcpkg port test (iOS device cross-compile) ===" +fi + +echo "Repository root: ${REPO_ROOT}" + +# Check prerequisites +if [ -z "${VCPKG_ROOT}" ]; then + echo "ERROR: VCPKG_ROOT is not set. Please set it to your vcpkg installation directory." + exit 1 +fi + +if [ "$(uname)" != "Darwin" ]; then + echo "ERROR: iOS builds require macOS with Xcode installed." + exit 1 +fi + +if ! command -v python3 &> /dev/null; then + echo "ERROR: python3 is required for simulator device detection but was not found." + exit 1 +fi + +# Verify Xcode SDK +if [ "${USE_SIMULATOR}" = true ]; then + xcrun --sdk iphonesimulator --show-sdk-path > /dev/null 2>&1 || { + echo "ERROR: iOS Simulator SDK not found. Install Xcode and iOS Simulator runtime." + exit 1 + } +else + xcrun --sdk iphoneos --show-sdk-path > /dev/null 2>&1 || { + echo "ERROR: iOS SDK not found. Install Xcode and iOS SDK." + exit 1 + } +fi + +VCPKG_TOOLCHAIN="${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" +if [ ! -f "${VCPKG_TOOLCHAIN}" ]; then + echo "ERROR: vcpkg toolchain not found at ${VCPKG_TOOLCHAIN}" + exit 1 +fi + +echo "Triplet: ${TRIPLET}" +echo "Apple SDK: ${APPLE_SDK}" + +# Clean previous build +rm -rf "${BUILD_DIR}" +mkdir -p "${BUILD_DIR}" + +echo "" +echo "--- Step 1: Configure (vcpkg installs deps automatically) ---" +cmake -S "${SCRIPT_DIR}" -B "${BUILD_DIR}/consumer" \ + -DCMAKE_TOOLCHAIN_FILE="${VCPKG_TOOLCHAIN}" \ + -DVCPKG_TARGET_TRIPLET="${TRIPLET}" \ + -DVCPKG_OVERLAY_PORTS="${OVERLAY_PORTS}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_SYSTEM_NAME=iOS \ + -DCMAKE_OSX_SYSROOT="${APPLE_SDK}" \ + -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 + +echo "" +echo "--- Step 2: Build test consumer for iOS ---" +cmake --build "${BUILD_DIR}/consumer" --config Release + +echo "" +echo "--- Step 3: Verify output ---" +BINARY=$(find "${BUILD_DIR}/consumer" -name "vcpkg_test" -type f 2>/dev/null | head -1) +if [ -z "${BINARY}" ]; then + echo "[FAIL] iOS binary not found" + exit 1 +fi + +echo "[PASS] iOS binary produced: ${BINARY}" +file "${BINARY}" + +if [ "${USE_SIMULATOR}" = true ]; then + echo "" + echo "--- Step 4: Run on iOS Simulator ---" + + # Find an available iPhone simulator + DEVICE_UDID=$(xcrun simctl list devices available -j \ + | python3 -c " +import sys, json +data = json.load(sys.stdin)['devices'] +for runtime, devices in data.items(): + if 'iOS' not in runtime: + continue + for d in devices: + if d.get('isAvailable') and 'iPhone' in d.get('name', ''): + print(d['udid']) + sys.exit(0) +print('') +") + + if [ -z "${DEVICE_UDID}" ]; then + echo "ERROR: No available iPhone simulator found." + echo "Create one with: xcrun simctl create 'Test iPhone' 'iPhone 15'" + exit 1 + fi + + echo "Using simulator: ${DEVICE_UDID}" + + # Boot the simulator (ignore error if already booted) + xcrun simctl boot "${DEVICE_UDID}" 2>/dev/null || true + + # Run the test binary on the simulator + echo "Executing vcpkg_test on simulator..." + xcrun simctl spawn "${DEVICE_UDID}" "${BINARY}" + EXIT_CODE=$? + + if [ ${EXIT_CODE} -eq 0 ]; then + echo "[PASS] iOS Simulator execution succeeded" + else + echo "[FAIL] iOS Simulator execution failed with exit code ${EXIT_CODE}" + exit 1 + fi +else + echo "" + echo "NOTE: Device binary cannot run on macOS host." + echo " Use --simulator to build and run on the iOS Simulator." +fi + +echo "" +echo "=== iOS vcpkg port test PASSED ===" diff --git a/tests/vcpkg/test-vcpkg-linux.sh b/tests/vcpkg/test-vcpkg-linux.sh new file mode 100755 index 000000000..205430ffa --- /dev/null +++ b/tests/vcpkg/test-vcpkg-linux.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Test script: Verify mstelemetry vcpkg port on Linux +# Usage: ./tests/vcpkg/test-vcpkg-linux.sh +# Prerequisites: VCPKG_ROOT set, gcc/g++, cmake +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +BUILD_DIR="${SCRIPT_DIR}/build-linux" +OVERLAY_PORTS="${REPO_ROOT}/tools/ports" + +echo "=== MSTelemetry vcpkg port test (Linux) ===" +echo "Repository root: ${REPO_ROOT}" + +# Check prerequisites +if [ -z "${VCPKG_ROOT}" ]; then + echo "ERROR: VCPKG_ROOT is not set. Please set it to your vcpkg installation directory." + exit 1 +fi + +VCPKG_TOOLCHAIN="${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" +if [ ! -f "${VCPKG_TOOLCHAIN}" ]; then + echo "ERROR: vcpkg toolchain not found at ${VCPKG_TOOLCHAIN}" + exit 1 +fi + +LINUX_ARCH="$(uname -m)" +if [ "${LINUX_ARCH}" = "aarch64" ]; then + TRIPLET="arm64-linux" +else + TRIPLET="x64-linux" +fi + +echo "Architecture: ${LINUX_ARCH}" +echo "Triplet: ${TRIPLET}" + +# Clean previous build +rm -rf "${BUILD_DIR}" +mkdir -p "${BUILD_DIR}" + +echo "" +echo "--- Step 1: Configure (vcpkg installs deps automatically) ---" +cmake -S "${SCRIPT_DIR}" -B "${BUILD_DIR}/consumer" \ + -DCMAKE_TOOLCHAIN_FILE="${VCPKG_TOOLCHAIN}" \ + -DVCPKG_TARGET_TRIPLET="${TRIPLET}" \ + -DVCPKG_OVERLAY_PORTS="${OVERLAY_PORTS}" \ + -DCMAKE_BUILD_TYPE=Release + +echo "" +echo "--- Step 2: Build test consumer ---" +cmake --build "${BUILD_DIR}/consumer" --config Release + +echo "" +echo "--- Step 3: Run test ---" +"${BUILD_DIR}/consumer/vcpkg_test" + +echo "" +echo "=== Linux vcpkg port test PASSED ===" diff --git a/tests/vcpkg/test-vcpkg-macos.sh b/tests/vcpkg/test-vcpkg-macos.sh new file mode 100755 index 000000000..8d9c83e9a --- /dev/null +++ b/tests/vcpkg/test-vcpkg-macos.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# Test script: Verify mstelemetry vcpkg port on macOS +# Usage: ./tests/vcpkg/test-vcpkg-macos.sh +# Prerequisites: VCPKG_ROOT set, Xcode command line tools, cmake +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" +BUILD_DIR="${SCRIPT_DIR}/build-macos" +OVERLAY_PORTS="${REPO_ROOT}/tools/ports" + +echo "=== MSTelemetry vcpkg port test (macOS) ===" +echo "Repository root: ${REPO_ROOT}" + +# Check prerequisites +if [ -z "${VCPKG_ROOT}" ]; then + echo "ERROR: VCPKG_ROOT is not set. Please set it to your vcpkg installation directory." + exit 1 +fi + +if [ "$(uname)" != "Darwin" ]; then + echo "ERROR: This script must be run on macOS." + exit 1 +fi + +VCPKG_TOOLCHAIN="${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" +if [ ! -f "${VCPKG_TOOLCHAIN}" ]; then + echo "ERROR: vcpkg toolchain not found at ${VCPKG_TOOLCHAIN}" + exit 1 +fi +MAC_ARCH="$(uname -m)" + +if [ "${MAC_ARCH}" = "arm64" ]; then + TRIPLET="arm64-osx" +else + TRIPLET="x64-osx" +fi + +echo "Architecture: ${MAC_ARCH}" +echo "Triplet: ${TRIPLET}" + +# Clean previous build +rm -rf "${BUILD_DIR}" +mkdir -p "${BUILD_DIR}" + +echo "" +echo "--- Step 1: Configure (vcpkg installs deps automatically) ---" +cmake -S "${SCRIPT_DIR}" -B "${BUILD_DIR}/consumer" \ + -DCMAKE_TOOLCHAIN_FILE="${VCPKG_TOOLCHAIN}" \ + -DVCPKG_TARGET_TRIPLET="${TRIPLET}" \ + -DVCPKG_OVERLAY_PORTS="${OVERLAY_PORTS}" \ + -DCMAKE_BUILD_TYPE=Release + +echo "" +echo "--- Step 2: Build test consumer ---" +cmake --build "${BUILD_DIR}/consumer" --config Release + +echo "" +echo "--- Step 3: Run test ---" +"${BUILD_DIR}/consumer/vcpkg_test" + +echo "" +echo "=== macOS vcpkg port test PASSED ===" diff --git a/tests/vcpkg/test-vcpkg-windows.ps1 b/tests/vcpkg/test-vcpkg-windows.ps1 new file mode 100644 index 000000000..70caaa828 --- /dev/null +++ b/tests/vcpkg/test-vcpkg-windows.ps1 @@ -0,0 +1,128 @@ +# Test script: Verify mstelemetry vcpkg port on Windows +# Usage: Run from a VS Developer Command Prompt, or the script will find VS automatically. +# .\tests\vcpkg\test-vcpkg-windows.ps1 +# .\tests\vcpkg\test-vcpkg-windows.ps1 -Triplet x64-windows +param( + [string]$VcpkgRoot = "", + [string]$Triplet = "" +) + +$ErrorActionPreference = "Stop" + +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$RepoRoot = (Resolve-Path (Join-Path $ScriptDir "..\..")).Path +$BuildDir = Join-Path $ScriptDir "build-windows" +$OverlayPorts = Join-Path $RepoRoot "tools\ports" + +Write-Host "=== MSTelemetry vcpkg port test (Windows) ===" -ForegroundColor Cyan + +# Resolve vcpkg root: parameter > VCPKG_ROOT env var > error +if ([string]::IsNullOrEmpty($VcpkgRoot)) { + $VcpkgRoot = $env:VCPKG_ROOT +} +if ([string]::IsNullOrEmpty($VcpkgRoot)) { + Write-Error "VCPKG_ROOT is not set. Pass -VcpkgRoot or set the VCPKG_ROOT environment variable." + exit 1 +} + +$VcpkgToolchain = Join-Path $VcpkgRoot "scripts\buildsystems\vcpkg.cmake" +if (-not (Test-Path $VcpkgToolchain)) { + Write-Error "vcpkg toolchain not found at $VcpkgToolchain" + exit 1 +} + +# PROCESSOR_ARCHITEW6432 reports the native arch even under x64 emulation on ARM64 +$NativeArch = if ($env:PROCESSOR_ARCHITEW6432) { $env:PROCESSOR_ARCHITEW6432 } else { $env:PROCESSOR_ARCHITECTURE } + +# Auto-detect triplet from host architecture if not specified +if ([string]::IsNullOrEmpty($Triplet)) { + if ($NativeArch -eq "ARM64") { + $Triplet = "arm64-windows-static" + } else { + $Triplet = "x64-windows-static" + } +} + +# Map triplet to vcvarsall architecture +$VcvarsArch = switch -Regex ($Triplet) { + "^arm64-" { if ($NativeArch -eq "ARM64") { "arm64" } else { "amd64_arm64" } } + "^x86-" { "x86" } + default { "x64" } +} + +Write-Host "Repository root: $RepoRoot" +Write-Host "vcpkg root: $VcpkgRoot" +Write-Host "Triplet: $Triplet" + +# Clean previous build +if (Test-Path $BuildDir) { + Remove-Item -Recurse -Force $BuildDir +} +New-Item -ItemType Directory -Path $BuildDir -Force | Out-Null + +# Build cmake args as an array (avoids backtick continuation issues) +$ConsumerBuild = Join-Path $BuildDir "consumer" +$CmakeArgs = @( + "-S", $ScriptDir, + "-B", $ConsumerBuild, + "-DCMAKE_TOOLCHAIN_FILE=$VcpkgToolchain", + "-DVCPKG_TARGET_TRIPLET=$Triplet", + "-DVCPKG_OVERLAY_PORTS=$OverlayPorts", + "-DCMAKE_BUILD_TYPE=Release" +) + +# Detect whether cl.exe is on PATH (i.e., running from VS Developer Command Prompt) +$clExe = Get-Command cl.exe -ErrorAction SilentlyContinue +if (-not $clExe) { + Write-Host "cl.exe not on PATH. Finding VS with vswhere..." + $vswherePath = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" + if (-not (Test-Path $vswherePath)) { + $vswherePath = (Get-Command vswhere.exe -ErrorAction SilentlyContinue).Source + } + if (-not $vswherePath) { + Write-Error "vswhere.exe not found. Install Visual Studio or run from a VS Developer Command Prompt." + exit 1 + } + $vsInstall = & $vswherePath -latest -property installationPath + if (-not $vsInstall) { + Write-Error "Visual Studio not found. Run from a VS Developer Command Prompt." + exit 1 + } + $vcvarsall = Join-Path $vsInstall "VC\Auxiliary\Build\vcvarsall.bat" + Write-Host "Initializing VS environment from: $vcvarsall" + + # Build and run everything in a single cmd /c call + $cmakeArgStr = $CmakeArgs -join " " + $cmdLine = "`"$vcvarsall`" $VcvarsArch && cmake $cmakeArgStr -G `"NMake Makefiles`" && cmake --build `"$ConsumerBuild`" --config Release" + cmd /c $cmdLine + if ($LASTEXITCODE -ne 0) { Write-Error "Build failed"; exit 1 } +} else { + Write-Host "Using cl.exe from: $($clExe.Source)" + + Write-Host "" + Write-Host "--- Step 1: Configure (vcpkg installs deps automatically) ---" -ForegroundColor Yellow + cmake @CmakeArgs -G "NMake Makefiles" + if ($LASTEXITCODE -ne 0) { Write-Error "CMake configure failed"; exit 1 } + + Write-Host "" + Write-Host "--- Step 2: Build test consumer ---" -ForegroundColor Yellow + cmake --build $ConsumerBuild --config Release + if ($LASTEXITCODE -ne 0) { Write-Error "Build failed"; exit 1 } +} + +Write-Host "" +Write-Host "--- Step 3: Run test ---" -ForegroundColor Yellow +$TestExe = Get-ChildItem -Path $ConsumerBuild -Recurse -Filter "vcpkg_test.exe" | Select-Object -First 1 +if ($null -eq $TestExe) { + Write-Error "Test executable not found" + exit 1 +} + +& $TestExe.FullName +if ($LASTEXITCODE -ne 0) { + Write-Error "Test execution failed" + exit 1 +} + +Write-Host "" +Write-Host "=== Windows vcpkg port test PASSED ===" -ForegroundColor Green diff --git a/tests/vcpkg/vcpkg.json b/tests/vcpkg/vcpkg.json new file mode 100644 index 000000000..ae83db603 --- /dev/null +++ b/tests/vcpkg/vcpkg.json @@ -0,0 +1,8 @@ +{ + "name": "mstelemetry-vcpkg-test", + "version-string": "0.0.1", + "description": "Integration test for mstelemetry vcpkg port", + "dependencies": [ + "mstelemetry" + ] +} diff --git a/tools/MakeDeb.cmake b/tools/MakeDeb.cmake index efec5ad32..4f839ab5b 100644 --- a/tools/MakeDeb.cmake +++ b/tools/MakeDeb.cmake @@ -24,7 +24,7 @@ set(CPACK_PACKAGE_VERSION_PATCH "${PATCH_VERSION}") # FIXME: add architecture name in file name set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${CPACK_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") -message("-- Package name: ${CPACK_PACKAGE_FILE_NAME}.deb") +message(STATUS "Package name: ${CPACK_PACKAGE_FILE_NAME}.deb") #install(TARGETS ${MAT_SDK_LIB_DIR}/libMAT.a ARCHIVE DESTINATION lib/MAT COMPONENT headers) #install(FILES ${MAT_SDK_INC_DIR}/*.* DESTINATION include/MAT COMPONENT libraries) diff --git a/tools/MakeRpm.cmake b/tools/MakeRpm.cmake index c4db45de0..121eba7b6 100644 --- a/tools/MakeRpm.cmake +++ b/tools/MakeRpm.cmake @@ -18,7 +18,7 @@ set(CPACK_PACKAGE_NAME "mat_sdk") set(CPACK_PACKAGE_RELEASE "0") set(CPACK_PACKAGE_VENDOR "Microsoft") set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${CMAKE_SYSTEM_PROCESSOR}") -message("-- Package name: ${CPACK_RPM_PACKAGE_FILE_NAME}.rpm") +message(STATUS "Package name: ${CPACK_RPM_PACKAGE_FILE_NAME}.rpm") #configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mat-sdk.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/arka-sdk.spec" @ONLY IMMEDIATE) #set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_BINARY_DIR}/mat-sdk.spec") diff --git a/tools/MakeTgz.cmake b/tools/MakeTgz.cmake index bf159ab8d..44c308e32 100644 --- a/tools/MakeTgz.cmake +++ b/tools/MakeTgz.cmake @@ -24,8 +24,7 @@ file(GLOB ALL_TARGET_LIBS "${CMAKE_CURRENT_BINARY_DIR}/lib/libmat.*") install(FILES ${ALL_TARGET_LIBS} DESTINATION lib COMPONENT libraries) #install(FILES ${MAT_SDK_INC_DIR}/*.* DESTINATION include/mat COMPONENT libraries) -# FIXME: add architecture name in file name set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${CPACK_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") -message("-- Package name: ${CPACK_PACKAGE_FILE_NAME}.tgz") +message(STATUS "Package name: ${CPACK_PACKAGE_FILE_NAME}.tgz") include(CPack) diff --git a/tools/ParseOsRelease.cmake b/tools/ParseOsRelease.cmake index 48bd0398a..fc3abe9af 100644 --- a/tools/ParseOsRelease.cmake +++ b/tools/ParseOsRelease.cmake @@ -1,6 +1,6 @@ # Parse /etc/os-release to determine Linux distro -if(EXISTS /etc/os-release) +if(EXISTS "/etc/os-release") file(STRINGS /etc/os-release OS_RELEASE) foreach(NameAndValue ${OS_RELEASE}) @@ -13,7 +13,7 @@ foreach(NameAndValue ${OS_RELEASE}) # Strip quotes from value string(REPLACE "\"" "" Value ${Value}) # Set the variable - message("-- /etc/os_release : ${Name}=${Value}") + message(STATUS "/etc/os_release : ${Name}=${Value}") set("OS_RELEASE_${Name}" "${Value}") endforeach() diff --git a/tools/ports/mstelemetry/CONTROL b/tools/ports/mstelemetry/CONTROL deleted file mode 100644 index 54f2489b6..000000000 --- a/tools/ports/mstelemetry/CONTROL +++ /dev/null @@ -1,4 +0,0 @@ -Source: mstelemetry -Version: 3.4.999 -Homepage: https://github.com/microsoft/cpp_client_telemetry -Description: Microsoft C/C++ Client Telemetry Library (1DS C++ SDK) diff --git a/tools/ports/mstelemetry/TODO.md b/tools/ports/mstelemetry/TODO.md deleted file mode 100644 index 36ddfd11a..000000000 --- a/tools/ports/mstelemetry/TODO.md +++ /dev/null @@ -1,9 +0,0 @@ -# TODO - -- Consider adding the following line to portfile.cmake - -``` -Build-Depends: curl[ssl], nlohmann-json, sqlite3 -``` - -- Consider using Google Test and Google Benchmark from vcpkg diff --git a/tools/ports/mstelemetry/get_repo_name.sh b/tools/ports/mstelemetry/get_repo_name.sh deleted file mode 100755 index e98b382ba..000000000 --- a/tools/ports/mstelemetry/get_repo_name.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -e -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -pushd $DIR/../../ > /dev/null -basename -s .git `git config --get remote.origin.url` -popd > /dev/null diff --git a/tools/ports/mstelemetry/portfile.cmake b/tools/ports/mstelemetry/portfile.cmake index 7a9fba689..27f690f9f 100644 --- a/tools/ports/mstelemetry/portfile.cmake +++ b/tools/ports/mstelemetry/portfile.cmake @@ -1,83 +1,53 @@ -include(vcpkg_common_functions) - -message("CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}") -message("CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}") -message("CMAKE_CURRENT_LIST_DIR=${CMAKE_CURRENT_LIST_DIR}") - -if (UNIX) - execute_process(COMMAND "${CMAKE_CURRENT_LIST_DIR}/get_repo_name.sh" OUTPUT_VARIABLE REPO_NAME ERROR_QUIET) -else() - # execute_process(COMMAND git config --get remote.origin.url OUTPUT_VARIABLE REPO_URL ERROR_QUIET) - # message("REPO_URL=${REPO_URL}") - # string(REPLACE "/" ";" REPO_URL_LIST ${REPO_URL}) - # message(REPO_URL_LIST "list = ${REPO_URL_LIST}") - # list(LENGTH ${REPO_URL_LIST} LAST_ITEM) - # list(GET ${REPO_URL_LIST} ${LAST_ITEM} REPO_NAME) +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO microsoft/cpp_client_telemetry + REF a20abe010a075fdcb9a8804048a7827d34fd040d + SHA512 d5f45e6aab5d295ad3ad665b7e850a760c4d2419c06e7fe302b97e35c0c737794aaa920d6fa95c9c81546c7d38d00624a178920d672e1970b5534f39d0c5e490 + HEAD_REF main +) + +# Determine if Apple HTTP should be used (no curl needed). +# Note: BUILD_APPLE_HTTP must remain ON for macOS/iOS — the vcpkg.json +# curl dependency is excluded on these platforms. +set(MATSDK_BUILD_APPLE_HTTP OFF) +if(VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_IOS) + set(MATSDK_BUILD_APPLE_HTTP ON) endif() -message("REPO_NAME=${REPO_NAME}") - -if (DEFINED REPO_NAME) - # Use local snapshot since we already cloned the code - get_filename_component(SOURCE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) - message("Using local source snapshot from ${SOURCE_PATH}") -else() - # Fetch from GitHub main - message("Fetching source code from GitHub...") - if (UNIX) - vcpkg_from_github( - OUT_SOURCE_PATH SOURCE_PATH - REPO microsoft/cpp_client_telemetry - HEAD_REF main - ) - else() - vcpkg_from_github( - OUT_SOURCE_PATH SOURCE_PATH - REPO microsoft/cpp_client_telemetry - REF 4f60dd3bca305c2c0dd5ec2ed7b91d36b4de6dcf - SHA512 9778df5aa65d95fe1d41739753495d29b3149676e98ac2e802a103604553f4f2b43bc2eb089c2e13dc695f70279287ea79ec6e2926fad03befe8a671f91d36fb - HEAD_REF main - PATCHES ${CMAKE_CURRENT_LIST_DIR}/v142-build.patch - ) - endif() +# iOS build options +set(MATSDK_BUILD_IOS OFF) +if(VCPKG_TARGET_IS_IOS) + set(MATSDK_BUILD_IOS ON) endif() -# TODO: it will be slightly cleaner to perform pure CMake or Ninja build, by describing all possible variable options -# as separate triplets. Since we have a fairly non-trivial build logic in build.sh script - we use it as-is for now. -# build.sh itself should check if we are building under vcpkg and avoid installing deps that are coming from vcpkg. -if (UNIX) - vcpkg_execute_build_process( - COMMAND ${SOURCE_PATH}/build.sh noroot - WORKING_DIRECTORY ${SOURCE_PATH}/ - LOGNAME build - ) - - vcpkg_execute_build_process( - COMMAND ${SOURCE_PATH}/install.sh ${CURRENT_PACKAGES_DIR} - WORKING_DIRECTORY ${SOURCE_PATH}/ - LOGNAME install - ) - - file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) -else() - vcpkg_check_linkage(ONLY_STATIC_LIBRARY) - - vcpkg_install_msbuild( - SOURCE_PATH ${SOURCE_PATH} - PROJECT_SUBPATH Solutions/MSTelemetrySDK.sln - LICENSE_SUBPATH LICENSE - RELEASE_CONFIGURATION Release - DEBUG_CONFIGURATION Debug - OPTIONS /p:MATSDK_SHARED_LIB=1 - PLATFORM ${VCPKG_TARGET_ARCHITECTURE} - PLATFORM_TOOLSET v142 - TARGET sqlite:Rebuild,win32-lib:Rebuild - USE_VCPKG_INTEGRATION - ) - - file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin") - file(COPY "${SOURCE_PATH}/lib/include/public" DESTINATION "${CURRENT_PACKAGES_DIR}") - file(RENAME "${CURRENT_PACKAGES_DIR}/public" "${CURRENT_PACKAGES_DIR}/include") - file(COPY "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") - file(WRITE "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" "Refer to LICENSE file") -endif() +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + -DMATSDK_USE_VCPKG_DEPS=ON + -DBUILD_HEADERS=ON + -DBUILD_LIBRARY=ON + -DBUILD_TEST_TOOL=OFF + -DBUILD_UNIT_TESTS=OFF + -DBUILD_FUNC_TESTS=OFF + -DBUILD_JNI_WRAPPER=OFF + -DBUILD_OBJC_WRAPPER=OFF + -DBUILD_SWIFT_WRAPPER=OFF + -DBUILD_PACKAGE=OFF + -DBUILD_VERSION=${VERSION} + -DBUILD_APPLE_HTTP=${MATSDK_BUILD_APPLE_HTTP} + -DBUILD_IOS=${MATSDK_BUILD_IOS} +) + +vcpkg_cmake_install() + +vcpkg_cmake_config_fixup(PACKAGE_NAME MSTelemetry CONFIG_PATH lib/cmake/MSTelemetry) + +# Remove duplicate headers and empty dirs +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") + +# Install usage instructions +file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") + +# Install license +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/tools/ports/mstelemetry/response_file_linux.txt b/tools/ports/mstelemetry/response_file_linux.txt deleted file mode 100644 index ee7642068..000000000 --- a/tools/ports/mstelemetry/response_file_linux.txt +++ /dev/null @@ -1,6 +0,0 @@ ---head ---overlay-ports=tools/ports -mstelemetry -sqlite3 -zlib -nlohmann-json diff --git a/tools/ports/mstelemetry/response_file_mac.txt b/tools/ports/mstelemetry/response_file_mac.txt deleted file mode 100644 index ee7642068..000000000 --- a/tools/ports/mstelemetry/response_file_mac.txt +++ /dev/null @@ -1,6 +0,0 @@ ---head ---overlay-ports=tools/ports -mstelemetry -sqlite3 -zlib -nlohmann-json diff --git a/tools/ports/mstelemetry/usage b/tools/ports/mstelemetry/usage new file mode 100644 index 000000000..4c94e773f --- /dev/null +++ b/tools/ports/mstelemetry/usage @@ -0,0 +1,4 @@ +mstelemetry provides CMake targets: + + find_package(MSTelemetry CONFIG REQUIRED) + target_link_libraries(main PRIVATE MSTelemetry::mat) diff --git a/tools/ports/mstelemetry/v142-build.patch b/tools/ports/mstelemetry/v142-build.patch deleted file mode 100644 index 3913521ef..000000000 --- a/tools/ports/mstelemetry/v142-build.patch +++ /dev/null @@ -1,5707 +0,0 @@ -diff --git a/Solutions/MSTelemetrySDK.sln b/Solutions/MSTelemetrySDK.sln -index 904f20a9..a6bc3ece 100644 ---- a/Solutions/MSTelemetrySDK.sln -+++ b/Solutions/MSTelemetrySDK.sln -@@ -1,6 +1,6 @@ - Microsoft Visual Studio Solution File, Format Version 12.00 --# Visual Studio 15 --VisualStudioVersion = 15.0.28307.645 -+# Visual Studio Version 16 -+VisualStudioVersion = 16.0.31105.61 - MinimumVisualStudioVersion = 10.0.40219.1 - Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite", "..\sqlite\sqlite.vcxproj", "{2EBC7B3C-2AF1-442C-9285-CAB39BBB8C00}" - EndProject -@@ -38,39 +38,6 @@ EndProject - Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "managed", "..\lib\shared\Shared.vcxitems", "{EF859326-2A11-481C-AE8C-03D754F1C412}" - EndProject - Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "include", "include", "{553836FF-B1FD-4B70-AC81-AEC7752F9284}" -- ProjectSection(SolutionItems) = preProject -- ..\lib\include\public\AggregatedMetric.hpp = ..\lib\include\public\AggregatedMetric.hpp -- ..\lib\include\public\CommonFields.h = ..\lib\include\public\CommonFields.h -- ..\lib\include\public\CsProtocol_types.hpp = ..\lib\include\public\CsProtocol_types.hpp -- ..\lib\include\public\ctmacros.hpp = ..\lib\include\public\ctmacros.hpp -- ..\lib\include\public\DebugEvents.hpp = ..\lib\include\public\DebugEvents.hpp -- ..\lib\include\public\Enums.hpp = ..\lib\include\public\Enums.hpp -- ..\lib\include\public\EventProperties.hpp = ..\lib\include\public\EventProperties.hpp -- ..\lib\include\public\EventProperty.hpp = ..\lib\include\public\EventProperty.hpp -- ..\lib\include\public\IAFDClient.hpp = ..\lib\include\public\IAFDClient.hpp -- ..\lib\include\public\ICdsFactory.hpp = ..\lib\include\public\ICdsFactory.hpp -- ..\lib\include\public\IDataInspector.hpp = ..\lib\include\public\IDataInspector.hpp -- ..\lib\include\public\IDataViewer.hpp = ..\lib\include\public\IDataViewer.hpp -- ..\lib\include\public\IDataViewerCollection.hpp = ..\lib\include\public\IDataViewerCollection.hpp -- ..\lib\include\public\IDecorator.hpp = ..\lib\include\public\IDecorator.hpp -- ..\lib\include\public\IECSClient.hpp = ..\lib\include\public\IECSClient.hpp -- ..\lib\include\public\IEventFilter.hpp = ..\lib\include\public\IEventFilter.hpp -- ..\lib\include\public\IEventFilterCollection.hpp = ..\lib\include\public\IEventFilterCollection.hpp -- ..\lib\include\public\IHttpClient.hpp = ..\lib\include\public\IHttpClient.hpp -- ..\lib\include\public\ILogConfiguration.hpp = ..\lib\include\public\ILogConfiguration.hpp -- ..\lib\include\public\ILogger.hpp = ..\lib\include\public\ILogger.hpp -- ..\lib\include\public\ILogManager.hpp = ..\lib\include\public\ILogManager.hpp -- ..\lib\include\public\IModule.hpp = ..\lib\include\public\IModule.hpp -- ..\lib\include\public\IOfflineStorage.hpp = ..\lib\include\public\IOfflineStorage.hpp -- ..\lib\include\public\ISemanticContext.hpp = ..\lib\include\public\ISemanticContext.hpp -- ..\lib\include\public\ITaskDispatcher.hpp = ..\lib\include\public\ITaskDispatcher.hpp -- ..\lib\include\public\LogManager.hpp = ..\lib\include\public\LogManager.hpp -- ..\lib\include\public\LogSessionData.hpp = ..\lib\include\public\LogSessionData.hpp -- ..\lib\include\public\mat.h = ..\lib\include\public\mat.h -- ..\lib\include\public\PayloadDecoder.hpp = ..\lib\include\public\PayloadDecoder.hpp -- ..\lib\include\public\Version.hpp = ..\lib\include\public\Version.hpp -- ..\lib\include\public\Version.hpp.template = ..\lib\include\public\Version.hpp.template -- EndProjectSection - EndProject - Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win32-lib", "win32-lib\win32-lib.vcxproj", "{1DC6B38A-B390-34CE-907F-4958807A3D42}" - EndProject -@@ -164,42 +131,19 @@ Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\lib\pal\universal\universal.vcxitems*{10e9165b-49d1-4d1c-8248-334b9905b9cc}*SharedItemsImports = 9 - ..\lib\pal\desktop\desktop.vcxitems*{10e9165b-49d1-4d1c-8248-334b9905b9cd}*SharedItemsImports = 9 -- ..\lib\modules\azmon\azmon.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d42}*SharedItemsImports = 4 -- ..\lib\modules\cds\cds.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d42}*SharedItemsImports = 4 -- ..\lib\modules\dataviewer\dataviewer.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d42}*SharedItemsImports = 4 -- ..\lib\modules\exp\exp.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d42}*SharedItemsImports = 4 -- ..\lib\modules\filter\filter.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d42}*SharedItemsImports = 4 -- ..\lib\modules\privacyguard\privacyguard.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d42}*SharedItemsImports = 4 - ..\lib\pal\desktop\desktop.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d42}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d42}*SharedItemsImports = 4 - ..\lib\pal\desktop\desktop.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d43}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{1dc6b38a-b390-34ce-907f-4958807a3d43}*SharedItemsImports = 4 - ..\lib\modules\dataviewer\dataviewer.vcxitems*{20ad4f2b-3f98-4baf-8144-e1e7682a7927}*SharedItemsImports = 9 -- ..\lib\modules\azmon\azmon.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c32}*SharedItemsImports = 4 -- ..\lib\modules\cds\cds.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c32}*SharedItemsImports = 4 -- ..\lib\modules\dataviewer\dataviewer.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c32}*SharedItemsImports = 4 -- ..\lib\modules\exp\exp.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c32}*SharedItemsImports = 4 -- ..\lib\modules\filter\filter.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c32}*SharedItemsImports = 4 -- ..\lib\modules\privacyguard\privacyguard.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c32}*SharedItemsImports = 4 - ..\lib\pal\desktop\desktop.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c32}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c32}*SharedItemsImports = 4 - ..\lib\pal\desktop\desktop.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c33}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{216a8e97-21f7-4bef-9e52-7f772c177c33}*SharedItemsImports = 4 - ..\lib\modules\exp\exp.vcxitems*{2bfafe9a-45b0-4c02-841e-03e47fd2e340}*SharedItemsImports = 9 -- ..\lib\modules\azmon\azmon.vcxitems*{434c594f-cde0-3690-ac0a-9ed854b74092}*SharedItemsImports = 4 -- ..\lib\modules\cds\cds.vcxitems*{434c594f-cde0-3690-ac0a-9ed854b74092}*SharedItemsImports = 4 -- ..\lib\modules\dataviewer\dataviewer.vcxitems*{434c594f-cde0-3690-ac0a-9ed854b74092}*SharedItemsImports = 4 -- ..\lib\modules\filter\filter.vcxitems*{434c594f-cde0-3690-ac0a-9ed854b74092}*SharedItemsImports = 4 -- ..\lib\modules\privacyguard\privacyguard.vcxitems*{434c594f-cde0-3690-ac0a-9ed854b74092}*SharedItemsImports = 4 - ..\lib\pal\desktop\desktop.vcxitems*{434c594f-cde0-3690-ac0a-9ed854b74092}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{434c594f-cde0-3690-ac0a-9ed854b74092}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{45d41acc-2c3c-43d2-bc10-02aa73ffc7c7}*SharedItemsImports = 9 -- ..\lib\modules\azmon\azmon.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 -- ..\lib\modules\cds\cds.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 -- ..\lib\modules\dataviewer\dataviewer.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 -- ..\lib\modules\exp\exp.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 -- ..\lib\modules\filter\filter.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 -- ..\lib\modules\privacyguard\privacyguard.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 - ..\lib\pal\universal\universal.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 - ..\lib\shared\Shared.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{49077dbf-e363-4d2d-8334-636569a771b6}*SharedItemsImports = 4 -@@ -213,25 +157,14 @@ Global - Clienttelemetry\Clienttelemetry.vcxitems*{57a81ed9-5603-471f-afee-9656da74178d}*SharedItemsImports = 4 - ..\lib\decoder\decoder.vcxitems*{65b6880e-fc36-443d-a7a5-0e6cda6523ac}*SharedItemsImports = 9 - ..\lib\modules\azmon\azmon.vcxitems*{6dc5ab1d-3d64-4c52-8d8e-d9a8b0c16f14}*SharedItemsImports = 9 -- ..\lib\modules\azmon\azmon.vcxitems*{7a75748d-5d6b-48a5-83cb-f5f439133d59}*SharedItemsImports = 4 -- ..\lib\modules\cds\cds.vcxitems*{7a75748d-5d6b-48a5-83cb-f5f439133d59}*SharedItemsImports = 4 -- ..\lib\modules\dataviewer\dataviewer.vcxitems*{7a75748d-5d6b-48a5-83cb-f5f439133d59}*SharedItemsImports = 4 -- ..\lib\modules\exp\exp.vcxitems*{7a75748d-5d6b-48a5-83cb-f5f439133d59}*SharedItemsImports = 4 -- ..\lib\modules\filter\filter.vcxitems*{7a75748d-5d6b-48a5-83cb-f5f439133d59}*SharedItemsImports = 4 -- ..\lib\modules\privacyguard\privacyguard.vcxitems*{7a75748d-5d6b-48a5-83cb-f5f439133d59}*SharedItemsImports = 4 - ..\lib\pal\universal\universal.vcxitems*{7a75748d-5d6b-48a5-83cb-f5f439133d59}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{7a75748d-5d6b-48a5-83cb-f5f439133d59}*SharedItemsImports = 4 -- ..\lib\modules\cds\cds.vcxitems*{e1f6ca48-3bbf-4378-8d1e-6bbf4869db5b}*SharedItemsImports = 9 -- ..\lib\modules\cds\cds.vcxitems*{fe79fb3a-b3ef-38df-b7a4-11277db72b39}*SharedItemsImports = 4 - ..\lib\modules\filter\filter.vcxitems*{d74e42ec-c6ee-4944-b92a-eb711be002a9}*SharedItemsImports = 9 - ..\lib\shared\Shared.vcxitems*{dc91621e-a203-42df-8e03-3a23dd0602b1}*SharedItemsImports = 4 -+ ..\lib\modules\cds\cds.vcxitems*{e1f6ca48-3bbf-4378-8d1e-6bbf4869db5b}*SharedItemsImports = 9 - ..\lib\modules\privacyguard\privacyguard.vcxitems*{e1f6ca48-3bbf-4378-8d1e-6bbf4869db5b}*SharedItemsImports = 9 - ..\lib\shared\Shared.vcxitems*{ef859326-2a11-481c-ae8c-03d754f1c412}*SharedItemsImports = 9 - ..\lib\decoder\decoder.vcxitems*{fe79fb3a-b3ef-38df-b7a4-11277db72b39}*SharedItemsImports = 4 -- ..\lib\modules\azmon\azmon.vcxitems*{fe79fb3a-b3ef-38df-b7a4-11277db72b39}*SharedItemsImports = 4 -- ..\lib\modules\dataviewer\dataviewer.vcxitems*{fe79fb3a-b3ef-38df-b7a4-11277db72b39}*SharedItemsImports = 4 -- ..\lib\modules\filter\filter.vcxitems*{fe79fb3a-b3ef-38df-b7a4-11277db72b39}*SharedItemsImports = 4 -- ..\lib\modules\privacyguard\privacyguard.vcxitems*{fe79fb3a-b3ef-38df-b7a4-11277db72b39}*SharedItemsImports = 4 - ..\lib\pal\desktop\desktop.vcxitems*{fe79fb3a-b3ef-38df-b7a4-11277db72b39}*SharedItemsImports = 4 - Clienttelemetry\Clienttelemetry.vcxitems*{fe79fb3a-b3ef-38df-b7a4-11277db72b39}*SharedItemsImports = 4 - EndGlobalSection -diff --git a/Solutions/net40/net40.vcxproj b/Solutions/net40/net40.vcxproj -index 12444a52..ef11fb6c 100644 ---- a/Solutions/net40/net40.vcxproj -+++ b/Solutions/net40/net40.vcxproj -@@ -27,6 +27,7 @@ - net40 - true - true -+ 10.0 - - - -@@ -35,6 +36,7 @@ - false - Unicode - false -+ v142 - - - DynamicLibrary -@@ -42,6 +44,7 @@ - true - Unicode - false -+ v142 - - - DynamicLibrary -@@ -49,6 +52,7 @@ - Unicode - false - false -+ v142 - - - DynamicLibrary -@@ -56,6 +60,7 @@ - false - Unicode - false -+ v142 - - - -diff --git a/Solutions/win10-cs/win10-cs.vcxproj b/Solutions/win10-cs/win10-cs.vcxproj -index 147ae1e4..0a7a0ea7 100644 ---- a/Solutions/win10-cs/win10-cs.vcxproj -+++ b/Solutions/win10-cs/win10-cs.vcxproj -@@ -47,6 +47,7 @@ - 8.2 - 10.0.10240.0 - true -+ 10.0 - - - TRUE -@@ -55,38 +56,46 @@ - - DynamicLibrary - true -+ v142 - - - DynamicLibrary - true -+ v142 - - - DynamicLibrary - true -+ v142 - - - DynamicLibrary - true -+ v142 - - - DynamicLibrary - false - true -+ v142 - - - DynamicLibrary - false - true -+ v142 - - - DynamicLibrary - false - true -+ v142 - - - DynamicLibrary - false - true -+ v142 - - - -diff --git a/Solutions/win10-lib/win10-lib.vcxproj b/Solutions/win10-lib/win10-lib.vcxproj -index 30bcf573..a38778d7 100644 ---- a/Solutions/win10-lib/win10-lib.vcxproj -+++ b/Solutions/win10-lib/win10-lib.vcxproj -@@ -48,43 +48,52 @@ - 10.0 - win10-lib - true -+ 10.0 - - - - StaticLibrary - true -+ v142 - - - StaticLibrary - true -+ v142 - - - StaticLibrary - true -+ v142 - - - StaticLibrary - true -+ v142 - - - StaticLibrary - false - true -+ v142 - - - StaticLibrary - false - true -+ v142 - - - StaticLibrary - false - true -+ v142 - - - StaticLibrary - false - true -+ v142 - - - -@@ -95,7 +104,7 @@ - - - -- -+ - - - -diff --git a/Solutions/win32-dll/win32-dll.vcxproj b/Solutions/win32-dll/win32-dll.vcxproj -index 4ae04059..5df3dd01 100644 ---- a/Solutions/win32-dll/win32-dll.vcxproj -+++ b/Solutions/win32-dll/win32-dll.vcxproj -@@ -44,6 +44,7 @@ - ClientTelemetry - win32-dll - true -+ 10.0 - - - TRUE -@@ -57,36 +58,42 @@ - true - Unicode - false -+ v142 - - - DynamicLibrary - false - false - Unicode -+ v142 - - - DynamicLibrary - true - Unicode - false -+ v142 - - - DynamicLibrary - true - Unicode - false -+ v142 - - - DynamicLibrary - false - false - Unicode -+ v142 - - - DynamicLibrary - false - false - Unicode -+ v142 - - - -diff --git a/Solutions/win32-lib/win32-lib.vcxproj b/Solutions/win32-lib/win32-lib.vcxproj -index c1d9667a..6880136b 100644 ---- a/Solutions/win32-lib/win32-lib.vcxproj -+++ b/Solutions/win32-lib/win32-lib.vcxproj -@@ -57,6 +57,7 @@ - ClientTelemetry - win32-lib - true -+ 10.0 - - - OACR -@@ -67,48 +68,56 @@ - true - Unicode - false -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary -@@ -116,24 +125,28 @@ - false - Unicode - win-x64_vs2015-crtdynamic-release -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - -diff --git a/Solutions/win32-mini-dll/win32-mini-dll.vcxproj b/Solutions/win32-mini-dll/win32-mini-dll.vcxproj -index 97892580..b8c5eeef 100644 ---- a/Solutions/win32-mini-dll/win32-mini-dll.vcxproj -+++ b/Solutions/win32-mini-dll/win32-mini-dll.vcxproj -@@ -44,6 +44,7 @@ - ClientTelemetry - win32-mini-dll - true -+ 10.0 - - - OACR -@@ -54,36 +55,42 @@ - true - Unicode - false -+ v142 - - - DynamicLibrary - false - false - Unicode -+ v142 - - - DynamicLibrary - true - Unicode - false -+ v142 - - - DynamicLibrary - true - Unicode - false -+ v142 - - - DynamicLibrary - false - false - Unicode -+ v142 - - - DynamicLibrary - false - false - Unicode -+ v142 - - - -diff --git a/Solutions/win32-mini-lib/win32-mini-lib.vcxproj b/Solutions/win32-mini-lib/win32-mini-lib.vcxproj -index edc2828f..6da2528e 100644 ---- a/Solutions/win32-mini-lib/win32-mini-lib.vcxproj -+++ b/Solutions/win32-mini-lib/win32-mini-lib.vcxproj -@@ -57,6 +57,7 @@ - ClientTelemetry - win32-mini-lib - true -+ 10.0 - - - OACR -@@ -67,72 +68,84 @@ - true - Unicode - false -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - true - Unicode - false -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - StaticLibrary - false - false - Unicode -+ v142 - - - -diff --git a/examples/c/SampleC/SampleC.vcxproj b/examples/c/SampleC/SampleC.vcxproj -index a4901f2b..9dbc8ca4 100644 ---- a/examples/c/SampleC/SampleC.vcxproj -+++ b/examples/c/SampleC/SampleC.vcxproj -@@ -20,12 +20,14 @@ - Application - true - Unicode -+ v142 - - - Application - false - true - Unicode -+ v142 - - - -diff --git a/examples/cpp/EventSender/EventSender.vcxproj b/examples/cpp/EventSender/EventSender.vcxproj -index b55221e1..ed4d921a 100644 ---- a/examples/cpp/EventSender/EventSender.vcxproj -+++ b/examples/cpp/EventSender/EventSender.vcxproj -@@ -24,29 +24,34 @@ - {7DBFBA1F-520D-4C93-A33E-DD92FD4F9222} - Win32Proj - EventSender -+ 10.0 - - - - Application - true - Unicode -+ v142 - - - Application - false - true - Unicode -+ v142 - - - Application - true - Unicode -+ v142 - - - Application - false - true - Unicode -+ v142 - - - -diff --git a/examples/cpp/EventSender/EventSender.vcxproj.filters b/examples/cpp/EventSender/EventSender.vcxproj.filters -index f5b9ccda..edd3c98f 100644 ---- a/examples/cpp/EventSender/EventSender.vcxproj.filters -+++ b/examples/cpp/EventSender/EventSender.vcxproj.filters -@@ -1,117 +1,22 @@ -- -- -- -- -- {4FC737F1-C7A5-4376-A066-2A32D752A2FF} -- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx -- -- -- {93995380-89BD-4b04-88EB-625FBE52EBFB} -- h;hh;hpp;hxx;hm;inl;inc;ipp;xsd -- -- -- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} -- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms -- -- -- -- -- Source Files -- -- -- -- -- -- Header Files -- -- -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -- Header Files -- -- -+ -+ -+ -+ -+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF} -+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx -+ -+ -+ {93995380-89BD-4b04-88EB-625FBE52EBFB} -+ h;hh;hpp;hxx;hm;inl;inc;ipp;xsd -+ -+ -+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} -+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms -+ -+ -+ -+ -+ Source Files -+ -+ - -\ No newline at end of file -diff --git a/examples/cpp/SampleCpp/SampleCpp.vcxproj b/examples/cpp/SampleCpp/SampleCpp.vcxproj -index f8154a7e..ab8b5fb6 100644 ---- a/examples/cpp/SampleCpp/SampleCpp.vcxproj -+++ b/examples/cpp/SampleCpp/SampleCpp.vcxproj -@@ -79,124 +79,124 @@ - {86AC752C-5687-4377-841E-943D9BEEF360} - Win32Proj - SampleCpp -- 10.0.17134.0 -+ 10.0 - true - - - - Application - true -- v141 -+ v142 - Unicode - - - Application - true -- v141 -+ v142 - Unicode - - - Application - true -- v141 -+ v142 - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - - - Application - true -- v141 -+ v142 - Unicode - - - Application - true -- v141 -+ v142 - Unicode - - - Application - true -- v141 -+ v142 - Unicode - - - Application - true -- v141 -+ v142 - Unicode - - - Application - true -- v141 -+ v142 - Unicode - - - Application - true -- v141 -+ v142 - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - - - Application - false -- v141 -+ v142 - true - Unicode - -diff --git a/examples/cpp/SampleCppLogManagers/SampleCppLogManagers.vcxproj b/examples/cpp/SampleCppLogManagers/SampleCppLogManagers.vcxproj -index be49c0cf..1466a4d8 100644 ---- a/examples/cpp/SampleCppLogManagers/SampleCppLogManagers.vcxproj -+++ b/examples/cpp/SampleCppLogManagers/SampleCppLogManagers.vcxproj -@@ -1,200 +1,200 @@ -- -- -- -- -- Debug -- Win32 -- -- -- Release -- Win32 -- -- -- Debug -- x64 -- -- -- Release -- x64 -- -- -- -- 15.0 -- {77053F92-F003-4D1C-A489-1DEB7CFEA4EC} -- Win32Proj -- SampleCppLogManagers -- 10.0.17134.0 -- -- -- -- Application -- true -- v141 -- Unicode -- -- -- Application -- false -- v141 -- true -- Unicode -- -- -- Application -- true -- v141 -- Unicode -- -- -- Application -- false -- v141 -- true -- Unicode -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- true -- $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)\..\lib\include\public;$(SolutionDir)\..\lib\pal\ -- $(ProjectDir) -- $(Configuration)\ -- $(LibraryPath) -- -- -- true -- $(ProjectDir) -- $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)\..\lib\include\public;$(SolutionDir)\..\lib\pal\ -- $(LibraryPath) -- -- -- false -- $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)\..\lib\include\public -- -- -- false -- $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)\..\lib\include\public -- -- -- -- NotUsing -- Level3 -- Disabled -- true -- WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) -- true -- pch.h -- -- -- Console -- true -- -- -- $(MSBuildProjectDirectory)\deploy-dll.cmd $(Configuration) $(Platform) $(OutDir) -- -- -- Deploy DLLs -- -- -- -- -- NotUsing -- Level3 -- Disabled -- true -- _DEBUG;_CONSOLE;%(PreprocessorDefinitions) -- true -- pch.h -- -- -- Console -- true -- -- -- $(MSBuildProjectDirectory)\deploy-dll.cmd $(Configuration) $(Platform) $(OutDir) -- -- -- Deploy DLLs -- -- -- -- -- NotUsing -- Level3 -- MaxSpeed -- true -- true -- true -- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) -- true -- pch.h -- -- -- Console -- true -- true -- true -- -- -- $(MSBuildProjectDirectory)\deploy-dll.cmd $(Configuration) $(Platform) $(OutDir) -- -- -- Deploy DLLs -- -- -- -- -- NotUsing -- Level3 -- MaxSpeed -- true -- true -- true -- NDEBUG;_CONSOLE;%(PreprocessorDefinitions) -- true -- pch.h -- -- -- Console -- true -- true -- true -- -- -- $(MSBuildProjectDirectory)\deploy-dll.cmd $(Configuration) $(Platform) $(OutDir) -- -- -- Deploy DLLs -- -- -- -- -- -- -- -- {216a8e97-21f7-4bef-9e52-7f772c177c32} -- -- -- -- -- -- -- -- -- -+ -+ -+ -+ -+ Debug -+ Win32 -+ -+ -+ Release -+ Win32 -+ -+ -+ Debug -+ x64 -+ -+ -+ Release -+ x64 -+ -+ -+ -+ 15.0 -+ {77053F92-F003-4D1C-A489-1DEB7CFEA4EC} -+ Win32Proj -+ SampleCppLogManagers -+ 10.0 -+ -+ -+ -+ Application -+ true -+ v142 -+ Unicode -+ -+ -+ Application -+ false -+ v142 -+ true -+ Unicode -+ -+ -+ Application -+ true -+ v142 -+ Unicode -+ -+ -+ Application -+ false -+ v142 -+ true -+ Unicode -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ true -+ $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)\..\lib\include\public;$(SolutionDir)\..\lib\pal\ -+ $(ProjectDir) -+ $(Configuration)\ -+ $(LibraryPath) -+ -+ -+ true -+ $(ProjectDir) -+ $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)\..\lib\include\public;$(SolutionDir)\..\lib\pal\ -+ $(LibraryPath) -+ -+ -+ false -+ $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)\..\lib\include\public -+ -+ -+ false -+ $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)\..\lib\include\public -+ -+ -+ -+ NotUsing -+ Level3 -+ Disabled -+ true -+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) -+ true -+ pch.h -+ -+ -+ Console -+ true -+ -+ -+ $(MSBuildProjectDirectory)\deploy-dll.cmd $(Configuration) $(Platform) $(OutDir) -+ -+ -+ Deploy DLLs -+ -+ -+ -+ -+ NotUsing -+ Level3 -+ Disabled -+ true -+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions) -+ true -+ pch.h -+ -+ -+ Console -+ true -+ -+ -+ $(MSBuildProjectDirectory)\deploy-dll.cmd $(Configuration) $(Platform) $(OutDir) -+ -+ -+ Deploy DLLs -+ -+ -+ -+ -+ NotUsing -+ Level3 -+ MaxSpeed -+ true -+ true -+ true -+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) -+ true -+ pch.h -+ -+ -+ Console -+ true -+ true -+ true -+ -+ -+ $(MSBuildProjectDirectory)\deploy-dll.cmd $(Configuration) $(Platform) $(OutDir) -+ -+ -+ Deploy DLLs -+ -+ -+ -+ -+ NotUsing -+ Level3 -+ MaxSpeed -+ true -+ true -+ true -+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions) -+ true -+ pch.h -+ -+ -+ Console -+ true -+ true -+ true -+ -+ -+ $(MSBuildProjectDirectory)\deploy-dll.cmd $(Configuration) $(Platform) $(OutDir) -+ -+ -+ Deploy DLLs -+ -+ -+ -+ -+ -+ -+ -+ {216a8e97-21f7-4bef-9e52-7f772c177c32} -+ -+ -+ -+ -+ -+ -+ -+ -+ - -\ No newline at end of file -diff --git a/examples/cpp/SampleCppMini/SampleCppMini.vcxproj b/examples/cpp/SampleCppMini/SampleCppMini.vcxproj -index a2891ace..e232a2e4 100644 ---- a/examples/cpp/SampleCppMini/SampleCppMini.vcxproj -+++ b/examples/cpp/SampleCppMini/SampleCppMini.vcxproj -@@ -79,35 +79,35 @@ - {86AC752C-5687-4377-841E-943D9BEEF361} - Win32Proj - SampleCppMini -- 10.0.17763.0 -+ 10.0 - true - - - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - false -- v141 -+ v142 - true - Unicode - Static -@@ -115,7 +115,7 @@ - - Application - false -- v141 -+ v142 - true - Unicode - Static -@@ -123,7 +123,7 @@ - - Application - false -- v141 -+ v142 - true - Unicode - Static -@@ -131,49 +131,49 @@ - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - true -- v141 -+ v142 - Unicode - Static - - - Application - false -- v141 -+ v142 - true - Unicode - Static -@@ -181,7 +181,7 @@ - - Application - false -- v141 -+ v142 - true - Unicode - Static -@@ -189,7 +189,7 @@ - - Application - false -- v141 -+ v142 - true - Unicode - Static -@@ -197,7 +197,7 @@ - - Application - false -- v141 -+ v142 - true - Unicode - Static -@@ -205,7 +205,7 @@ - - Application - false -- v141 -+ v142 - true - Unicode - Static -@@ -213,7 +213,7 @@ - - Application - false -- v141 -+ v142 - true - Unicode - Static -diff --git a/examples/cpp/SampleCppUWP/SampleCppUWP.vcxproj b/examples/cpp/SampleCppUWP/SampleCppUWP.vcxproj -index efe13147..23635fa5 100644 ---- a/examples/cpp/SampleCppUWP/SampleCppUWP.vcxproj -+++ b/examples/cpp/SampleCppUWP/SampleCppUWP.vcxproj -@@ -8,7 +8,7 @@ - true - Windows Store - 8.2 -- 10.0.17763.0 -+ 10.0 - 10.0.17763.0 - SampleCppUWP - -@@ -50,46 +50,46 @@ - - Application - true -- v141 -+ v142 - - - Application - true -- v141 -+ v142 - - - Application - true -- v141 -+ v142 - - - Application - true -- v141 -+ v142 - - - Application - false - true -- v141 -+ v142 - - - Application - false - true -- v141 -+ v142 - - - Application - false - true -- v141 -+ v142 - - - Application - false - true -- v141 -+ v142 - - - -diff --git a/googletest/googlemock/msvc/2015/gmock.vcxproj b/googletest/googlemock/msvc/2015/gmock.vcxproj -index 7b06da3a..612de047 100644 ---- a/googletest/googlemock/msvc/2015/gmock.vcxproj -+++ b/googletest/googlemock/msvc/2015/gmock.vcxproj -@@ -1,215 +1,215 @@ -- -- -- -- -- Debug -- ARM64 -- -- -- Debug -- Win32 -- -- -- Debug -- x64 -- -- -- Release -- ARM64 -- -- -- Release -- Win32 -- -- -- Release -- x64 -- -- -- -- {34681F0D-CE45-415D-B5F2-5C662DFE3BD5} -- gmock -- Win32Proj -- 10.0.17134.0 -- true -- -- -- -- StaticLibrary -- Unicode -- false -- v141 -- -- -- StaticLibrary -- Unicode -- false -- v141 -- -- -- StaticLibrary -- Unicode -- false -- v141 -- -- -- StaticLibrary -- Unicode -- v141 -- -- -- StaticLibrary -- Unicode -- v141 -- -- -- StaticLibrary -- Unicode -- v141 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <_ProjectFileVersion>10.0.30319.1 -- -- -- $(SolutionDir)$(Platform)\$(Configuration)\ -- $(Platform)\$(Configuration)\ -- -- -- $(SolutionDir)$(Platform)\$(Configuration)\ -- $(Platform)\$(Configuration)\ -- -- -- -- Disabled -- ..\..\include;..\..;%(AdditionalIncludeDirectories) -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -- true -- EnableFastChecks -- MultiThreadedDebugDLL -- -- -- Level3 -- ProgramDatabase -- -- -- false -- -- -- -- -- Disabled -- ..\..\include;..\..;%(AdditionalIncludeDirectories) -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -- EnableFastChecks -- MultiThreadedDebugDLL -- -- -- Level3 -- ProgramDatabase -- -- -- false -- -- -- -- -- Disabled -- ..\..\include;..\..;%(AdditionalIncludeDirectories) -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -- EnableFastChecks -- MultiThreadedDebugDLL -- -- -- Level3 -- ProgramDatabase -- -- -- false -- -- -- -- -- ..\..\include;..\..;%(AdditionalIncludeDirectories) -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -- MultiThreadedDLL -- -- -- Level3 -- ProgramDatabase -- -- -- false -- -- -- -- -- ..\..\include;..\..;%(AdditionalIncludeDirectories) -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -- MultiThreadedDLL -- -- -- Level3 -- ProgramDatabase -- -- -- false -- -- -- -- -- ..\..\include;..\..;%(AdditionalIncludeDirectories) -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -- MultiThreadedDLL -- -- -- Level3 -- ProgramDatabase -- -- -- false -- -- -- -- -- -- $(GTestDir);%(AdditionalIncludeDirectories) -- $(GTestDir);%(AdditionalIncludeDirectories) -- $(GTestDir);%(AdditionalIncludeDirectories) -- $(GTestDir);%(AdditionalIncludeDirectories) -- $(GTestDir);%(AdditionalIncludeDirectories) -- $(GTestDir);%(AdditionalIncludeDirectories) -- -- -- -- -- -- -+ -+ -+ -+ -+ Debug -+ ARM64 -+ -+ -+ Debug -+ Win32 -+ -+ -+ Debug -+ x64 -+ -+ -+ Release -+ ARM64 -+ -+ -+ Release -+ Win32 -+ -+ -+ Release -+ x64 -+ -+ -+ -+ {34681F0D-CE45-415D-B5F2-5C662DFE3BD5} -+ gmock -+ Win32Proj -+ 10.0 -+ true -+ -+ -+ -+ StaticLibrary -+ Unicode -+ false -+ v142 -+ -+ -+ StaticLibrary -+ Unicode -+ false -+ v142 -+ -+ -+ StaticLibrary -+ Unicode -+ false -+ v142 -+ -+ -+ StaticLibrary -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ Unicode -+ v142 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ <_ProjectFileVersion>10.0.30319.1 -+ -+ -+ $(SolutionDir)$(Platform)\$(Configuration)\ -+ $(Platform)\$(Configuration)\ -+ -+ -+ $(SolutionDir)$(Platform)\$(Configuration)\ -+ $(Platform)\$(Configuration)\ -+ -+ -+ -+ Disabled -+ ..\..\include;..\..;%(AdditionalIncludeDirectories) -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -+ true -+ EnableFastChecks -+ MultiThreadedDebugDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ false -+ -+ -+ -+ -+ Disabled -+ ..\..\include;..\..;%(AdditionalIncludeDirectories) -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -+ EnableFastChecks -+ MultiThreadedDebugDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ false -+ -+ -+ -+ -+ Disabled -+ ..\..\include;..\..;%(AdditionalIncludeDirectories) -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -+ EnableFastChecks -+ MultiThreadedDebugDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ false -+ -+ -+ -+ -+ ..\..\include;..\..;%(AdditionalIncludeDirectories) -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -+ MultiThreadedDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ false -+ -+ -+ -+ -+ ..\..\include;..\..;%(AdditionalIncludeDirectories) -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -+ MultiThreadedDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ false -+ -+ -+ -+ -+ ..\..\include;..\..;%(AdditionalIncludeDirectories) -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -+ MultiThreadedDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ false -+ -+ -+ -+ -+ -+ $(GTestDir);%(AdditionalIncludeDirectories) -+ $(GTestDir);%(AdditionalIncludeDirectories) -+ $(GTestDir);%(AdditionalIncludeDirectories) -+ $(GTestDir);%(AdditionalIncludeDirectories) -+ $(GTestDir);%(AdditionalIncludeDirectories) -+ $(GTestDir);%(AdditionalIncludeDirectories) -+ -+ -+ -+ -+ -+ - -\ No newline at end of file -diff --git a/googletest/googletest/msvc/gtest.vcxproj b/googletest/googletest/msvc/gtest.vcxproj -index 6495fbdc..9548a5d5 100644 ---- a/googletest/googletest/msvc/gtest.vcxproj -+++ b/googletest/googletest/msvc/gtest.vcxproj -@@ -1,218 +1,218 @@ -- -- -- -- -- Debug -- ARM64 -- -- -- Debug -- Win32 -- -- -- Debug -- x64 -- -- -- Release -- ARM64 -- -- -- Release -- Win32 -- -- -- Release -- x64 -- -- -- -- {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7} -- Win32Proj -- 10.0.17134.0 -- true -- -- -- -- StaticLibrary -- v141 -- Unicode -- -- -- StaticLibrary -- v141 -- Unicode -- -- -- StaticLibrary -- v141 -- Unicode -- -- -- StaticLibrary -- v141 -- Unicode -- -- -- StaticLibrary -- v141 -- Unicode -- -- -- StaticLibrary -- v141 -- Unicode -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- <_ProjectFileVersion>14.0.25431.1 -- -- -- MinimumRecommendedRules.ruleset -- -- -- -- -- MinimumRecommendedRules.ruleset -- -- -- -- -- MinimumRecommendedRules.ruleset -- -- -- -- -- MinimumRecommendedRules.ruleset -- -- -- -- -- MinimumRecommendedRules.ruleset -- -- -- -- -- MinimumRecommendedRules.ruleset -- -- -- -- -- -- Disabled -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -- true -- EnableFastChecks -- MultiThreadedDebugDLL -- -- Level3 -- EditAndContinue -- -- -- $(OutDir)gtestd.lib -- -- -- -- -- Disabled -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -- EnableFastChecks -- MultiThreadedDebugDLL -- -- -- Level3 -- ProgramDatabase -- -- -- $(OutDir)gtestd.lib -- -- -- -- -- Disabled -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -- EnableFastChecks -- MultiThreadedDebugDLL -- -- -- Level3 -- ProgramDatabase -- -- -- $(OutDir)gtestd.lib -- -- -- -- -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -- MultiThreadedDLL -- -- Level3 -- ProgramDatabase -- -- -- $(OutDir)gtest.lib -- -- -- -- -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -- MultiThreadedDLL -- -- -- Level3 -- ProgramDatabase -- -- -- $(OutDir)gtest.lib -- -- -- -- -- _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -- MultiThreadedDLL -- -- -- Level3 -- ProgramDatabase -- -- -- $(OutDir)gtest.lib -- -- -- -- -- ..;..\include;%(AdditionalIncludeDirectories) -- ..;..\include;%(AdditionalIncludeDirectories) -- ..;..\include;%(AdditionalIncludeDirectories) -- ..;..\include;%(AdditionalIncludeDirectories) -- ..;..\include;%(AdditionalIncludeDirectories) -- ..;..\include;%(AdditionalIncludeDirectories) -- -- -- -- -- -- -+ -+ -+ -+ -+ Debug -+ ARM64 -+ -+ -+ Debug -+ Win32 -+ -+ -+ Debug -+ x64 -+ -+ -+ Release -+ ARM64 -+ -+ -+ Release -+ Win32 -+ -+ -+ Release -+ x64 -+ -+ -+ -+ {C8F6C172-56F2-4E76-B5FA-C3B423B31BE7} -+ Win32Proj -+ 10.0 -+ true -+ -+ -+ -+ StaticLibrary -+ v142 -+ Unicode -+ -+ -+ StaticLibrary -+ v142 -+ Unicode -+ -+ -+ StaticLibrary -+ v142 -+ Unicode -+ -+ -+ StaticLibrary -+ v142 -+ Unicode -+ -+ -+ StaticLibrary -+ v142 -+ Unicode -+ -+ -+ StaticLibrary -+ v142 -+ Unicode -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ <_ProjectFileVersion>14.0.25431.1 -+ -+ -+ MinimumRecommendedRules.ruleset -+ -+ -+ -+ -+ MinimumRecommendedRules.ruleset -+ -+ -+ -+ -+ MinimumRecommendedRules.ruleset -+ -+ -+ -+ -+ MinimumRecommendedRules.ruleset -+ -+ -+ -+ -+ MinimumRecommendedRules.ruleset -+ -+ -+ -+ -+ MinimumRecommendedRules.ruleset -+ -+ -+ -+ -+ -+ Disabled -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -+ true -+ EnableFastChecks -+ MultiThreadedDebugDLL -+ -+ Level3 -+ EditAndContinue -+ -+ -+ $(OutDir)gtestd.lib -+ -+ -+ -+ -+ Disabled -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -+ EnableFastChecks -+ MultiThreadedDebugDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ $(OutDir)gtestd.lib -+ -+ -+ -+ -+ Disabled -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) -+ EnableFastChecks -+ MultiThreadedDebugDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ $(OutDir)gtestd.lib -+ -+ -+ -+ -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -+ MultiThreadedDLL -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ $(OutDir)gtest.lib -+ -+ -+ -+ -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -+ MultiThreadedDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ $(OutDir)gtest.lib -+ -+ -+ -+ -+ _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) -+ MultiThreadedDLL -+ -+ -+ Level3 -+ ProgramDatabase -+ -+ -+ $(OutDir)gtest.lib -+ -+ -+ -+ -+ ..;..\include;%(AdditionalIncludeDirectories) -+ ..;..\include;%(AdditionalIncludeDirectories) -+ ..;..\include;%(AdditionalIncludeDirectories) -+ ..;..\include;%(AdditionalIncludeDirectories) -+ ..;..\include;%(AdditionalIncludeDirectories) -+ ..;..\include;%(AdditionalIncludeDirectories) -+ -+ -+ -+ -+ -+ - -\ No newline at end of file -diff --git a/sqliteUWP/sqlite-uwp.vcxproj b/sqliteUWP/sqlite-uwp.vcxproj -index 69c042ea..dea6ffff 100644 ---- a/sqliteUWP/sqlite-uwp.vcxproj -+++ b/sqliteUWP/sqlite-uwp.vcxproj -@@ -1,316 +1,316 @@ -- -- -- -- -- Debug -- ARM -- -- -- Debug -- ARM64 -- -- -- Debug -- Win32 -- -- -- Debug -- x64 -- -- -- Release -- ARM -- -- -- Release -- ARM64 -- -- -- Release -- Win32 -- -- -- Release -- x64 -- -- -- -- {6883a688-89f5-424a-9bfa-50d42f691b29} -- en-US -- 14.0 -- 10.0.17134.0 -- 10.0.10240.0 -- -- -- -- StaticLibrary -- true -- v141 -- true -- -- -- StaticLibrary -- true -- v141 -- true -- -- -- StaticLibrary -- true -- v141 -- true -- -- -- StaticLibrary -- true -- v141 -- true -- -- -- StaticLibrary -- false -- true -- v141 -- -- -- StaticLibrary -- false -- true -- v141 -- -- -- StaticLibrary -- false -- true -- v141 -- -- -- StaticLibrary -- false -- true -- v141 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- false -- $(SolutionDir)$(Platform)\$(Configuration)\$(MSBuildProjectName)\ -- $(Platform)\$(Configuration)\ -- -- -- false -- $(SolutionDir)$(Platform)\$(Configuration)\$(MSBuildProjectName)\ -- $(Platform)\$(Configuration)\ -- -- -- false -- -- -- false -- -- -- false -- -- -- false -- -- -- false -- -- -- false -- -- -- -- NotUsing -- false -- true -- SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_UNICODE;UNICODE;%(PreprocessorDefinitions) -- -- $(OutDir)$(TargetName).pdb -- Default -- false -- -- -- Console -- false -- false -- -- -- false -- true -- -- -- -- -- NotUsing -- false -- true -- SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_UNICODE;UNICODE;%(PreprocessorDefinitions) -- -- MinSpace -- $(OutDir)$(TargetName).pdb -- false -- -- -- Console -- false -- false -- -- -- true -- false -- -- -- -- -- NotUsing -- false -- true -- SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) -- -- $(OutDir)$(TargetName).pdb -- Default -- false -- -- -- Console -- false -- false -- -- -- false -- true -- -- -- -- -- NotUsing -- false -- true -- SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) -- -- MinSpace -- $(OutDir)$(TargetName).pdb -- false -- -- -- Console -- false -- false -- -- -- true -- false -- -- -- -- -- NotUsing -- false -- true -- SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_UNICODE;UNICODE;%(PreprocessorDefinitions) -- -- $(OutDir)$(TargetName).pdb -- Default -- false -- -- -- Console -- false -- false -- -- -- false -- true -- -- -- -- -- NotUsing -- false -- true -- SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_UNICODE;UNICODE;%(PreprocessorDefinitions) -- -- MinSpace -- $(OutDir)$(TargetName).pdb -- false -- -- -- Console -- false -- false -- -- -- true -- false -- -- -- -- -- false -- NotUsing -- _UNICODE;UNICODE;SQLITE_OS_WINRT;%(PreprocessorDefinitions) -- false -- -- -- false -- true -- -- -- -- -- false -- NotUsing -- _UNICODE;UNICODE;SQLITE_OS_WINRT;%(PreprocessorDefinitions) -- false -- -- -- true -- false -- -- -- -- -- -- -- -- -- false -- false -- -- -- -- -- -- -+ -+ -+ -+ -+ Debug -+ ARM -+ -+ -+ Debug -+ ARM64 -+ -+ -+ Debug -+ Win32 -+ -+ -+ Debug -+ x64 -+ -+ -+ Release -+ ARM -+ -+ -+ Release -+ ARM64 -+ -+ -+ Release -+ Win32 -+ -+ -+ Release -+ x64 -+ -+ -+ -+ {6883a688-89f5-424a-9bfa-50d42f691b29} -+ en-US -+ 14.0 -+ 10.0 -+ 10.0.10240.0 -+ -+ -+ -+ StaticLibrary -+ true -+ v142 -+ true -+ -+ -+ StaticLibrary -+ true -+ v142 -+ true -+ -+ -+ StaticLibrary -+ true -+ v142 -+ true -+ -+ -+ StaticLibrary -+ true -+ v142 -+ true -+ -+ -+ StaticLibrary -+ false -+ true -+ v142 -+ -+ -+ StaticLibrary -+ false -+ true -+ v142 -+ -+ -+ StaticLibrary -+ false -+ true -+ v142 -+ -+ -+ StaticLibrary -+ false -+ true -+ v142 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ $(SolutionDir)$(Platform)\$(Configuration)\$(MSBuildProjectName)\ -+ $(Platform)\$(Configuration)\ -+ -+ -+ false -+ $(SolutionDir)$(Platform)\$(Configuration)\$(MSBuildProjectName)\ -+ $(Platform)\$(Configuration)\ -+ -+ -+ false -+ -+ -+ false -+ -+ -+ false -+ -+ -+ false -+ -+ -+ false -+ -+ -+ false -+ -+ -+ -+ NotUsing -+ false -+ true -+ SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_UNICODE;UNICODE;%(PreprocessorDefinitions) -+ -+ $(OutDir)$(TargetName).pdb -+ Default -+ false -+ -+ -+ Console -+ false -+ false -+ -+ -+ false -+ true -+ -+ -+ -+ -+ NotUsing -+ false -+ true -+ SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_UNICODE;UNICODE;%(PreprocessorDefinitions) -+ -+ MinSpace -+ $(OutDir)$(TargetName).pdb -+ false -+ -+ -+ Console -+ false -+ false -+ -+ -+ true -+ false -+ -+ -+ -+ -+ NotUsing -+ false -+ true -+ SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) -+ -+ $(OutDir)$(TargetName).pdb -+ Default -+ false -+ -+ -+ Console -+ false -+ false -+ -+ -+ false -+ true -+ -+ -+ -+ -+ NotUsing -+ false -+ true -+ SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) -+ -+ MinSpace -+ $(OutDir)$(TargetName).pdb -+ false -+ -+ -+ Console -+ false -+ false -+ -+ -+ true -+ false -+ -+ -+ -+ -+ NotUsing -+ false -+ true -+ SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_UNICODE;UNICODE;%(PreprocessorDefinitions) -+ -+ $(OutDir)$(TargetName).pdb -+ Default -+ false -+ -+ -+ Console -+ false -+ false -+ -+ -+ false -+ true -+ -+ -+ -+ -+ NotUsing -+ false -+ true -+ SQLITE_DEFAULT_AUTOVACUUM=1;SQLITE_OS_WINRT;_LIB;_UNICODE;UNICODE;%(PreprocessorDefinitions) -+ -+ MinSpace -+ $(OutDir)$(TargetName).pdb -+ false -+ -+ -+ Console -+ false -+ false -+ -+ -+ true -+ false -+ -+ -+ -+ -+ false -+ NotUsing -+ _UNICODE;UNICODE;SQLITE_OS_WINRT;%(PreprocessorDefinitions) -+ false -+ -+ -+ false -+ true -+ -+ -+ -+ -+ false -+ NotUsing -+ _UNICODE;UNICODE;SQLITE_OS_WINRT;%(PreprocessorDefinitions) -+ false -+ -+ -+ true -+ false -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ false -+ -+ -+ -+ -+ -+ - -\ No newline at end of file -diff --git a/tests/functests/FuncTests.vcxproj b/tests/functests/FuncTests.vcxproj -index 08e24b00..868a148a 100644 ---- a/tests/functests/FuncTests.vcxproj -+++ b/tests/functests/FuncTests.vcxproj -@@ -45,7 +45,7 @@ - - - {FE79FB3A-B3EF-38DF-B7A4-11277DB72B39} -- 10.0.17134.0 -+ 10.0 - Win32Proj - Win32 - FuncTests -@@ -56,37 +56,37 @@ - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - -@@ -449,15 +449,15 @@ - - - -- -+ - - - - - -- -+ - - - - -- -+ -\ No newline at end of file -diff --git a/tests/functests/FuncTests.vcxproj.filters b/tests/functests/FuncTests.vcxproj.filters -index 71dbe545..eedf3eab 100644 ---- a/tests/functests/FuncTests.vcxproj.filters -+++ b/tests/functests/FuncTests.vcxproj.filters -@@ -14,13 +14,8 @@ - - - -- -- -- -- - - -- - - - -diff --git a/tests/unittests/UnitTests.vcxproj b/tests/unittests/UnitTests.vcxproj -index 31506e77..0bff4a9f 100644 ---- a/tests/unittests/UnitTests.vcxproj -+++ b/tests/unittests/UnitTests.vcxproj -@@ -45,7 +45,7 @@ - - - {434C594F-CDE0-3690-AC0A-9ED854B74092} -- 10.0.17134.0 -+ 10.0 - Win32Proj - Win32 - UnitTests -@@ -56,37 +56,37 @@ - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - Application - false - Unicode -- v141 -+ v142 - - - -diff --git a/tests/unittests/UnitTests.vcxproj.filters b/tests/unittests/UnitTests.vcxproj.filters -index a6c9b1e0..be1ba644 100644 ---- a/tests/unittests/UnitTests.vcxproj.filters -+++ b/tests/unittests/UnitTests.vcxproj.filters -@@ -7,7 +7,6 @@ - - - -- - - - -@@ -53,11 +52,6 @@ - - - -- -- -- -- -- - - - -diff --git a/zlib/contrib/vstudio/vc14/zlibvc.vcxproj b/zlib/contrib/vstudio/vc14/zlibvc.vcxproj -index 5ff55579..77518e48 100644 ---- a/zlib/contrib/vstudio/vc14/zlibvc.vcxproj -+++ b/zlib/contrib/vstudio/vc14/zlibvc.vcxproj -@@ -1,1218 +1,1218 @@ -- -- -- -- -- Debug.vc14x.MT-sqlite -- ARM -- -- -- Debug.vc14x.MT-sqlite -- ARM64 -- -- -- Debug.vc14x.MT-sqlite -- Win32 -- -- -- Debug.vc14x.MT-sqlite -- x64 -- -- -- Debug -- ARM -- -- -- Debug -- ARM64 -- -- -- Debug -- Win32 -- -- -- Debug -- x64 -- -- -- Release.vc14x.MT-sqlite -- ARM -- -- -- Release.vc14x.MT-sqlite -- ARM64 -- -- -- Release.vc14x.MT-sqlite -- Win32 -- -- -- Release.vc14x.MT-sqlite -- x64 -- -- -- Release -- ARM -- -- -- Release -- ARM64 -- -- -- Release -- Win32 -- -- -- Release -- x64 -- -- -- -- {8FD826F8-3739-44E6-8CC8-997122E53B8D} -- zlib -- 10.0.17134.0 -- true -- -- -- -- StaticLibrary -- false -- false -- Unicode -- v141 -- -- -- StaticLibrary -- false -- false -- Unicode -- v141 -- -- -- true -- StaticLibrary -- false -- false -- Unicode -- v141 -- -- -- true -- StaticLibrary -- false -- false -- Unicode -- v141 -- -- -- true -- StaticLibrary -- false -- false -- Unicode -- v141 -- -- -- true -- StaticLibrary -- false -- false -- Unicode -- v141 -- -- -- StaticLibrary -- false -- Unicode -- v141 -- -- -- StaticLibrary -- false -- Unicode -- v141 -- -- -- true -- StaticLibrary -- false -- Unicode -- v141 -- -- -- true -- StaticLibrary -- false -- Unicode -- v141 -- -- -- true -- StaticLibrary -- false -- Unicode -- v141 -- -- -- true -- StaticLibrary -- false -- Unicode -- v141 -- -- -- StaticLibrary -- false -- false -- Unicode -- v141 -- -- -- StaticLibrary -- false -- false -- Unicode -- v141 -- -- -- StaticLibrary -- false -- Unicode -- v141 -- -- -- StaticLibrary -- false -- Unicode -- v141 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath);%(AdditionalIncludeDirectories) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath);%(AdditionalIncludeDirectories) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath);%(AdditionalIncludeDirectories) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath);%(AdditionalIncludeDirectories) -- -- -- -- -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- false -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- false -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- -- -- false -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- false -- $(VC_IncludePath);$(WindowsSDK_IncludePath) -- -- -- -- _DEBUG;%(PreprocessorDefinitions) -- true -- true -- Win32 -- $(OutDir)zlibvc.tlb -- -- -- Disabled -- ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -- WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- -- -- MultiThreadedDebugDLL -- true -- $(IntDir)zlibvc.pch -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- ProgramDatabase -- StreamingSIMDExtensions -- Guard -- -- -- _DEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:I386 %(AdditionalOptions) -- ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- .\zlibvc.def -- true -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -+ -+ -+ -+ -+ Debug.vc14x.MT-sqlite -+ ARM -+ -+ -+ Debug.vc14x.MT-sqlite -+ ARM64 -+ -+ -+ Debug.vc14x.MT-sqlite -+ Win32 -+ -+ -+ Debug.vc14x.MT-sqlite -+ x64 -+ -+ -+ Debug -+ ARM -+ -+ -+ Debug -+ ARM64 -+ -+ -+ Debug -+ Win32 -+ -+ -+ Debug -+ x64 -+ -+ -+ Release.vc14x.MT-sqlite -+ ARM -+ -+ -+ Release.vc14x.MT-sqlite -+ ARM64 -+ -+ -+ Release.vc14x.MT-sqlite -+ Win32 -+ -+ -+ Release.vc14x.MT-sqlite -+ x64 -+ -+ -+ Release -+ ARM -+ -+ -+ Release -+ ARM64 -+ -+ -+ Release -+ Win32 -+ -+ -+ Release -+ x64 -+ -+ -+ -+ {8FD826F8-3739-44E6-8CC8-997122E53B8D} -+ zlib -+ 10.0 -+ true -+ -+ -+ -+ StaticLibrary -+ false -+ false -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ false -+ false -+ Unicode -+ v142 -+ -+ -+ true -+ StaticLibrary -+ false -+ false -+ Unicode -+ v142 -+ -+ -+ true -+ StaticLibrary -+ false -+ false -+ Unicode -+ v142 -+ -+ -+ true -+ StaticLibrary -+ false -+ false -+ Unicode -+ v142 -+ -+ -+ true -+ StaticLibrary -+ false -+ false -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ false -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ false -+ Unicode -+ v142 -+ -+ -+ true -+ StaticLibrary -+ false -+ Unicode -+ v142 -+ -+ -+ true -+ StaticLibrary -+ false -+ Unicode -+ v142 -+ -+ -+ true -+ StaticLibrary -+ false -+ Unicode -+ v142 -+ -+ -+ true -+ StaticLibrary -+ false -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ false -+ false -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ false -+ false -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ false -+ Unicode -+ v142 -+ -+ -+ StaticLibrary -+ false -+ Unicode -+ v142 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath);%(AdditionalIncludeDirectories) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath);%(AdditionalIncludeDirectories) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath);%(AdditionalIncludeDirectories) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath);%(AdditionalIncludeDirectories) -+ -+ -+ -+ -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ false -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ false -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ -+ -+ false -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ false -+ $(VC_IncludePath);$(WindowsSDK_IncludePath) -+ -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ Win32 -+ $(OutDir)zlibvc.tlb -+ -+ -+ Disabled -+ ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -+ WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ -+ -+ MultiThreadedDebugDLL -+ true -+ $(IntDir)zlibvc.pch -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ ProgramDatabase -+ StreamingSIMDExtensions -+ Guard -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:I386 %(AdditionalOptions) -+ ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ .\zlibvc.def -+ true -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ - cd ..\..\masmx86 --bld_ml32.bat -- -- -- MachineX86 -- false -- -- -- -- -- _DEBUG;%(PreprocessorDefinitions) -- true -- true -- Win32 -- $(OutDir)zlibvc.tlb -- -- -- Disabled -- ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -- WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- -- -- MultiThreadedDebug -- true -- $(IntDir)zlibvc.pch -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- ProgramDatabase -- StreamingSIMDExtensions -- Guard -- -- -- _DEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:I386 %(AdditionalOptions) -- ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- .\zlibvc.def -- true -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -+bld_ml32.bat -+ -+ -+ MachineX86 -+ false -+ -+ -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ Win32 -+ $(OutDir)zlibvc.tlb -+ -+ -+ Disabled -+ ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -+ WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ -+ -+ MultiThreadedDebug -+ true -+ $(IntDir)zlibvc.pch -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ ProgramDatabase -+ StreamingSIMDExtensions -+ Guard -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:I386 %(AdditionalOptions) -+ ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ .\zlibvc.def -+ true -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ - cd ..\..\masmx86 --bld_ml32.bat -- -- -- MachineX86 -- false -- -- -- -- -- _DEBUG;%(PreprocessorDefinitions) -- true -- true -- $(OutDir)zlibvc.tlb -- -- -- Disabled -- %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -- ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- -- -- MultiThreadedDebugDLL -- true -- $(IntDir)zlibvc.pch -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- ProgramDatabase -- Guard -- -- -- _DEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:ARM %(AdditionalOptions) -- %(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- .\zlibvc.def -- true -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -- -- -- MachineARM -- false -- -- -- -- -- _DEBUG;%(PreprocessorDefinitions) -- true -- true -- $(OutDir)zlibvc.tlb -- -- -- Disabled -- %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -- ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- -- -- MultiThreadedDebugDLL -- true -- $(IntDir)zlibvc.pch -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- ProgramDatabase -- Guard -- -- -- _DEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:ARM64 %(AdditionalOptions) -- %(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- .\zlibvc.def -- true -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -- -- MachineARM64 -- false -- -- -- -- -- _DEBUG;%(PreprocessorDefinitions) -- true -- true -- $(OutDir)zlibvc.tlb -- -- -- Disabled -- %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -- ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- -- -- MultiThreadedDebug -- true -- $(IntDir)zlibvc.pch -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- ProgramDatabase -- Guard -- -- -- _DEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:ARM %(AdditionalOptions) -- %(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- .\zlibvc.def -- true -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -- -- -- MachineARM -- false -- -- -- -- -- _DEBUG;%(PreprocessorDefinitions) -- true -- true -- $(OutDir)zlibvc.tlb -- -- -- Disabled -- %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -- ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- -- -- MultiThreadedDebug -- true -- $(IntDir)zlibvc.pch -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- ProgramDatabase -- Guard -- -- -- _DEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:ARM64 %(AdditionalOptions) -- %(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- .\zlibvc.def -- true -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -- -- MachineARM64 -- false -- -- -- -- -- NDEBUG;%(PreprocessorDefinitions) -- true -- true -- Win32 -- $(OutDir)zlibvc.tlb -- -- -- OnlyExplicitInline -- ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -- WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- true -- -- -- MultiThreadedDLL -- true -- true -- $(IntDir)zlibvc.pch -- All -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- true -- Speed -- true -- StreamingSIMDExtensions -- false -- Guard -- -- -- NDEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:I386 %(AdditionalOptions) -- ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- false -- .\zlibvc.def -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -+bld_ml32.bat -+ -+ -+ MachineX86 -+ false -+ -+ -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ $(OutDir)zlibvc.tlb -+ -+ -+ Disabled -+ %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -+ ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ -+ -+ MultiThreadedDebugDLL -+ true -+ $(IntDir)zlibvc.pch -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ ProgramDatabase -+ Guard -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:ARM %(AdditionalOptions) -+ %(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ .\zlibvc.def -+ true -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ -+ -+ -+ MachineARM -+ false -+ -+ -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ $(OutDir)zlibvc.tlb -+ -+ -+ Disabled -+ %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -+ ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ -+ -+ MultiThreadedDebugDLL -+ true -+ $(IntDir)zlibvc.pch -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ ProgramDatabase -+ Guard -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:ARM64 %(AdditionalOptions) -+ %(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ .\zlibvc.def -+ true -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ -+ -+ MachineARM64 -+ false -+ -+ -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ $(OutDir)zlibvc.tlb -+ -+ -+ Disabled -+ %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -+ ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ -+ -+ MultiThreadedDebug -+ true -+ $(IntDir)zlibvc.pch -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ ProgramDatabase -+ Guard -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:ARM %(AdditionalOptions) -+ %(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ .\zlibvc.def -+ true -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ -+ -+ -+ MachineARM -+ false -+ -+ -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ $(OutDir)zlibvc.tlb -+ -+ -+ Disabled -+ %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -+ ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ -+ -+ MultiThreadedDebug -+ true -+ $(IntDir)zlibvc.pch -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ ProgramDatabase -+ Guard -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:ARM64 %(AdditionalOptions) -+ %(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ .\zlibvc.def -+ true -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ -+ -+ MachineARM64 -+ false -+ -+ -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ Win32 -+ $(OutDir)zlibvc.tlb -+ -+ -+ OnlyExplicitInline -+ ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -+ WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ true -+ -+ -+ MultiThreadedDLL -+ true -+ true -+ $(IntDir)zlibvc.pch -+ All -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ true -+ Speed -+ true -+ StreamingSIMDExtensions -+ false -+ Guard -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:I386 %(AdditionalOptions) -+ ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ false -+ .\zlibvc.def -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ - cd ..\..\masmx86 --bld_ml32.bat -- -- -- MachineX86 -- false -- -- -- -- -- NDEBUG;%(PreprocessorDefinitions) -- true -- true -- Win32 -- $(OutDir)zlibvc.tlb -- -- -- OnlyExplicitInline -- ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -- WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- true -- -- -- MultiThreaded -- true -- true -- $(IntDir)zlibvc.pch -- All -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- StreamingSIMDExtensions -- false -- Guard -- -- -- NDEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:I386 %(AdditionalOptions) -- ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- false -- .\zlibvc.def -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -+bld_ml32.bat -+ -+ -+ MachineX86 -+ false -+ -+ -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ Win32 -+ $(OutDir)zlibvc.tlb -+ -+ -+ OnlyExplicitInline -+ ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -+ WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ true -+ -+ -+ MultiThreaded -+ true -+ true -+ $(IntDir)zlibvc.pch -+ All -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ StreamingSIMDExtensions -+ false -+ Guard -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:I386 %(AdditionalOptions) -+ ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ false -+ .\zlibvc.def -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ - cd ..\..\masmx86 --bld_ml32.bat -- -- -- MachineX86 -- false -- -- -- -- -- NDEBUG;%(PreprocessorDefinitions) -- true -- true -- $(OutDir)zlibvc.tlb -- -- -- OnlyExplicitInline -- %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -- ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- true -- -- -- MultiThreadedDLL -- true -- true -- $(IntDir)zlibvc.pch -- All -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- true -- Speed -- true -- NotSet -- false -- Guard -- -- -- NDEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:ARM %(AdditionalOptions) -- %(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- false -- .\zlibvc.def -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -- -- -- MachineARM -- false -- -- -- -- -- NDEBUG;%(PreprocessorDefinitions) -- true -- true -- $(OutDir)zlibvc.tlb -- -- -- OnlyExplicitInline -- %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -- ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- true -- -- -- MultiThreadedDLL -- true -- true -- $(IntDir)zlibvc.pch -- All -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- true -- Speed -- true -- NotSet -- false -- Guard -- -- -- NDEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:ARM64 %(AdditionalOptions) -- %(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- false -- .\zlibvc.def -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -- -- MachineARM64 -- false -- -- -- -- -- NDEBUG;%(PreprocessorDefinitions) -- true -- true -- $(OutDir)zlibvc.tlb -- -- -- OnlyExplicitInline -- %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -- ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- true -- -- -- MultiThreaded -- true -- true -- $(IntDir)zlibvc.pch -- All -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- false -- Guard -- -- -- NDEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:ARM %(AdditionalOptions) -- %(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- false -- .\zlibvc.def -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -- -- -- MachineARM -- false -- -- -- -- -- NDEBUG;%(PreprocessorDefinitions) -- true -- true -- $(OutDir)zlibvc.tlb -- -- -- OnlyExplicitInline -- %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -- ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -- true -- -- -- MultiThreaded -- true -- true -- $(IntDir)zlibvc.pch -- All -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- false -- Guard -- -- -- NDEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- /MACHINE:ARM64 %(AdditionalOptions) -- %(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- false -- .\zlibvc.def -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- false -- -- -- $(OutDir)zlib.lib -- -- -- -- MachineARM64 -- false -- -- -- -- -- _DEBUG;%(PreprocessorDefinitions) -- true -- true -- X64 -- $(OutDir)zlibvc.tlb -- -- -- Disabled -- ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -- WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) -- -- -- MultiThreadedDebugDLL -- true -- $(IntDir)zlibvc.pch -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- ProgramDatabase -- StreamingSIMDExtensions2 -- Guard -- -- -- _DEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- .\zlibvc.def -- true -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- $(OutDir)zlib.lib -- MachineX64 -- -- -+bld_ml32.bat -+ -+ -+ MachineX86 -+ false -+ -+ -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ $(OutDir)zlibvc.tlb -+ -+ -+ OnlyExplicitInline -+ %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -+ ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ true -+ -+ -+ MultiThreadedDLL -+ true -+ true -+ $(IntDir)zlibvc.pch -+ All -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ true -+ Speed -+ true -+ NotSet -+ false -+ Guard -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:ARM %(AdditionalOptions) -+ %(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ false -+ .\zlibvc.def -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ -+ -+ -+ MachineARM -+ false -+ -+ -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ $(OutDir)zlibvc.tlb -+ -+ -+ OnlyExplicitInline -+ %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -+ ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ true -+ -+ -+ MultiThreadedDLL -+ true -+ true -+ $(IntDir)zlibvc.pch -+ All -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ true -+ Speed -+ true -+ NotSet -+ false -+ Guard -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:ARM64 %(AdditionalOptions) -+ %(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ false -+ .\zlibvc.def -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ -+ -+ MachineARM64 -+ false -+ -+ -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ $(OutDir)zlibvc.tlb -+ -+ -+ OnlyExplicitInline -+ %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -+ ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ true -+ -+ -+ MultiThreaded -+ true -+ true -+ $(IntDir)zlibvc.pch -+ All -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ false -+ Guard -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:ARM %(AdditionalOptions) -+ %(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ false -+ .\zlibvc.def -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ -+ -+ -+ MachineARM -+ false -+ -+ -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ $(OutDir)zlibvc.tlb -+ -+ -+ OnlyExplicitInline -+ %(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\ -+ ARCH_ARM;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) -+ true -+ -+ -+ MultiThreaded -+ true -+ true -+ $(IntDir)zlibvc.pch -+ All -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ false -+ Guard -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ /MACHINE:ARM64 %(AdditionalOptions) -+ %(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ false -+ .\zlibvc.def -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ false -+ -+ -+ $(OutDir)zlib.lib -+ -+ -+ -+ MachineARM64 -+ false -+ -+ -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ X64 -+ $(OutDir)zlibvc.tlb -+ -+ -+ Disabled -+ ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -+ WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) -+ -+ -+ MultiThreadedDebugDLL -+ true -+ $(IntDir)zlibvc.pch -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ ProgramDatabase -+ StreamingSIMDExtensions2 -+ Guard -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ .\zlibvc.def -+ true -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ $(OutDir)zlib.lib -+ MachineX64 -+ -+ - cd ..\..\contrib\masmx64 --bld_ml64.bat -- -- -- false -- -- -- -- -- _DEBUG;%(PreprocessorDefinitions) -- true -- true -- X64 -- $(OutDir)zlibvc.tlb -- -- -- Disabled -- ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -- _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) -- -- -- MultiThreadedDebug -- true -- $(IntDir)zlibvc.pch -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- ProgramDatabase -- StreamingSIMDExtensions2 -- Guard -- -- -- _DEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- .\zlibvc.def -- true -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- $(OutDir)zlib.lib -- MachineX64 -- -- -+bld_ml64.bat -+ -+ -+ false -+ -+ -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ X64 -+ $(OutDir)zlibvc.tlb -+ -+ -+ Disabled -+ ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -+ _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) -+ -+ -+ MultiThreadedDebug -+ true -+ $(IntDir)zlibvc.pch -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ ProgramDatabase -+ StreamingSIMDExtensions2 -+ Guard -+ -+ -+ _DEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ .\zlibvc.def -+ true -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ $(OutDir)zlib.lib -+ MachineX64 -+ -+ - cd ..\..\contrib\masmx64 --bld_ml64.bat -- -- -- false -- -- -- -- -- NDEBUG;%(PreprocessorDefinitions) -- true -- true -- X64 -- $(OutDir)zlibvc.tlb -- -- -- OnlyExplicitInline -- ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -- WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) -- true -- -- -- MultiThreadedDLL -- true -- true -- $(IntDir)zlibvc.pch -- All -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- true -- Speed -- true -- StreamingSIMDExtensions2 -- false -- Guard -- -- -- NDEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- false -- .\zlibvc.def -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- $(OutDir)zlib.lib -- MachineX64 -- -- -+bld_ml64.bat -+ -+ -+ false -+ -+ -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ X64 -+ $(OutDir)zlibvc.tlb -+ -+ -+ OnlyExplicitInline -+ ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -+ WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) -+ true -+ -+ -+ MultiThreadedDLL -+ true -+ true -+ $(IntDir)zlibvc.pch -+ All -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ true -+ Speed -+ true -+ StreamingSIMDExtensions2 -+ false -+ Guard -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ false -+ .\zlibvc.def -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ $(OutDir)zlib.lib -+ MachineX64 -+ -+ - cd ..\..\masmx64 --bld_ml64.bat -- -- -- false -- -- -- -- -- NDEBUG;%(PreprocessorDefinitions) -- true -- true -- X64 -- $(OutDir)zlibvc.tlb -- -- -- OnlyExplicitInline -- ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -- _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) -- true -- -- -- MultiThreaded -- true -- true -- $(IntDir)zlibvc.pch -- All -- $(IntDir) -- $(IntDir) -- $(OutDir)$(TargetName).pdb -- false -- Level3 -- true -- StreamingSIMDExtensions2 -- false -- Guard -- -- -- NDEBUG;%(PreprocessorDefinitions) -- 0x040c -- -- -- ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) -- $(OutDir)zlib.lib -- true -- false -- .\zlibvc.def -- $(OutDir)zlib.pdb -- true -- $(OutDir)zlib.lib.map -- Windows -- $(OutDir)zlib.lib -- MachineX64 -- -- -+bld_ml64.bat -+ -+ -+ false -+ -+ -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ true -+ true -+ X64 -+ $(OutDir)zlibvc.tlb -+ -+ -+ OnlyExplicitInline -+ ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) -+ _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) -+ true -+ -+ -+ MultiThreaded -+ true -+ true -+ $(IntDir)zlibvc.pch -+ All -+ $(IntDir) -+ $(IntDir) -+ $(OutDir)$(TargetName).pdb -+ false -+ Level3 -+ true -+ StreamingSIMDExtensions2 -+ false -+ Guard -+ -+ -+ NDEBUG;%(PreprocessorDefinitions) -+ 0x040c -+ -+ -+ ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) -+ $(OutDir)zlib.lib -+ true -+ false -+ .\zlibvc.def -+ $(OutDir)zlib.pdb -+ true -+ $(OutDir)zlib.lib.map -+ Windows -+ $(OutDir)zlib.lib -+ MachineX64 -+ -+ - cd ..\..\masmx64 --bld_ml64.bat -- -- -- false -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -+bld_ml64.bat -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -\ No newline at end of file diff --git a/tools/ports/mstelemetry/vcpkg.json b/tools/ports/mstelemetry/vcpkg.json new file mode 100644 index 000000000..5a22c72d3 --- /dev/null +++ b/tools/ports/mstelemetry/vcpkg.json @@ -0,0 +1,29 @@ +{ + "name": "mstelemetry", + "version": "3.10.44.1", + "port-version": 0, + "description": "Microsoft 1DS C/C++ Client Telemetry Library", + "homepage": "https://github.com/microsoft/cpp_client_telemetry", + "license": "Apache-2.0", + "supports": "!uwp", + "dependencies": [ + "nlohmann-json", + "sqlite3", + "zlib", + { + "name": "curl", + "features": [ + "ssl" + ], + "platform": "!windows & !osx & !ios & !android" + }, + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ] +} diff --git a/wrappers/obj-c/ODWLogger.mm b/wrappers/obj-c/ODWLogger.mm index 594603390..ee6b3ad25 100644 --- a/wrappers/obj-c/ODWLogger.mm +++ b/wrappers/obj-c/ODWLogger.mm @@ -9,8 +9,20 @@ #import "ODWLogConfiguration.h" #import "ODWSemanticContext.h" #import "ODWSemanticContext_private.h" + +#if __has_include("PrivacyGuard.hpp") +#define MATSDK_OBJC_PRIVACYGUARD_AVAILABLE 1 #import "ODWPrivacyGuard_private.h" +#else +#define MATSDK_OBJC_PRIVACYGUARD_AVAILABLE 0 +#endif + +#if __has_include("Sanitizer.hpp") +#define MATSDK_OBJC_SANITIZER_AVAILABLE 1 #import "ODWSanitizer_private.h" +#else +#define MATSDK_OBJC_SANITIZER_AVAILABLE 0 +#endif #include "EventProperties.hpp" @@ -411,17 +423,35 @@ void PerformActionWithCppExceptionsCatch(void (^block)()) } -(void)initializePrivacyGuardWithODWPrivacyGuardInitConfig:(ODWPrivacyGuardInitConfig *)initConfigObject -{ +{ +#if MATSDK_OBJC_PRIVACYGUARD_AVAILABLE [ODWPrivacyGuard initializePrivacyGuard:_wrappedLogger withODWPrivacyGuardInitConfig:initConfigObject]; +#else + (void)initConfigObject; + [ODWLogger traceException:"Privacy Guard is not available in this build."]; +#endif } -(void)initializeSanitizerWithODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject { +#if MATSDK_OBJC_SANITIZER_AVAILABLE [ODWSanitizer initializeSanitizer:_wrappedLogger withODWSanitizerInitConfig:initConfigObject]; +#else + (void)initConfigObject; + [ODWLogger traceException:"Sanitizer is not available in this build."]; +#endif } -(void)initializeSanitizerWithODWSanitizerInitConfig:(ODWSanitizerInitConfig *)initConfigObject urlDomains:(NSArray *)urlDomains emailDomains:(NSArray *)emailDomains analyzerOptions:(int)analyzerOptions { +#if MATSDK_OBJC_SANITIZER_AVAILABLE [ODWSanitizer initializeSanitizer:_wrappedLogger withODWSanitizerInitConfig:initConfigObject urlDomains:urlDomains emailDomains:emailDomains analyzerOptions:analyzerOptions]; +#else + (void)initConfigObject; + (void)urlDomains; + (void)emailDomains; + (void)analyzerOptions; + [ODWLogger traceException:"Sanitizer is not available in this build."]; +#endif } @end diff --git a/wrappers/swift/Package.swift b/wrappers/swift/Package.swift index 1b4136bcc..db5a19275 100644 --- a/wrappers/swift/Package.swift +++ b/wrappers/swift/Package.swift @@ -2,6 +2,45 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription +import Foundation + +let packageDirectory = URL(fileURLWithPath: #filePath).deletingLastPathComponent() + +func moduleExists(_ relativePath: String) -> Bool { + FileManager.default.fileExists(atPath: packageDirectory.appendingPathComponent(relativePath).standardizedFileURL.path) +} + +let hasDiagnosticDataViewer = moduleExists("../../lib/modules/dataviewer") +let hasPrivacyGuard = moduleExists("../../lib/modules/privacyguard") +let hasSanitizer = moduleExists("../../lib/modules/sanitizer") + +var excludedSources: [String] = [] +var swiftSettings: [SwiftSetting] = [] + +if hasDiagnosticDataViewer { + swiftSettings.append(.define("MATSDK_DATAVIEWER_AVAILABLE")) +} else { + excludedSources.append("DiagnosticDataViewer.swift") +} + +if hasPrivacyGuard { + swiftSettings.append(.define("MATSDK_PRIVACYGUARD_AVAILABLE")) +} else { + excludedSources.append(contentsOf: [ + "CommonDataContext.swift", + "PrivacyGuard.swift", + "PrivacyGuardInitConfig.swift", + ]) +} + +if hasSanitizer { + swiftSettings.append(.define("MATSDK_SANITIZER_AVAILABLE")) +} else { + excludedSources.append(contentsOf: [ + "Sanitizer.swift", + "SanitizerInitConfig.swift", + ]) +} let package = Package( name: "OneDSSwiftWrapper", @@ -21,8 +60,11 @@ let package = Package( .target( name: "OneDSSwift", dependencies: [], + path: "Sources/OneDSSwift", + exclude: excludedSources, cSettings: [ .headerSearchPath("../../Modules/") - ]), + ], + swiftSettings: swiftSettings), ] ) diff --git a/wrappers/swift/Sources/OneDSSwift/Logger.swift b/wrappers/swift/Sources/OneDSSwift/Logger.swift index 4821df3b6..04a9c1497 100644 --- a/wrappers/swift/Sources/OneDSSwift/Logger.swift +++ b/wrappers/swift/Sources/OneDSSwift/Logger.swift @@ -137,10 +137,12 @@ public final class Logger { /** Initializes and gets an instance of Privacy Guard. - */ + */ + #if MATSDK_PRIVACYGUARD_AVAILABLE public func apply(config initConfigObject: PrivacyGuardInitConfig) { odwLogger.initializePrivacyGuard(with: initConfigObject.getODWPrivacyGuardInitConfig()) } + #endif // MARK: Set Context methods