mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
FindPostgreSQL: support version encoding used in pre-10 releases
With the 10.x release, PostgreSQL upstream started encoding the version as `MMmmmm` where `M` is major and `m` is minor. Prior to that, `MMmmPP` was used where `P` was the patch number. Detect this difference and decode it based on the used encoding. Fixes: #19912
This commit is contained in:
@@ -184,11 +184,22 @@ if (PostgreSQL_INCLUDE_DIR)
|
|||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
if (_PostgreSQL_VERSION_NUM)
|
if (_PostgreSQL_VERSION_NUM)
|
||||||
math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000")
|
# 9.x and older encoding
|
||||||
math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000")
|
if (_PostgreSQL_VERSION_NUM LESS 100000)
|
||||||
set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}")
|
math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000")
|
||||||
unset(_PostgreSQL_major_version)
|
math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000 / 100")
|
||||||
unset(_PostgreSQL_minor_version)
|
math(EXPR _PostgreSQL_patch_version "${_PostgreSQL_VERSION_NUM} % 100")
|
||||||
|
set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}.${_PostgreSQL_patch_version}")
|
||||||
|
unset(_PostgreSQL_major_version)
|
||||||
|
unset(_PostgreSQL_minor_version)
|
||||||
|
unset(_PostgreSQL_patch_version)
|
||||||
|
else ()
|
||||||
|
math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000")
|
||||||
|
math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000")
|
||||||
|
set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}")
|
||||||
|
unset(_PostgreSQL_major_version)
|
||||||
|
unset(_PostgreSQL_minor_version)
|
||||||
|
endif ()
|
||||||
else ()
|
else ()
|
||||||
foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
|
foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
|
||||||
if(EXISTS "${_PG_CONFIG_HEADER}")
|
if(EXISTS "${_PG_CONFIG_HEADER}")
|
||||||
|
@@ -5,10 +5,19 @@
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int version = PQlibVersion();
|
int version = PQlibVersion();
|
||||||
int major = version / 10000;
|
|
||||||
int minor = version % 10000;
|
|
||||||
char version_string[100];
|
char version_string[100];
|
||||||
snprintf(version_string, sizeof(version_string), "%d.%d", major, minor);
|
// 9.x and older encoding.
|
||||||
|
if (version < 100000) {
|
||||||
|
int major = version / 10000;
|
||||||
|
int minor = version % 10000 / 100;
|
||||||
|
int patch = version % 100;
|
||||||
|
snprintf(version_string, sizeof(version_string), "%d.%d.%d", major, minor,
|
||||||
|
patch);
|
||||||
|
} else {
|
||||||
|
int major = version / 10000;
|
||||||
|
int minor = version % 10000;
|
||||||
|
snprintf(version_string, sizeof(version_string), "%d.%d", major, minor);
|
||||||
|
}
|
||||||
printf("Found PostgreSQL version %s, expected version %s\n", version_string,
|
printf("Found PostgreSQL version %s, expected version %s\n", version_string,
|
||||||
CMAKE_EXPECTED_POSTGRESQL_VERSION);
|
CMAKE_EXPECTED_POSTGRESQL_VERSION);
|
||||||
return strcmp(version_string, CMAKE_EXPECTED_POSTGRESQL_VERSION);
|
return strcmp(version_string, CMAKE_EXPECTED_POSTGRESQL_VERSION);
|
||||||
|
Reference in New Issue
Block a user