mirror of
https://github.com/latentPrion/cppbessot.git
synced 2026-06-23 15:18:37 +00:00
Enum-only headers don't get generated so don't expect them
This commit is contained in:
+12
-2
@@ -13,16 +13,26 @@ function(cppbessot_add_db_gen_odb_target schema_dir)
|
||||
# - Files under `<schema_dir>/generated-odb-source/{sqlite,postgre}`.
|
||||
cppbessot_validate_schema_dir_name("${schema_dir}")
|
||||
cppbessot_get_schema_dir_path(_version_dir "${schema_dir}")
|
||||
cppbessot_get_expected_odb_generation_artifacts(
|
||||
_expected_odb_model_headers
|
||||
_expected_odb_sources
|
||||
"${schema_dir}")
|
||||
_cppbessot_get_openapi_file_path(_openapi_file "${schema_dir}")
|
||||
|
||||
add_custom_target(db_gen_odb_logic
|
||||
add_custom_command(
|
||||
OUTPUT ${_expected_odb_sources}
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
-DCPPBESSOT_ODB_EXECUTABLE=${CPPBESSOT_ODB_EXECUTABLE}
|
||||
-DCPPBESSOT_VERSION_DIR=${_version_dir}
|
||||
-P "${_CPPBESSOT_DB_GEN_ODB_DIR}/scripts/run_odb_logic.cmake"
|
||||
DEPENDS db_gen_cpp_headers
|
||||
DEPENDS "${_openapi_file}" ${_expected_odb_model_headers}
|
||||
COMMENT "Generating ODB ORM sources for ${schema_dir} (sqlite + postgre)"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(db_gen_odb_logic
|
||||
DEPENDS ${_expected_odb_sources})
|
||||
add_dependencies(db_gen_odb_logic db_gen_cpp_headers)
|
||||
|
||||
set_target_properties(db_gen_odb_logic PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
||||
endfunction()
|
||||
|
||||
+166
-24
@@ -116,19 +116,22 @@ function(cppbessot_get_model_headers_glob out_var schema_dir)
|
||||
set(${out_var} "${_schema_dir_path}/generated-cpp-source/include/*/model/*.h" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_get_openapi_schema_names out_var schema_dir)
|
||||
# Purpose: Parse top-level component schema names from a schema directory's OpenAPI file.
|
||||
function(_cppbessot_collect_openapi_schema_names out_var openapi_file filter_mode)
|
||||
# Purpose: Shared OpenAPI components.schemas walker.
|
||||
# Inputs:
|
||||
# - out_var: Parent-scope variable name to receive the schema names.
|
||||
# - schema_dir: Schema directory basename.
|
||||
# - out_var: Parent-scope variable for collected schema names.
|
||||
# - openapi_file: Absolute path to openapi.yaml.
|
||||
# - filter_mode: ALL (every top-level schema) or ODB_TABLE (x-odbTable only).
|
||||
# Outputs:
|
||||
# - <out_var> (PARENT_SCOPE): List of top-level component schema names.
|
||||
cppbessot_get_schema_dir_path(_schema_dir_path "${schema_dir}")
|
||||
cppbessot_assert_openapi_exists("${schema_dir}")
|
||||
set(_openapi_file "${_schema_dir_path}/openapi/openapi.yaml")
|
||||
# - <out_var> (PARENT_SCOPE): Collected schema names.
|
||||
if(NOT "${filter_mode}" STREQUAL "ALL" AND NOT "${filter_mode}" STREQUAL "ODB_TABLE")
|
||||
message(FATAL_ERROR
|
||||
"Unsupported OpenAPI schema filter `${filter_mode}`; expected ALL or ODB_TABLE.")
|
||||
endif()
|
||||
|
||||
file(STRINGS "${_openapi_file}" _openapi_lines)
|
||||
file(STRINGS "${openapi_file}" _openapi_lines)
|
||||
set(_schema_names)
|
||||
set(_current_schema_name)
|
||||
set(_in_components FALSE)
|
||||
set(_in_schemas FALSE)
|
||||
|
||||
@@ -136,8 +139,16 @@ function(cppbessot_get_openapi_schema_names out_var schema_dir)
|
||||
if(_in_schemas)
|
||||
if(_line MATCHES "^[^ ]" OR _line MATCHES "^ [^ ]")
|
||||
set(_in_schemas FALSE)
|
||||
unset(_current_schema_name)
|
||||
elseif(_line MATCHES "^ ([A-Za-z_][A-Za-z0-9_]*)[ \t]*:[ \t]*$")
|
||||
list(APPEND _schema_names "${CMAKE_MATCH_1}")
|
||||
set(_current_schema_name "${CMAKE_MATCH_1}")
|
||||
if("${filter_mode}" STREQUAL "ALL")
|
||||
list(APPEND _schema_names "${_current_schema_name}")
|
||||
endif()
|
||||
elseif("${filter_mode}" STREQUAL "ODB_TABLE"
|
||||
AND _current_schema_name
|
||||
AND _line MATCHES "^ x-odbTable:[ \t]*")
|
||||
list(APPEND _schema_names "${_current_schema_name}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -155,10 +166,52 @@ function(cppbessot_get_openapi_schema_names out_var schema_dir)
|
||||
endforeach()
|
||||
|
||||
if(NOT _schema_names)
|
||||
message(FATAL_ERROR
|
||||
"No component schema names were found in ${_openapi_file}.")
|
||||
if("${filter_mode}" STREQUAL "ODB_TABLE")
|
||||
message(FATAL_ERROR
|
||||
"No x-odbTable schema names were found in ${openapi_file}.")
|
||||
else()
|
||||
message(FATAL_ERROR
|
||||
"No component schema names were found in ${openapi_file}.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
list(REMOVE_DUPLICATES _schema_names)
|
||||
set(${out_var} "${_schema_names}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(_cppbessot_get_openapi_file_path out_var schema_dir)
|
||||
# Purpose: Resolve and validate a schema directory's SSOT OpenAPI file path.
|
||||
# Inputs:
|
||||
# - out_var: Parent-scope variable name to receive the absolute OpenAPI path.
|
||||
# - schema_dir: Schema directory basename.
|
||||
# Outputs:
|
||||
# - <out_var> (PARENT_SCOPE): Absolute path to openapi.yaml.
|
||||
cppbessot_get_schema_dir_path(_schema_dir_path "${schema_dir}")
|
||||
cppbessot_assert_openapi_exists("${schema_dir}")
|
||||
set(${out_var} "${_schema_dir_path}/openapi/openapi.yaml" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_get_openapi_schema_names out_var schema_dir)
|
||||
# Purpose: Parse top-level component schema names from a schema directory's OpenAPI file.
|
||||
# Inputs:
|
||||
# - out_var: Parent-scope variable name to receive the schema names.
|
||||
# - schema_dir: Schema directory basename.
|
||||
# Outputs:
|
||||
# - <out_var> (PARENT_SCOPE): List of top-level component schema names.
|
||||
_cppbessot_get_openapi_file_path(_openapi_file "${schema_dir}")
|
||||
_cppbessot_collect_openapi_schema_names(_schema_names "${_openapi_file}" "ALL")
|
||||
set(${out_var} "${_schema_names}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_get_openapi_odb_table_schema_names out_var schema_dir)
|
||||
# Purpose: Parse OpenAPI schema names that declare x-odbTable (ODB object models).
|
||||
# Inputs:
|
||||
# - out_var: Parent-scope variable name to receive the schema names.
|
||||
# - schema_dir: Schema directory basename.
|
||||
# Outputs:
|
||||
# - <out_var> (PARENT_SCOPE): Schema names with x-odbTable in the OpenAPI file.
|
||||
_cppbessot_get_openapi_file_path(_openapi_file "${schema_dir}")
|
||||
_cppbessot_collect_openapi_schema_names(_schema_names "${_openapi_file}" "ODB_TABLE")
|
||||
set(${out_var} "${_schema_names}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
@@ -187,8 +240,41 @@ function(cppbessot_get_expected_cpp_model_outputs out_headers_var out_sources_va
|
||||
set(${out_sources_var} "${_sources}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(_cppbessot_build_odb_table_artifact_paths
|
||||
schema_dir
|
||||
schema_names
|
||||
out_model_headers_var
|
||||
out_sqlite_sources_var
|
||||
out_pgsql_sources_var)
|
||||
# Purpose: Build expected ODB model-header and backend source paths from schema names.
|
||||
# Inputs:
|
||||
# - schema_dir: Schema directory basename.
|
||||
# - schema_names: x-odbTable schema names.
|
||||
# Outputs:
|
||||
# - <out_model_headers_var> (PARENT_SCOPE): Expected generated ODB model headers.
|
||||
# - <out_sqlite_sources_var> (PARENT_SCOPE): Expected sqlite `*-odb.cxx` sources.
|
||||
# - <out_pgsql_sources_var> (PARENT_SCOPE): Expected postgre `*-odb.cxx` sources.
|
||||
cppbessot_get_schema_dir_path(_schema_dir_path "${schema_dir}")
|
||||
|
||||
set(_headers)
|
||||
set(_sqlite_sources)
|
||||
set(_pgsql_sources)
|
||||
foreach(_schema_name IN LISTS schema_names)
|
||||
list(APPEND _headers
|
||||
"${_schema_dir_path}/generated-cpp-source/include/cppbessot/model/${_schema_name}.h")
|
||||
list(APPEND _sqlite_sources
|
||||
"${_schema_dir_path}/generated-odb-source/sqlite/${_schema_name}-odb.cxx")
|
||||
list(APPEND _pgsql_sources
|
||||
"${_schema_dir_path}/generated-odb-source/postgre/${_schema_name}-odb.cxx")
|
||||
endforeach()
|
||||
|
||||
set(${out_model_headers_var} "${_headers}" PARENT_SCOPE)
|
||||
set(${out_sqlite_sources_var} "${_sqlite_sources}" PARENT_SCOPE)
|
||||
set(${out_pgsql_sources_var} "${_pgsql_sources}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_get_expected_odb_outputs out_sqlite_sources_var out_pgsql_sources_var schema_dir)
|
||||
# Purpose: Infer generated ODB backend source files from OpenAPI schema names.
|
||||
# Purpose: Infer generated ODB backend source files from x-odbTable OpenAPI schemas.
|
||||
# Inputs:
|
||||
# - out_sqlite_sources_var: Parent-scope variable for sqlite `*-odb.cxx`.
|
||||
# - out_pgsql_sources_var: Parent-scope variable for postgre `*-odb.cxx`.
|
||||
@@ -196,18 +282,74 @@ function(cppbessot_get_expected_odb_outputs out_sqlite_sources_var out_pgsql_sou
|
||||
# Outputs:
|
||||
# - <out_sqlite_sources_var> (PARENT_SCOPE): Expected sqlite ODB sources.
|
||||
# - <out_pgsql_sources_var> (PARENT_SCOPE): Expected postgre ODB sources.
|
||||
cppbessot_get_schema_dir_path(_schema_dir_path "${schema_dir}")
|
||||
cppbessot_get_openapi_schema_names(_schema_names "${schema_dir}")
|
||||
|
||||
set(_sqlite_sources)
|
||||
set(_pgsql_sources)
|
||||
foreach(_schema_name IN LISTS _schema_names)
|
||||
list(APPEND _sqlite_sources
|
||||
"${_schema_dir_path}/generated-odb-source/sqlite/${_schema_name}-odb.cxx")
|
||||
list(APPEND _pgsql_sources
|
||||
"${_schema_dir_path}/generated-odb-source/postgre/${_schema_name}-odb.cxx")
|
||||
endforeach()
|
||||
cppbessot_get_openapi_odb_table_schema_names(_schema_names "${schema_dir}")
|
||||
_cppbessot_build_odb_table_artifact_paths(
|
||||
"${schema_dir}"
|
||||
"${_schema_names}"
|
||||
_expected_model_headers
|
||||
_sqlite_sources
|
||||
_pgsql_sources)
|
||||
|
||||
set(${out_sqlite_sources_var} "${_sqlite_sources}" PARENT_SCOPE)
|
||||
set(${out_pgsql_sources_var} "${_pgsql_sources}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_get_expected_odb_model_headers out_var schema_dir)
|
||||
# Purpose: Infer generated C++ model headers for x-odbTable OpenAPI schemas.
|
||||
# Inputs:
|
||||
# - out_var: Parent-scope variable name to receive expected ODB model headers.
|
||||
# - schema_dir: Schema directory basename.
|
||||
# Outputs:
|
||||
# - <out_var> (PARENT_SCOPE): Expected generated model headers for ODB objects.
|
||||
cppbessot_get_openapi_odb_table_schema_names(_schema_names "${schema_dir}")
|
||||
_cppbessot_build_odb_table_artifact_paths(
|
||||
"${schema_dir}"
|
||||
"${_schema_names}"
|
||||
_headers
|
||||
_sqlite_sources
|
||||
_pgsql_sources)
|
||||
|
||||
set(${out_var} "${_headers}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_get_expected_odb_outputs_all out_var schema_dir)
|
||||
# Purpose: Infer all generated ODB backend `*-odb.cxx` files for both backends.
|
||||
# Inputs:
|
||||
# - out_var: Parent-scope variable name to receive expected ODB sources.
|
||||
# - schema_dir: Schema directory basename.
|
||||
# Outputs:
|
||||
# - <out_var> (PARENT_SCOPE): Expected sqlite + postgre ODB sources.
|
||||
cppbessot_get_expected_odb_outputs(
|
||||
_expected_sqlite_odb_sources
|
||||
_expected_pgsql_odb_sources
|
||||
"${schema_dir}")
|
||||
set(_combined
|
||||
${_expected_sqlite_odb_sources}
|
||||
${_expected_pgsql_odb_sources})
|
||||
set(${out_var} "${_combined}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_get_expected_odb_generation_artifacts
|
||||
out_model_headers_var
|
||||
out_all_sources_var
|
||||
schema_dir)
|
||||
# Purpose: Infer ODB generation dependencies and outputs in a single OpenAPI pass.
|
||||
# Inputs:
|
||||
# - out_model_headers_var: Parent-scope variable for expected ODB model headers.
|
||||
# - out_all_sources_var: Parent-scope variable for expected sqlite + postgre sources.
|
||||
# - schema_dir: Schema directory basename.
|
||||
# Outputs:
|
||||
# - <out_model_headers_var> (PARENT_SCOPE): Expected generated ODB model headers.
|
||||
# - <out_all_sources_var> (PARENT_SCOPE): Expected sqlite + postgre `*-odb.cxx` sources.
|
||||
cppbessot_get_openapi_odb_table_schema_names(_schema_names "${schema_dir}")
|
||||
_cppbessot_build_odb_table_artifact_paths(
|
||||
"${schema_dir}"
|
||||
"${_schema_names}"
|
||||
_headers
|
||||
_sqlite_sources
|
||||
_pgsql_sources)
|
||||
set(_combined ${_sqlite_sources} ${_pgsql_sources})
|
||||
|
||||
set(${out_model_headers_var} "${_headers}" PARENT_SCOPE)
|
||||
set(${out_all_sources_var} "${_combined}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
Reference in New Issue
Block a user