Skip to content

Commit 6832731

Browse files
authored
Correct handling of <project>_ENABLE_<FEATURE> (#83)
These changes ensure that uses of ENABLE_<FEATURE> and <project>_ENABLE_<FEATURE> are handled consistently. #81
1 parent afaf4be commit 6832731

File tree

6 files changed

+132
-1
lines changed

6 files changed

+132
-1
lines changed

cmake/ecbuild_add_option.cmake

+7-1
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,13 @@ macro( ecbuild_add_option )
269269

270270
ecbuild_disable_unused_feature( ${_p_FEATURE} )
271271

272-
if( ${_p_FEATURE}_user_provided_input )
272+
# Determine if a project-specific feature was requested
273+
set ( _project_specific_feature_requested OFF )
274+
if (DEFINED ${PNAME}_ENABLE_${_p_FEATURE} AND ${PNAME}_ENABLE_${_p_FEATURE} MATCHES "[Oo][Nn]")
275+
set ( _project_specific_feature_requested ON )
276+
endif()
277+
278+
if( ${_p_FEATURE}_user_provided_input OR _project_specific_feature_requested )
273279
if( NOT _${_p_FEATURE}_condition )
274280
string(REPLACE ";" " " _condition_msg "${_p_CONDITION}")
275281
ecbuild_critical( "Feature ${_p_FEATURE} cannot be enabled -- following condition was not met: ${_condition_msg}" )

tests/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ add_subdirectory( find_ecbuild )
1010
add_subdirectory( ecbuild_shared_libs )
1111
add_subdirectory( interface_library )
1212
add_subdirectory( project_import )
13+
add_subdirectory( project_options )
1314
add_subdirectory( project_summary )
1415
add_subdirectory( ecbuild_override_compiler_flags )
1516
add_subdirectory( test_properties )

tests/project_options/CMakeLists.txt

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
ecbuild_add_test(
3+
TARGET test_ecbuild_project_options
4+
TYPE SCRIPT
5+
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/configure.sh
6+
ENVIRONMENT CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
7+
)

tests/project_options/clean.sh

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
HERE=${CMAKE_CURRENT_BINARY_DIR:-"$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd -P )"}
6+
7+
# --------------------- cleanup ------------------------
8+
echo "cleaning $HERE"
9+
rm -rf $HERE/build_*

tests/project_options/configure.sh

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
function EXPECT_ONE_OF()
6+
{
7+
local file=$1
8+
local pattern=$2
9+
local found=$(cat ${file} | grep "${pattern}" | wc -l | xargs)
10+
11+
if [ "$found" != "1" ]; then
12+
echo "File ${file} does not contain exacly one of '$2'"
13+
exit 1
14+
fi
15+
}
16+
17+
HERE=${CMAKE_CURRENT_BINARY_DIR:-"$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd -P )"}
18+
SOURCE=${CMAKE_CURRENT_SOURCE_DIR:-$HERE}
19+
20+
# Add ecbuild to path
21+
export PATH=$SOURCE/../../bin:$PATH
22+
echo $PATH
23+
echo $SOURCE
24+
25+
# --------------------- cleanup ------------------------
26+
$SOURCE/clean.sh
27+
28+
# ----------------- configure project ---------------------
29+
30+
# (1) Options: (default)
31+
32+
mkdir -p $HERE/build_1
33+
ecbuild $SOURCE/test_project -B $HERE/build_1 | tee $HERE/build_1.log
34+
EXPECT_ONE_OF $HERE/build_1.log "Feature FEATUREON was not enabled"
35+
EXPECT_ONE_OF $HERE/build_1.log "Feature FEATUREOFF disabled"
36+
EXPECT_ONE_OF $HERE/build_1.log "Build files have been written"
37+
38+
# (2) Options: -DENABLE_FEATUREON=ON
39+
40+
mkdir -p $HERE/build_2
41+
ecbuild -DENABLE_FEATUREON=ON $SOURCE/test_project -B $HERE/build_2 | tee $HERE/build_2.log
42+
EXPECT_ONE_OF $HERE/build_2.log "Configuring incomplete, errors occurred!"
43+
44+
# (2a) Options: -DENABLE_FEATUREON=OFF
45+
46+
mkdir -p $HERE/build_2a
47+
ecbuild -DENABLE_FEATUREON=OFF $SOURCE/test_project -B $HERE/build_2a | tee $HERE/build_2a.log
48+
EXPECT_ONE_OF $HERE/build_2a.log "Feature FEATUREON disabled"
49+
EXPECT_ONE_OF $HERE/build_2a.log "Feature FEATUREOFF disabled"
50+
EXPECT_ONE_OF $HERE/build_2a.log "Build files have been written"
51+
52+
# (3) Options: -DENABLE_FEATUREON=ON -DFEATUREON_CONDITION=ON
53+
54+
mkdir -p $HERE/build_3
55+
ecbuild -DENABLE_FEATUREON=ON -DFEATUREON_CONDITION=ON $SOURCE/test_project -B $HERE/build_3 | tee $HERE/build_3.log
56+
EXPECT_ONE_OF $HERE/build_3.log "Feature FEATUREON enabled"
57+
EXPECT_ONE_OF $HERE/build_3.log "Feature FEATUREOFF disabled"
58+
EXPECT_ONE_OF $HERE/build_3.log "Build files have been written"
59+
60+
# (4) Options: -DPROJA_ENABLE_FEATUREON=ON
61+
62+
mkdir -p $HERE/build_4
63+
ecbuild -DPROJA_ENABLE_FEATUREON=ON $SOURCE/test_project -B $HERE/build_4 | tee $HERE/build_4.log
64+
EXPECT_ONE_OF $HERE/build_4.log "Configuring incomplete, errors occurred!"
65+
66+
# (4a) Options: -DPROJA_ENABLE_FEATUREON=OFF
67+
68+
mkdir -p $HERE/build_4a
69+
ecbuild -DPROJA_ENABLE_FEATUREON=OFF $SOURCE/test_project -B $HERE/build_4a | tee $HERE/build_4a.log
70+
EXPECT_ONE_OF $HERE/build_4a.log "Feature FEATUREON disabled"
71+
EXPECT_ONE_OF $HERE/build_4a.log "Feature FEATUREOFF disabled"
72+
EXPECT_ONE_OF $HERE/build_4a.log "Build files have been written"
73+
74+
# (5) Options: -DPROJA_ENABLE_FEATUREON=ON -DFEATUREON_CONDITION=ON -DENABLE_FEATUREON=OFF
75+
76+
mkdir -p $HERE/build_5
77+
ecbuild -DPROJA_ENABLE_FEATUREON=ON -DFEATUREON_CONDITION=ON -DENABLE_FEATUREON=OFF $SOURCE/test_project -B $HERE/build_5 | tee $HERE/build_5.log
78+
EXPECT_ONE_OF $HERE/build_5.log "Feature FEATUREON enabled"
79+
EXPECT_ONE_OF $HERE/build_5.log "Feature FEATUREOFF disabled"
80+
EXPECT_ONE_OF $HERE/build_5.log "Build files have been written"
81+
82+
# (6) Options: -DPROJA_ENABLE_FEATUREOFF=ON
83+
84+
mkdir -p $HERE/build_6
85+
ecbuild -DPROJA_ENABLE_FEATUREOFF=ON $SOURCE/test_project -B $HERE/build_6 | tee $HERE/build_6.log
86+
EXPECT_ONE_OF $HERE/build_6.log "Configuring incomplete, errors occurred!"
87+
88+
# (7) Options: -DPROJA_ENABLE_FEATUREOFF=ON -DFEATUREOFF_CONDITION=ON
89+
90+
mkdir -p $HERE/build_7
91+
ecbuild -DPROJA_ENABLE_FEATUREOFF=ON -DFEATUREOFF_CONDITION=ON $SOURCE/test_project -B $HERE/build_7 | tee $HERE/build_7.log
92+
EXPECT_ONE_OF $HERE/build_7.log "Feature FEATUREON was not enabled"
93+
EXPECT_ONE_OF $HERE/build_7.log "Feature FEATUREOFF enabled"
94+
EXPECT_ONE_OF $HERE/build_7.log "Build files have been written"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
cmake_minimum_required( VERSION 3.18.4 FATAL_ERROR )
2+
find_package( ecbuild 3.4 REQUIRED )
3+
4+
project( proja LANGUAGES NONE VERSION 0.2 )
5+
ecbuild_add_option(
6+
FEATURE FEATUREON
7+
DEFAULT ON
8+
CONDITION DEFINED FEATUREON_CONDITION
9+
)
10+
ecbuild_add_option(
11+
FEATURE FEATUREOFF
12+
DEFAULT OFF
13+
CONDITION DEFINED FEATUREOFF_CONDITION
14+
)

0 commit comments

Comments
 (0)