Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

options: Add support for deprecating option in CMake logic #2011

Merged
merged 1 commit into from
Feb 24, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions cmake/f3dOptions.cmake
Original file line number Diff line number Diff line change
@@ -91,7 +91,6 @@ endfunction()
@brief internal recursive method use to parse json structure and generate variables
#]==]
function(_parse_json_option _top_json)
# TODO Add a deprecation mechanism
string(JSON _options_length LENGTH ${_top_json})
MATH(EXPR _options_length "${_options_length} - 1")
foreach(_json_idx RANGE ${_options_length})
@@ -108,6 +107,9 @@ function(_parse_json_option _top_json)
# Recover default_value if any
string(JSON _option_default_value ERROR_VARIABLE _default_value_error GET ${_cur_json} "default_value")

# Recover deprecated if any
string(JSON _option_deprecated ERROR_VARIABLE _deprecated_error GET ${_cur_json} "deprecated")

set(_option_name "${_option_basename}${_member_name}")

# Identify types
@@ -138,16 +140,21 @@ function(_parse_json_option _top_json)

# Add option to struct and methods

set(_option_deprecated_string "")
if(_deprecated_error STREQUAL "NOTFOUND" AND _option_deprecated)
set(_option_deprecated_string "F3D_DEPRECATED ")
endif()

if(_default_value_error STREQUAL "NOTFOUND")
# Use default_value
set(_optional_default_value_initialize "${_option_default_value_start}${_option_default_value}${_option_default_value_end}")
string(APPEND _options_struct "${_option_indent} ${_option_actual_type} ${_member_name} = ${_optional_default_value_initialize};\n")
string(APPEND _options_struct "${_option_indent} ${_option_deprecated_string}${_option_actual_type} ${_member_name} = ${_optional_default_value_initialize};\n")
set(_optional_getter "")
list(APPEND _options_is_optional "if (name == \"${_option_name}\") return false")
list(APPEND _options_reset "if (name == \"${_option_name}\") opt.${_option_name} = ${_optional_default_value_initialize}")
else()
# No default_value, it is an std::optional
string(APPEND _options_struct "${_option_indent} std::optional<${_option_actual_type}> ${_member_name};\n")
string(APPEND _options_struct "${_option_indent} ${_option_deprecated_string}std::optional<${_option_actual_type}> ${_member_name};\n")
set(_optional_getter ".value()")
list(APPEND _options_is_optional "if (name == \"${_option_name}\") return true")
list(APPEND _options_reset "if (name == \"${_option_name}\") opt.${_option_name}.reset()")