From b943f92c0caebc7d1a99786dde7568c4de3c1fd0 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Sun, 28 Jun 2026 23:39:14 +0200 Subject: [PATCH 01/13] init new clang-tidy rules --- .clang-tidy | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index cefd2c6..6efd42e 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -5,8 +5,12 @@ Checks: > clang-analyzer-*, modernize-*, -modernize-use-trailing-return-type, + -modernize-use-auto, performance-*, - readability-braces-around-statements, + concurrency-mt-unsafe, + cppcoreguidelines-init-variables, + misc-no-recursion, + readability-make-member-function-const, readability-else-after-return, readability-identifier-naming, readability-redundant-*, @@ -18,13 +22,11 @@ CheckOptions: readability-identifier-naming.MemberCase: camelBack readability-identifier-naming.MemberPrefix: m_ readability-identifier-naming.MethodCase: camelBack - readability-identifier-naming.NamespaceCase: CamelCase + readability-identifier-naming.NamespaceCase: camelBack readability-identifier-naming.ParameterCase: camelBack readability-identifier-naming.PrivateMemberPrefix: m_ readability-identifier-naming.StaticConstantCase: UPPER_CASE - readability-identifier-naming.StaticConstantPrefix: k readability-identifier-naming.VariableCase: camelBack -WarningsAsErrors: "*" HeaderFilterRegex: ".*" FormatStyle: file -- 2.47.3 From 4061cc60a399c393dc0170740351423c35e36467 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 00:03:13 +0200 Subject: [PATCH 02/13] CI/CD for build test; includes dockerbuild to avoid docker redownloading deps. avoid-c-arrays removed --- .clang-tidy | 1 + .gitea/workflows/build.yml | 29 +++++++++++++++++++++++++++++ .gitea/workflows/ci-image.yml | 22 ++++++++++++++++++++++ ci/Dockerfile | 30 ++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 .gitea/workflows/build.yml create mode 100644 .gitea/workflows/ci-image.yml create mode 100644 ci/Dockerfile diff --git a/.clang-tidy b/.clang-tidy index 6efd42e..62b74bc 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -6,6 +6,7 @@ Checks: > modernize-*, -modernize-use-trailing-return-type, -modernize-use-auto, + -modernize-avoid-c-arrays, performance-*, concurrency-mt-unsafe, cppcoreguidelines-init-variables, diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..cecc937 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,29 @@ +name: Build (C++) + +on: + pull_request: + +jobs: + build: + runs-on: alpine + # Uses pre-built Docker image with all build deps. + # Rebuild via ci-image.yml workflow. + container: + image: git.zach-dev.cc/zach/zshell-ci:latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Configure + run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release + + - name: Build + run: ninja -C build + + - name: clang-tidy + continue-on-error: true + run: | + find Plugins -name '*.cpp' -o -name '*.hpp' | \ + xargs clang-tidy -p build --quiet 2>&1 | \ + grep -v 'Suppressed\|non-user\|non-system' diff --git a/.gitea/workflows/ci-image.yml b/.gitea/workflows/ci-image.yml new file mode 100644 index 0000000..87dba65 --- /dev/null +++ b/.gitea/workflows/ci-image.yml @@ -0,0 +1,22 @@ +name: Rebuild CI Image + +on: + schedule: + - cron: '0 6 * * 0' + workflow_dispatch: + +jobs: + build: + runs-on: alpine + env: + IMAGE: git.zach-dev.cc/zach/zshell-ci:latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Build image + run: docker build -t "$IMAGE" -f ci/Dockerfile . + + - name: Push image + run: docker push "$IMAGE" diff --git a/ci/Dockerfile b/ci/Dockerfile new file mode 100644 index 0000000..4b1e99d --- /dev/null +++ b/ci/Dockerfile @@ -0,0 +1,30 @@ +FROM alpine:edge + +# Build toolchain +RUN apk add --no-cache \ + alpine-sdk \ + cmake \ + ninja \ + clang22 \ + clang22-extra-tools \ + clang22-dev \ + llvm22-dev \ + llvm-dev \ + lld \ + pkgconf \ + git + +# Qt6 +RUN apk add --no-cache \ + qt6-qtbase-dev \ + qt6-qtdeclarative-dev \ + qt6-qtshadertools-dev \ + qt6-qt5compat-dev + +# Project-specific dependencies +RUN apk add --no-cache \ + libqalculate-dev \ + pipewire-dev \ + aubio-dev \ + lm-sensors-dev \ + glib-dev -- 2.47.3 From d82b6da0749584eb7ddfb110822a625c3a6b4b3c Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 00:24:05 +0200 Subject: [PATCH 03/13] ci: adjust link of dockerfile build origin --- .gitea/workflows/build.yml | 4 ++-- .gitea/workflows/ci-image.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index cecc937..951c31d 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -9,7 +9,7 @@ jobs: # Uses pre-built Docker image with all build deps. # Rebuild via ci-image.yml workflow. container: - image: git.zach-dev.cc/zach/zshell-ci:latest + image: git.aramjonghu.nl/aramjonghu/zshell-ci:latest steps: - name: Checkout @@ -26,4 +26,4 @@ jobs: run: | find Plugins -name '*.cpp' -o -name '*.hpp' | \ xargs clang-tidy -p build --quiet 2>&1 | \ - grep -v 'Suppressed\|non-user\|non-system' + grep -v 'Suppressed\|non-user\|non-system\|unknown argument.*mno-direct' diff --git a/.gitea/workflows/ci-image.yml b/.gitea/workflows/ci-image.yml index 87dba65..5059ffd 100644 --- a/.gitea/workflows/ci-image.yml +++ b/.gitea/workflows/ci-image.yml @@ -9,7 +9,7 @@ jobs: build: runs-on: alpine env: - IMAGE: git.zach-dev.cc/zach/zshell-ci:latest + IMAGE: git.aramjonghu.nl/aramjonghu/zshell-ci:latest steps: - name: Checkout -- 2.47.3 From 1ac8162c30811f75d0ca22ce1c27f2401e27755e Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 00:45:47 +0200 Subject: [PATCH 04/13] adjusted CMake file to not require Cava --- Plugins/ZShell/CMakeLists.txt | 2 +- ci/Dockerfile | 39 +++++++++++++++++------------------ 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/Plugins/ZShell/CMakeLists.txt b/Plugins/ZShell/CMakeLists.txt index 2457613..32c4675 100644 --- a/Plugins/ZShell/CMakeLists.txt +++ b/Plugins/ZShell/CMakeLists.txt @@ -9,7 +9,7 @@ pkg_check_modules(Cava IMPORTED_TARGET libcava QUIET) pkg_check_modules(GLIB REQUIRED glib-2.0 gobject-2.0 gio-2.0) if(NOT Cava_FOUND) - pkg_check_modules(Cava IMPORTED_TARGET cava REQUIRED) + pkg_check_modules(Cava IMPORTED_TARGET cava QUIET) endif() if(NOT TARGET Sensors::Sensors) diff --git a/ci/Dockerfile b/ci/Dockerfile index 4b1e99d..0e49d21 100644 --- a/ci/Dockerfile +++ b/ci/Dockerfile @@ -1,30 +1,29 @@ -FROM alpine:edge +FROM archlinux:latest + +RUN pacman -Syu --noconfirm # Build toolchain -RUN apk add --no-cache \ - alpine-sdk \ +RUN pacman -S --noconfirm \ + base-devel \ cmake \ ninja \ - clang22 \ - clang22-extra-tools \ - clang22-dev \ - llvm22-dev \ - llvm-dev \ + clang \ lld \ - pkgconf \ + nodejs \ git # Qt6 -RUN apk add --no-cache \ - qt6-qtbase-dev \ - qt6-qtdeclarative-dev \ - qt6-qtshadertools-dev \ - qt6-qt5compat-dev +RUN pacman -S --noconfirm \ + qt6-base \ + qt6-declarative \ + qt6-shadertools \ + qt6-5compat \ + qt6-canvaspainter # Project-specific dependencies -RUN apk add --no-cache \ - libqalculate-dev \ - pipewire-dev \ - aubio-dev \ - lm-sensors-dev \ - glib-dev +RUN pacman -S --noconfirm \ + libqalculate \ + pipewire \ + aubio \ + lm_sensors \ + glib2 -- 2.47.3 From 60b0844b7f96210e0d9bcef876805867794355bb Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 00:49:24 +0200 Subject: [PATCH 05/13] undo of cmakelist changes, using AUR instead to resolve cava build requirement --- .gitea/workflows/ci-image.yml | 2 +- Plugins/ZShell/CMakeLists.txt | 2 +- ci/Dockerfile | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci-image.yml b/.gitea/workflows/ci-image.yml index 5059ffd..cf2f52c 100644 --- a/.gitea/workflows/ci-image.yml +++ b/.gitea/workflows/ci-image.yml @@ -2,7 +2,7 @@ name: Rebuild CI Image on: schedule: - - cron: '0 6 * * 0' + - cron: '0 6 * * 1' workflow_dispatch: jobs: diff --git a/Plugins/ZShell/CMakeLists.txt b/Plugins/ZShell/CMakeLists.txt index 32c4675..2457613 100644 --- a/Plugins/ZShell/CMakeLists.txt +++ b/Plugins/ZShell/CMakeLists.txt @@ -9,7 +9,7 @@ pkg_check_modules(Cava IMPORTED_TARGET libcava QUIET) pkg_check_modules(GLIB REQUIRED glib-2.0 gobject-2.0 gio-2.0) if(NOT Cava_FOUND) - pkg_check_modules(Cava IMPORTED_TARGET cava QUIET) + pkg_check_modules(Cava IMPORTED_TARGET cava REQUIRED) endif() if(NOT TARGET Sensors::Sensors) diff --git a/ci/Dockerfile b/ci/Dockerfile index 0e49d21..dd94cce 100644 --- a/ci/Dockerfile +++ b/ci/Dockerfile @@ -25,5 +25,19 @@ RUN pacman -S --noconfirm \ libqalculate \ pipewire \ aubio \ + cava \ lm_sensors \ glib2 + +# AUR: libcava (provides development headers for cava) +RUN pacman -S --needed --noconfirm sudo && \ + useradd -m builder && \ + echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + su builder -c " \ + git clone https://aur.archlinux.org/libcava.git /tmp/libcava && \ + cd /tmp/libcava && \ + makepkg -si --noconfirm \ + " && \ + rm -rf /tmp/libcava && \ + userdel -r builder && \ + sed -i '/^builder/d' /etc/sudoers -- 2.47.3 From 94100b6e2f67a07fe0ee37bea647cc06b74f9064 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 00:59:23 +0200 Subject: [PATCH 06/13] resolve clang-tidy step workflow --- .gitea/workflows/build.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 951c31d..a2b0a2f 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -24,6 +24,5 @@ jobs: - name: clang-tidy continue-on-error: true run: | - find Plugins -name '*.cpp' -o -name '*.hpp' | \ - xargs clang-tidy -p build --quiet 2>&1 | \ + run-clang-tidy -p build -j $(nproc) -header-filter="Plugins/.*" --quiet 2>&1 | \ grep -v 'Suppressed\|non-user\|non-system\|unknown argument.*mno-direct' -- 2.47.3 From 55b73eea1913b7b0593769dd43b80477107227a8 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 01:03:12 +0200 Subject: [PATCH 07/13] separate workflows; build and lint clangtidy --- .gitea/workflows/build.yml | 8 -------- .gitea/workflows/lint-cpp.yml | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 .gitea/workflows/lint-cpp.yml diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index a2b0a2f..3a60077 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -6,8 +6,6 @@ on: jobs: build: runs-on: alpine - # Uses pre-built Docker image with all build deps. - # Rebuild via ci-image.yml workflow. container: image: git.aramjonghu.nl/aramjonghu/zshell-ci:latest @@ -20,9 +18,3 @@ jobs: - name: Build run: ninja -C build - - - name: clang-tidy - continue-on-error: true - run: | - run-clang-tidy -p build -j $(nproc) -header-filter="Plugins/.*" --quiet 2>&1 | \ - grep -v 'Suppressed\|non-user\|non-system\|unknown argument.*mno-direct' diff --git a/.gitea/workflows/lint-cpp.yml b/.gitea/workflows/lint-cpp.yml new file mode 100644 index 0000000..897aa24 --- /dev/null +++ b/.gitea/workflows/lint-cpp.yml @@ -0,0 +1,23 @@ +name: Lint (C++) + +on: + pull_request: + +jobs: + lint: + runs-on: alpine + container: + image: git.aramjonghu.nl/aramjonghu/zshell-ci:latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Configure + run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release + + - name: clang-tidy + continue-on-error: true + run: | + run-clang-tidy -p build -j $(nproc) -header-filter="Plugins/.*" 2>&1 | \ + grep -v 'Suppressed\|non-user\|non-system\|unknown argument.*mno-direct' -- 2.47.3 From 2e2747ac044948b99a091cea5eb739f375699f73 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 01:07:09 +0200 Subject: [PATCH 08/13] in warnings will show job failed --- .gitea/workflows/lint-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/lint-cpp.yml b/.gitea/workflows/lint-cpp.yml index 897aa24..2fda74a 100644 --- a/.gitea/workflows/lint-cpp.yml +++ b/.gitea/workflows/lint-cpp.yml @@ -17,7 +17,7 @@ jobs: run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release - name: clang-tidy - continue-on-error: true run: | + set -o pipefail run-clang-tidy -p build -j $(nproc) -header-filter="Plugins/.*" 2>&1 | \ grep -v 'Suppressed\|non-user\|non-system\|unknown argument.*mno-direct' -- 2.47.3 From 7448fc101daebf405df539be22ee38d295c57782 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 01:15:00 +0200 Subject: [PATCH 09/13] slight revert into single workflow for missing tidy check reason --- .gitea/workflows/build.yml | 20 --------------- .gitea/workflows/cpp.yml | 48 +++++++++++++++++++++++++++++++++++ .gitea/workflows/lint-cpp.yml | 23 ----------------- 3 files changed, 48 insertions(+), 43 deletions(-) delete mode 100644 .gitea/workflows/build.yml create mode 100644 .gitea/workflows/cpp.yml delete mode 100644 .gitea/workflows/lint-cpp.yml diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml deleted file mode 100644 index 3a60077..0000000 --- a/.gitea/workflows/build.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Build (C++) - -on: - pull_request: - -jobs: - build: - runs-on: alpine - container: - image: git.aramjonghu.nl/aramjonghu/zshell-ci:latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Configure - run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release - - - name: Build - run: ninja -C build diff --git a/.gitea/workflows/cpp.yml b/.gitea/workflows/cpp.yml new file mode 100644 index 0000000..d6e3ca9 --- /dev/null +++ b/.gitea/workflows/cpp.yml @@ -0,0 +1,48 @@ +name: C++ + +on: + pull_request: + +jobs: + build: + runs-on: alpine + container: + image: git.aramjonghu.nl/aramjonghu/zshell-ci:latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Configure + run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release + + - name: Build + run: ninja -C build + + - name: Upload build dir + uses: actions/upload-artifact@v4 + with: + name: build + path: build/ + + lint: + runs-on: alpine + needs: build + container: + image: git.aramjonghu.nl/aramjonghu/zshell-ci:latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Download build dir + uses: actions/download-artifact@v4 + with: + name: build + path: build/ + + - name: clang-tidy + run: | + set -o pipefail + run-clang-tidy -p build -j $(nproc) -header-filter="Plugins/.*" 2>&1 | \ + grep -v 'Suppressed\|non-user\|non-system\|unknown argument.*mno-direct' diff --git a/.gitea/workflows/lint-cpp.yml b/.gitea/workflows/lint-cpp.yml deleted file mode 100644 index 2fda74a..0000000 --- a/.gitea/workflows/lint-cpp.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Lint (C++) - -on: - pull_request: - -jobs: - lint: - runs-on: alpine - container: - image: git.aramjonghu.nl/aramjonghu/zshell-ci:latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Configure - run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release - - - name: clang-tidy - run: | - set -o pipefail - run-clang-tidy -p build -j $(nproc) -header-filter="Plugins/.*" 2>&1 | \ - grep -v 'Suppressed\|non-user\|non-system\|unknown argument.*mno-direct' -- 2.47.3 From afd08e8aa7da0701a868fd59c4cd450c180e39ee Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 01:19:39 +0200 Subject: [PATCH 10/13] revert; clang-tidy does on same workflow, but nonblocking --- .gitea/workflows/cpp.yml | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/.gitea/workflows/cpp.yml b/.gitea/workflows/cpp.yml index d6e3ca9..5c4cd7e 100644 --- a/.gitea/workflows/cpp.yml +++ b/.gitea/workflows/cpp.yml @@ -19,29 +19,8 @@ jobs: - name: Build run: ninja -C build - - name: Upload build dir - uses: actions/upload-artifact@v4 - with: - name: build - path: build/ - - lint: - runs-on: alpine - needs: build - container: - image: git.aramjonghu.nl/aramjonghu/zshell-ci:latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Download build dir - uses: actions/download-artifact@v4 - with: - name: build - path: build/ - - name: clang-tidy + continue-on-error: true run: | set -o pipefail run-clang-tidy -p build -j $(nproc) -header-filter="Plugins/.*" 2>&1 | \ -- 2.47.3 From a3ca37b51a007c559af2c828ebcb3f3b413f3d48 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 01:25:08 +0200 Subject: [PATCH 11/13] clang-tidy: drop noisy checks, keep high-value only --- .clang-tidy | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 62b74bc..6065672 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -3,31 +3,16 @@ Checks: > -*, bugprone-*, clang-analyzer-*, - modernize-*, - -modernize-use-trailing-return-type, - -modernize-use-auto, - -modernize-avoid-c-arrays, - performance-*, - concurrency-mt-unsafe, cppcoreguidelines-init-variables, misc-no-recursion, - readability-make-member-function-const, + concurrency-mt-unsafe, readability-else-after-return, - readability-identifier-naming, + readability-make-member-function-const, readability-redundant-*, readability-simplify-*, -CheckOptions: - readability-identifier-naming.ClassCase: CamelCase - readability-identifier-naming.EnumCase: CamelCase - readability-identifier-naming.FunctionCase: camelBack - readability-identifier-naming.MemberCase: camelBack - readability-identifier-naming.MemberPrefix: m_ - readability-identifier-naming.MethodCase: camelBack - readability-identifier-naming.NamespaceCase: camelBack - readability-identifier-naming.ParameterCase: camelBack - readability-identifier-naming.PrivateMemberPrefix: m_ - readability-identifier-naming.StaticConstantCase: UPPER_CASE - readability-identifier-naming.VariableCase: camelBack + modernize-use-override, + modernize-use-nullptr, + modernize-deprecated-headers, HeaderFilterRegex: ".*" FormatStyle: file -- 2.47.3 From 49010e2a43a3fb3efaad8af796acf73b016f6cb0 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 01:30:23 +0200 Subject: [PATCH 12/13] clang-tidy: disable 3 noisy bugprone checks --- .clang-tidy | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.clang-tidy b/.clang-tidy index 6065672..5246243 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -2,6 +2,9 @@ Checks: > -*, bugprone-*, + -bugprone-easily-swappable-parameters, + -bugprone-narrowing-conversions, + -bugprone-implicit-widening-of-multiplication-result, clang-analyzer-*, cppcoreguidelines-init-variables, misc-no-recursion, -- 2.47.3 From 50e179e0fe66eb8b9969699ca9f51e3c2660a217 Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Mon, 29 Jun 2026 19:56:32 +0200 Subject: [PATCH 13/13] adusted workflow to fit new cmakelists --- .gitea/workflows/cpp.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitea/workflows/cpp.yml b/.gitea/workflows/cpp.yml index 5c4cd7e..ffe41a3 100644 --- a/.gitea/workflows/cpp.yml +++ b/.gitea/workflows/cpp.yml @@ -12,6 +12,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Configure run: cmake -B build -G Ninja -DENABLE_MODULES=plugin -DCMAKE_BUILD_TYPE=Release -- 2.47.3