Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
acaf9c5
move jwk above verifier
kleinmrk Feb 23, 2022
89b4e8a
validate claims in separate method
kleinmrk Feb 23, 2022
0cadf3d
read rsa public key from JWK
kleinmrk Feb 1, 2022
7a735e7
add allow_key interface
kleinmrk Mar 3, 2022
a631f06
add interfaces to set pkeys directly to ECDSA and PSS algorithms
kleinmrk Apr 3, 2022
58fe6bc
prevent duplicate lookup when searching for verification algorithm
kleinmrk Apr 10, 2022
70c9a0c
enable user defined base64 decoding function
kleinmrk Apr 11, 2022
bb1409a
do not use std::make_unique
kleinmrk Apr 11, 2022
ea8f066
enable user defined base64 decoding function
kleinmrk Apr 23, 2022
55b5b14
move supported algorithms to the verifier class
kleinmrk Apr 23, 2022
07a2f64
:outbox_tray: Do not embed nlohmann::json directly, use find_package …
sjanel Oct 3, 2022
95b3dbf
:lock: Bump OpenSSL to latest releases (#255)
prince-chrismc Oct 3, 2022
5032d59
:broom: Removing extra exception aliases (#257)
prince-chrismc Oct 5, 2022
bdc1a07
:outbox_tray: Use nlohmann_json tar release (#259)
Thalhammer Oct 9, 2022
aac4b62
Add helpers to some crypto APIs that vary by version (#256)
prince-chrismc Oct 11, 2022
74abd24
NuGet Pkg using GitHub Actions (#262)
diogo-strube Oct 19, 2022
8e0fb8e
Fix Nuget workflow (#264)
prince-chrismc Oct 19, 2022
02e94ca
:arrow_double_up: Update clang-format to 14.0, pin version (#266)
Thalhammer Oct 23, 2022
24953a6
:construction_worker: Cache cmake for min-req CI (#267)
Thalhammer Oct 23, 2022
03ad09b
:arrow_up: Update tested JSON libraries (#260)
prince-chrismc Oct 24, 2022
fb8fe65
Refactor traits validation to reduce code bloat (#261)
prince-chrismc Oct 31, 2022
649530a
:arrow_up: Upgrade various ci packages being deprecated soon (#268)
Thalhammer Oct 31, 2022
9730001
:lipstick: Cast der_signature.length() to 'long' to silence compile w…
gizmocuz Nov 3, 2022
aca3217
Update README.md (#269)
Thalhammer Nov 5, 2022
73f2341
Fix typo in readme (#276)
sjanel Jan 15, 2023
c2b43e6
Added convenience function for binary DER to PEM (#283)
dennisyakovlev Mar 14, 2023
a068ebd
Fix build with GCC 13 (#287)
hlounent Apr 22, 2023
4e3dd40
Replace deprecated wstring_convert (#290)
JonasBorchelt May 16, 2023
ad08c68
Move gcc 4.8 tests to docker image (#292)
prince-chrismc May 26, 2023
6fed66d
Corrected a few typos (#297)
criadoperez Jul 25, 2023
ce1f9df
Fix warning vla-extension by changing MB_CUR_MAX into MB_LEN_MAX whic…
sjanel Aug 12, 2023
0e3d6a1
Fix gcc-12 compilation error (#312)
sjanel Nov 26, 2023
61de685
Add a test for ubsan with C++20 (#315)
prince-chrismc Dec 1, 2023
53fb5e1
New docs for signing tokens (#316)
prince-chrismc Dec 1, 2023
08bcf77
Set version to 0.7.0 (#299)
prince-chrismc Dec 10, 2023
8cb307a
Remove duplicated key handlers (#318)
prince-chrismc Dec 12, 2023
65cda08
Implemented JsonCPP Traits (#317)
cjserio Dec 16, 2023
ed98dc1
Update tests to include jsoncpp trait (#320)
prince-chrismc Dec 21, 2023
953aab6
Add helper for making RSA key from exponent and modulus (#307)
prince-chrismc Dec 26, 2023
a1ac7a0
Add set_expires_in and set_issued_now methods (#322)
bugdea1er Dec 30, 2023
3ddac0c
Documentation Refresh (#323)
prince-chrismc Jan 10, 2024
3f178ce
Use built-in openssl from action's on windows (#325)
prince-chrismc Jan 17, 2024
8ed685e
Bump GitHub Actions to latest versions (#326)
prince-chrismc Jan 23, 2024
59cb1e6
Upload archives with source code on release (#324)
prince-chrismc Jan 23, 2024
3e029c7
Minor cleanup: remove unused header (#329)
ErwanLegrand Feb 6, 2024
364a557
Fix MSVC 32bit compiler warning (#331)
garethsb Feb 17, 2024
bd682ed
Fix demo code in README.md (#336)
Yurunsoft Mar 31, 2024
d53e013
Find nlohmann_json dependency only when required (#342)
justend29 Apr 20, 2024
e9cd684
Add token format test from #341 (#343)
prince-chrismc Apr 20, 2024
f698216
Add addition CMake "run" targets to simplify calling exes (#344)
prince-chrismc Apr 22, 2024
1611f58
Add a test for how to cache the jwk (#345)
prince-chrismc Apr 22, 2024
461162c
Default constructor for jwks object (#346)
justend29 Apr 24, 2024
0d03bc5
Support new Action macOS Runners (#347)
prince-chrismc Apr 27, 2024
a6927cb
Add support for CMake Presets (#348)
prince-chrismc Jun 15, 2024
3376880
Disable gcc-4.8 since node20 is now required (#356)
prince-chrismc Jul 18, 2024
b36e8a9
Jsoncpp traits no longer uses deprecated Reader (#357)
kiddigital Jul 29, 2024
a968dfe
Fix build and tests for wolfSSL (#352)
julek-wolfssl Jul 29, 2024
c870903
Add helper for making EC key from components (#358)
tomhughes Aug 9, 2024
83703d7
Add testing with RSA keys encrypted with a passphrase (#360)
prince-chrismc Sep 2, 2024
6dd190d
Update CMakeLists.txt (#365)
dantti Nov 2, 2024
59cdb43
Refactor base64 decoding to use a lookup table (#364)
ItsAMeMarcel Nov 17, 2024
71c3d36
Ensure array_type has front() method + fix array_type on jsoncpp (#361)
omar-mohamed-khallaf Nov 17, 2024
482f4f1
:arrow_up: Update Thalhammer/patch-generator-action (#370)
Thalhammer Feb 25, 2025
e71e0c2
Update version to 0.7.1 (#373)
prince-chrismc Mar 10, 2025
f54fe2b
Fix as_date: Avoid narrowing conversion, addressing C4244 warning (#378)
ambiennt May 13, 2025
82e5dae
Update jsoncons trait to support v1 release (#375)
dmazzella May 13, 2025
d3b93ef
update trait dependencies to support CMake v4 (#379)
dmazzella May 13, 2025
5a4c6eb
Fix linter error (#381)
prince-chrismc May 13, 2025
0ab9469
Update workflows for new GitHub Action Runner Images (#382)
prince-chrismc May 13, 2025
9f07905
Support passing ssl library key handles to algorithms (#369)
sandro97git May 14, 2025
0c676f8
:construction_worker: Update CMP0135 to new behaviour (#385)
Thalhammer May 27, 2025
cf0dab1
Fix error in CMake config-file package (#387)
eaaltonen Jun 19, 2025
3972ac2
CMake: synchronize cmake_minimum_required from main CMakeLists.txt (#…
olifre Oct 25, 2025
7fc762d
Migrate time_t to chrono equivalents (#401)
MarchMore Dec 1, 2025
b89a5b1
Fix `set_expires_in` not accepting non-default `Period` (#402)
bugdea1er Dec 29, 2025
b0ea29a
AppVeyor Warnings (#403)
JurgenLB Dec 29, 2025
0b4fece
Cast data size to unsigned int (#405)
JurgenLB Feb 9, 2026
ca96081
Bump OpenSSL versions in CI configuration and documentation (#406)
prince-chrismc Feb 16, 2026
91848ad
Additional Appveyor warnings (#408)
JurgenLB Feb 16, 2026
179beb3
:arrow_up: Update LibreSSL version up to 4.2.1 (#410)
prince-chrismc Feb 17, 2026
971b897
:key: Support Ed25519 for LibreSSL 3.7.1+ (#407)
rnouri-steinberg Feb 17, 2026
c5a1fb5
:scroll: Separated install scripts for jsonsonc. libressl, and wolfss…
prince-chrismc Feb 18, 2026
2e16efe
:floppy_disk: Fix CMake cache key to support both runner and containe…
prince-chrismc Feb 18, 2026
6a0a9a2
:arrow_up: Update tests to the latest versions of OpenSSL (#413)
prince-chrismc Feb 21, 2026
58622a3
:label: Set version to 0.7.2 + Document release steps (#414)
prince-chrismc Feb 26, 2026
5ee8567
Add Glaze Support (#417)
prince-chrismc Mar 3, 2026
75dd7aa
:chart_with_upwards_trend: Expanding testing coverage to all JSON tra…
prince-chrismc Mar 7, 2026
b12ab28
:bulb: Reorder and add C++ tools in extensions.json (#420)
prince-chrismc Mar 7, 2026
df914eb
:mirror: Add support for reflect-cpp's JSON (#421)
prince-chrismc Mar 10, 2026
a751ea2
:seedling: Utilize gtest's TypeParam to change traits implementation …
prince-chrismc Mar 18, 2026
78c0791
:small_orange_diamond: MSVC warnings (#422)
JurgenLB Mar 24, 2026
3e037df
:broom: Improve linters for traits (#424)
prince-chrismc Mar 25, 2026
68d14ef
Merge branch 'master' into support-loading-jwk-from-json
prince-chrismc Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ Checks: '-*,
readability-*,
-readability-magic-numbers,
-readability-braces-around-statements,
-readability-uppercase-literal-suffix'
-readability-uppercase-literal-suffix,
-misc-include-cleaner'

CheckOptions:
- key: readability-identifier-naming.TypedefCase
Expand Down
3 changes: 3 additions & 0 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ body:
label: Version
description: What version of our software are you running?
options:
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.0
- 0.5.2
- Older (please let us know if the "What happened" box)
Expand Down
7 changes: 7 additions & 0 deletions .github/actions/generate-defaults-dot-h/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
name: "Render `defaults.h` Template"
description: "Generate all the `defaults.h` header file for JSON libraries"
runs:
using: composite
steps:
- run: ${{ github.action_path }}/configure-traits.sh
shell: bash
38 changes: 38 additions & 0 deletions .github/actions/generate-defaults-dot-h/configure-traits.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash
# Trait metadata configuration for generating defaults.h files
# Maps trait names to their library information

set -e # Exit on error

# Define traits metadata as pipe-delimited strings
# Format: TRAITS_NAME|LIBRARY_NAME|LIBRARY_URL|DISABLE_DEFAULT_TRAITS
JWT_TRAITS_METADATA=(
"kazuho_picojson|picojson|https://github.com/kazuho/picojson|false"
"nlohmann_json|JSON for Modern C++|https://github.com/nlohmann/json|true"
"boost_json|Boost.JSON|https://github.com/boostorg/json|true"
"danielaparker_jsoncons|jsoncons|https://github.com/danielaparker/jsoncons|true"
"open_source_parsers_jsoncpp|jsoncpp|https://github.com/open-source-parsers/jsoncpp|true"
"glaze_json|Glaze|https://github.com/stephenberry/glaze|true"
"reflectcpp_json|ReflectCpp|https://github.com/getml/reflect-cpp|true"
)

# Function to configure traits defaults
configure_traits_defaults() {
for trait_meta in "${JWT_TRAITS_METADATA[@]}"; do
# Split the metadata by pipe delimiter
IFS='|' read -r TRAITS_NAME LIBRARY_NAME LIBRARY_URL DISABLE_DEFAULT_TRAITS <<< "$trait_meta"

# Call the CMake script to generate defaults.h for this trait
if ! cmake \
-DTRAITS_NAME="$TRAITS_NAME" \
-DLIBRARY_NAME="$LIBRARY_NAME" \
-DLIBRARY_URL="$LIBRARY_URL" \
-DDISABLE_DEFAULT_TRAITS="$DISABLE_DEFAULT_TRAITS" \
-P "cmake/generate-defaults-h.cmake"; then
echo "::error::Failed to configure defaults.h for $TRAITS_NAME"
fi
done
}

# Execute the configuration
configure_traits_defaults
9 changes: 2 additions & 7 deletions .github/actions/install/boost-json/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,9 @@ inputs:
version:
description: The desired Boost.JSON version to install
required: false
default: "1.77.0"
default: "1.78.0"
runs:
using: composite
steps:
- run: |
cd /tmp
wget https://github.com/boostorg/json/archive/boost-${{ inputs.version }}.tar.gz
tar -zxf /tmp/boost-${{ inputs.version }}.tar.gz
cd json-boost-${{ inputs.version }}
sudo cp -vR include/boost /usr/local/include
- run: ${{ github.action_path }}/install-boost-json.sh ${{ inputs.version }}
shell: bash
44 changes: 44 additions & 0 deletions .github/actions/install/boost-json/install-boost-json.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env bash
# Install Boost.JSON library with specified version

set -e # Exit on error

# Check if version is provided
if [[ -z "$1" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
echo "Usage: $0 VERSION"
echo ""
echo "Install Boost.JSON library"
echo ""
echo "Arguments:"
echo " VERSION Boost.JSON version to install (required)"
echo ""
echo "Examples:"
echo " $0 1.78.0"
exit 1
fi

BOOST_JSON_VERSION="$1"
INSTALL_DIR="/tmp"
BUILD_DIR="${INSTALL_DIR}/json-boost-${BOOST_JSON_VERSION}"

echo "Installing Boost.JSON v${BOOST_JSON_VERSION}..."

# Download
echo "Downloading Boost.JSON v${BOOST_JSON_VERSION}..."
cd "${INSTALL_DIR}"
wget -q "https://github.com/boostorg/json/archive/boost-${BOOST_JSON_VERSION}.tar.gz"

# Extract
echo "Extracting archive..."
tar -zxf "boost-${BOOST_JSON_VERSION}.tar.gz"

# Install
cd "${BUILD_DIR}"
sudo cp -vR include/boost /usr/local/include

# Cleanup
echo "Cleaning up..."
rm -f "${INSTALL_DIR}/boost-${BOOST_JSON_VERSION}.tar.gz"
rm -rf "${BUILD_DIR}"

echo "✓ Boost.JSON v${BOOST_JSON_VERSION} installed successfully!"
58 changes: 58 additions & 0 deletions .github/actions/install/cmake/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Install CMake
description: Download, Build and Cache CMake
inputs:
version:
description: The desired CMake version to install
required: true
url:
description: "The corresponding URL to download the source code from"
required: true
cache-key-extra:
description: "The key to use for caching the built CMake. Defaults to a key based on the version and runner architecture."
required: false
default: "host"
runs:
using: composite
steps:
# Taken from https://github.com/actions/setup-go/blob/a5f9b05d2d216f63e13859e0d847461041025775/README.md?plain=1#L343-L365
- name: Normalize runner architecture (Linux/macOS)
if: runner.os != 'Windows'
shell: bash
run: echo "ARCH=$(echo '${{ runner.arch }}' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
- name: Normalize runner architecture (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$arch = "${{ runner.arch }}".ToLower()
echo "ARCH=$arch" | Out-File $env:GITHUB_ENV -Append
- name: Set cache OS suffix # Might not be set when inside a container
shell: bash
run: echo "CACHE_OS_SUFFIX=$ImageOS-" >> $GITHUB_ENV
- name: Cache CMake
id: cache-cmake
uses: actions/cache@v4
with:
path: cmake-${{ inputs.version }}
key: ${{ runner.os }}-${{ env.ARCH }}-${{ env.CACHE_OS_SUFFIX }}${{ inputs.cache-key-extra }}-cmake-${{ inputs.version }}

- name: Build cmake
if: steps.cache-cmake.outputs.cache-hit != 'true'
run: |
wget ${{ inputs.url }}
tar -zxf cmake-${{ inputs.version }}.tar.gz
cd cmake-${{ inputs.version }}
./bootstrap
make -j $(nproc)
shell: bash
- name: Install cmake
run: |
cd cmake-${{ inputs.version }}
# Depending if we run in on a GitHub Actions or from within a Docker image we have different permissions
if [[ $EUID > 0 ]]; then
# If we are not root then we need to sudo
sudo make install
else
# Default docker image does not have users setup so we are only root and can not sudo
make install
fi
shell: bash
10 changes: 2 additions & 8 deletions .github/actions/install/danielaparker-jsoncons/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,9 @@ inputs:
version:
description: The desired jsoncons version to install
required: false
default: "0.167.1"
default: "1.3.2"
runs:
using: composite
steps:
- run: |
cd /tmp
wget https://github.com/danielaparker/jsoncons/archive/v${{ inputs.version }}.tar.gz
tar -zxf /tmp/v${{ inputs.version }}.tar.gz
cd jsoncons-${{ inputs.version }}
cmake .
sudo cmake --install .
- run: ${{ github.action_path }}/install-jsoncons.sh ${{ inputs.version }}
shell: bash
49 changes: 49 additions & 0 deletions .github/actions/install/danielaparker-jsoncons/install-jsoncons.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# Install jsoncons library with specified version

set -e # Exit on error

# Check if version is provided
if [[ -z "$1" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
echo "Usage: $0 VERSION"
echo ""
echo "Install jsoncons library"
echo ""
echo "Arguments:"
echo " VERSION jsoncons version to install (required)"
echo ""
echo "Examples:"
echo " $0 1.5.0"
echo " $0 1.4.3"
echo " $0 1.3.2"
exit 1
fi

# Configuration
JSONCONS_VERSION="$1"
INSTALL_DIR="/tmp"
BUILD_DIR="${INSTALL_DIR}/jsoncons-${JSONCONS_VERSION}"

echo "Installing jsoncons v${JSONCONS_VERSION}..."

# Download
echo "Downloading jsoncons v${JSONCONS_VERSION}..."
cd "${INSTALL_DIR}"
wget -q "https://github.com/danielaparker/jsoncons/archive/v${JSONCONS_VERSION}.tar.gz"

# Extract
echo "Extracting archive..."
tar -zxf "v${JSONCONS_VERSION}.tar.gz"

# Build and install
echo "Building and installing..."
cd "${BUILD_DIR}"
cmake . -DCMAKE_BUILD_TYPE=Release
sudo cmake --install .

# Cleanup
echo "Cleaning up..."
rm -f "${INSTALL_DIR}/v${JSONCONS_VERSION}.tar.gz"
rm -rf "${BUILD_DIR}"

echo "✓ jsoncons v${JSONCONS_VERSION} installed successfully!"
12 changes: 12 additions & 0 deletions .github/actions/install/glaze-json/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: Install Glaze
description: Install Glaze for building test application
inputs:
version:
description: The desired Glaze version to install
required: false
default: "7.0.2"
runs:
using: composite
steps:
- run: ${{ github.action_path }}/install-glaze.sh ${{ inputs.version }}
shell: bash
49 changes: 49 additions & 0 deletions .github/actions/install/glaze-json/install-glaze.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# Install glaze library with specified version

set -e # Exit on error

# Check if version is provided
if [[ -z "$1" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
echo "Usage: $0 VERSION"
echo ""
echo "Install glaze library"
echo ""
echo "Arguments:"
echo " VERSION glaze version to install (required)"
echo ""
echo "Examples:"
echo " $0 7.0.2"
exit 1
fi

# Configuration
glaze_VERSION="$1"
INSTALL_DIR="/tmp"
BUILD_DIR="${INSTALL_DIR}/glaze-${glaze_VERSION}"

echo "Installing glaze v${glaze_VERSION}..."

# Download
echo "Downloading glaze v${glaze_VERSION}..."
cd "${INSTALL_DIR}"
wget -q "https://github.com/stephenberry/glaze/archive/v${glaze_VERSION}.tar.gz"

# Extract
echo "Extracting archive..."
tar -zxf "v${glaze_VERSION}.tar.gz"

# Build and install
echo "Building and installing..."
cd "${BUILD_DIR}"
mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
sudo cmake --install .

# Cleanup
echo "Cleaning up..."
rm -f "${INSTALL_DIR}/v${glaze_VERSION}.tar.gz"
rm -rf "${BUILD_DIR}"

echo "✓ glaze v${glaze_VERSION} installed successfully!"
15 changes: 6 additions & 9 deletions .github/actions/install/gtest/action.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
name: Install GTest
description: Install and setup GTest for linking and building test application
inputs:
version:
description: The desired GTest version to install
required: false
default: "1.17.0"
runs:
using: composite
steps:
- run: sudo apt-get install libgtest-dev lcov
shell: bash
- run: (cd /usr/src/gtest && sudo `which cmake` .)
shell: bash
- run: sudo make -j $(nproc) -C /usr/src/gtest
shell: bash
- run: sudo ln -s /usr/src/gtest/libgtest.a /usr/lib/libgtest.a
shell: bash
- run: sudo ln -s /usr/src/gtest/libgtest_main.a /usr/lib/libgtest_main.a
- run: ${{ github.action_path }}/install-gtest.sh ${{ inputs.version }}
shell: bash
48 changes: 48 additions & 0 deletions .github/actions/install/gtest/install-gtest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env bash
# Install gtest library with specified version

set -e # Exit on error

# Check if version is provided
if [[ -z "$1" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
echo "Usage: $0 VERSION"
echo ""
echo "Install gtest library"
echo ""
echo "Arguments:"
echo " VERSION gtest version to install (required)"
echo ""
echo "Examples:"
echo " $0 1.17.0"
exit 1
fi

# Configuration
gtest_VERSION="$1"
INSTALL_DIR="/tmp"
BUILD_DIR="${INSTALL_DIR}/googletest-${gtest_VERSION}"

echo "Installing gtest v${gtest_VERSION}..."

# Download
echo "Downloading gtest v${gtest_VERSION}..."
cd "${INSTALL_DIR}"
wget -q "https://github.com/google/googletest/releases/download/v${gtest_VERSION}/googletest-${gtest_VERSION}.tar.gz"

# Extract
echo "Extracting archive..."
tar -zxf "googletest-${gtest_VERSION}.tar.gz"

# Build and install
echo "Building and installing..."
cd "${BUILD_DIR}"
cmake . -DCMAKE_BUILD_TYPE=Release -DINSTALL_GTEST=ON
cmake --build .
sudo make install # There's a bug in the v1.16.0 CMakeLists.txt that doesn't properly install the library when invoked via CMake, so we have to use make install directly

# Cleanup
echo "Cleaning up..."
rm -f "${INSTALL_DIR}/googletest-${gtest_VERSION}.tar.gz"
rm -rf "${BUILD_DIR}"

echo "✓ gtest v${gtest_VERSION} installed successfully!"
Loading