Skip to content

Build from Source

KFilter6 is a Qt6 Widgets application built with CMake and C++17.

Requirements

Required:

  • CMake 3.21 or newer
  • C++17-capable compiler
  • Qt6 Core
  • Qt6 Widgets

Useful for development:

  • Ninja
  • CTest

KFilter6 does not require KDE Frameworks.

Release-style build

From the repository root:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j"$(nproc)"

Run:

./build/kfilter_qt6

Run the test suite

ctest --test-dir build --output-on-failure

The default build enables the Qt6 application and the smoke tests. At Patch 300 there are 23 registered CTests. A patch counts as validated when it builds and ctest passes completely. Labels and pixel-exact alignment are not tested automatically where a fault is immediately visible and no functional contract is affected.

Last verified reference run:

Ubuntu 24.04, GCC 13.3.0, CMake 3.28.3, Qt 6.4.2, Release
0 errors, 0 warnings, 23/23 tests passed

Individual test targets can be switched through CMake options, for example:

-DKFILTER_BUILD_QT6_APP=ON
-DKFILTER_BUILD_DRIVER_SMOKETEST=ON
-DKFILTER_BUILD_PROJECTIO_SMOKETEST=ON
-DKFILTER_BUILD_DRIVER_PARAMETER_VALIDATION_SMOKETEST=ON
-DKFILTER_BUILD_VENTED_ROLLOFF_PHASE_SMOKETEST=ON
-DKFILTER_BUILD_MEASUREMENT_IMPORT_SMOKETEST=ON
-DKFILTER_BUILD_MEASUREMENT_EXPORT_SMOKETEST=ON

Repository documents and patch procedure

The repository carries its own documentation: CONTRACTS.md states what currently holds, OPEN_POINTS.md what is unresolved, and PORTING.md how each patch came about. Where PORTING.md and CONTRACTS.md disagree, the contract wins and the disagreement is a defect to be corrected.

The preferred change style is small, reviewable patches that keep the application buildable after each step. Since Patch 299 the Git repository is the authoritative basis:

  • one patch is exactly one commit and increments KFILTER_PATCH_LEVEL in CMakeLists.txt
  • a patch applies against its direct predecessor, not cumulatively against an older baseline
  • patches are exchanged with git format-patch and applied with git am -3
  • line endings are LF, enforced through .gitattributes

Development build with Ninja

cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build
ctest --test-dir build --output-on-failure

Distribution-specific packages

Exact Qt6 package names depend on the Linux distribution. On many distributions, Qt6 Core and Widgets are provided by the Qt6 base development package.

Gentoo-specific dependency notes can be added here when the public source distribution is finalized.