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

Correct inconsistent feature status in project summary #82

Merged
merged 1 commit into from
Mar 19, 2025
Merged
Show file tree
Hide file tree
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
21 changes: 13 additions & 8 deletions cmake/ecbuild_add_option.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -185,14 +185,6 @@ macro( ecbuild_add_option )
if( "${_p_FEATURE}" IN_LIST _enabled_features )
set(_enabled ON)
endif()
# Retrieve any existing description (n.b. occurs when the same feature is added at multiple projects)
get_property( _feature_desc GLOBAL PROPERTY _CMAKE_${_p_FEATURE}_DESCRIPTION )
# Append the new description
if( _feature_desc )
add_feature_info( ${_p_FEATURE} ${_enabled} "${_feature_desc}, ${PROJECT_NAME}(${_tick}): '${_p_DESCRIPTION}'" )
else()
add_feature_info( ${_p_FEATURE} ${_enabled} "${PROJECT_NAME}(${_tick}): '${_p_DESCRIPTION}'" )
endif()

set( ${PROJECT_NAME}_HAVE_${_p_FEATURE} 0 )

Expand Down Expand Up @@ -273,15 +265,19 @@ macro( ecbuild_add_option )
if( NOT _${_p_FEATURE}_condition )
string(REPLACE ";" " " _condition_msg "${_p_CONDITION}")
ecbuild_critical( "Feature ${_p_FEATURE} cannot be enabled -- following condition was not met: ${_condition_msg}" )
set ( _tick "OFF")
else()
ecbuild_critical( "Feature ${_p_FEATURE} cannot be enabled -- following required packages weren't found: ${_failed_to_find_packages}" )
set ( _tick "OFF")
endif()
else()
if( NOT _${_p_FEATURE}_condition )
string(REPLACE ";" " " _condition_msg "${_p_CONDITION}")
ecbuild_info( "Feature ${_p_FEATURE} was not enabled (also not requested) -- following condition was not met: ${_condition_msg}" )
set ( _tick "OFF")
else()
ecbuild_info( "Feature ${_p_FEATURE} was not enabled (also not requested) -- following required packages weren't found: ${_failed_to_find_packages}" )
set ( _tick "OFF")
endif()
set( ENABLE_${_p_FEATURE} OFF )
ecbuild_disable_unused_feature( ${_p_FEATURE} )
Expand All @@ -297,6 +293,15 @@ macro( ecbuild_add_option )

endif()

# Retrieve any existing description (n.b. occurs when the same feature is added at multiple projects)
set(_enabled "${ENABLE_${_p_FEATURE}}")
get_property( _feature_desc GLOBAL PROPERTY _CMAKE_${_p_FEATURE}_DESCRIPTION )
# Append the new description
if( _feature_desc )
add_feature_info( ${_p_FEATURE} ${_enabled} "${_feature_desc}, ${PROJECT_NAME}(${_tick}): '${_p_DESCRIPTION}'" )
else()
add_feature_info( ${_p_FEATURE} ${_enabled} "${PROJECT_NAME}(${_tick}): '${_p_DESCRIPTION}'" )
endif()

if( ${_p_ADVANCED} )
mark_as_advanced( ENABLE_${_p_FEATURE} )
Expand Down
39 changes: 30 additions & 9 deletions tests/project_summary/configure.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,41 @@ $SOURCE/clean.sh

# ----------------- configure project ---------------------

# Options: -DENABLE_MYFEATURE=ON
# Options: -DENABLE_FEATURE_A=ON

mkdir -p $HERE/build_1
ecbuild -DENABLE_MYFEATURE=ON $SOURCE/test_project -B $HERE/build_1 | tee $HERE/build_1.log
EXPECT_ONE_OF $HERE/build_1.log "* MYFEATURE, proja(ON): '', projb(ON): ''"
ecbuild -DENABLE_FEATURE_A=ON $SOURCE/test_project -B $HERE/build_1 | tee $HERE/build_1.log
EXPECT_ONE_OF $HERE/build_1.log "* FEATURE_A, proja(ON): '', projb(ON): ''"

