Skip to content

Rebuild so the installed config declares its dependencies - #161

Merged
ryanmrichard merged 1 commit into
masterfrom
rebuild_against_nwxcmake_0_2_2
Sep 14, 2026
Merged

ryanmrichard merged 1 commit into
masterfrom
rebuild_against_nwxcmake_0_2_2

Conversation

@ryanmrichard

Copy link
Copy Markdown
Member

Summary

Empty commit — no source change. This exists only to republish the wheel against NWXCMake 0.2.2, which fixed the generated <name>Config.cmake (NWChemEx/NWXCMake#87).

Why

The wheels currently on PyPI ship a config that is two lines long:

get_filename_component(_IL_CONFIG_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
include("${_IL_CONFIG_DIR}/parallelzoneTargets.cmake")

It finds nothing, while install(EXPORT) writes the link interface verbatim — for this package MPI::MPI_CXX;spdlog::spdlog;cereal::cereal. Those imported targets never get created, so consumers get parallelzone_FOUND FALSE, and anything that resolved this package from its wheel is left with a half-built nwx::parallelzone whose dangling link interface kills CMake at generate time.

That is the SCF nightly failure on master, red on all four legs every night since 2026-09-10.

Why this repo first

The NWXCMake fix only takes effect for newly built wheels, so all seven repos in SCF's resolution closure (utilities, parallelzone, wtf, tensorwrapper, pluginplay, chemist, simde) need rebuilding. Order doesn't matter — a wheel build's isolated venv has no ecosystem wheels, so each repo resolves its dependencies from git master and picks up the fixed NWXCMake regardless.

ParallelZone goes first as the verification case because its link interface is non-empty: it exercises both the emitted find_dependency() calls and the MPI COMPONENTS CXX handling. The leaf packages (utilities, wtf) have empty interfaces, so their configs are byte-identical before and after the fix and would prove nothing.

What to check after merging

The published wheel's lib/cmake/parallelzone/parallelzoneConfig.cmake should now contain find_dependency calls rather than the bare two-line include.

Note this is also the first compiled release since NWChemEx/.github#192, which fixed a cibuildwheel defect that would have failed the wheel build on both platforms.

🤖 Generated with Claude Code

No source change. This exists only to republish the wheel against NWXCMake
0.2.2, which fixed the generated <name>Config.cmake (NWChemEx/NWXCMake#87).

The wheels currently on PyPI ship a two-line config that includes their
targets file and finds nothing, so the exported link interface --
MPI::MPI_CXX, spdlog::spdlog, cereal::cereal here -- references imported
targets that never get created. Consumers see parallelzone_FOUND FALSE, and
anything that resolved this package from its wheel ends up with a half-built
nwx::parallelzone whose dangling link interface kills CMake at generate time.
That is the SCF nightly failure on master since 2026-09-10.

The fix only takes effect for newly built wheels, so each repo in the
ecosystem has to be rebuilt. ParallelZone goes first because its link
interface is non-empty and exercises both the emitted find_dependency() calls
and the MPI COMPONENTS CXX handling, unlike the leaf packages whose
interfaces are empty and whose configs are unchanged by the fix.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ryanmrichard
ryanmrichard merged commit 02543c1 into master Sep 14, 2026
13 checks passed
@ryanmrichard
ryanmrichard deleted the rebuild_against_nwxcmake_0_2_2 branch September 14, 2026 16:26
@github-actions

Copy link
Copy Markdown
Contributor

🚀 [bumpr] Bumped!
New version:v0.1.44
Changes:v0.1.43...v0.1.44

ryanmrichard added a commit to NWChemEx/.github that referenced this pull request Sep 14, 2026
The Linux leg's import check has never been able to pass for an MPI-linked
wheel:

  ImportError: libmpi.so.40: cannot open shared object file

By design the Linux wheel does not vendor MPI --
CIBW_REPAIR_WHEEL_COMMAND_LINUX excludes libmpi/libopen-rte/libopen-pal so it
links against the runtime system's OpenMPI, because vendoring is a dead end
(auditwheel bundles shared libraries but never the bin/orted that OpenMPI's
singleton startup needs). The other half of that contract is that something
must supply MPI wherever the wheel is imported, and nothing did:
CIBW_BEFORE_ALL_LINUX builds OpenMPI into /usr/local/openmpi inside the
manylinux *container*, while "Verify Wheel Installs" runs on the runner host.

Installing libopenmpi-dev/openmpi-bin there makes the host resemble the end
user's machine the wheel already documents as a requirement. Same packages
setup_nwx_dev_env uses, so the ABI matches what CIBW_BEFORE_ALL_LINUX compiled
against.

macOS is unaffected -- delocate vendors MPI into the wheel there -- which is
why the ParallelZone release that surfaced this passed on macos-14 and failed
only on Linux.

This was masked rather than new: import_check.py arrived in 65681cd, the same
commit that introduced the SKBUILD_CMAKE_DEFINE quoting defect fixed in #192.
Every build died before reaching verification, so the check had never actually
run on Linux. Found by NWChemEx/ParallelZone#161.

Co-authored-by: Claude Opus 5 <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.

1 participant