From a627f72cd60c665a13030766ffd3a1bd3587ce82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20S=C3=A1nchez?= Date: Sat, 20 Sep 2025 02:08:59 +0000 Subject: [PATCH] Add "Version" file and update version. --- CMakeLists.txt | 69 +++++++++++++++++++++++++----------- Eigen/Core | 3 ++ Eigen/Version | 14 ++++++++ Eigen/src/Core/util/Macros.h | 8 ++--- cmake/Version.in | 14 ++++++++ doc/Doxyfile.in | 2 +- 6 files changed, 82 insertions(+), 28 deletions(-) create mode 100644 Eigen/Version create mode 100644 cmake/Version.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 67f1bdfbe..ec979b4ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,15 +100,28 @@ endif() # Version Info. #============================================================================== -# Automatically parse the version number from header files. -file(READ "${PROJECT_SOURCE_DIR}/Eigen/src/Core/util/Macros.h" _eigen_version_header) -string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen_world_version_match "${_eigen_version_header}") -set(EIGEN_WORLD_VERSION "${CMAKE_MATCH_1}") -string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen_major_version_match "${_eigen_version_header}") -set(EIGEN_MAJOR_VERSION "${CMAKE_MATCH_1}") -string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen_minor_version_match "${_eigen_version_header}") -set(EIGEN_MINOR_VERSION "${CMAKE_MATCH_1}") -set(EIGEN_VERSION_NUMBER ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION}) +# If version information is not provided, automatically parse the version number +# from header files. +file(READ "${PROJECT_SOURCE_DIR}/Eigen/Version" _eigen_version_header) +if (NOT DEFINED EIGEN_WORLD_VERSION) + string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen_world_version_match "${_eigen_version_header}") + set(EIGEN_WORLD_VERSION "${CMAKE_MATCH_1}") +endif() +if (NOT DEFINED EIGEN_MAJOR_VERSION) + string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen_major_version_match "${_eigen_version_header}") + set(EIGEN_MAJOR_VERSION "${CMAKE_MATCH_1}") +endif() +if (NOT DEFINED EIGEN_MINOR_VERSION) + string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen_minor_version_match "${_eigen_version_header}") + set(EIGEN_MINOR_VERSION "${CMAKE_MATCH_1}") +endif() +if (NOT DEFINED EIGEN_PATCH_VERSION) + string(REGEX MATCH "define[ \t]+EIGEN_PATCH_VERSION[ \t]+([0-9]+)" _eigen_patch_version_match "${_eigen_version_header}") + set(EIGEN_PATCH_VERSION "${CMAKE_MATCH_1}") +endif() +if (NOT DEFINED EIGEN_PRERELEASE_VERSION) + set(EIGEN_PRERELEASE_VERSION "dev") +endif() # If we are in a git repo, extract a changeset. if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git) @@ -119,16 +132,32 @@ endif() # extract the git rev number from the git output... if(EIGEN_GIT_OUTPUT) -string(REGEX MATCH "^([0-9;a-f]+).*" EIGEN_GIT_CHANGESET_MATCH "${EIGEN_GIT_OUTPUT}") -set(EIGEN_GIT_REVNUM "${CMAKE_MATCH_1}") + string(REGEX MATCH "^([0-9;a-f]+).*" EIGEN_GIT_CHANGESET_MATCH "${EIGEN_GIT_OUTPUT}") + set(EIGEN_GIT_REVNUM "${CMAKE_MATCH_1}") endif() -#...and show it next to the version number -if(EIGEN_GIT_REVNUM) - set(EIGEN_VERSION "${EIGEN_VERSION_NUMBER} (git rev ${EIGEN_GIT_REVNUM})") + +if (NOT DEFINED EIGEN_BUILD_VERSION AND DEFINED EIGEN_GIT_REVNUM) + string(SUBSTRING "${EIGEN_GIT_REVNUM}" 0 8 EIGEN_BUILD_VERSION) else() - set(EIGEN_VERSION "${EIGEN_VERSION_NUMBER}") + set(EIGEN_BUILD_VERSION "") endif() +# The EIGEN_VERSION_NUMBER must be of the form . +# The EIGEN_VERSION_STRING can contain the preprelease/build strings. +set(EIGEN_VERSION_NUMBER "${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION}.${EIGEN_PATCH_VERSION}") +set(EIGEN_VERSION_STRING "${EIGEN_VERSION_NUMBER}") +if (NOT "x${EIGEN_PRERELEASE_VERSION}" STREQUAL "x") + set(EIGEN_VERSION_STRING "${EIGEN_VERSION_STRING}-${EIGEN_PRERELEASE_VERSION}") +endif() +if (NOT "x${EIGEN_BUILD_VERSION}" STREQUAL "x") + set(EIGEN_VERSION_STRING "${EIGEN_VERSION_STRING}+${EIGEN_BUILD_VERSION}") +endif() + + +# Generate version file. +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/Version.in" + "${CMAKE_CURRENT_BINARY_DIR}/include/Eigen/Version") + #============================================================================== # Install Path Configuration. #============================================================================== @@ -176,11 +205,6 @@ endforeach() # Eigen Library. #============================================================================== -set ( EIGEN_VERSION_STRING ${EIGEN_VERSION_NUMBER} ) -set ( EIGEN_VERSION_MAJOR ${EIGEN_WORLD_VERSION} ) -set ( EIGEN_VERSION_MINOR ${EIGEN_MAJOR_VERSION} ) -set ( EIGEN_VERSION_PATCH ${EIGEN_MINOR_VERSION} ) - # Alias Eigen_*_DIR to Eigen3_*_DIR: set(Eigen_SOURCE_DIR ${Eigen3_SOURCE_DIR}) set(Eigen_BINARY_DIR ${Eigen3_BINARY_DIR}) @@ -212,6 +236,9 @@ if(EIGEN_BUILD_PKGCONFIG) endif() install(DIRECTORY Eigen DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel) +# Replace the "Version" header file with the generated one. +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/Eigen/Version + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen/ COMPONENT Devel) install(TARGETS eigen EXPORT Eigen3Targets) @@ -787,5 +814,5 @@ if(PROJECT_IS_TOP_LEVEL) endif() message(STATUS "") -message(STATUS "Configured Eigen ${EIGEN_VERSION_NUMBER}") +message(STATUS "Configured Eigen ${EIGEN_VERSION_STRING}") message(STATUS "") diff --git a/Eigen/Core b/Eigen/Core index 4b35b6c3d..4ce2ed972 100644 --- a/Eigen/Core +++ b/Eigen/Core @@ -11,6 +11,9 @@ #ifndef EIGEN_CORE_MODULE_H #define EIGEN_CORE_MODULE_H +// Eigen version information. +#include "Version" + // first thing Eigen does: stop the compiler from reporting useless warnings. #include "src/Core/util/DisableStupidWarnings.h" diff --git a/Eigen/Version b/Eigen/Version new file mode 100644 index 000000000..de4a594ad --- /dev/null +++ b/Eigen/Version @@ -0,0 +1,14 @@ +#ifndef EIGEN_VERSION_H +#define EIGEN_VERSION_H + +// The "WORLD" version will forever remain "3" for the "Eigen3" library. +#define EIGEN_WORLD_VERSION 3 +// As of Eigen3 5.0.0, we have moved to Semantic Versioning (semver.org). +#define EIGEN_MAJOR_VERSION 5 +#define EIGEN_MINOR_VERSION 0 +#define EIGEN_PATCH_VERSION 0 +#define EIGEN_PRERELEASE_VERSION "dev" +#define EIGEN_BUILD_VERSION "master" +#define EIGEN_VERSION_STRING "5.0.0-dev+master" + +#endif // EIGEN_VERSION_H diff --git a/Eigen/src/Core/util/Macros.h b/Eigen/src/Core/util/Macros.h index 919855597..35eb16136 100644 --- a/Eigen/src/Core/util/Macros.h +++ b/Eigen/src/Core/util/Macros.h @@ -17,13 +17,9 @@ // Eigen version and basic defaults //------------------------------------------------------------------------------------------ -#define EIGEN_WORLD_VERSION 3 -#define EIGEN_MAJOR_VERSION 4 -#define EIGEN_MINOR_VERSION 90 - #define EIGEN_VERSION_AT_LEAST(x, y, z) \ - (EIGEN_WORLD_VERSION > x || \ - (EIGEN_WORLD_VERSION >= x && (EIGEN_MAJOR_VERSION > y || (EIGEN_MAJOR_VERSION >= y && EIGEN_MINOR_VERSION >= z)))) + (EIGEN_MAJOR_VERSION > x || \ + (EIGEN_MAJOR_VERSION >= x && (EIGEN_MINOR_VERSION > y || (EIGEN_MINOR_VERSION >= y && EIGEN_PATCH_VERSION >= z)))) #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION Eigen::RowMajor diff --git a/cmake/Version.in b/cmake/Version.in new file mode 100644 index 000000000..513d1a6cc --- /dev/null +++ b/cmake/Version.in @@ -0,0 +1,14 @@ +#ifndef EIGEN_VERSION_H +#define EIGEN_VERSION_H + +// The "WORLD" version will forever remain "3" for the "Eigen3" library. +#define EIGEN_WORLD_VERSION 3 +// As of Eigen3 5.0.0, we have moved to Semantic Versioning (semver.org). +#define EIGEN_MAJOR_VERSION ${EIGEN_MAJOR_VERSION} +#define EIGEN_MINOR_VERSION ${EIGEN_MINOR_VERSION} +#define EIGEN_PATCH_VERSION ${EIGEN_PATCH_VERSION} +#define EIGEN_PRERELEASE_VERSION "${EIGEN_PRERELEASE_VERSION}" +#define EIGEN_BUILD_VERSION "${EIGEN_BUILD_VERSION}" +#define EIGEN_VERSION_STRING "${EIGEN_VERSION_STRING}" + +#endif // EIGEN_VERSION_H diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 0e582a75d..25a7e2e9a 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -1,6 +1,6 @@ # Doxyfile 1.13.0 PROJECT_NAME = ${EIGEN_DOXY_PROJECT_NAME} -PROJECT_NUMBER = ${EIGEN_VERSION} +PROJECT_NUMBER = ${EIGEN_VERSION_STRING} PROJECT_LOGO = ${Eigen_SOURCE_DIR}/doc/Eigen_Silly_Professor_64x64.png OUTPUT_DIRECTORY = ${Eigen_BINARY_DIR}/doc${EIGEN_DOXY_OUTPUT_DIRECTORY_SUFFIX} FULL_PATH_NAMES = YES