Skip to content
This repository was archived by the owner on Sep 30, 2026. It is now read-only.

Install the license files of the libraries into share/licenses; fix the macOS Arrow build - #187

Merged
timosachsenberg merged 2 commits into
masterfrom
claude/confident-lovelace-muuw2w-licenses
Sep 28, 2026
Merged

timosachsenberg merged 2 commits into
masterfrom
claude/confident-lovelace-muuw2w-licenses

Conversation

@timosachsenberg

@timosachsenberg timosachsenberg commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Description

Software that is built against the contrib and redistributes its libraries has to ship their license texts. The pyOpenMS wheels for Linux and Windows are such software, and OpenMS/OpenMS#10292 so far adds its own copies of the texts for them. This PR installs the texts in the contrib instead, taken straight from the source archives, so OpenMS can pick them up from the contrib build.

  • Building a library installs its license and notice files, as its source archive has them, to share/licenses/<library>/ in the build directory. This covers:
    • zlib, bzip2, boost, curl, arrow, libsvm, xerces-c;
    • glpk, coin-or (Cbc, Cgl, Clp, CoinMP, CoinUtils, Osi), eigen;
    • hdf5, libzip, openmp.
  • SOURCE.txt in each folder names the source archive, its SHA-256 and where it is published. It also points to this repository for the build scripts and patches. MPL-2.0 (Eigen) and EPL-1.0 (COIN-OR, which the contrib patches) ask for this.
  • Arrow builds and links some dependencies itself: Snappy, zstd, Thrift, xsimd, RapidJSON, mimalloc, and the AWS SDK where S3 is on.
    • share/licenses/arrow/bundled/<dependency>/ gets the license files from the top of their source trees in Arrow's build directory, plus Arrow's thirdparty/versions.txt.
    • The set follows what Arrow fetched on each platform.
  • A missing file fails the build with FATAL_ERROR, as the other macros do.
  • The release tarballs (lib bin include share) and the manylinux image keep share/, so both carry the files.
  • Library_Licences.txt and licensetexts/ are removed. They linked to web pages for libraries the contrib no longer builds, and the installed files replace them.

macOS build

The macOS job of this workflow has failed on master since July; the last green run was on 2026-07-03.

  • Cause: newer Xcode versions report their libtool as Apple Inc. version cctools_ld-<version>, but Arrow 23.0.0 only accepts cctools-<version>. Its configuration therefore stops with libtool found appears not to be Apple's libtool: /usr/bin/libtool.
  • Fix: on macOS, patches/arrow/BuildUtils.cmake.diff changes that check to the regex of GH-49369: [C++][R] Deal with validating libtool again apache/arrow#49370. That regex accepts both forms and still rejects GNU libtool.

Testing

  • Small libraries (Linux): a contrib build of ZLIB, BZIP2, LIBSVM, EIGEN and LIBZIP installs the five folders.
  • Arrow 23.0.0, configured like the Unix build here but with S3 off:
    • The new macro installs Snappy, zstd, Thrift and versions.txt from the real build tree.
    • The sandbox could not download mimalloc, xsimd or RapidJSON. The macro found their folders at the expected paths and failed because they were empty.
  • Arrow patch:
    • OPENMS_PATCH applies it to the Arrow 23.0.0 source and skips it on a second run.
    • The new regex accepts Apple Inc. version cctools_ld-1266.5 and Apple Inc. version cctools-1010.6, and rejects GNU libtool's output and empty output.
  • Edge cases:
    • COIN-OR's subfolders are kept.
    • A missing file fails the build.
    • A second run replaces the folder.
  • Not run locally: the full build, with Boost, Xerces-C, COIN-OR, HDF5, curl, Arrow with S3, and Windows and macOS. This PR's CI runs it. Each platform's log should show Installing ... license files .. done.

After merging

🤖 Generated with Claude Code

https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Contrib library builds now install available license and notice files under share/licenses/<library>/.
    • Arrow’s bundled dependency licenses and version information are included in a dedicated subfolder.
    • Installed license folders include a SOURCE.txt with archive and source details.
  • Documentation

    • The README explains where license files are installed and notes that redistributions should include the folders for linked libraries.

