Skip to content

Commit e9c6dd2

Browse files
authored
Determine the ON/OFF status of an option only at the end (#82)
#79
1 parent 6832731 commit e9c6dd2

File tree

3 files changed

+50
-19
lines changed

3 files changed

+50
-19
lines changed

cmake/ecbuild_add_option.cmake

+13-8
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,6 @@ macro( ecbuild_add_option )
185185
if( "${_p_FEATURE}" IN_LIST _enabled_features )
186186
set(_enabled ON)
187187
endif()
188-
# Retrieve any existing description (n.b. occurs when the same feature is added at multiple projects)
189-
get_property( _feature_desc GLOBAL PROPERTY _CMAKE_${_p_FEATURE}_DESCRIPTION )
190-
# Append the new description
191-
if( _feature_desc )
192-
add_feature_info( ${_p_FEATURE} ${_enabled} "${_feature_desc}, ${PROJECT_NAME}(${_tick}): '${_p_DESCRIPTION}'" )
193-
else()
194-
add_feature_info( ${_p_FEATURE} ${_enabled} "${PROJECT_NAME}(${_tick}): '${_p_DESCRIPTION}'" )
195-
endif()
196188

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

@@ -279,15 +271,19 @@ macro( ecbuild_add_option )
279271
if( NOT _${_p_FEATURE}_condition )
280272
string(REPLACE ";" " " _condition_msg "${_p_CONDITION}")
281273
ecbuild_critical( "Feature ${_p_FEATURE} cannot be enabled -- following condition was not met: ${_condition_msg}" )
274+
set ( _tick "OFF")
282275
else()
283276
ecbuild_critical( "Feature ${_p_FEATURE} cannot be enabled -- following required packages weren't found: ${_failed_to_find_packages}" )
277+
set ( _tick "OFF")
284278
endif()
285279
else()
286280
if( NOT _${_p_FEATURE}_condition )
287281
string(REPLACE ";" " " _condition_msg "${_p_CONDITION}")
288282
ecbuild_info( "Feature ${_p_FEATURE} was not enabled (also not requested) -- following condition was not met: ${_condition_msg}" )
283+
set ( _tick "OFF")
289284
else()
290285
ecbuild_info( "Feature ${_p_FEATURE} was not enabled (also not requested) -- following required packages weren't found: ${_failed_to_find_packages}" )
286+
set ( _tick "OFF")
291287
endif()
292288
set( ENABLE_${_p_FEATURE} OFF )
293289
ecbuild_disable_unused_feature( ${_p_FEATURE} )
@@ -303,6 +299,15 @@ macro( ecbuild_add_option )
303299

304300
endif()
305301

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

307312
if( ${_p_ADVANCED} )
308313
mark_as_advanced( ENABLE_${_p_FEATURE} )

tests/project_summary/configure.sh

+30-9
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,41 @@ $SOURCE/clean.sh
2727

2828
# ----------------- configure project ---------------------
2929

30-
# Options: -DENABLE_MYFEATURE=ON
30+
# Options: -DENABLE_FEATURE_A=ON
3131

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

36-
# Options: -DENABLE_MYFEATURE=ON -DPROJB_ENABLE_MYFEATURE=OFF
36+
# Options: -DENABLE_FEATURE_A=ON -DPROJB_ENABLE_FEATURE_A=OFF
3737

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

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

4444
mkdir -p $HERE/build_3
45-
ecbuild -DENABLE_MYFEATURE=OFF -DPROJB_ENABLE_MYFEATURE=ON $SOURCE/test_project -B $HERE/build_3 | tee $HERE/build_3.log
46-
EXPECT_ONE_OF $HERE/build_3.log "* MYFEATURE, proja(OFF): '', projb(ON): ''"
45+
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
46+
EXPECT_ONE_OF $HERE/build_3.log "* FEATURE_A, proja(OFF): '', projb(ON): ''"
47+
EXPECT_ONE_OF $HERE/build_3.log "* FEATURE_B, projb(OFF): ''"
48+
49+
# Options: -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DSOME_PACKAGE_FOUND=ON
50+
51+
mkdir -p $HERE/build_4
52+
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
53+
EXPECT_ONE_OF $HERE/build_4.log "* FEATURE_A, proja(OFF): '', projb(ON): ''"
54+
EXPECT_ONE_OF $HERE/build_4.log "* FEATURE_B, projb(ON): ''"
55+
56+
# Options: -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DENABLE_FEATURE_B=ON -DSOME_PACKAGE_FOUND=ON
57+
58+
mkdir -p $HERE/build_5
59+
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
60+
EXPECT_ONE_OF $HERE/build_5.log "* FEATURE_A, proja(OFF): '', projb(ON): ''"
61+
EXPECT_ONE_OF $HERE/build_5.log "* FEATURE_B, projb(ON): ''"
62+
63+
# Options: -DENABLE_FEATURE_A=OFF -DPROJB_ENABLE_FEATURE_A=ON -DENABLE_FEATURE_B=ON -DSOME_PACKAGE_FOUND=OFF
64+
65+
mkdir -p $HERE/build_6
66+
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
67+
EXPECT_ONE_OF $HERE/build_6.log "Configuring incomplete, errors occurred!"

tests/project_summary/test_project/CMakeLists.txt

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,19 @@ find_package( ecbuild 3.4 REQUIRED )
33

44
project( proja LANGUAGES NONE VERSION 0.2 )
55
ecbuild_add_option(
6-
FEATURE MYFEATURE
6+
FEATURE FEATURE_A
77
DEFAULT ON
88
)
99

1010
project( projb LANGUAGES NONE VERSION 0.1 )
1111
ecbuild_add_option(
12-
FEATURE MYFEATURE
12+
FEATURE FEATURE_A
1313
DEFAULT OFF
1414
)
1515

16+
ecbuild_add_option(
17+
FEATURE FEATURE_B
18+
CONDITION SOME_PACKAGE_FOUND
19+
)
20+
1621
ecbuild_print_summary()

0 commit comments

Comments
 (0)