| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| # file Copyright.txt or https://cmake.org/licensing for details. |
| |
| #.rst: |
| # FindPostgreSQL |
| # -------------- |
| # |
| # Find the PostgreSQL installation. |
| # |
| # This module defines |
| # |
| # :: |
| # |
| # 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 (since CMake 2.8.8) |
| |
| # ---------------------------------------------------------------------------- |
| # History: |
| # This module is derived from the module originally found in the VTK source tree. |
| # |
| # ---------------------------------------------------------------------------- |
| # Note: |
| # PostgreSQL_ADDITIONAL_VERSIONS is a variable that can be used to set the |
| # version mumber of the implementation of PostgreSQL. |
| # In Windows the default installation of PostgreSQL uses that as part of the path. |
| # E.g C:\Program Files\PostgreSQL\8.4. |
| # Currently, the following version numbers are known to this module: |
| # "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0" |
| # |
| # To use this variable just do something like this: |
| # set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4") |
| # before calling find_package(PostgreSQL) in your CMakeLists.txt file. |
| # This will mean that the versions you set here will be found first in the order |
| # specified before the default ones are searched. |
| # |
| # ---------------------------------------------------------------------------- |
| # You may need to manually set: |
| # PostgreSQL_INCLUDE_DIR - the path to where the PostgreSQL include files are. |
| # PostgreSQL_LIBRARY_DIR - The path to where the PostgreSQL library files are. |
| # If FindPostgreSQL.cmake cannot find the include files or the library files. |
| # |
| # ---------------------------------------------------------------------------- |
| # The following variables are set if PostgreSQL is found: |
| # PostgreSQL_FOUND - Set to true when PostgreSQL is found. |
| # PostgreSQL_INCLUDE_DIRS - Include directories for PostgreSQL |
| # PostgreSQL_LIBRARY_DIRS - Link directories for PostgreSQL libraries |
| # PostgreSQL_LIBRARIES - The PostgreSQL libraries. |
| # |
| # ---------------------------------------------------------------------------- |
| # If you have installed PostgreSQL in a non-standard location. |
| # (Please note that in the following comments, it is assumed that <Your Path> |
| # points to the root directory of the include directory of PostgreSQL.) |
| # Then you have three options. |
| # 1) After CMake runs, set PostgreSQL_INCLUDE_DIR to <Your Path>/include and |
| # PostgreSQL_LIBRARY_DIR to wherever the library pq (or libpq in windows) is |
| # 2) Use CMAKE_INCLUDE_PATH to set a path to <Your Path>/PostgreSQL<-version>. This will allow find_path() |
| # to locate PostgreSQL_INCLUDE_DIR by utilizing the PATH_SUFFIXES option. e.g. In your CMakeLists.txt file |
| # set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "<Your Path>/include") |
| # 3) Set an environment variable called ${PostgreSQL_ROOT} that points to the root of where you have |
| # installed PostgreSQL, e.g. <Your Path>. |
| # |
| # ---------------------------------------------------------------------------- |
| |
| set(PostgreSQL_INCLUDE_PATH_DESCRIPTION "top-level directory containing the PostgreSQL include directories. E.g /usr/local/include/PostgreSQL/8.4 or C:/Program Files/PostgreSQL/8.4/include") |
| set(PostgreSQL_INCLUDE_DIR_MESSAGE "Set the PostgreSQL_INCLUDE_DIR cmake cache entry to the ${PostgreSQL_INCLUDE_PATH_DESCRIPTION}") |
| set(PostgreSQL_LIBRARY_PATH_DESCRIPTION "top-level directory containing the PostgreSQL libraries.") |
| set(PostgreSQL_LIBRARY_DIR_MESSAGE "Set the PostgreSQL_LIBRARY_DIR cmake cache entry to the ${PostgreSQL_LIBRARY_PATH_DESCRIPTION}") |
| set(PostgreSQL_ROOT_DIR_MESSAGE "Set the PostgreSQL_ROOT system variable to where PostgreSQL is found on the machine E.g C:/Program Files/PostgreSQL/8.4") |
| |
| |
| set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS} |
| "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0") |
| |
| # Define additional search paths for root directories. |
| set( PostgreSQL_ROOT_DIRECTORIES |
| ENV PostgreSQL_ROOT |
| ${PostgreSQL_ROOT} |
| ) |
| foreach(suffix ${PostgreSQL_KNOWN_VERSIONS}) |
| if(WIN32) |
| list(APPEND PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES |
| "PostgreSQL/${suffix}/lib") |
| list(APPEND PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES |
| "PostgreSQL/${suffix}/include") |
| list(APPEND PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES |
| "PostgreSQL/${suffix}/include/server") |
| endif() |
| if(UNIX) |
| list(APPEND PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES |
| "pgsql-${suffix}/lib") |
| list(APPEND PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES |
| "pgsql-${suffix}/include") |
| list(APPEND PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES |
| "postgresql/${suffix}/server" |
| "pgsql-${suffix}/include/server") |
| endif() |
| endforeach() |
| |
| # |
| # Look for an installation. |
| # |
| find_path(PostgreSQL_INCLUDE_DIR |
| NAMES libpq-fe.h |
| PATHS |
| # Look in other places. |
| ${PostgreSQL_ROOT_DIRECTORIES} |
| PATH_SUFFIXES |
| pgsql |
| postgresql |
| include |
| ${PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES} |
| # Help the user find it if we cannot. |
| DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}" |
| ) |
| |
| find_path(PostgreSQL_TYPE_INCLUDE_DIR |
| NAMES catalog/pg_type.h |
| PATHS |
| # Look in other places. |
| ${PostgreSQL_ROOT_DIRECTORIES} |
| PATH_SUFFIXES |
| postgresql |
| pgsql/server |
| postgresql/server |
| include/server |
| ${PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES} |
| # Help the user find it if we cannot. |
| DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}" |
| ) |
| |
| # The PostgreSQL library. |
| set (PostgreSQL_LIBRARY_TO_FIND pq) |
| # Setting some more prefixes for the library |
| set (PostgreSQL_LIB_PREFIX "") |
| if ( WIN32 ) |
| set (PostgreSQL_LIB_PREFIX ${PostgreSQL_LIB_PREFIX} "lib") |
| set (PostgreSQL_LIBRARY_TO_FIND ${PostgreSQL_LIB_PREFIX}${PostgreSQL_LIBRARY_TO_FIND}) |
| endif() |
| |
| find_library(PostgreSQL_LIBRARY |
| NAMES ${PostgreSQL_LIBRARY_TO_FIND} |
| PATHS |
| ${PostgreSQL_ROOT_DIRECTORIES} |
| PATH_SUFFIXES |
| lib |
| ${PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES} |
| # Help the user find it if we cannot. |
| DOC "The ${PostgreSQL_LIBRARY_DIR_MESSAGE}" |
| ) |
| get_filename_component(PostgreSQL_LIBRARY_DIR ${PostgreSQL_LIBRARY} PATH) |
| |
| if (PostgreSQL_INCLUDE_DIR) |
| # Some platforms include multiple pg_config.hs for multi-lib configurations |
| # This is a temporary workaround. A better solution would be to compile |
| # a dummy c file and extract the value of the symbol. |
| file(GLOB _PG_CONFIG_HEADERS "${PostgreSQL_INCLUDE_DIR}/pg_config*.h") |
| 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() |
| unset(pgsql_version_str) |
| endif() |
| |
| # Did we find anything? |
| include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) |
| find_package_handle_standard_args(PostgreSQL |
| REQUIRED_VARS PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR |
| VERSION_VAR PostgreSQL_VERSION_STRING) |
| set(PostgreSQL_FOUND ${POSTGRESQL_FOUND}) |
| |
| # Now try to get the include and library path. |
| if(PostgreSQL_FOUND) |
| set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR} ${PostgreSQL_TYPE_INCLUDE_DIR} ) |
| set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR} ) |
| set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY}) |
| endif() |
| |
| mark_as_advanced(PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR PostgreSQL_LIBRARY ) |