Warning, /sdk/codevis/thirdparty/soci/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 ###############################################################################
0002 #
0003 # This file is part of CMake configuration for SOCI library
0004 #
0005 # Copyright (C) 2009-2013 Mateusz Loskot <mateusz@loskot.net>
0006 # Distributed under the Boost Software License, Version 1.0.
0007 # (See accompanying file LICENSE_1_0.txt or copy at
0008 # http://www.boost.org/LICENSE_1_0.txt)
0009 #
0010 ###############################################################################
0011 # General settings
0012 ###############################################################################
0013 cmake_minimum_required(VERSION 2.8...3.20 FATAL_ERROR)
0014
0015 project(SOCI)
0016
0017 if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 14)
0018 set(CMAKE_CXX_STANDARD 14)
0019 endif()
0020 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0021
0022 ###############################################################################
0023 # Build features and variants
0024 ##############################################################################
0025
0026 option(SOCI_SHARED "Enable build of shared libraries" ON)
0027 option(SOCI_STATIC "Enable build of static libraries" ON)
0028 option(SOCI_TESTS "Enable build of collection of SOCI tests" ON)
0029 option(SOCI_ASAN "Enable address sanitizer on GCC v4.8+/Clang v 3.1+" OFF)
0030 option(SOCI_LTO "Enable link time optimization" OFF)
0031 option(SOCI_VISIBILITY "Enable hiding private symbol using ELF visibility if supported by the platform" ON)
0032
0033 if (SOCI_LTO)
0034 cmake_minimum_required(VERSION 3.9)
0035
0036 # Check and enable lto support
0037 include(CheckIPOSupported)
0038 check_ipo_supported(RESULT supported)
0039
0040 if (NOT supported)
0041 message(STATUS "IPO / LTO not supported")
0042 endif()
0043
0044 if (supported AND NOT SOCI_ASAN)
0045 message(STATUS "IPO / LTO enabled")
0046 set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
0047
0048 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
0049 # Check for lld as clang lto works best with its own linker
0050 include(CheckCXXCompilerFlag)
0051 check_cxx_compiler_flag("-fuse-ld=lld" HAS_LLD)
0052 if (HAS_LLD)
0053 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
0054 SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld")
0055 SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=lld")
0056 endif()
0057 endif()
0058 elseif(supported)
0059 message(STATUS "IPO / LTO is supported but conflicts with ASAN and not enabled")
0060 endif()
0061 endif()
0062
0063 if (SOCI_VISIBILITY)
0064 # Test whether visibility is supported
0065 include(CheckCSourceCompiles)
0066 check_c_source_compiles(
0067 "
0068 __attribute__ (( visibility(\"default\") )) int f1() { return 0; }
0069 __attribute__ (( visibility(\"hidden\") )) int f2() { return 1; }
0070
0071 int main(int argc, char* argv[]) { f1(); f2(); return 0; }
0072 "
0073 SOCI_HAVE_VISIBILITY_SUPPORT
0074 )
0075
0076 if (SOCI_HAVE_VISIBILITY_SUPPORT)
0077 message(STATUS "gcc / clang visibility enabled")
0078 set(CMAKE_CXX_VISIBILITY_PRESET hidden)
0079 cmake_policy(SET CMP0063 NEW)
0080 endif()
0081 else()
0082 set(SOCI_HAVE_VISIBILITY_SUPPORT off)
0083 endif()
0084
0085 ###############################################################################
0086 # SOCI CMake modules
0087 ###############################################################################
0088
0089 # Path to additional CMake modules
0090 set(CMAKE_MODULE_PATH ${SOCI_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
0091 set(CMAKE_MODULE_PATH ${SOCI_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
0092
0093 include(SociUtilities)
0094 include(SociConfig)
0095
0096 colormsg(_HIBLUE_ "Configuring SOCI:")
0097
0098 ###############################################################################
0099 # SOCI version information
0100 ###############################################################################
0101 include(SociVersion)
0102
0103 soci_version()
0104
0105 ###############################################################################
0106 # Build features and variants
0107 ##############################################################################
0108
0109 boost_report_value(SOCI_SHARED)
0110 boost_report_value(SOCI_STATIC)
0111 boost_report_value(SOCI_TESTS)
0112 boost_report_value(SOCI_ASAN)
0113
0114 # from SociConfig.cmake
0115 boost_report_value(LIB_SUFFIX)
0116
0117 # Put the libaries and binaries that get built into directories at the
0118 # top of the build tree rather than in hard-to-find leaf
0119 # directories. This simplifies manual testing and the use of the build
0120 # tree rather than installed Boost libraries.
0121 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
0122 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
0123 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
0124
0125 ###############################################################################
0126 # Find SOCI dependencies
0127 ###############################################################################
0128
0129 set(SOCI_CORE_TARGET)
0130 set(SOCI_CORE_TARGET_STATIC)
0131 set(SOCI_CORE_DEPS_LIBS)
0132
0133 include(SociDependencies)
0134
0135 get_property(SOCI_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0136 PROPERTY INCLUDE_DIRECTORIES)
0137
0138 if(Threads_FOUND)
0139 list(APPEND SOCI_CORE_DEPS_LIBS ${CMAKE_THREAD_LIBS_INIT})
0140 else()
0141 message(FATAL_ERROR "No thread library found")
0142 endif()
0143
0144 if(NOT MSVC)
0145 set(DL_FIND_QUIETLY TRUE)
0146 find_package(DL)
0147 if(DL_FOUND)
0148 list(APPEND SOCI_CORE_DEPS_LIBS ${DL_LIBRARY})
0149 set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES ${DL_INCLUDE_DIR})
0150 add_definitions(-DHAVE_DL=1)
0151 endif()
0152 endif()
0153
0154 # Do not try to use Boost on FreeBSD, it's too old.'
0155 set(SOCI_HAVE_BOOST OFF)
0156 set(SOCI_HAVE_BOOST_DATE_TIME OFF)
0157
0158 set(SOCI_HAVE_BOOST ${SOCI_HAVE_BOOST} CACHE INTERNAL "Boost library")
0159 set(SOCI_HAVE_BOOST_DATE_TIME ${SOCI_HAVE_BOOST_DATE_TIME} CACHE INTERNAL "Boost date_time library")
0160
0161 list(APPEND SOCI_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR})
0162
0163 set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
0164 PROPERTY
0165 INCLUDE_DIRECTORIES ${SOCI_INCLUDE_DIRS})
0166
0167 ###############################################################################
0168 # Installation
0169 ###############################################################################
0170
0171 include(GNUInstallDirs)
0172
0173 ###############################################################################
0174 # Configuration files
0175 ###############################################################################
0176 set(CONFIG_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include)
0177 install(DIRECTORY ${CONFIG_INCLUDE_DIR}/soci DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
0178 set(CONFIG_FILE_IN "include/soci/soci-config.h.in")
0179 set(CONFIG_FILE_OUT "${CONFIG_INCLUDE_DIR}/soci/soci-config.h")
0180
0181
0182
0183 ###############################################################################
0184 # Build configured components
0185 ###############################################################################
0186 include(SociBackend)
0187
0188 include_directories(${SOCI_SOURCE_DIR}/include ${CONFIG_INCLUDE_DIR})
0189 add_subdirectory(src)
0190
0191 if(SOCI_TESTS)
0192 ###############################################################################
0193 # Enable tests
0194 ###############################################################################
0195 enable_testing()
0196
0197 file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} TEST_ACCESS_PATH)
0198 configure_file(${PROJECT_SOURCE_DIR}/cmake/configs/test-access.cmake ${PROJECT_SOURCE_DIR}/tests/odbc/test-access.dsn @ONLY)
0199
0200 set(MYSQL_DRIVER_NAME "MySQL")
0201 if(WIN32)
0202 set(MYSQL_DRIVER_NAME "MySQL ODBC 5.3 ANSI Driver")
0203 endif()
0204 configure_file(${PROJECT_SOURCE_DIR}/cmake/configs/test-mysql.cmake ${PROJECT_SOURCE_DIR}/tests/odbc/test-mysql.dsn @ONLY)
0205
0206 # Define "make check" as alias for "make test"
0207 add_custom_target(check COMMAND ctest)
0208 add_subdirectory(tests)
0209 endif()
0210
0211 ###############################################################################
0212 # build config file
0213 ###############################################################################
0214
0215 get_cmake_property(ALL_VARIABLES CACHE_VARIABLES)
0216 set(CONFIGURED_VARIABLES)
0217 foreach(v ${ALL_VARIABLES})
0218 if (v MATCHES "^SOCI_HAVE.*")
0219 get_property(CACHE_HELPSTRING CACHE ${v} PROPERTY HELPSTRING)
0220 set(CONFIGURED_VARIABLES "${CONFIGURED_VARIABLES}\n// ${CACHE_HELPSTRING}\n")
0221 if (${${v}})
0222 set(CONFIGURED_VARIABLES "${CONFIGURED_VARIABLES}#define ${v}\n")
0223 else()
0224 set(CONFIGURED_VARIABLES "${CONFIGURED_VARIABLES}/* #undef ${v} */\n")
0225 endif()
0226 endif()
0227 endforeach()
0228 configure_file("${CONFIG_FILE_IN}" "${CONFIG_FILE_OUT}")
0229
0230 message(STATUS "")