mirror of
				https://github.com/Xahau/xahaud.git
				synced 2025-11-04 02:35:48 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			166 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
#[===================================================================[
 | 
						|
   NIH dep: soci
 | 
						|
#]===================================================================]
 | 
						|
 | 
						|
foreach (_comp core empty sqlite3)
 | 
						|
  add_library ("soci_${_comp}" STATIC IMPORTED GLOBAL)
 | 
						|
endforeach ()
 | 
						|
 | 
						|
if (NOT WIN32)
 | 
						|
  find_package(soci)
 | 
						|
endif()
 | 
						|
 | 
						|
if (soci)
 | 
						|
  foreach (_comp core empty sqlite3)
 | 
						|
    set_target_properties ("soci_${_comp}" PROPERTIES
 | 
						|
      IMPORTED_LOCATION_DEBUG
 | 
						|
        ${soci}
 | 
						|
      IMPORTED_LOCATION_RELEASE
 | 
						|
        ${soci}
 | 
						|
      INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
        ${SOCI_INCLUDE_DIR})
 | 
						|
  endforeach ()
 | 
						|
 | 
						|
else()
 | 
						|
  set (soci_lib_pre ${ep_lib_prefix})
 | 
						|
  set (soci_lib_post "")
 | 
						|
  if (WIN32)
 | 
						|
    # for some reason soci on windows still prepends lib (non-standard)
 | 
						|
    set (soci_lib_pre lib)
 | 
						|
    # this version in the name might change if/when we change versions of soci
 | 
						|
    set (soci_lib_post "_4_0")
 | 
						|
  endif ()
 | 
						|
  get_target_property (_boost_incs Boost::date_time INTERFACE_INCLUDE_DIRECTORIES)
 | 
						|
  get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION)
 | 
						|
  if (NOT _boost_dt)
 | 
						|
    get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION_RELEASE)
 | 
						|
  endif ()
 | 
						|
  if (NOT _boost_dt)
 | 
						|
    get_target_property (_boost_dt Boost::date_time IMPORTED_LOCATION_DEBUG)
 | 
						|
  endif ()
 | 
						|
 | 
						|
  ExternalProject_Add (soci
 | 
						|
    PREFIX ${nih_cache_path}
 | 
						|
    GIT_REPOSITORY https://github.com/SOCI/soci.git
 | 
						|
    GIT_TAG 04e1870294918d20761736743bb6136314c42dd5
 | 
						|
    # We had an issue with soci integer range checking for boost::optional
 | 
						|
    # and needed to remove the exception that SOCI throws in this case.
 | 
						|
    # This is *probably* a bug in SOCI, but has never been investigated more
 | 
						|
    # nor reported to the maintainers.
 | 
						|
    # This cmake script comments out the lines in question.
 | 
						|
    # This patch process is likely fragile and should be reviewed carefully
 | 
						|
    # whenever we update the GIT_TAG above.
 | 
						|
    PATCH_COMMAND
 | 
						|
      ${CMAKE_COMMAND} -D RIPPLED_SOURCE=${CMAKE_CURRENT_SOURCE_DIR}
 | 
						|
        -P ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/soci_patch.cmake
 | 
						|
    CMAKE_ARGS
 | 
						|
      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
 | 
						|
      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
 | 
						|
      $<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
 | 
						|
      $<$<BOOL:${CMAKE_TOOLCHAIN_FILE}>:-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}>
 | 
						|
      $<$<BOOL:${VCPKG_TARGET_TRIPLET}>:-DVCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}>
 | 
						|
      $<$<BOOL:${unity}>:-DCMAKE_UNITY_BUILD=ON}>
 | 
						|
      -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/sqlite3
 | 
						|
      -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake
 | 
						|
      -DCMAKE_INCLUDE_PATH=$<JOIN:$<TARGET_PROPERTY:sqlite,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
						|
      -DCMAKE_LIBRARY_PATH=${sqlite_BINARY_DIR}
 | 
						|
      -DCMAKE_DEBUG_POSTFIX=_d
 | 
						|
      $<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
 | 
						|
      -DSOCI_CXX_C11=ON
 | 
						|
      -DSOCI_STATIC=ON
 | 
						|
      -DSOCI_LIBDIR=lib
 | 
						|
      -DSOCI_SHARED=OFF
 | 
						|
      -DSOCI_TESTS=OFF
 | 
						|
      # hacks to workaround the fact that soci doesn't currently use
 | 
						|
      # boost imported targets in its cmake. If they switch to
 | 
						|
      # proper imported targets, this next line can be removed
 | 
						|
      # (as well as the get_property above that sets _boost_incs)
 | 
						|
      -DBoost_INCLUDE_DIRS=$<JOIN:${_boost_incs},::>
 | 
						|
      -DBoost_INCLUDE_DIR=$<JOIN:${_boost_incs},::>
 | 
						|
      -DBOOST_ROOT=${BOOST_ROOT}
 | 
						|
      -DWITH_BOOST=ON
 | 
						|
      -DBoost_FOUND=ON
 | 
						|
      -DBoost_NO_BOOST_CMAKE=ON
 | 
						|
      -DBoost_DATE_TIME_FOUND=ON
 | 
						|
      -DSOCI_HAVE_BOOST=ON
 | 
						|
      -DSOCI_HAVE_BOOST_DATE_TIME=ON
 | 
						|
      -DBoost_DATE_TIME_LIBRARY=${_boost_dt}
 | 
						|
      -DSOCI_DB2=OFF
 | 
						|
      -DSOCI_FIREBIRD=OFF
 | 
						|
      -DSOCI_MYSQL=OFF
 | 
						|
      -DSOCI_ODBC=OFF
 | 
						|
      -DSOCI_ORACLE=OFF
 | 
						|
      -DSOCI_POSTGRESQL=OFF
 | 
						|
      -DSOCI_SQLITE3=ON
 | 
						|
      -DSQLITE3_INCLUDE_DIR=$<JOIN:$<TARGET_PROPERTY:sqlite,INTERFACE_INCLUDE_DIRECTORIES>,::>
 | 
						|
      -DSQLITE3_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:sqlite,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:sqlite,IMPORTED_LOCATION_RELEASE>>
 | 
						|
      $<$<BOOL:${APPLE}>:-DCMAKE_FIND_FRAMEWORK=LAST>
 | 
						|
      $<$<BOOL:${MSVC}>:
 | 
						|
        "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP"
 | 
						|
        "-DCMAKE_CXX_FLAGS_DEBUG=-MTd"
 | 
						|
        "-DCMAKE_CXX_FLAGS_RELEASE=-MT"
 | 
						|
      >
 | 
						|
      $<$<NOT:$<BOOL:${MSVC}>>:
 | 
						|
        "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations"
 | 
						|
      >
 | 
						|
      # SEE: https://github.com/SOCI/soci/issues/640
 | 
						|
      $<$<AND:$<BOOL:${is_gcc}>,$<VERSION_GREATER_EQUAL:${CMAKE_CXX_COMPILER_VERSION},8>>:
 | 
						|
        "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations -Wno-error=format-overflow -Wno-format-overflow -Wno-error=format-truncation"
 | 
						|
      >
 | 
						|
    LIST_SEPARATOR ::
 | 
						|
    LOG_BUILD ON
 | 
						|
    LOG_CONFIGURE ON
 | 
						|
    BUILD_COMMAND
 | 
						|
      ${CMAKE_COMMAND}
 | 
						|
      --build .
 | 
						|
      --config $<CONFIG>
 | 
						|
      --parallel ${ep_procs}
 | 
						|
      $<$<BOOL:${is_multiconfig}>:
 | 
						|
        COMMAND
 | 
						|
          ${CMAKE_COMMAND} -E copy
 | 
						|
          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_core${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_empty${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
          <BINARY_DIR>/lib/$<CONFIG>/${soci_lib_pre}soci_sqlite3${soci_lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
 | 
						|
          <BINARY_DIR>/lib
 | 
						|
        >
 | 
						|
    TEST_COMMAND ""
 | 
						|
    INSTALL_COMMAND ""
 | 
						|
    DEPENDS sqlite
 | 
						|
    BUILD_BYPRODUCTS
 | 
						|
      <BINARY_DIR>/lib/${soci_lib_pre}soci_core${soci_lib_post}${ep_lib_suffix}
 | 
						|
      <BINARY_DIR>/lib/${soci_lib_pre}soci_core${soci_lib_post}_d${ep_lib_suffix}
 | 
						|
      <BINARY_DIR>/lib/${soci_lib_pre}soci_empty${soci_lib_post}${ep_lib_suffix}
 | 
						|
      <BINARY_DIR>/lib/${soci_lib_pre}soci_empty${soci_lib_post}_d${ep_lib_suffix}
 | 
						|
      <BINARY_DIR>/lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}${ep_lib_suffix}
 | 
						|
      <BINARY_DIR>/lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}_d${ep_lib_suffix}
 | 
						|
  )
 | 
						|
  ExternalProject_Get_Property (soci BINARY_DIR)
 | 
						|
  ExternalProject_Get_Property (soci SOURCE_DIR)
 | 
						|
  if (CMAKE_VERBOSE_MAKEFILE)
 | 
						|
    print_ep_logs (soci)
 | 
						|
  endif ()
 | 
						|
  file (MAKE_DIRECTORY ${SOURCE_DIR}/include)
 | 
						|
  file (MAKE_DIRECTORY ${BINARY_DIR}/include)
 | 
						|
  foreach (_comp core empty sqlite3)
 | 
						|
    set_target_properties ("soci_${_comp}" PROPERTIES
 | 
						|
      IMPORTED_LOCATION_DEBUG
 | 
						|
        ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}_d${ep_lib_suffix}
 | 
						|
      IMPORTED_LOCATION_RELEASE
 | 
						|
        ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}${ep_lib_suffix}
 | 
						|
      INTERFACE_INCLUDE_DIRECTORIES
 | 
						|
        "${SOURCE_DIR}/include;${BINARY_DIR}/include")
 | 
						|
    add_dependencies ("soci_${_comp}" soci) # something has to depend on the ExternalProject to trigger it
 | 
						|
    target_link_libraries (ripple_libs INTERFACE "soci_${_comp}")
 | 
						|
    if (NOT _comp STREQUAL "core")
 | 
						|
      target_link_libraries ("soci_${_comp}" INTERFACE soci_core)
 | 
						|
    endif ()
 | 
						|
  endforeach ()
 | 
						|
endif()
 | 
						|
 | 
						|
foreach (_comp core empty sqlite3)
 | 
						|
  exclude_if_included ("soci_${_comp}")
 | 
						|
endforeach ()
 | 
						|
 | 
						|
 | 
						|
exclude_if_included (soci)
 |