esp-idf/tools/ci/check_examples_cmake_make.sh

72 lines
2.2 KiB
Bash
Raw Normal View History

#!/bin/bash
# While we support GNU Make & CMake together, check the same examples are present for both. But only for ESP32
echo "- Getting paths of CMakeLists and Makefiles"
IFS=
CMAKELISTS=$( find ${IDF_PATH}/examples/ -type f -name CMakeLists.txt | grep -v "/components/" | grep -v "/common_components/" | grep -v "/cxx/experimental/experimental_cpp_component/" | grep -v "/main/" | grep -v "/build_system/cmake/" | grep -v "/mb_example_common/" | sort -n)
MAKEFILES=$( find ${IDF_PATH}/examples/ -type f -name Makefile | grep -v "/build_system/cmake/" | sort -n)
echo " [DONE]"
echo "- Building the ignore list"
IGNORE_LIST=
while read line
do
STL=$(grep "set[(]SUPPORTED_TARGETS" $line)
if test -n $STL # if specified SUPPORTED_TARGETS
then
WO_ESP32=$(grep -v -w "esp32" <<< $STL)
if test -n "$WO_ESP32" # if not specified esp32 at SUPPORTED_TARGETS
then # then consider that the example should not have a Makefile
PATH2IGNORE=$(/usr/bin/dirname $line)
echo " Adding to ignore $PATH2IGNORE"
IGNORE_LIST="$IGNORE_LIST$PATH2IGNORE
"
fi
fi
done <<< $CMAKELISTS
IGNORE_LIST=$(grep -v -e '^$' <<< $IGNORE_LIST) # remove empty lines
echo -e " [DONE] - Ignore list:\n$IGNORE_LIST\n"
echo "- Applying the Ignore list"
while read line
do
echo $line
CMAKELISTS=$(echo $CMAKELISTS | grep -v $line)
MAKEFILES=$(echo $MAKEFILES | grep -v $line)
done <<< $IGNORE_LIST
echo " [DONE]"
echo "- Getting paths of examples"
while read line
do
new_path="$(/usr/bin/dirname $line)"
CMAKE_EXAMPLE_PATHS="$CMAKE_EXAMPLE_PATHS$new_path
"
done <<< $CMAKELISTS
CMAKE_EXAMPLE_PATHS=$(grep -v -e '^$' <<< $CMAKE_EXAMPLE_PATHS) # remove empty lines
while read line
do
new_path="$(/usr/bin/dirname $line)"
MAKE_EXAMPLE_PATHS="$MAKE_EXAMPLE_PATHS$new_path
"
done <<< $MAKEFILES
MAKE_EXAMPLE_PATHS=$(grep -v -e '^$' <<< $MAKE_EXAMPLE_PATHS) # remove empty lines
echo " [DONE]"
echo "- Analysing matches"
MISMATCH=$(comm -3 <(echo "$MAKE_EXAMPLE_PATHS") <(echo "$CMAKE_EXAMPLE_PATHS"))
if [ -n "$MISMATCH" ]; then
echo " [ERROR] Some examples are not in both CMake and GNU Make:"
echo "$MISMATCH"
exit 1
fi
echo " [DONE] Example lists match"
exit 0