mirror of
https://invent.kde.org/marcoa/a-la-karte.git
synced 2026-02-10 05:13:08 +00:00
Document SDL3 discovery and packaging guidance for local builds. Add a changelog and record the 0.1.1rc1 release notes.
145 lines
3.9 KiB
Markdown
145 lines
3.9 KiB
Markdown
# Hacking A-La-Karte
|
|
|
|
This document is intended for contributors who want to build, run, and debug A-La-Karte locally.
|
|
|
|
## Build
|
|
|
|
### Configure
|
|
|
|
```bash
|
|
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug
|
|
```
|
|
|
|
### SDL3
|
|
|
|
A-La-Karte uses SDL3 for gamepad navigation.
|
|
|
|
There are two supported ways to satisfy the SDL3 dependency:
|
|
|
|
#### Option 1: Use a system SDL3 package
|
|
|
|
If your distribution provides SDL3 development packages, install them and configure normally.
|
|
|
|
Common package names include `libsdl3-dev` (Debian/Ubuntu), `SDL3-devel` (Fedora/openSUSE), or similarly named SDL3 "-devel" packages.
|
|
|
|
At CMake configure time, A-La-Karte uses `find_package(SDL3 REQUIRED)`. This requires that SDL3 provides a CMake package (e.g. `SDL3Config.cmake`) and that CMake can find it.
|
|
|
|
If CMake cannot find SDL3, you can point it at the right prefix:
|
|
|
|
```bash
|
|
cmake -B build -S . \
|
|
-DCMAKE_BUILD_TYPE=Debug \
|
|
-DCMAKE_PREFIX_PATH=/path/to/sdl3/prefix
|
|
```
|
|
|
|
Alternatively you can point directly at SDL3's CMake package directory:
|
|
|
|
```bash
|
|
cmake -B build -S . \
|
|
-DCMAKE_BUILD_TYPE=Debug \
|
|
-DSDL3_DIR=/path/to/SDL3Config.cmake/parent
|
|
```
|
|
|
|
#### Option 2: Build SDL3 from a source tree
|
|
|
|
If your distro does not ship SDL3 yet (or ships a version without a usable CMake package), you can build SDL3 as part of the A-La-Karte build by pointing CMake at an SDL3 source checkout:
|
|
|
|
You can obtain a source tree by cloning upstream SDL:
|
|
|
|
```bash
|
|
git clone https://github.com/libsdl-org/SDL.git
|
|
```
|
|
|
|
```bash
|
|
cmake -B build -S . \
|
|
-DCMAKE_BUILD_TYPE=Debug \
|
|
-DALAKARTE_SDL3_SOURCE_DIR=/path/to/SDL
|
|
```
|
|
|
|
`ALAKARTE_SDL3_SOURCE_DIR` must point at a directory that contains `CMakeLists.txt` from SDL3.
|
|
|
|
This is intended for local development and CI setups. Distributions should prefer packaging SDL3 as a system dependency.
|
|
|
|
#### Packaging guidance
|
|
|
|
Packagers should depend on the system SDL3 development package and ensure CMake can discover it.
|
|
|
|
In particular:
|
|
|
|
- The build dependency must include SDL3 headers and the CMake package files.
|
|
- A-La-Karte links against `SDL3::SDL3`.
|
|
- Avoid using `ALAKARTE_SDL3_SOURCE_DIR` in distribution packaging.
|
|
|
|
### Build
|
|
|
|
```bash
|
|
cmake --build build
|
|
```
|
|
|
|
### Run from the build directory
|
|
|
|
```bash
|
|
./build/bin/alakarte
|
|
```
|
|
|
|
## Code Map
|
|
|
|
- `src/main.cpp`
|
|
- Application entry point, `KAboutData`, and QML engine setup.
|
|
- `src/app.*`
|
|
- Singleton exposed to QML. Owns `GameModel`, `GameLauncher`, `Config`, and `SteamGridDB`.
|
|
- `src/game.*`
|
|
- In-memory game object + JSON serialization.
|
|
- `src/gamemodel.*`, `src/gamesortfiltermodel.*`
|
|
- Model + filtering/sorting used by the UI.
|
|
- `src/*importer.*`
|
|
- Importers for different sources (Steam, Lutris, Heroic, Bottles, Desktop Entries, Flatpak, etc.).
|
|
- `src/gamelauncher.*`
|
|
- Launches games and records last played on launch.
|
|
- `src/qml/`
|
|
- Kirigami/Qt Quick UI.
|
|
|
|
## Repeatable Local Smoke Tests (No real library required)
|
|
|
|
### Run with isolated XDG dirs
|
|
|
|
This avoids touching your real config and library:
|
|
|
|
```bash
|
|
export XDG_CONFIG_HOME="$(mktemp -d)"
|
|
export XDG_DATA_HOME="$(mktemp -d)"
|
|
./build/bin/alakarte
|
|
```
|
|
|
|
### Desktop Entries importer fixture
|
|
|
|
You can create a temporary desktop entry under the isolated `$XDG_DATA_HOME`:
|
|
|
|
```bash
|
|
mkdir -p "$XDG_DATA_HOME/applications"
|
|
cat > "$XDG_DATA_HOME/applications/alakarte-test-game.desktop" <<'EOF'
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=A-La-Karte Test Game
|
|
Exec=sh -lc 'sleep 1'
|
|
Icon=applications-games
|
|
Categories=Game;
|
|
EOF
|
|
```
|
|
|
|
Then:
|
|
|
|
- Use the import sheet and run the Desktop Entries import.
|
|
- Verify the entry appears and launches.
|
|
- Verify `Last played` updates after launch.
|
|
|
|
### Manual entry / launcher smoke test
|
|
|
|
- Create a manual entry with a harmless command, e.g. `sh -lc 'sleep 2'`.
|
|
- Launch it.
|
|
- Confirm the app stays responsive and the game transitions out of the running state.
|
|
|
|
## Notes
|
|
|
|
- SteamGridDB cover fetching requires an API key.
|
|
- KRunner integration is optional at build time (depending on available dependencies).
|