| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- function(detect_code_compiled code macro msg)
- message(STATUS "Detecting ${msg}")
- check_cxx_source_compiles("${code}" "${macro}" FAIL_REGEX "warning")
- if(${macro})
- message(STATUS "Detecting ${msg} - supported")
- else()
- message(STATUS "Detecting ${msg} - not supported")
- endif()
- endfunction(detect_code_compiled)
- include(CheckIncludeFileCXX)
- include(CheckFunctionExists)
- include(CheckSymbolExists)
- include(CMakeDetermineCompileFeatures)
- include(CheckCXXSourceCompiles)
- include(CMakeFindDependencyMacro)
- if(NOT PostgreSQL_FOUND)
- if(POLICY CMP0074)
- cmake_policy(PUSH)
- # CMP0074 is `OLD` by `cmake_minimum_required(VERSION 3.7)`,
- # sets `NEW` to enable support CMake variable `PostgreSQL_ROOT`.
- cmake_policy(SET CMP0074 NEW)
- endif()
- find_package(PostgreSQL REQUIRED)
- if(POLICY CMP0074)
- cmake_policy(POP)
- endif()
- endif()
- check_function_exists("poll" PQXX_HAVE_POLL)
- set(CMAKE_REQUIRED_LIBRARIES pq)
- check_symbol_exists(
- PQencryptPasswordConn
- "${PostgreSQL_INCLUDE_DIR}/libpq-fe.h"
- PQXX_HAVE_PQENCRYPTPASSWORDCONN)
- check_symbol_exists(
- PQenterPipelineMode
- "${PostgreSQL_INCLUDE_DIR}/libpq-fe.h"
- PQXX_HAVE_PQ_PIPELINE)
- cmake_determine_compile_features(CXX)
- cmake_policy(SET CMP0057 NEW)
- # check_cxx_source_compiles requires CMAKE_REQUIRED_DEFINITIONS to specify
- # compiling arguments.
- # Wordaround: Push CMAKE_REQUIRED_DEFINITIONS
- if(CMAKE_REQUIRED_DEFINITIONS)
- set(def "${CMAKE_REQUIRED_DEFINITIONS}")
- endif()
- set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION})
- set(CMAKE_REQUIRED_QUIET ON)
- try_compile(
- PQXX_HAVE_GCC_PURE
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/gcc_pure.cxx)
- try_compile(
- PQXX_HAVE_GCC_VISIBILITY
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/gcc_visibility.cxx)
- try_compile(
- PQXX_HAVE_LIKELY
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/likely.cxx)
- try_compile(
- PQXX_HAVE_CXA_DEMANGLE
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/cxa_demangle.cxx)
- try_compile(
- PQXX_HAVE_CONCEPTS
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/concepts.cxx)
- try_compile(
- PQXX_HAVE_SPAN
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/span.cxx)
- try_compile(
- PQXX_HAVE_MULTIDIMENSIONAL_SUBSCRIPT
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/multidim-subscript.cxx)
- try_compile(
- PQXX_HAVE_CHARCONV_FLOAT
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/charconv_float.cxx)
- try_compile(
- PQXX_HAVE_CHARCONV_INT
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/charconv_int.cxx)
- try_compile(
- PQXX_HAVE_PATH
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/fs.cxx)
- try_compile(
- PQXX_HAVE_THREAD_LOCAL
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/thread_local.cxx)
- try_compile(
- PQXX_HAVE_SLEEP_FOR
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/sleep_for.cxx)
- try_compile(
- PQXX_HAVE_STRERROR_R
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/strerror_r.cxx)
- try_compile(
- PQXX_HAVE_STRERROR_S
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/strerror_s.cxx)
- try_compile(
- PQXX_HAVE_YEAR_MONTH_DAY
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/year_month_day.cxx)
- try_compile(
- PQXX_HAVE_CMP
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/cmp.cxx)
- try_compile(
- need_fslib
- ${PROJECT_BINARY_DIR}
- SOURCES ${PROJECT_SOURCE_DIR}/config-tests/need_fslib.cxx)
- if(!need_fslib)
- # TODO: This may work for gcc 8, but some clang versions may need -lc++fs.
- link_libraries(stdc++fs)
- endif()
- # check_cxx_source_compiles requires CMAKE_REQUIRED_DEFINITIONS to specify
- # compiling arguments.
- # Workaround: Pop CMAKE_REQUIRED_DEFINITIONS
- if(def)
- set(CMAKE_REQUIRED_DEFINITIONS ${def})
- unset(def CACHE)
- else()
- unset(CMAKE_REQUIRED_DEFINITIONS CACHE)
- endif()
- set(CMAKE_REQUIRED_QUIET OFF)
- set(AC_CONFIG_H_IN "${PROJECT_SOURCE_DIR}/include/pqxx/config.h.in")
- set(CM_CONFIG_H_IN "${PROJECT_BINARY_DIR}/include/pqxx/config_cmake.h.in")
- set(CM_CONFIG_PUB "${PROJECT_BINARY_DIR}/include/pqxx/config-public-compiler.h")
- set(CM_CONFIG_INT "${PROJECT_BINARY_DIR}/include/pqxx/config-internal-compiler.h")
- set(CM_CONFIG_PQ "${PROJECT_BINARY_DIR}/include/pqxx/config-internal-libpq.h")
- message(STATUS "Generating config.h")
- file(WRITE "${CM_CONFIG_H_IN}" "")
- file(STRINGS "${AC_CONFIG_H_IN}" lines)
- foreach(line ${lines})
- string(REGEX REPLACE "^#undef" "#cmakedefine" l "${line}")
- file(APPEND "${CM_CONFIG_H_IN}" "${l}\n")
- endforeach()
- configure_file("${CM_CONFIG_H_IN}" "${CM_CONFIG_INT}" @ONLY)
- configure_file("${CM_CONFIG_H_IN}" "${CM_CONFIG_PUB}" @ONLY)
- configure_file("${CM_CONFIG_H_IN}" "${CM_CONFIG_PQ}" @ONLY)
- message(STATUS "Generating config.h - done")
|