Merge topic 'FindPostgreSQL-target'

575e2cc35d FindPostgreSQL: extract the actual version number
7413f29fe6 Tests/FindPostgreSQL: add a test for FindPostgreSQL
d2235fd253 FindPostgreSQL: add an imported target
7a801b7dfb FindPostgreSQL: Modernize documentation layout

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2555
This commit is contained in:
Brad King 2018-11-06 16:40:09 +00:00 committed by Kitware Robot
commit bfdd1ba604
6 changed files with 99 additions and 9 deletions

View File

@ -0,0 +1,4 @@
FindPostgreSQL-target
---------------------
* The :module:`FindPostgreSQL` module now provides an imported target.

View File

@ -7,14 +7,27 @@ FindPostgreSQL
Find the PostgreSQL installation. Find the PostgreSQL installation.
This module defines IMPORTED Targets
^^^^^^^^^^^^^^^^
:: This module defines :prop_tgt:`IMPORTED` target ``PostgreSQL::PostgreSQL``
if PostgreSQL has been found.
PostgreSQL_LIBRARIES - the PostgreSQL libraries needed for linking Result Variables
PostgreSQL_INCLUDE_DIRS - the directories of the PostgreSQL headers ^^^^^^^^^^^^^^^^
PostgreSQL_LIBRARY_DIRS - the link directories for PostgreSQL libraries
PostgreSQL_VERSION_STRING - the version of PostgreSQL found (since CMake 2.8.8) This module will set the following variables in your project:
``PostgreSQL_FOUND``
True if PostgreSQL is found.
``PostgreSQL_LIBRARIES``
the PostgreSQL libraries needed for linking
``PostgreSQL_INCLUDE_DIRS``
the directories of the PostgreSQL headers
``PostgreSQL_LIBRARY_DIRS``
the link directories for PostgreSQL libraries
``PostgreSQL_VERSION_STRING``
the version of PostgreSQL found
#]=======================================================================] #]=======================================================================]
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
@ -49,6 +62,8 @@ This module defines
# PostgreSQL_LIBRARY_DIRS - Link directories for PostgreSQL libraries # PostgreSQL_LIBRARY_DIRS - Link directories for PostgreSQL libraries
# PostgreSQL_LIBRARIES - The PostgreSQL libraries. # PostgreSQL_LIBRARIES - The PostgreSQL libraries.
# #
# The ``PostgreSQL::PostgreSQL`` imported target is also created.
#
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# If you have installed PostgreSQL in a non-standard location. # If you have installed PostgreSQL in a non-standard location.
# (Please note that in the following comments, it is assumed that <Your Path> # (Please note that in the following comments, it is assumed that <Your Path>
@ -160,14 +175,34 @@ if (PostgreSQL_INCLUDE_DIR)
foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS}) foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
if(EXISTS "${_PG_CONFIG_HEADER}") if(EXISTS "${_PG_CONFIG_HEADER}")
file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str 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) if(pgsql_version_str)
string(REGEX REPLACE "^#define[\t ]+PG_VERSION[\t ]+\"([^\"]*)\".*" string(REGEX REPLACE "^#define[\t ]+PG_VERSION_NUM[\t ]+([0-9]*).*"
"\\1" PostgreSQL_VERSION_STRING "${pgsql_version_str}") "\\1" _PostgreSQL_VERSION_NUM "${pgsql_version_str}")
break() break()
endif() endif()
endif() endif()
endforeach() 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) unset(pgsql_version_str)
endif() endif()
@ -180,6 +215,12 @@ set(PostgreSQL_FOUND ${POSTGRESQL_FOUND})
# Now try to get the include and library path. # Now try to get the include and library path.
if(PostgreSQL_FOUND) if(PostgreSQL_FOUND)
if (NOT TARGET PostgreSQL::PostgreSQL)
add_library(PostgreSQL::PostgreSQL UNKNOWN IMPORTED)
set_target_properties(PostgreSQL::PostgreSQL PROPERTIES
IMPORTED_LOCATION "${PostgreSQL_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${PostgreSQL_INCLUDE_DIR};${PostgreSQL_TYPE_INCLUDE_DIR}")
endif ()
set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR} ${PostgreSQL_TYPE_INCLUDE_DIR} ) set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR} ${PostgreSQL_TYPE_INCLUDE_DIR} )
set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR} ) set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR} )
set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY}) set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY})

View File

@ -1465,6 +1465,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
add_subdirectory(FindPatch) add_subdirectory(FindPatch)
endif() endif()
if(CMake_TEST_FindPostgreSQL)
add_subdirectory(FindPostgreSQL)
endif()
if(CMake_TEST_FindProtobuf) if(CMake_TEST_FindProtobuf)
add_subdirectory(FindProtobuf) add_subdirectory(FindProtobuf)
endif() endif()

View File

@ -0,0 +1,10 @@
add_test(NAME FindPostgreSQL.Test COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
--build-and-test
"${CMake_SOURCE_DIR}/Tests/FindPostgreSQL/Test"
"${CMake_BINARY_DIR}/Tests/FindPostgreSQL/Test"
${build_generator_args}
--build-project TestFindPostgreSQL
--build-options ${build_options}
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)

View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.10)
project(TestFindPostgreSQL C)
include(CTest)
find_package(PostgreSQL REQUIRED)
add_definitions(-DCMAKE_EXPECTED_POSTGRESQL_VERSION="${PostgreSQL_VERSION_STRING}")
add_executable(test_tgt main.c)
target_link_libraries(test_tgt PostgreSQL::PostgreSQL)
add_test(NAME test_tgt COMMAND test_tgt)
add_executable(test_var main.c)
target_include_directories(test_var PRIVATE ${PostgreSQL_INCLUDE_DIRS})
target_link_libraries(test_var PRIVATE ${PostgreSQL_LIBRARIES})
add_test(NAME test_var COMMAND test_var)

View File

@ -0,0 +1,15 @@
#include <libpq-fe.h>
#include <stdio.h>
#include <string.h>
int main()
{
int version = PQlibVersion();
int major = version / 10000;
int minor = version % 10000;
char version_string[100];
snprintf(version_string, sizeof(version_string), "%d.%d", major, minor);
printf("Found PostgreSQL version %s, expected version %s\n", version_string,
CMAKE_EXPECTED_POSTGRESQL_VERSION);
return strcmp(version_string, CMAKE_EXPECTED_POSTGRESQL_VERSION);
}