Repository navigation
Standalone build, tests, docs, installers and CI of the OpenMS GUI layer - #1
Conversation
Verbatim copies of the files from OpenMS/OpenMS develop (501f790) that the standalone GUI build, its tests, docs, packaging and CI are adapted from. They stay in OpenMS as well, so they are copied without history. The following commits trim and adapt them; keeping this import separate makes those changes reviewable as diffs against the originals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
Top-level CMakeLists.txt, cmake/find_openms.cmake and trimmed copies of the OpenMS build macros: the GUI library, the GUI applications and the GUI TOPP tools are built against the installed OpenMS core and CLI layers of the same version (find_package(OpenMS EXACT COMPONENTS CLI)), with Boost and Qt 6. - installs into the same layout as the core (bin, lib, share/OpenMS, ...), so the GUI layer can be installed into the core's prefix - own CMake package OpenMSGUI (OpenMSGUIConfig.cmake, target OpenMS::OpenMS_GUI) - tool registry of the GUI layer, share/OpenMS/TOOLS/OpenMS-GUI.tsv - refuses an OpenMS that was built with its own GUI (imported OpenMS_GUI, or the GUI TOPP tools in its tool registry) - full version string taken from the core (OpenMS_VERSION_FULLSTRING or OPENMS_CORE_VERSION_FULLSTRING), so packages target the core's folder Tests, documentation and packaging are adapted in the following commits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
Intermediate checkpoint of the test setup (vendored test framework, class tests, GUI TOPP tool tests, TOPPAS pipeline tests, installed-consumer test) and the GUI documentation. Completed and verified in the following commits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
- doxygen documentation of the GUI layer (tool pages, TOPPAS tutorial, class documentation with parameter tables from the new GUI documenters) - GUI code examples (Tutorials_build) with data of this repository - the Help menus open the installed html-gui documentation, else the archive - README, AGENTS.md, CLAUDE.md, CHANGELOG, licence files for Qt - Boost is no longer needed (std::views::reverse instead of boost::adaptors) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
- deb/rpm 'openms-gui' depending on the openms package of the same version - macOS pkg (de.openms.gui) into /Applications/OpenMS-<version>, checks for the OpenMS installation there; bundles share the core's lib/ - Windows NSIS add-on: finds the OpenMS installation of the same version in the registry, installs into it with its own uninstaller (uninstall-gui.exe), start menu entries and file associations - runtime dependency set without anything OpenMS ships; Qt plugins and qt.conf; Qt licences; Linux desktop integration (desktop files, icons) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
- action openms-core: an OpenMS core per job, built from source (OpenMS develop/tag, cached per commit) or from the published SDK + installer - test.yml (PRs), nightly.yml (against OpenMS develop), release.yml (packages, signing/notarization with the secrets of OpenMS, smoke test on top of the OpenMS installer, deploy of installers and docs to the archive) - presets, dependency scripts, version bump script - top level: enable_testing(), no dmg, packages without QtWebEngine Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
- Windows packages: the Qt DLLs are taken from the build's bin/ (where the build copies them), so all of them are packaged, not only those the plugins pull in - silent NSIS installs of the OpenMS core and the GUI add-on need /allusers (NsisMultiUser quits in silent mode without a mode) - macOS smoke test: the app bundles are in the OpenMS folder, not in bin/ - README: build before 'dist', install into the OpenMS prefix, OPENMS_EXAMPLES_DIR and OPENMS_CORE_VERSION_FULLSTRING Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
The vcpkg checkout of the core is deeper in this repository's workspace than in
the OpenMS repository, so the deepest object paths of aws-sdk-cpp exceeded
MAX_PATH and cl.exe failed with C1083 ('Cannot open compiler generated file').
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
- macOS: a failing fix_dependencies.rb or codesign stops the install (it was ignored); --timestamp only with a real identity - OpenMSGUIConfig: the GUI layer needs exactly the OpenMS version it was built against, also when OpenMS was found before it (delegation from OpenMSConfig) - no build-tree export of the package (it was not usable there) - packaging overrides NO_WEBENGINE_WIDGETS without writing it into the cache - FuzzyDiff comparison tests get the data path and Windows PATH, but no GUI tool registry; the registry choice is documented as made at configure time - GUIToolDocumenter keeps the -write_ini output for its error message and removes the temporary INI on every path - the Help menu finds installed docs through File::findDoc - find_openms.cmake sets OpenMS_IGNORE_GUI_LAYER: OpenMS loads an installed GUI layer of its prefix, which this build provides itself Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
The OpenMS package requires OpenMP of its consumers (OpenMP::OpenMP_CXX is a PUBLIC dependency of OpenMS::OpenMS), and clang finds it only with LLVM's libomp. The OpenMS repository installs it for its clang job as well. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
An OpenMS built with Homebrew's keg-only libomp (the macOS presets) requires OpenMP of every consumer, which finds it only through OpenMP_ROOT. The macOS CI job failed at the consumer's configure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
… merged ExecutePipeline finds the TOPP tools of the core through PATH only with OpenMS/OpenMS#10844; on Windows, where the core has no compiled-in install path to fall back to, the pipeline tests failed against OpenMS develop. The pull request is tested against that branch now (one switch, OPENMS_CORE_DEFAULT_REF, to set back to develop after the merge); the nightly keeps testing OpenMS develop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
OpenMS develop changed two GUI files after the split base (501f790); they are deleted there by OpenMS/OpenMS#10844 and their changes land here: - EnhancedTabBar: build the exception message with std::to_string (std::string + int relied on a global operator+ that unity batches can hide) - Annotation1DPeakItem/Annotation1DTextItem are left out of unity batches (file-local dummy objects of the same name) - add_library_macros: ENABLE_UNITYBUILD uses CMake's UNITY_BUILD in batches of OPENMS_UNITY_BUILD_BATCH_SIZE files, as in OpenMS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
|
The red Nightly / Test against OpenMS develop / build-and-test (windows-2025, cl.exe) check is expected until OpenMS/OpenMS#10844 is merged. Nothing needs fixing in this PR.
Once OpenMS/OpenMS#10844 is merged, the nightly goes green without any change here. At that point Generated by Claude Code |
Port of the GUI part of OpenMS/OpenMS#10856: the file-local dummy objects of Annotation1DPeakItem.cpp and Annotation1DTextItem.cpp get distinct names, so the two files can share a unity-build batch and no longer need SKIP_UNITY_BUILD_INCLUSION. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
OpenMS/OpenMS#10844 is merged (OpenMS d99cf103), so develop has the GUI removed and the PATH lookup of TOPP tools that the pipeline tests need on Windows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
Pull requests take the newest cached core of OpenMS develop, which was still built before OpenMS/OpenMS#10844 and lacks the PATH lookup of TOPP tools; the Windows pipeline tests failed with it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
|
Generated by Claude Code |
…ix with the GUI layer Review findings of poshul on #1: - QApplicationTOPP read GUISTYLE/qtStyleSheet.qss through File::find(), which searches the shared data of the OpenMS core. The core no longer ships GUISTYLE, so TOPPView, TOPPAS and INIFileEditor aborted with Exception::FileNotFound whenever the GUI layer was not installed into the core's prefix (e.g. when run from the build tree). The style sheet is now a Qt resource of libOpenMS_GUI (source/VISUAL/STYLE/style.qrc) and is no longer installed. New class test QApplicationTOPP_test (fails without the fix). - cmake/find_openms.cmake refused a core whose TOOLS directory registers the GUI TOPP tools, and counted this layer's own OpenMS-GUI.tsv among them: reconfiguring against a prefix the GUI layer had been installed into failed. That file is no longer checked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
OpenMS/OpenMS-TOPP-GUI#1 is merged; this is the tip of develop that bump-nightly.py pins by default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp
Description
This repository becomes the home of the OpenMS GUI layer, moved out of OpenMS by OpenMS/OpenMS#10844 (merged). It contains the
OpenMS_GUIlibrary, TOPPView, TOPPAS, INIFileEditor, and the Qt-based TOPP tools ExecutePipeline and ImageCreator. Everything here is built against an installed OpenMS of the same version.developholds the GUI code exactly as it is in 501f790. It was imported with its full history (3,620 commits, extracted withgit filter-repo), and issue references were rewritten toOpenMS/OpenMS#N. This PR adds everything needed to build, test, document, package and release the GUI layer on its own.Build
find_package(OpenMS <version> EXACT CONFIG COMPONENTS CLI)and needs Qt 6. Boost is no longer needed.OpenMSGUI(targetOpenMS::OpenMS_GUI):find_package(OpenMS ...)loads or delegates to it.share/OpenMS/TOOLS/OpenMS-GUI.tsv, which sits next to the core'sOpenMS.tsv.OpenMS-GUI.tsvis not counted, so reconfiguring against a prefix the GUI was installed into still works.OpenMS_GUIas a Qt resource. The core'sshare/OpenMSno longer hasGUISTYLE, so the applications don't depend on where the layer is installed or run from.Tests
QApplicationTOPP_test(run offscreen).-write_ini/-write_ctd, ImageCreator). They take FuzzyDiff and the TOPP tools fromOPENMS_TOPP_BIN_DIR.Docs
html-gui; without it they fall back to the archive.Installers (GUI only, on top of the OpenMS installation of the same version)
openms-guideb and rpm that depend onopenms (= <version>), plus desktop integration.de.openms.gui) that installs into/Applications/OpenMS-<version>and checks that OpenMS is installed there. A failed fix-up or signing step stops the build.uninstall-gui.exe, which the core uninstaller calls.CI
test.yml(this PR),nightly.yml(against OpenMS develop) andrelease.yml(packages, signing and notarization with the same secret names as OpenMS, a smoke test on top of the OpenMS installer, and deploy of the installers and docs to the archive).openms-coreaction builds the core from source and caches it per commit, or takes the published SDK and installer.develop(OPENMS_CORE_DEFAULT_REFintest.yml). Once a nightly SDK without the GUI exists, the default mode can switch tosdk, which takes minutes instead of hours.Tested
GUISTYLE.openmspackage.openms-guiformula from this repository; it passes on macOS and Linux.Not run yet: the release workflow (signing, notarization, installers on real Windows and macOS).
Needs an admin
APPLE_DEVELOPER_ID_*,KEYCHAIN_PASSWORD,APPLE_APP_SPECIFIC_NOTARIZATION_PASSWORDandARCHIVE_RRSYNC_*.developthe default branch of this repo.Checklist
https://claude.ai/code/session_0149aXma24dXL4j67seUsJyp