mirror of
https://github.com/latentPrion/cppbessot.git
synced 2026-06-23 15:18:37 +00:00
121 lines
4.0 KiB
CMake
121 lines
4.0 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
include("${CMAKE_CURRENT_LIST_DIR}/../dbActionShared.cmake")
|
|
|
|
function(cppbessot_db_action_require_var var_name)
|
|
if(NOT DEFINED ${var_name} OR "${${var_name}}" STREQUAL "")
|
|
message(FATAL_ERROR "Required variable `${var_name}` is missing.")
|
|
endif()
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_resolve_project_path out_var input_path)
|
|
cppbessot_db_action_require_var(CPPBESSOT_PROJECT_SOURCE_DIR)
|
|
if(IS_ABSOLUTE "${input_path}")
|
|
set(_resolved "${input_path}")
|
|
else()
|
|
set(_resolved "${CPPBESSOT_PROJECT_SOURCE_DIR}/${input_path}")
|
|
endif()
|
|
|
|
get_filename_component(_resolved "${_resolved}" ABSOLUTE)
|
|
set(${out_var} "${_resolved}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_validate_schema_dir_name schema_dir)
|
|
_cppbessot_db_action_validate_basename(
|
|
"${schema_dir}"
|
|
"Schema directory name"
|
|
"CPPBESSOT_WORKDIR")
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_get_schema_dir_path out_var schema_dir)
|
|
cppbessot_db_action_validate_schema_dir_name("${schema_dir}")
|
|
cppbessot_db_action_resolve_project_path(_workdir "${CPPBESSOT_WORKDIR}")
|
|
set(${out_var} "${_workdir}/${schema_dir}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_assert_schema_dir_ready schema_dir)
|
|
cppbessot_db_action_get_schema_dir_path(_schema_dir_path "${schema_dir}")
|
|
if(NOT IS_DIRECTORY "${_schema_dir_path}")
|
|
message(FATAL_ERROR "Schema directory does not exist: ${_schema_dir_path}")
|
|
endif()
|
|
|
|
set(_openapi_file "${_schema_dir_path}/openapi/openapi.yaml")
|
|
if(NOT EXISTS "${_openapi_file}")
|
|
message(FATAL_ERROR "OpenAPI file does not exist: ${_openapi_file}")
|
|
endif()
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_validate_migration_dir_name migration_dir)
|
|
_cppbessot_db_action_validate_basename(
|
|
"${migration_dir}"
|
|
"Migration directory name"
|
|
"CPPBESSOT_WORKDIR/migrations")
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_get_migration_dir_path out_var migration_dir)
|
|
cppbessot_db_action_validate_migration_dir_name("${migration_dir}")
|
|
cppbessot_db_action_resolve_project_path(_workdir "${CPPBESSOT_WORKDIR}")
|
|
set(${out_var} "${_workdir}/migrations/${migration_dir}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_assert_migration_dir_exists migration_dir)
|
|
cppbessot_db_action_get_migration_dir_path(_migration_dir_path "${migration_dir}")
|
|
if(NOT IS_DIRECTORY "${_migration_dir_path}")
|
|
message(FATAL_ERROR "Migration directory does not exist: ${_migration_dir_path}")
|
|
endif()
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_validate_db_target db_target)
|
|
_cppbessot_db_action_validate_db_target_impl("${db_target}")
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_backend_subdir out_var backend)
|
|
if("${backend}" STREQUAL "sqlite")
|
|
set(${out_var} "sqlite" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
|
|
if("${backend}" STREQUAL "postgre")
|
|
set(${out_var} "postgre" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
|
|
message(FATAL_ERROR "Unsupported backend `${backend}`.")
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_collect_nonempty_sql_files out_var sql_dir)
|
|
if(NOT IS_DIRECTORY "${sql_dir}")
|
|
set(${out_var} "" PARENT_SCOPE)
|
|
return()
|
|
endif()
|
|
|
|
file(GLOB _candidate_files "${sql_dir}/*.sql")
|
|
list(SORT _candidate_files)
|
|
|
|
set(_sql_files)
|
|
foreach(_candidate IN LISTS _candidate_files)
|
|
file(READ "${_candidate}" _contents)
|
|
string(STRIP "${_contents}" _trimmed)
|
|
if(NOT "${_trimmed}" STREQUAL "")
|
|
list(APPEND _sql_files "${_candidate}")
|
|
endif()
|
|
endforeach()
|
|
|
|
set(${out_var} "${_sql_files}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_require_nonempty_sql_dir sql_dir failure_prefix)
|
|
cppbessot_db_action_collect_nonempty_sql_files(_sql_files "${sql_dir}")
|
|
if(NOT _sql_files)
|
|
message(FATAL_ERROR "${failure_prefix}: no non-empty SQL files found under ${sql_dir}")
|
|
endif()
|
|
endfunction()
|
|
|
|
function(cppbessot_db_action_find_program_or_fail out_var program_name hint)
|
|
find_program(_program "${program_name}")
|
|
if(NOT _program)
|
|
message(FATAL_ERROR "Missing required program `${program_name}`. ${hint}")
|
|
endif()
|
|
set(${out_var} "${_program}" PARENT_SCOPE)
|
|
endfunction()
|