build: single-source the ALPS version, add ALPSConfigVersion.cmake - #114
Merged
Conversation
version.h.in declared ALPS_VERSION_MAJOR/MINOR/PATCH with cmakedefine, which emits "/* #undef NAME */" when the substituted value is false-y. CMake counts 0 as false-y, so any x.y.0 release generated a header with that component silently missing. 2.4.0 would have tripped it. Use a plain #define for every macro the build unconditionally sets. Keep cmakedefine only for ALPS_XML_ALTERNATE_DIR, which the build never sets and parser/xslt_path.C guards with #ifdef. Also add ALPS_VERSION_NUMBER/ALPS_VERSION_NUM() for preprocessor version comparisons (BOOST_VERSION packing), and drop two macros: ALPS_SVN_REVISION, which expanded a variable unset since the SVN migration and was always #undef, and ALPS_SRCDIR, which baked the build machine's source path into an installed header for one line of pconfig output. Refs #95 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The version was hardcoded in CMakeLists.txt and had already drifted: CMake said 2.3.3, the newest tag is v2.3.4, and pyalps' pyproject.toml says 2.3.4b1. Put the numeric release in ALPS_VERSION.txt, read it in cmake/ALPSVersion.cmake before project(), and derive ALPS_VERSION_MAJOR/MINOR/PATCH from PROJECT_VERSION_*. The file holds MAJOR.MINOR.PATCH and nothing else, because project(VERSION) rejects non-numeric input and neither SOVERSION nor find_package() matching has any notion of prerelease ordering. A malformed file is rejected with a message naming the file, rather than CMake's bare "VERSION format invalid". Corrects the version to 2.3.4 in passing. ALPS_VERSION_BUILD, which was always empty, becomes the ALPS_VERSION_PRERELEASE cache variable: it carries "beta.2" into display strings while the numeric version stays clean. "Prerelease" because a later change adds real build metadata (a git hash), and two similarly-named slots would confuse. Generate and install ALPSConfigVersion.cmake. Without it find_package(ALPS <version>) accepted any version it found and silently discarded the constraint. SameMinorVersion: within 2.3.x a patch release is drop-in, a minor bump is not guaranteed to be. Note this is stricter than the SOVERSION of MAJOR alone advertises; reconciling the soname is a packaging-visible change and is left alone here. Derive ALPS_YEAR with string(TIMESTAMP), which honours SOURCE_DATE_EPOCH, so distro and conda reproducible builds still get a stable year. ALPS_SRCDIR is dropped from the installed header by the preceding commit, but two tests use it to locate reference .h5 inputs. Give those two targets a private compile definition instead: a build-tree path belongs there, not in an installed public header. Refs #95 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
vws100
approved these changes
Jul 31, 2026
Ooolab
approved these changes
Aug 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #95. Targets
cleanup/root-layout(#112) — it restructures the same files, so this continues it and must merge after. Also carries the commit from #113, which is closed in favour of this PR.The version was hardcoded in
CMakeLists.txtand had already drifted three ways: CMake said2.3.3, the newest tag isv2.3.4,pyalps/pyproject.tomlsays2.3.4b1.ALPS_VERSION.txtholds the release, read bycmake/ALPSVersion.cmakebeforeproject();ALPS_VERSION_MAJOR/MINOR/PATCHnow derive fromPROJECT_VERSION_*. Numeric core only —project(VERSION)rejects non-numeric input, and neitherSOVERSIONnorfind_package()matching has a notion of prerelease ordering. A malformed file fails with a message naming the file instead of CMake's bareVERSION format invalid. Corrects the version to 2.3.4.ALPS_VERSION_PRERELEASEreplaces the always-emptyALPS_VERSION_BUILD. Carriesbeta.2into display strings while the numeric version stays clean. Named "prerelease" because a follow-up adds real build metadata (a git hash) and two similar slots would confuse.ALPSConfigVersion.cmakeis generated and installed. Without it,find_package(ALPS <version>)accepted anything and silently discarded the constraint. Verified against an installed 2.3.4:SameMinorVersionbecause a patch release within 2.3.x is drop-in and a minor bump is not guaranteed to be. Note that is stricter than theSOVERSIONof MAJOR alone advertises — reconciling the soname is packaging-visible and deliberately not touched here.ALPS_YEARcomes fromstring(TIMESTAMP), which honoursSOURCE_DATE_EPOCH, so distro and conda reproducible builds keep a stable year.ALPS_SRCDIRleaves the installed header. Two tests use it to find reference.h5inputs, so those two targets get a private compile definition — a build-tree path belongs there, not in an installed public header.Verified by configuring real ALPS (version,
version.h, both generated config files correct), thefind_packagematrix above, malformed-version-file rejection, and building and running the two affected tests — both pass.