浏览代码

FindPostgreSQL: extract the actual version number

The `PG_VERSION` variable can be mangled by distributions to indicate
things like the name of the distro and package build numbers.

However, `PG_VERSION_NUM` is new in 8.2 (2006), so keep the old
extraction code around for old versions.
Ben Boeckel 7 年之前
父节点
当前提交
575e2cc35d
共有 1 个文件被更改,包括 23 次插入3 次删除
  1. 23 3
      Modules/FindPostgreSQL.cmake

+ 23 - 3
Modules/FindPostgreSQL.cmake

@@ -175,14 +175,34 @@ if (PostgreSQL_INCLUDE_DIR)
   foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
     if(EXISTS "${_PG_CONFIG_HEADER}")
       file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str
-           REGEX "^#define[\t ]+PG_VERSION[\t ]+\".*\"")
+           REGEX "^#define[\t ]+PG_VERSION_NUM[\t ]+.*")
       if(pgsql_version_str)
-        string(REGEX REPLACE "^#define[\t ]+PG_VERSION[\t ]+\"([^\"]*)\".*"
-               "\\1" PostgreSQL_VERSION_STRING "${pgsql_version_str}")
+        string(REGEX REPLACE "^#define[\t ]+PG_VERSION_NUM[\t ]+([0-9]*).*"
+               "\\1" _PostgreSQL_VERSION_NUM "${pgsql_version_str}")
         break()
       endif()
     endif()
   endforeach()
+  if (_PostgreSQL_VERSION_NUM)
+    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)
+  else ()
+    foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
+      if(EXISTS "${_PG_CONFIG_HEADER}")
+        file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str
+             REGEX "^#define[\t ]+PG_VERSION[\t ]+\".*\"")
+        if(pgsql_version_str)
+          string(REGEX REPLACE "^#define[\t ]+PG_VERSION[\t ]+\"([^\"]*)\".*"
+                 "\\1" PostgreSQL_VERSION_STRING "${pgsql_version_str}")
+          break()
+        endif()
+      endif()
+    endforeach()
+  endif ()
+  unset(_PostgreSQL_VERSION_NUM)
   unset(pgsql_version_str)
 endif()