Files
cppbessot/cmake/scripts/cppbessotDbActionTargetResolution.cmake

51 lines
1.5 KiB
CMake

cmake_minimum_required(VERSION 3.16)
function(cppbessot_db_action_target_upper out_var db_target)
string(TOUPPER "${db_target}" _upper)
set(${out_var} "${_upper}" PARENT_SCOPE)
endfunction()
function(cppbessot_db_action_resolve_backend_for_target
out_backend
out_sqlite_path
out_pgsql_connstr
db_target)
cppbessot_db_action_validate_db_target("${db_target}")
cppbessot_db_action_target_upper(_target_upper "${db_target}")
set(_sqlite_var "CPPBESSOT_DB_SQLITE_${_target_upper}_PATH")
set(_pgsql_var "CPPBESSOT_DB_PGSQL_${_target_upper}_CONNSTR")
set(_has_sqlite FALSE)
set(_has_pgsql FALSE)
if(DEFINED ${_sqlite_var} AND NOT "${${_sqlite_var}}" STREQUAL "")
set(_has_sqlite TRUE)
endif()
if(DEFINED ${_pgsql_var} AND NOT "${${_pgsql_var}}" STREQUAL "")
set(_has_pgsql TRUE)
endif()
if(_has_sqlite AND _has_pgsql)
message(FATAL_ERROR
"DB target `${db_target}` is ambiguous: both `${_sqlite_var}` and `${_pgsql_var}` are set.")
endif()
if(NOT _has_sqlite AND NOT _has_pgsql)
message(FATAL_ERROR
"DB target `${db_target}` is not mapped: set exactly one of `${_sqlite_var}` or `${_pgsql_var}`.")
endif()
if(_has_sqlite)
set(${out_backend} "sqlite" PARENT_SCOPE)
set(${out_sqlite_path} "${${_sqlite_var}}" PARENT_SCOPE)
set(${out_pgsql_connstr} "" PARENT_SCOPE)
return()
endif()
set(${out_backend} "postgre" PARENT_SCOPE)
set(${out_sqlite_path} "" PARENT_SCOPE)
set(${out_pgsql_connstr} "${${_pgsql_var}}" PARENT_SCOPE)
endfunction()