mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-28 16:58:51 +00:00
158 lines
4.8 KiB
CMake
158 lines
4.8 KiB
CMake
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")
|