88 SDKCONFIG_DIR=" tools/esp32-arduino-libs"
99fi
1010
11+ function check_requirements(){ # check_requirements <sketchdir> <sdkconfig_path>
12+ local sketchdir=$1
13+ local sdkconfig_path=$2
14+ local has_requirements=1
15+
16+ if [ ! -f " $sdkconfig_path " ] || [ ! -f " $sketchdir /ci.json" ]; then
17+ echo " ERROR: sdkconfig or ci.json not found" 1>&2
18+ # Return 1 on error to force the sketch to be built and fail. This way the
19+ # CI will fail and the user will know that the sketch has a problem.
20+ else
21+ # Check if the sketch requires any configuration options (AND)
22+ local requirements=$( jq -r ' .requires[]? // empty' " $sketchdir /ci.json" )
23+ if [[ " $requirements " != " null" && " $requirements " != " " ]]; then
24+ for requirement in $requirements ; do
25+ requirement=$( echo $requirement | xargs)
26+ found_line=$( grep -E " ^$requirement " " $sdkconfig_path " )
27+ if [[ " $found_line " == " " ]]; then
28+ has_requirements=0
29+ fi
30+ done
31+ fi
32+
33+ # Check if the sketch requires any configuration options (OR)
34+ local requirements_or=$( jq -r ' .requires_any[]? // empty' " $sketchdir /ci.json" )
35+ if [[ " $requirements_or " != " null" && " $requirements_or " != " " ]]; then
36+ local found=false
37+ for requirement in $requirements_or ; do
38+ requirement=$( echo $requirement | xargs)
39+ found_line=$( grep -E " ^$requirement " " $sdkconfig_path " )
40+ if [[ " $found_line " != " " ]]; then
41+ found=true
42+ break
43+ fi
44+ done
45+ if [[ " $found " == " false" ]]; then
46+ has_requirements=0
47+ fi
48+ fi
49+ fi
50+
51+ echo $has_requirements
52+ }
53+
1154function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [extra-options]
1255 while [ ! -z " $1 " ]; do
1356 case " $1 " in
@@ -171,35 +214,10 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
171214 exit 0
172215 fi
173216
174- # Check if the sketch requires any configuration options (AND)
175- requirements=$( jq -r ' .requires[]? // empty' $sketchdir /ci.json)
176- if [[ " $requirements " != " null" && " $requirements " != " " ]]; then
177- for requirement in $requirements ; do
178- requirement=$( echo $requirement | xargs)
179- found_line=$( grep -E " ^$requirement " " $SDKCONFIG_DIR /$target /sdkconfig" )
180- if [[ " $found_line " == " " ]]; then
181- echo " Target $target does not meet the requirement $requirement for $sketchname . Skipping."
182- exit 0
183- fi
184- done
185- fi
186-
187- # Check if the sketch excludes any configuration options (OR)
188- requirements_or=$( jq -r ' .requires_any[]? // empty' $sketchdir /ci.json)
189- if [[ " $requirements_or " != " null" && " $requirements_or " != " " ]]; then
190- found=false
191- for requirement in $requirements_or ; do
192- requirement=$( echo $requirement | xargs)
193- found_line=$( grep -E " ^$requirement " " $SDKCONFIG_DIR /$target /sdkconfig" )
194- if [[ " $found_line " != " " ]]; then
195- found=true
196- break
197- fi
198- done
199- if [[ " $found " == " false" ]]; then
200- echo " Target $target meets none of the requirements in requires_any for $sketchname . Skipping."
201- exit 0
202- fi
217+ local has_requirements=$( check_requirements " $sketchdir " " $SDKCONFIG_DIR /$target /sdkconfig" )
218+ if [ " $has_requirements " == " 0" ]; then
219+ echo " Target $target does not meet the requirements for $sketchname . Skipping."
220+ exit 0
203221 fi
204222 fi
205223
@@ -348,33 +366,9 @@ function count_sketches(){ # count_sketches <path> [target] [file] [ignore-requi
348366 fi
349367
350368 if [ " $ignore_requirements " != " 1" ]; then
351- # Check if the sketch requires any configuration options (AND)
352- requirements=$( jq -r ' .requires[]? // empty' $sketchdir /ci.json)
353- if [[ " $requirements " != " null" && " $requirements " != " " ]]; then
354- for requirement in $requirements ; do
355- requirement=$( echo $requirement | xargs)
356- found_line=$( grep -E " ^$requirement " $SDKCONFIG_DIR /$target /sdkconfig)
357- if [[ " $found_line " == " " ]]; then
358- continue 2
359- fi
360- done
361- fi
362-
363- # Check if the sketch excludes any configuration options (OR)
364- requirements_or=$( jq -r ' .requires_any[]? // empty' $sketchdir /ci.json)
365- if [[ " $requirements_or " != " null" && " $requirements_or " != " " ]]; then
366- found=false
367- for requirement in $requirements_or ; do
368- requirement=$( echo $requirement | xargs)
369- found_line=$( grep -E " ^$requirement " $SDKCONFIG_DIR /$target /sdkconfig)
370- if [[ " $found_line " != " " ]]; then
371- found=true
372- break
373- fi
374- done
375- if [[ " $found " == " false" ]]; then
376- continue 2
377- fi
369+ local has_requirements=$( check_requirements " $sketchdir " " $SDKCONFIG_DIR /$target /sdkconfig" )
370+ if [ " $has_requirements " == " 0" ]; then
371+ continue
378372 fi
379373 fi
380374 fi
@@ -552,6 +546,7 @@ Available commands:
552546 count: Count sketches.
553547 build: Build a sketch.
554548 chunk_build: Build a chunk of sketches.
549+ check_requirements: Check if target meets sketch requirements.
555550"
556551
557552cmd=$1
@@ -569,6 +564,8 @@ case "$cmd" in
569564 ;;
570565 " chunk_build" ) build_sketches $*
571566 ;;
567+ " check_requirements" ) check_requirements $*
568+ ;;
572569 * )
573570 echo " ERROR: Unrecognized command"
574571 echo " $USAGE "
0 commit comments