CUI is a development-stage C17-facing style, text, rendering, and semantic-icon
backend for native Windows applications. The current package is Windows/MSVC
only and is not a low-code, component-framework, cross-platform, or supported
release claim. Its package version is deliberately 0.0.0 until a public 2.x
candidate is selected.
The Gallery is a first-party conformance application, but it builds as an
external consumer: it can see only an installed CUI package and links the
imported CUI::cui and CUI::icons_lucide targets. Gallery-owned layout,
state, Media Foundation, input, and accessibility code are not library APIs.
$cmake = 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe'
$ctest = Join-Path (Split-Path $cmake) 'ctest.exe'
$buildRoot = Join-Path $env:TEMP "cui-local-$PID"
$cuiBuild = Join-Path $buildRoot 'cui'
$galleryBuild = Join-Path $buildRoot 'gallery'
$prefix = Join-Path $buildRoot 'prefix'
& $cmake -S . -B $cuiBuild -G 'Visual Studio 17 2022' -A x64
& $cmake --build $cuiBuild --config Release
& $cmake --install $cuiBuild --config Release --prefix $prefixThe install tree contains the static libraries, public headers, CMake package files, and applicable license material. Applications use:
find_package(CUI 0.0.0 EXACT CONFIG REQUIRED)
target_link_libraries(my_app PRIVATE CUI::cui)
# Add CUI::icons_lucide only when the bundled Lucide pack is wanted.
set_property(
TARGET my_app
PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
)The current static package uses the static MSVC runtime, so consumers must
match /MT (/MTd for Debug) as shown above.
& $cmake -S gallery -B $galleryBuild -G 'Visual Studio 17 2022' -A x64 `
-DCUI_DIR="$prefix/lib/cmake/CUI" `
-DCUI_GALLERY_EXPECTED_PREFIX="$prefix" `
-DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE `
-DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE
& $cmake --build $galleryBuild --config Release
& $ctest --test-dir $galleryBuild -C Release --output-on-failureThe root test is the stricter regression gate. It installs CUI, copies Gallery
and its app-owned assets to an isolated directory without include/ or src/,
builds against the exact staged CUI_DIR, rejects source-tree path leakage,
checks the bundle files, and runs Gallery's self-test:
& $ctest --test-dir $cuiBuild -C Release --output-on-failurePassing this gate proves the package/build boundary for the first-party Gallery. It does not by itself prove a stable general extension API or an independent multi-project consumer.
out/ contains only release/, the latest verified five-file Gallery bundle.
CMake build/install trees are temporary and stay outside out; after the
package test and live startup check pass, the verified Gallery bin replaces
the previous out/release contents.