# Options: -DENABLE_MYFEATURE=ON -DPROJB_ENABLE_MYFEATURE=OFF
# Options: -DENABLE_FEATURE_A=ON -DPROJB_ENABLE_FEATURE_A=OFF

mkdir -p $HERE/build_2
ecbuild -DENABLE_MYFEATURE=ON -DPROJB_ENABLE_MYFEATURE=OFF $SOURCE/test_project -B $HERE/build_2 | tee $HERE/build_2.log
EXPECT_ONE_OF $HERE/build_2.log "* MYFEATURE, proja(ON): '', projb(OFF): ''"
ecbuild -DENABLE_FEATURE_A=ON -DPROJB_ENABLE_FEATURE_A=OFF $SOURCE/test_project -B $HERE/build_2 | tee $HERE/build_2.log
EXPECT_ONE_OF $HERE/build_2.log "* FEATURE_A, proja(ON): '', projb(OFF): ''"

# Options: -DENABLE_MYFEATURE=OFF -DPROJB_ENABLE_MYFEATURE=ON
# Options: -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DSOME_PACKAGE_FOUND=OFF

mkdir -p $HERE/build_3
ecbuild -DENABLE_MYFEATURE=OFF -DPROJB_ENABLE_MYFEATURE=ON $SOURCE/test_project -B $HERE/build_3 | tee $HERE/build_3.log
EXPECT_ONE_OF $HERE/build_3.log "* MYFEATURE, proja(OFF): '', projb(ON): ''"
ecbuild -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DSOME_PACKAGE_FOUND=OFF $SOURCE/test_project -B $HERE/build_3 | tee $HERE/build_3.log
EXPECT_ONE_OF $HERE/build_3.log "* FEATURE_A, proja(OFF): '', projb(ON): ''"
EXPECT_ONE_OF $HERE/build_3.log "* FEATURE_B, projb(OFF): ''"

# Options: -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DSOME_PACKAGE_FOUND=ON

mkdir -p $HERE/build_4
ecbuild -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DSOME_PACKAGE_FOUND=ON $SOURCE/test_project -B $HERE/build_4 | tee $HERE/build_4.log
EXPECT_ONE_OF $HERE/build_4.log "* FEATURE_A, proja(OFF): '', projb(ON): ''"
EXPECT_ONE_OF $HERE/build_4.log "* FEATURE_B, projb(ON): ''"

# Options: -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DENABLE_FEATURE_B=ON -DSOME_PACKAGE_FOUND=ON

mkdir -p $HERE/build_5
ecbuild -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DENABLE_FEATURE_B=ON -DSOME_PACKAGE_FOUND=ON $SOURCE/test_project -B $HERE/build_5 | tee $HERE/build_5.log
EXPECT_ONE_OF $HERE/build_5.log "* FEATURE_A, proja(OFF): '', projb(ON): ''"
EXPECT_ONE_OF $HERE/build_5.log "* FEATURE_B, projb(ON): ''"

# Options: -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DENABLE_FEATURE_B=ON -DSOME_PACKAGE_FOUND=OFF

mkdir -p $HERE/build_6
ecbuild -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DENABLE_FEATURE_B=ON -DSOME_PACKAGE_FOUND=OFF $SOURCE/test_project -B $HERE/build_6 | tee $HERE/build_6.log
EXPECT_ONE_OF $HERE/build_6.log "Configuring incomplete, errors occurred!"
9 changes: 7 additions & 2 deletions tests/project_summary/test_project/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@ find_package( ecbuild 3.4 REQUIRED )

project( proja LANGUAGES NONE VERSION 0.2 )
ecbuild_add_option(
FEATURE MYFEATURE
FEATURE FEATURE_A
DEFAULT ON
)

project( projb LANGUAGES NONE VERSION 0.1 )
ecbuild_add_option(
FEATURE MYFEATURE
FEATURE FEATURE_A
DEFAULT OFF
)

ecbuild_add_option(
FEATURE FEATURE_B
CONDITION SOME_PACKAGE_FOUND
)

ecbuild_print_summary()
Loading