Software that is built against the contrib and redistributes its libraries,
such as the pyOpenMS wheels, has to ship their license texts, and so far kept
its own copies of them. Building a library now also installs its license and
notice files, as its source archive has them, to share/licenses/<library>/ in
the build directory. SOURCE.txt next to them names that archive and where it is
published, which the MPL-2.0 of Eigen and the EPL-1.0 of COIN-OR ask for. The
release tarballs and the manylinux image keep share/, so they carry the files.

Arrow builds and links some dependencies itself: Snappy, zstd, Thrift, xsimd,
RapidJSON, mimalloc, and the AWS SDK where S3 is on. Their license files are
taken from the top of their source trees in Arrow's build directory and
installed to share/licenses/arrow/bundled/<dependency>/, with Arrow's
thirdparty/versions.txt.

Library_Licences.txt and licensetexts/ are removed. They listed libraries the
contrib no longer builds and pointed to web pages instead of shipping texts;
the installed files supersede them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7
@coderabbitai

coderabbitai Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 8b5745b5-24fc-4085-8be7-5572a8f0e50d

📥 Commits

Reviewing files that changed from the base of the PR and between 6aff676 and 99190d6.

📒 Files selected for processing (12)
  • CMakeLists.txt
  • Library_Licences.txt
  • README.md
  • libraries.cmake/arrow.cmake
  • licensetexts/License.bzip2.txt
  • licensetexts/License.gpl-2.0.txt
  • licensetexts/License.gpl-3.0.txt
  • licensetexts/License.hdf5.txt
  • licensetexts/License.lgpl-2.1.txt
  • licensetexts/License.libSVM.txt
  • licensetexts/README.md
  • macros.cmake
💤 Files with no reviewable changes (8)
  • licensetexts/License.gpl-3.0.txt
  • licensetexts/License.gpl-2.0.txt
  • licensetexts/README.md
  • licensetexts/License.lgpl-2.1.txt
  • licensetexts/License.hdf5.txt
  • licensetexts/License.libSVM.txt
  • Library_Licences.txt
  • licensetexts/License.bzip2.txt

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Contrib build blocks now install license and notice files for selected libraries. A shared macro records source archive metadata. Arrow builds also collect bundled dependency licenses. The README describes the installed license directories and their distribution.

Changes

License distribution

