Skip to content

Fixes for newer ROOT versions on macOS - #156

Merged
richeldichel merged 7 commits into
KATRIN-Experiment:mainfrom
2xB:fix_ci_root
Sep 4, 2026
Merged

Fixes for newer ROOT versions on macOS#156
richeldichel merged 7 commits into
KATRIN-Experiment:mainfrom
2xB:fix_ci_root

Conversation

@2xB

@2xB 2xB commented Sep 4, 2026

Copy link
Copy Markdown
Member

Recent Homebrew versions of ROOT use C++20. That leads to confusing DYDL errors. ROOT requests that one always compiles with exactly their version in the note in https://root.cern/manual/integrate_root_into_my_cmake_project/ . This PR adds logic to ensure that.

2xB and others added 7 commits September 2, 2026 17:11
Got "error: unknown type name 'uint'; did you mean 'int'?" when building on a recent macOS with Clang from Homebrew.
This avoids weird compile time errors like:

 *** Break *** bus error
[/usr/lib/system/libsystem_platform.dylib] _sigtramp (no debug info)
[/usr/lib/dyld] invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator()() const (no debug info)
[/usr/lib/dyld] invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const (no debug info)
[/usr/lib/dyld] invocation function for block in mach_o::UnsafeHeader::forEachSection(void (mach_o::UnsafeHeader::SectionInfo const&, bool&) block_pointer) const (no debug info)
[/usr/lib/dyld] mach_o::UnsafeHeader::forEachLoadCommand(void (load_command const*, bool&) block_pointer) const (no debug info)
[/usr/lib/dyld] mach_o::UnsafeHeader::forEachSection(void (mach_o::UnsafeHeader::SectionInfo const&, bool&) block_pointer) const (no debug info)
[/usr/lib/dyld] dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const (no debug info)
[/usr/lib/dyld] dyld4::JustInTimeLoader::runInitializers(dyld4::RuntimeState&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&, lsl::Vector<AuthenticatedValue<dyld4::Loader const*>>&) const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_0::operator()() const (no debug info)
[/usr/lib/dyld] dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const (no debug info)
[/usr/lib/dyld] dyld4::prepare(dyld4::APIs&, mach_o::UnsafeHeader const*) (no debug info)
[/usr/lib/dyld] dyld4::start(dyld4::KernelArgs*, void*, void*, unsigned long long)::$_1::operator()() const (no debug info)
[/usr/lib/dyld] start (no debug info)
This file has always only been used at KATRIN internally, so moving to where it was actually used. This makes sense since the CI pipeline does not touch this file at all, making it very hard to notice issues with it here.
x_min/x_max are always set on the i==0 loop iteration (a port housing
always has at least one port), and p0[0]/p0[1] are always set before
being read past the discretization loop, but GCC 16 can't prove either
invariant under RelWithDebInfo inlining. Initialize them like the
neighboring n1/n2 arrays already do.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015FxJDQWXHJjTY21Fc5bP6E
Older ROOT releases (e.g. the prebuilt 6.24.08 used on the Ubuntu 20.04
CI image) don't set ROOT_CXX_STANDARD in their CMake config, so the
unconditional FORCE overwrote CMAKE_CXX_STANDARD with an empty string,
tripping the "Unsupported C++ standard" check right after it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015FxJDQWXHJjTY21Fc5bP6E
@richeldichel

Copy link
Copy Markdown
Contributor

Thanks for fixing this nasty error! Claude fixed the remaining (very simple) compilation issues. So the PR looks good to me now.

@richeldichel
richeldichel merged commit 3ad608a into KATRIN-Experiment:main Sep 4, 2026
6 checks passed
@2xB
2xB deleted the fix_ci_root branch September 4, 2026 12:56
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