Skip to content

feat: add Conan support with Artifactory integration - #12650

Draft
erikjv wants to merge 42 commits into
masterfrom
feat/conan-artifactory
Draft

erikjv wants to merge 42 commits into
masterfrom
feat/conan-artifactory

Conversation

@erikjv

@erikjv erikjv commented Sep 28, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add conanfile.py with dependencies and CMake generators for building the client with Conan 2
  • Add Conan profiles for Linux, macOS, and Windows
  • Fix CMakeLists.txt for compatibility with Conan's CMake integration (Qt6:: targets, include paths)
  • Fix Qt6LinguistTools find_package to use CONFIG mode through Qt6 components

Cherry-picked and rebased from #12179 onto current master.

Test plan

  • Build on Linux with conan build . --profile=.conan/profiles/ubuntu-latest-x86_64.conanprofile
  • Verify all Qt components are found via Conan's CMakeToolchain/CMakeDeps
  • Run tests

@erikjv
erikjv requested a review from a team as a code owner September 28, 2026 15:49
@update-docs

update-docs Bot commented Sep 28, 2026

Copy link
Copy Markdown

Thanks for opening this pull request! The maintainers of this repository would appreciate it if you would create a changelog item based on your changes.

@erikjv
erikjv marked this pull request as draft September 28, 2026 15:49
erikjv and others added 17 commits September 28, 2026 17:56
Add with_egl, with_libjpeg, and qtwayland options to match the
artifact builder's conanfile, ensuring the pre-built packages in
Artifactory have matching package IDs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ensures package IDs match by using the exact same option declarations
in the same format (default_options dict vs configure method).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Change build_type from Release to RelWithDebInfo for debug symbols.
Fix compiler.version from 13 to 11 to match AlmaLinux 9's GCC.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This header no longer exists on master. It was incorrectly kept
during the cherry-pick conflict resolution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
glib pulls in libffi which fails to build with Apple clang 17.
glib is only needed on Linux (for D-Bus); on macOS harfbuzz works
without it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Standalone script that runs cmake --install into an AppDir and calls
linuxdeploy to produce an AppImage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When qmake is not on PATH, search the Conan cache as a fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
linuxdeploy-plugin-qt needs QT_PLUGIN_PATH and QML2_IMPORT_PATH to
find Qt plugins when Qt is installed in a non-standard location (e.g.
Conan cache).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
linuxdeploy-plugin-qt crashes with a filesystem_error when a plugin
directory (e.g. printsupport) doesn't exist in the Qt prefix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removes NO_STRIP=1 so debug symbols are stripped, significantly
reducing AppImage size.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Split linuxdeploy into populate + package steps with a full file
listing in between, to identify unnecessary files for size reduction.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove dev files (headers, cmake, static libs), unnecessary Qt modules
(Designer, Help, UiTools, Test, WaylandCompositor), tool translations,
and other build artifacts to reduce AppImage size.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The two-step linuxdeploy flow (populate then package) doesn't strip
automatically. Add an explicit strip step in the cleanup phase.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove FluentWinUI3 (Windows-only), Imagine, NativeStyle, Particles,
VectorImage, ShaderTools, and additional tool translations to reduce
AppImage size.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These are pulled in by -devel packages in the build container but
are not needed at runtime (Athena/Xt widgets, unused X extensions).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Markdown rendering in text widgets is not needed by the client.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@erikjv
erikjv force-pushed the feat/conan-artifactory branch from db3443c to 535c154 Compare October 6, 2026 17:00
erikjv and others added 14 commits October 6, 2026 19:06
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The bundled glib crashes with a type registration assertion when it
loads GIO modules compiled against a different system glib version.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Conan Qt recipe creates transitive link dependencies that pull
Designer, Help, UiTools, QuickTest, ShaderTools, PrintSupport, and
WaylandCompositor into the binary. Removing them from the AppDir
causes crashes due to symbol resolution falling back to system libs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These require a Conan Qt package rebuild before they take effect.
- designer/assistant: we only need linguist tools from qttools
- md4c: markdown rendering in text widgets is not needed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Qt 6.8.3 -> 6.11.1
- zlib 1.3.1 -> 1.3.2
- sqlite3 3.49.1 -> 3.51.3
- openssl 3.4.2 -> 3.4.8
- Minimum Qt version in CMakeLists bumped to 6.11

Requires CCI sync (owncloud/conan-center-index#65) and a Conan
package rebuild before the client can be built.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Upstream pruned cmake/3.30.0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Matches CMAKE_OSX_DEPLOYMENT_TARGET in CMakeLists.txt and the
minimum macOS version supported by Qt 6.11. Added cross-reference
comments to keep both in sync.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
544 QML designer support files were being bundled by linuxdeploy-plugin-qt.
These are only used by Qt Designer, not at runtime.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extract the Conan package lib paths from the binary's RPATH and
prepend them to LD_LIBRARY_PATH before running linuxdeploy. This
ensures linuxdeploy bundles the Conan-built glib (2.86) instead
of the system glib from the build container, avoiding version
conflicts on the target system.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
readelf may report RUNPATH instead of RPATH. Also add || true to
prevent pipefail from aborting on empty grep results.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace fragile shell grep/sed pipeline with a Python script that
reliably parses readelf output across distributions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
linuxdeploy resolves dependencies from system paths, not LD_LIBRARY_PATH.
Pre-populate the AppDir with Conan-built shared libraries (glib, libffi,
libsecret, etc.) so linuxdeploy finds them there instead of bundling
incompatible system versions from the build container.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Only copy from lib directories, not plugin directories. Qt plugins
are handled separately by linuxdeploy-plugin-qt via QT_PLUGIN_PATH.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
linuxdeploy-plugin-qt expects plugins at usr/plugins/ when it finds
the corresponding Qt libs in usr/lib/. Copy Qt plugins from Conan
cache preserving the subdirectory structure.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants