diff options
Diffstat (limited to 'docs/handbook/meshmc/dependencies.md')
| -rw-r--r-- | docs/handbook/meshmc/dependencies.md | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/docs/handbook/meshmc/dependencies.md b/docs/handbook/meshmc/dependencies.md new file mode 100644 index 0000000000..dda35337ec --- /dev/null +++ b/docs/handbook/meshmc/dependencies.md @@ -0,0 +1,241 @@ +# Dependencies + +## Overview + +MeshMC depends on a mix of bundled libraries (shipped in the source tree under `libraries/`) and external libraries resolved at build time via the system package manager or vcpkg. + +## Bundled Libraries + +These libraries are included in the `libraries/` directory and built as part of the MeshMC CMake project: + +| Library | Directory | Purpose | License | +|---|---|---|---| +| **ganalytics** | `libraries/ganalytics/` | Google Analytics integration for usage telemetry | MIT | +| **systeminfo** | `libraries/systeminfo/` | System information queries (OS, CPU, memory) | GPL-3.0-or-later | +| **hoedown** | `libraries/hoedown/` | Markdown rendering (changelogs, news) | ISC | +| **launcher** | `libraries/launcher/` | Java process launcher helper binary | GPL-3.0-or-later | +| **javacheck** | `libraries/javacheck/` | Java installation validator (JAR) | GPL-3.0-or-later | +| **xz-embedded** | `libraries/xz-embedded/` | XZ decompression (embedded, minimal) | Public Domain | +| **rainbow** | `libraries/rainbow/` | KDE-style color utilities | LGPL-2.1 | +| **iconfix** | `libraries/iconfix/` | Qt icon theme fixes | Apache-2.0 | +| **LocalPeer** | `libraries/LocalPeer/` | Single-instance IPC (based on QtSingleApplication) | LGPL-2.1 | +| **classparser** | `libraries/classparser/` | Java `.class` file parser (mod metadata) | GPL-3.0-or-later | +| **optional-bare** | `libraries/optional-bare/` | C++17 `std::optional` polyfill for older code | BSL-1.0 | +| **tomlc99** | `libraries/tomlc99/` | TOML parser (C99) | MIT | +| **katabasis** | `libraries/katabasis/` | OAuth2 library (MSA authentication) | BSD-2-Clause | +| **libnbtplusplus** | `libraries/libnbtplusplus/` | NBT (Named Binary Tag) parser for Minecraft data | LGPL-3.0 | +| **qdcss** | `libraries/qdcss/` | CSS-like parser for theme files | GPL-3.0-or-later | +| **murmur2** | `libraries/murmur2/` | MurmurHash2 implementation (CurseForge fingerprinting) | Public Domain | + +### ganalytics + +Provides opt-in usage analytics via Google Analytics Measurement Protocol. Tracks feature usage, not personal data. Can be disabled in settings. + +### systeminfo + +Cross-platform system info queries: +- Operating system name and version +- CPU architecture and model +- Available memory +- Used for analytics and crash reports + +### launcher + +A small native binary that acts as the actual Java process launcher: +- Handles process spawning on all platforms +- Supports wrapper commands +- Manages stdio piping + +### javacheck + +A minimal Java program (`JavaCheck.class`) that prints JVM system properties. Spawned by `JavaChecker` to validate Java installations without loading the full Minecraft runtime. + +### classparser + +Parses Java `.class` files to extract: +- Mod metadata (name, version, mod ID) +- Forge/Fabric/Quilt mod annotations +- Used by `LocalModParseTask` for mod discovery + +### katabasis + +OAuth2 implementation used for Microsoft Account authentication: +- Token storage structures (`Katabasis::Token`) +- Token validity tracking +- Refresh token management + +### libnbtplusplus + +Parses and writes Minecraft NBT (Named Binary Tag) format: +- Level.dat parsing for world metadata +- Server.dat parsing for server list +- Used by InstanceImportTask and world management + +## External Dependencies + +These are resolved at build time and must be installed on the system or via vcpkg: + +| Library | CMake Target | Purpose | Required | +|---|---|---|---| +| **Qt6::Core** | `Qt6::Core` | Foundation (strings, containers, I/O, events) | Yes | +| **Qt6::Widgets** | `Qt6::Widgets` | GUI toolkit | Yes | +| **Qt6::Concurrent** | `Qt6::Concurrent` | Threading utilities | Yes | +| **Qt6::Network** | `Qt6::Network` | HTTP, SSL, proxy | Yes | +| **Qt6::NetworkAuth** | `Qt6::NetworkAuth` | OAuth2 (MSA authentication) | Yes | +| **Qt6::Test** | `Qt6::Test` | Unit testing framework | Optional | +| **Qt6::Xml** | `Qt6::Xml` | XML parsing | Yes | +| **libarchive** | `LibArchive::LibArchive` | Archive extraction (zip, tar, 7z) | Yes | +| **zlib** | `ZLIB::ZLIB` | Compression (used by libarchive, QuaZip) | Yes | +| **ECM** | `extra-cmake-modules` | KDE CMake macros (install dirs, icons) | Yes | +| **cmark** | `cmark` | CommonMark rendering (changelogs) | Yes | +| **tomlplusplus** | `tomlplusplus::tomlplusplus` | TOML parsing (C++17) | Yes | +| **libqrencode** | `qrencode` | QR code generation (MSA login) | Optional | +| **QuaZip** | `QuaZip::QuaZip` | Qt-based ZIP file I/O | Yes | +| **Sparkle** | `Sparkle.framework` | macOS auto-update framework | macOS only | + +### Qt6 + +Minimum version: **Qt 6.7** (for full C++23 and NetworkAuth support). + +Required Qt modules: +```cmake +find_package(Qt6 6.7 REQUIRED COMPONENTS + Core + Widgets + Concurrent + Network + NetworkAuth + Xml +) +find_package(Qt6 6.7 COMPONENTS Test) +``` + +### libarchive + +Used for extracting: +- Minecraft archives (`.jar`, `.zip`) +- Modpack archives (`.mrpack`, `.zip`) +- Java runtime archives (`.tar.gz`, `.zip`) + +### Extra CMake Modules (ECM) + +KDE's CMake module collection provides: +- `KDEInstallDirs` — standardized install paths +- `ecm_install_icons` — icon theme installation +- `ECMQueryQt` — Qt path queries + +### cmark + +CommonMark rendering for: +- Changelogs and release notes +- CurseForge/Modrinth mod descriptions +- News feed content + +The `cmark` source is included in the repository at `/cmark/` as a subproject. + +### tomlplusplus + +Modern C++ TOML parser used for: +- Fabric/Quilt mod metadata (`fabric.mod.json` alternative format) +- Configuration file parsing + +The `tomlplusplus` source is included in the repository at `/tomlplusplus/`. + +### QuaZip + +Qt wrapper around zlib/minizip for ZIP I/O: +- Instance export (creating `.zip` files) +- Instance import (reading `.zip` modpacks) +- Mod file inspection + +## vcpkg Integration + +The build system supports vcpkg for dependency management: + +```cmake +# CMakePresets.json +{ + "configurePresets": [ + { + "name": "windows_msvc", + "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "cacheVariables": { + "VCPKG_TARGET_TRIPLET": "x64-windows" + } + } + ] +} +``` + +### vcpkg.json + +```json +{ + "dependencies": [ + "libarchive", + "zlib", + "quazip", + "cmark", + "tomlplusplus" + ] +} +``` + +## Build vs Runtime Dependencies + +### Build-Only Dependencies + +| Dependency | Purpose | +|---|---| +| CMake 3.28+ | Build system generator | +| Ninja | Build tool | +| C++23 compiler | GCC 14+, Clang 18+, MSVC 17.10+ | +| ECM | CMake macros | +| Qt6 (all modules) | Framework headers and libs | + +### Runtime Dependencies + +| Dependency | Purpose | +|---|---| +| Qt6 shared libraries | Core framework runtime | +| libarchive | Archive operations | +| zlib | Compression | +| OpenSSL / Schannel | TLS for network operations | +| Java 8-21 | Minecraft runtime (user-managed) | + +### Optional Runtime Dependencies + +| Dependency | Purpose | Platform | +|---|---|---| +| libqrencode | QR code for MSA login | All (optional feature) | +| Sparkle | Auto-updates | macOS | +| xdg-utils | Open URLs/files | Linux | + +## Dependency Graph + +``` +meshmc (executable) +├── Qt6::Core, Qt6::Widgets, Qt6::Concurrent, Qt6::Network, Qt6::NetworkAuth, Qt6::Xml +├── LibArchive::LibArchive +├── ZLIB::ZLIB +├── QuaZip::QuaZip +├── cmark +├── tomlplusplus::tomlplusplus +├── libraries/ +│ ├── ganalytics (→ Qt6::Core, Qt6::Network) +│ ├── systeminfo (→ Qt6::Core) +│ ├── hoedown (C library, no Qt dependency) +│ ├── launcher (→ Qt6::Core) +│ ├── javacheck (Java, no C++ deps) +│ ├── xz-embedded (C library, no deps) +│ ├── rainbow (→ Qt6::Core, Qt6::Widgets) +│ ├── iconfix (→ Qt6::Core, Qt6::Widgets) +│ ├── LocalPeer (→ Qt6::Core, Qt6::Network) +│ ├── classparser (→ Qt6::Core) +│ ├── tomlc99 (C library, no deps) +│ ├── katabasis (→ Qt6::Core, Qt6::Network, Qt6::NetworkAuth) +│ ├── libnbtplusplus (→ ZLIB::ZLIB) +│ ├── qdcss (→ Qt6::Core) +│ └── murmur2 (C library, no deps) +└── optional: qrencode, Sparkle.framework +``` |
