Warning, /libraries/kdb/cmake/modules/FindPostgreSQL.cmake is written in an unsupported language. File is not indexed.

0001 #.rst:
0002 # FindPostgreSQL
0003 # --------------
0004 #
0005 # Find the PostgreSQL installation.
0006 #
0007 # In Windows, we make the assumption that, if the PostgreSQL files are
0008 # installed, the default directory will be C:\Program Files\PostgreSQL.
0009 #
0010 # This module defines
0011 #
0012 # ::
0013 #
0014 #   PostgreSQL_LIBRARIES - the PostgreSQL libraries needed for linking
0015 #   PostgreSQL_INCLUDE_DIRS - the directories of the PostgreSQL headers
0016 #   PostgreSQL_VERSION_STRING - the version of PostgreSQL found (since CMake 2.8.8)
0017 
0018 #=============================================================================
0019 # Copyright 2004-2009 Kitware, Inc.
0020 #
0021 # Distributed under the OSI-approved BSD License (the "License");
0022 # see accompanying file Copyright.txt for details.
0023 #
0024 # This software is distributed WITHOUT ANY WARRANTY; without even the
0025 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
0026 # See the License for more information.
0027 #=============================================================================
0028 # (To distribute this file outside of CMake, substitute the full
0029 #  License text for the above reference.)
0030 
0031 # ----------------------------------------------------------------------------
0032 # History:
0033 # This module is derived from the module originally found in the VTK source tree.
0034 #
0035 # ----------------------------------------------------------------------------
0036 # Note:
0037 # PostgreSQL_ADDITIONAL_VERSIONS is a variable that can be used to set the
0038 # version mumber of the implementation of PostgreSQL.
0039 # In Windows the default installation of PostgreSQL uses that as part of the path.
0040 # E.g C:\Program Files\PostgreSQL\8.4.
0041 # Currently, the following version numbers are known to this module:
0042 # "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0"
0043 #
0044 # To use this variable just do something like this:
0045 # set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4")
0046 # before calling find_package(PostgreSQL) in your CMakeLists.txt file.
0047 # This will mean that the versions you set here will be found first in the order
0048 # specified before the default ones are searched.
0049 #
0050 # ----------------------------------------------------------------------------
0051 # You may need to manually set:
0052 #  PostgreSQL_INCLUDE_DIR  - the path to where the PostgreSQL include files are.
0053 #  PostgreSQL_LIBRARY_DIR  - The path to where the PostgreSQL library files are.
0054 # If FindPostgreSQL.cmake cannot find the include files or the library files.
0055 #
0056 # ----------------------------------------------------------------------------
0057 # The following variables are set if PostgreSQL is found:
0058 #  PostgreSQL_FOUND         - Set to true when PostgreSQL is found.
0059 #  PostgreSQL_INCLUDE_DIRS  - Include directories for PostgreSQL
0060 #  PostgreSQL_LIBRARY_DIRS  - Link directories for PostgreSQL libraries
0061 #  PostgreSQL_LIBRARIES     - The PostgreSQL libraries.
0062 #
0063 # ----------------------------------------------------------------------------
0064 # If you have installed PostgreSQL in a non-standard location.
0065 # (Please note that in the following comments, it is assumed that <Your Path>
0066 # points to the root directory of the include directory of PostgreSQL.)
0067 # Then you have three options.
0068 # 1) After CMake runs, set PostgreSQL_INCLUDE_DIR to <Your Path>/include and
0069 #    PostgreSQL_LIBRARY_DIR to wherever the library pq (or libpq in windows) is
0070 # 2) Use CMAKE_INCLUDE_PATH to set a path to <Your Path>/PostgreSQL<-version>. This will allow find_path()
0071 #    to locate PostgreSQL_INCLUDE_DIR by utilizing the PATH_SUFFIXES option. e.g. In your CMakeLists.txt file
0072 #    set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "<Your Path>/include")
0073 # 3) Set an environment variable called ${PostgreSQL_ROOT} that points to the root of where you have
0074 #    installed PostgreSQL, e.g. <Your Path>.
0075 #
0076 # ----------------------------------------------------------------------------
0077 
0078 include(FeatureSummary)
0079 set_package_properties(PostgreSQL
0080     PROPERTIES DESCRIPTION "C API to PostgreSQL (libpq)" URL "https://www.postgresql.org")
0081 
0082 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")
0083 set(PostgreSQL_INCLUDE_DIR_MESSAGE "Set the PostgreSQL_INCLUDE_DIR cmake cache entry to the ${PostgreSQL_INCLUDE_PATH_DESCRIPTION}")
0084 set(PostgreSQL_LIBRARY_PATH_DESCRIPTION "top-level directory containing the PostgreSQL libraries.")
0085 set(PostgreSQL_LIBRARY_DIR_MESSAGE "Set the PostgreSQL_LIBRARY_DIR cmake cache entry to the ${PostgreSQL_LIBRARY_PATH_DESCRIPTION}")
0086 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")
0087 
0088 set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS}
0089     "16" "15" "14" "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0")
0090 
0091 # Define additional search paths for root directories.
0092 foreach (suffix ${PostgreSQL_KNOWN_VERSIONS} )
0093   if (WIN32)
0094     set(PostgreSQL_ADDITIONAL_SEARCH_PATHS ${PostgreSQL_ADDITIONAL_SEARCH_PATHS} "C:/Program Files/PostgreSQL/${suffix}")
0095   else()
0096     set(PostgreSQL_ADDITIONAL_SEARCH_PATHS ${PostgreSQL_ADDITIONAL_SEARCH_PATHS} "/usr/include/postgresql/${suffix}/server")
0097   endif()
0098 endforeach()
0099 
0100 # Use pkg-config to get the directories and then use these values in the find_path()
0101 # and find_library() calls.
0102 if(NOT WIN32)
0103   find_package(PkgConfig)
0104   pkg_check_modules(PC_LIBPQ QUIET libpq)
0105   set(LIBPQ_DEFINITIONS ${PC_LIBPQ_CFLAGS_OTHER})
0106 endif()
0107 
0108 set( PostgreSQL_ROOT_DIRECTORIES
0109    ENV PostgreSQL_ROOT
0110    ${PostgreSQL_ROOT}
0111    ${PostgreSQL_ADDITIONAL_SEARCH_PATHS}
0112    ${PC_LIBPQ_INCLUDEDIR}
0113    ${PC_LIBPQ_INCLUDE_DIRS}
0114 )
0115 
0116 #
0117 # Look for an installation.
0118 #
0119 find_path(PostgreSQL_INCLUDE_DIR
0120   NAMES libpq-fe.h
0121   PATHS
0122    # Look in other places.
0123    ${PostgreSQL_ROOT_DIRECTORIES}
0124   PATH_SUFFIXES
0125     pgsql
0126     postgresql
0127     include
0128   # Help the user find it if we cannot.
0129   DOC "${PostgreSQL_INCLUDE_DIR_MESSAGE}"
0130 )
0131 
0132 find_path(PostgreSQL_TYPE_INCLUDE_DIR
0133   NAMES catalog/pg_type.h
0134   PATHS
0135    # Look in other places.
0136    ${PostgreSQL_ROOT_DIRECTORIES}
0137   PATH_SUFFIXES
0138     postgresql
0139     pgsql/server
0140     postgresql/server
0141     include/server
0142   # Help the user find it if we cannot.
0143   DOC "${PostgreSQL_INCLUDE_DIR_MESSAGE}"
0144 )
0145 
0146 # The PostgreSQL library.
0147 if(PC_LIBPQ_LIBRARIES)
0148     set(PostgreSQL_LIBRARY_TO_FIND ${PC_LIBPQ_LIBRARIES})
0149 else()
0150     set(PostgreSQL_LIBRARY_TO_FIND pq)
0151 endif()
0152 # Setting some more prefixes for the library
0153 set (PostgreSQL_LIB_PREFIX "")
0154 if ( WIN32 )
0155   set (PostgreSQL_LIB_PREFIX "lib")
0156   set ( PostgreSQL_LIBRARY_TO_FIND ${PostgreSQL_LIB_PREFIX}${PostgreSQL_LIBRARY_TO_FIND})
0157 endif()
0158 
0159 find_library( PostgreSQL_LIBRARY
0160  NAMES ${PostgreSQL_LIBRARY_TO_FIND}
0161  PATHS
0162    ${PostgreSQL_ROOT_DIRECTORIES}
0163  PATH_SUFFIXES
0164    lib
0165  # Help the user find it if we cannot.
0166  DOC "${PostgreSQL_LIBRARY_DIR_MESSAGE}"
0167 )
0168 get_filename_component(PostgreSQL_LIBRARY_DIR ${PostgreSQL_LIBRARY} PATH)
0169 
0170 if (PC_LIBPQ_VERSION)
0171   set(PostgreSQL_VERSION_STRING ${PC_LIBPQ_VERSION})
0172 else()
0173   if (PostgreSQL_INCLUDE_DIR)
0174     # Some platforms include multiple pg_config.hs for multi-lib configurations
0175     # This is a temporary workaround.  A better solution would be to compile
0176     # a dummy c file and extract the value of the symbol.
0177     file(GLOB _PG_CONFIG_HEADERS "${PostgreSQL_INCLUDE_DIR}/pg_config*.h")
0178     foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS})
0179       if(EXISTS "${_PG_CONFIG_HEADER}")
0180         file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str
0181              REGEX "^#define[\t ]+PG_VERSION[\t ]+\".*\"")
0182         if(pgsql_version_str)
0183           string(REGEX REPLACE "^#define[\t ]+PG_VERSION[\t ]+\"([^\"]*)\".*"
0184                  "\\1" PostgreSQL_VERSION_STRING "${pgsql_version_str}")
0185           break()
0186         endif()
0187       endif()
0188     endforeach()
0189     unset(pgsql_version_str)
0190   endif()
0191 endif()
0192 
0193 # Did we find anything?
0194 include(FindPackageHandleStandardArgs)
0195 find_package_handle_standard_args(PostgreSQL
0196                                   REQUIRED_VARS PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR
0197                                   VERSION_VAR PostgreSQL_VERSION_STRING)
0198 
0199 # Now try to get the include and library path.
0200 if(PostgreSQL_FOUND)
0201 
0202   set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR} ${PostgreSQL_TYPE_INCLUDE_DIR} )
0203   if(WIN32)
0204     list(APPEND PostgreSQL_INCLUDE_DIRS ${PostgreSQL_TYPE_INCLUDE_DIR}/port/win32)
0205   endif()
0206   set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR} )
0207   set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY})
0208 
0209   #message("Final PostgreSQL include dir: ${PostgreSQL_INCLUDE_DIRS}")
0210   #message("Final PostgreSQL library dir: ${PostgreSQL_LIBRARY_DIRS}")
0211   #message("Final PostgreSQL libraries:   ${PostgreSQL_LIBRARIES}")
0212 endif()
0213 
0214 mark_as_advanced(PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR PostgreSQL_LIBRARY PostgreSQL_ADDITIONAL_SEARCH_PATHS)