Layer / File(s) Summary
Shared installation macro and archive metadata
macros.cmake
Adds OPENMS_INSTALL_LICENSES to replace a library’s license directory, copy requested files while preserving subdirectories, fail when a requested file is missing, and write SOURCE.txt. The archive release URL is defined once and used by download_contrib_archive.
Library license installation and documentation
CMakeLists.txt, libraries.cmake/arrow.cmake, README.md, Library_Licences.txt, licensetexts/*
Build blocks install license and notice files for selected libraries. Arrow’s bundled dependency licenses and versions.txt are copied into the license directory. The README documents the layout and distribution. The former license reference list and local license texts are removed.

Priority: ➖ Normal

Change: Feature

Merge Risk: ⚪ Minimal · up to 99190

No concrete issue has been established that should block merging. Arrow’s bundled-license collection and pyOpenMS wheel packaging remain unverified.

Architecture Summary

Architecture risk: 🔵 Low · up to 99190

The change affects 6 systems.

Changed systems: licensetexts, CMakeLists.txt, libraries.cmake, Library_Licences.txt, macros.cmake, README.md

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — licensetexts (service) was modified; 7 changed files map to changed impact.
  • observed — CMakeLists.txt (service) was modified; 1 changed file maps to changed impact.
  • observed — libraries.cmake (service) was modified; 1 changed file maps to changed impact.
  • observed — Library_Licences.txt (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in CMakeLists.txt: After building ZLIB, the block installs its LICENSE file.
  • observed — Modified behavior in CMakeLists.txt: After building BZIP2, the block installs its LICENSE file.
  • observed — Modified behavior in CMakeLists.txt: After building BOOST, the block installs LICENSE_1_0.txt.
  • observed — Modified behavior in CMakeLists.txt: After building and copying CURL libraries, the block installs COPYING.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: installing library license files and fixing the macOS Arrow build.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

I’m a rabbit; I hop by the build,
Where license files now are filled.
From source paths to folders they go,
With archive details set below.
Arrow’s bundled notices join the ride,
And version notes sit by their side.

Comment @coderabbitai help to get the list of available commands.

Newer Xcode versions report their libtool as "Apple Inc. version
cctools_ld-<version>". Arrow 23.0.0 only accepts "cctools-<version>" and
stops the configuration with "libtool found appears not to be Apple's libtool:
/usr/bin/libtool", so the macOS build of the contrib fails at Arrow; the last
green macOS run was on 2026-07-03, and master fails this way since (e.g. the
run of 2026-07-27). Patch the check to the regex of apache/arrow#49370, which
accepts both forms and still rejects GNU libtool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7
@timosachsenberg timosachsenberg changed the title Install the license files of the libraries into share/licenses Install the license files of the libraries into share/licenses; fix the macOS Arrow build Sep 28, 2026
@timosachsenberg
timosachsenberg merged commit d077390 into master Sep 28, 2026
6 checks passed
timosachsenberg pushed a commit to OpenMS/OpenMS that referenced this pull request Sep 28, 2026
…/licenses

OpenMS/contrib#187 (d077390) makes the contrib install the license and notice
files of every library it builds into share/licenses/<library>/. Each folder
has a SOURCE.txt that names the source archive of its library, and
arrow/bundled/ holds the files of the libraries Arrow builds itself.

openms_install_contrib_licenses() now installs these folders for the libraries
the build found inside OPENMS_CONTRIB_LIBS, and the copies kept in
cmake/third_party_licenses/contrib are removed. COIN-OR's folder is now named
coin-or. GLPK and HDF5 are covered when a build takes them from the contrib.
With an older contrib, configuring warns and installing stops, so builds keep
working and packages and wheels do not ship without the texts.

Boost's license text moves to cmake/third_party_licenses/homebrew, for the
macOS wheel: its Homebrew keg has no license file.

The contrib submodule moves to d077390. The commits since e127dea also add
curl's debug library on Windows and remove kissfft, which OpenMS no longer
uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7
timosachsenberg added a commit to OpenMS/OpenMS that referenced this pull request Sep 29, 2026
…ProteoWizard and SpectraST (#10292)

* [BUILD] Ship the license texts of the bundled third-party code in the installers

The 3.6.0 release-readiness check F8 found share/OpenMS/LICENSES holding
only the OpenMS license, while the packages bundle many third-party
libraries whose licenses require their text to accompany the binaries:
the 53 vcpkg libraries next to libOpenMS in the DEB (linked into it on
Windows, whose triplets are static), and in the macOS package Qt with
the Homebrew libraries it needs (glib, ICU, freetype, harfbuzz, ...).

openms_install_third_party_licenses() (cmake/third_party_licenses.cmake),
called from package_general.cmake, installs into share/OpenMS/LICENSES,
in the component share that every installation type includes:
- vcpkg/<port>.txt: the copyright file vcpkg installs for every port of
  the target triplet.
- Qt/: on Windows and macOS, which bundle Qt (the DEB depends on the
  distribution's), the LGPL-3.0 and GPL-3.0 texts and a README with the
  Qt version and where to get its source code.
- homebrew/<formula>/: on macOS, the license files Homebrew keeps in the
  kegs of Qt's formulae and of every formula they depend on. The formulae
  are found from the kegs that hold Qt's CMake packages.
The top-level CMakeLists.txt includes the file in every configuration,
so CI parses it.

The Thermo RawFileReader license on the vcpkg path is part of #10259, and
the licenses of the tools in THIRDPARTY belong in OpenMS/THIRDPARTY.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Stop configuring the macOS package if its Homebrew licenses cannot be collected

If brew was missing or 'brew deps' failed, configuring only warned, and the
macOS package would have gone out without the license files of Homebrew
libraries it bundles. Both now stop the configuration (CodeRabbit on #10292).
brew is also looked for in Homebrew's default prefixes, for a PATH without it
(e.g. that of an IDE). Formulae without a top-level license file, such as Qt's
own, whose licenses are in Qt/, are still only reported.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Collect the Homebrew licenses with the brew of Qt's own installation

A Mac can have two Homebrew installations, /opt/homebrew and /usr/local, and a
brew answers for its own installation only. So the brew on the PATH could list
the dependencies and kegs of the other installation, and their license files
would go into the package (CodeRabbit on #10292). The installation's prefix now
comes from Qt's kegs (<prefix>/Cellar/<formula>/<version>), and its bin/brew is
used. Configuring fails if that brew does not exist, or if Qt's CMake packages
come from more than one installation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Ship the licenses of vendored code and the Thermo RawFileReader license

libOpenMS compiles in third-party code that OpenMS carries in its source
tree: Percolator (Apache-2.0, whose NOTICE file must accompany it and
also holds the LIBLINEAR license), the libraries in src/openms/extern,
libkdtree++ (Artistic-2.0, in KDTree.h) and MSNumpress (BSD-3-Clause,
in MSNumpress.cpp). No installation shipped their licenses.
openms_install_vendored_licenses() installs them under
share/OpenMS/LICENSES/vendored in every configuration, so the Python
wheels get them too. Libraries taken from vcpkg instead
(USE_EXTERNAL_*) are left out; their licenses come from the vcpkg
section.

The openms-thermo-bridge vcpkg port combined the Thermo RawFileReader
license, a Word document, with its own license in
vcpkg_install_copyright(). That reads each file as text, so the document
was cut off at its first NUL byte and the installers had no Thermo
license. The port now installs the document as a file of its own, and a
build that uses the port installs it as
share/OpenMS/LICENSES/ThermoRawFileReader-License.doc, like the source
build of the bridge already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Leave the Thermo RawFileReader license to #10259

#10259 makes the same change to the openms-thermo-bridge port and to the
Thermo block of cmake_findExternalLibs.cmake. This restores both, and the
CHANGELOG entry, to their state before the previous commit, so that the
two pull requests do not conflict. The licenses of the vendored code stay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Drop ProteoWizard from the Windows installer

THIRDPARTY/pwiz-bin carries msconvert together with the libraries of several
instrument vendors (Agilent, Bruker, SCIEX, Shimadzu, Thermo, Waters), each
under its own license terms, of which the installer shipped only Agilent's and
Thermo's. OpenMS itself never calls msconvert. package_general.cmake no longer
stages pwiz-bin, and the NSIS template loses its Proteowizard section.

The Windows installation page drops the two known issues about the .NET
Framework 3.5 that ProteoWizard needed and points to ProteoWizard's website.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [GUI,DOC] Show Thermo's RawFileReader notice in the About dialog

Section 3.2 of the RawFileReader license asks software that distributes it to
display "RawFileReader reading tool. Copyright (c) 2016 by Thermo Fisher
Scientific, Inc. All rights reserved." in its About box. Builds with
WITH_THERMO_RAW ship RawFileReader, so the About dialog of TOPPView and TOPPAS
(QApplicationTOPP::showAboutDialog) shows it there. The vendor-formats page and
the ThermoRawFile class documentation carry the notice as well.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [CI] Ship the licenses of the libraries the wheel repair tools bundle

auditwheel (Linux) and delocate (macOS) copy every shared library libOpenMS needs
and the target system lacks into the pyOpenMS wheels: on 2026-09-28, OpenSSL,
libxml2, liblzma and libgomp on Linux, and 122 Homebrew libraries on macOS. None
of their licenses was in the wheel.

tools/ci/collect_wheel_licenses.py walks the dependencies of the installed
libraries as the loader resolves them, maps each library to the RPM package or
Homebrew keg it comes from, and copies that package's license files to
share/OpenMS/LICENSES/{system,homebrew}/<package>/, with an INDEX.txt, before
the wheel is built; pyOpenMS copies share/OpenMS into the wheel. A bundled
library without a package or a license file fails the step. The contrib
libraries are skipped on Linux; the OpenMS build installs their licenses.
Eigen, which is header-only on macOS, is named explicitly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [CI] Collect the licenses of libgomp and of Homebrew's boost

The wheel jobs failed in collect_wheel_licenses.py on two libraries:

- libgomp on Linux: the RPM package has no license files. gcc's spec file
  puts them into libgcc. A package without license files now takes those
  of an installed package built from the same source package.
- boost on macOS: Homebrew copies only files named exactly LICENSE,
  COPYING and the like into a keg, so boost's LICENSE_1_0.txt is not in
  it. --license-file <name>=<file> supplies the text for a package or
  formula that ships none; the macOS job passes the Boost Software License
  from cmake/third_party_licenses/contrib/boost.

INDEX.txt says where such a text came from.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [Packaging] Ship the licenses of the contrib libraries and the Thermo bridge's assemblies

A build against the OpenMS contrib, as the pyOpenMS wheels are, links
Boost, Xerces-C, libsvm, COIN-OR, Arrow and others from it, and no package
manager accounts for their licenses. openms_install_contrib_licenses()
installs the texts of the libraries a build found inside
OPENMS_CONTRIB_LIBS, judged by the paths the find modules report, to
share/OpenMS/LICENSES/contrib/<library>. Arrow brings snappy, zstd, Thrift,
xsimd, RapidJSON and mimalloc, which it builds itself. The texts are those of
the contrib's versions (contrib e127dea), taken verbatim from upstream.
README.txt names the versions and the source code, which MPL-2.0 (Eigen)
and EPL-1.0 (COIN-OR) require, and carries the acknowledgment that Eigen's
MINPACK port asks for. The AWS SDK that Arrow builds on Unix is left out:
OpenMS does not link it.

The managed folder of the Thermo bridge gets THIRD-PARTY-NOTICES.txt for
ThermoWrapperManaged (BSD-3-Clause), CommandLineParser (MIT), OpenMcdf and
OpenMcdf.Extensions (MPL-2.0, with the address of the source code), and
nethost (MIT, from the .NET host pack), which the native bridge links.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [CI] Resolve @rpath with the run paths of the whole load chain

dyld resolves an @rpath reference against the LC_RPATHs of the image and of
the images that led to it. collect_wheel_licenses.py used only the image's
own, so a Homebrew library that relies on a run path of its loader would be
reported as unresolved. The walk now carries the run paths down the chain
and walks a library again when it is reached with run paths it has not been
tried with; only references that no chain resolves are reported.

The macOS package's Homebrew collector in third_party_licenses.cmake now
also looks in share/doc/<formula> and share/licenses/<formula> of a keg, as
the wheel script does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Take the Thermo bridge's notices from openms-thermo-bridge 0.3.1

openms-thermo-bridge 0.3.1 publishes THIRD-PARTY-NOTICES.txt with its managed
assemblies (OpenMS/openms-thermo-bridge#12). The managed directory that the
build installs to share/openms_thermo_bridge/managed therefore carries the file,
and the copy of the bridge 0.3.0 notices kept here is removed.

Pin the bridge to v0.3.1 (d809f8a) in the FetchContent declaration, in the vcpkg
overlay port (SHA512 of its source archive) and in fetch_thermo_assets.sh (SHA-256
of the v0.3.1 release zips), and require 0.3.1 from a system installation. A
managed directory without the notices, e.g. a pre-built one of an older bridge,
stops the installation instead of shipping the assemblies without them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Take the contrib libraries' licenses from the contrib's share/licenses

OpenMS/contrib#187 (d077390) makes the contrib install the license and notice
files of every library it builds into share/licenses/<library>/. Each folder
has a SOURCE.txt that names the source archive of its library, and
arrow/bundled/ holds the files of the libraries Arrow builds itself.

openms_install_contrib_licenses() now installs these folders for the libraries
the build found inside OPENMS_CONTRIB_LIBS, and the copies kept in
cmake/third_party_licenses/contrib are removed. COIN-OR's folder is now named
coin-or. GLPK and HDF5 are covered when a build takes them from the contrib.
With an older contrib, configuring warns and installing stops, so builds keep
working and packages and wheels do not ship without the texts.

Boost's license text moves to cmake/third_party_licenses/homebrew, for the
macOS wheel: its Homebrew keg has no license file.

The contrib submodule moves to d077390. The commits since e127dea also add
curl's debug library on Windows and remove kissfft, which OpenMS no longer
uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] THIRDPARTY: ship the tools' license texts, drop SpectraST

Moves the THIRDPARTY submodule from 00c619e (MaRaCluster 1.04.1, #10259) to
abe0956 on its master, which adds the license texts of Comet, MaRaCluster,
Percolator and X!Tandem to their folders and a THIRD-PARTY-NOTICES.txt for
ThermoRawFileParser's assemblies, and removes SpectraST (GPL, shipped without
its text or source). install_thirdparty_folder() installs each tool folder
whole, so the packages pick the texts up without a CMake change. The
SpectraST tests in third_party_tests.cmake are already disabled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] THIRD-PARTY-NOTICES.txt: the third-party license texts of an installation in one file

share/OpenMS/THIRD-PARTY-NOTICES.txt lists the third-party components an
installation contains, grouped by where they come from (Qt, vcpkg,
Homebrew, the contrib, the build system, code compiled into OpenMS, the
Thermo reader, the THIRDPARTY tools), each with the numbers of the texts
that apply to it. Then it gives the texts, each once: components whose
texts are identical up to white space share a number. For the Linux
wheel, 99 license files become 56 components and 76 texts.

The code that installs license files records them with
openms_add_third_party_notice(). The list is written when configuring,
the notices when installing, in the component 'share': the Thermo
bridge's notices exist only after the build, and the package generators
install each component into a folder of its own. The wheel builds write
the notices again from the installed tree (cmake -P) after
collect_wheel_licenses.py has added the libraries the repair tools copy
in. The files stay in share/OpenMS/LICENSES and the tool folders.

The DEB also installs them, after the OpenMS license, as
/usr/share/doc/openms/copyright (Debian policy 12.5). License.txt, which
the installers show and the wheels carry as their license file, points
to the notices instead of ending with a list of third-party code that
had one entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [DOC] CHANGELOG: the license entries of this PR in four bullets

The seven bullets that had grown with the PR repeated each other: the
wheels, the Thermo bridge and THIRD-PARTY-NOTICES.txt had bullets of
their own. Now one bullet says what share/OpenMS/LICENSES and
THIRD-PARTY-NOTICES.txt hold, one covers the THIRDPARTY tools and the
Thermo bridge, and ProteoWizard and the About dialog keep theirs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Wheels built with vcpkg carry the license texts of the vcpkg ports

The Linux and Windows wheels link their dependencies statically from vcpkg
now (#10331, #10333), so the texts they need are the copyright files of the
vcpkg ports, as for the packages. openms_install_vcpkg_licenses() installs
LICENSES/vcpkg/<port>.txt for every installation built with vcpkg, not only
for packages, and records the files for THIRD-PARTY-NOTICES.txt.

- No wheel or package uses the contrib any more (#10328), so
  openms_install_contrib_licenses(), LICENSES/contrib/ and its group in the
  notices are gone, and the contrib submodule stays at develop's revision.
- Linux wheels: tools/ci/build_openms_manylinux.sh collects the licenses of
  the system libraries auditwheel grafts (GCC's libgomp, libgfortran and
  libquadmath), skipping the vcpkg tree, and writes THIRD-PARTY-NOTICES.txt
  again.
- The Windows wheel bundles only OpenMS's own DLLs and the MSVC runtime, so
  it needs no collector.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

* [BUILD] Leave vcpkg's build helpers out of the license texts

On Linux the host triplet is also the target triplet, so the installed
tree of the target triplet holds the host dependencies too: vcpkg-cmake,
vcpkg-cmake-config, vcpkg-cmake-get-vars, vcpkg-boost and vcpkg-make in
the wheels. These ports only carry CMake scripts for the builds of other
ports, and no installation contains anything of them, yet their license
texts were installed and listed in THIRD-PARTY-NOTICES.txt.

openms_install_vcpkg_licenses() now reads the file list that vcpkg keeps
for every installed port (vcpkg/info/<port>_<version>_<triplet>.list)
and leaves out the ports that install nothing outside their own
share/<port> folder. A port with any other file keeps its license, and so
does a port without a file list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YC1T2K9HQEUk2kQMZqC8h7

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants