diff --git a/dist/tools/buildsystem_sanity_check/check.sh b/dist/tools/buildsystem_sanity_check/check.sh new file mode 100755 index 0000000000000000000000000000000000000000..98758ec754f0061e5a76c1b11d8726d0d45ab69b --- /dev/null +++ b/dist/tools/buildsystem_sanity_check/check.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2018 Gaƫtan Harter <gaetan.harter@fu-berlin.de> +# +# This file is subject to the terms and conditions of the GNU Lesser +# General Public License v2.1. See the file LICENSE in the top level +# directory for more details. +# + +# +# Central test script to have sanity checks for the build system +# It is run unconditionally on all files. +# +# + +: "${RIOTBASE:="$(cd "$(dirname "$0")/../../../" || exit; pwd)"}" + +SCRIPT_PATH=dist/tools/buildsystem_sanity_check/check.sh + +# Modules should not check the content of FEATURES_PROVIDED/_REQUIRED/OPTIONAL +# Handling specific behaviors/dependencies should by checking the content of: +# * `USEMODULE` +# * maybe `FEATURES_USED` if it is not a module (== not a periph_) +check_not_parsing_features() { + local patterns=() + local pathspec=() + + patterns+=(-e 'if.*filter.*FEATURES_PROVIDED') + patterns+=(-e 'if.*filter.*FEATURES_REQUIRED') + patterns+=(-e 'if.*filter.*FEATURES_OPTIONAL') + + # Pathspec with exclude should start by an inclusive pathspec in git 2.7.4 + pathspec+=('*') + + # Ignore this file when matching as it self matches + pathspec+=(":!${SCRIPT_PATH}") + + # These two files contain sanity checks using FEATURES_ so are allowed + pathspec+=(':!Makefile.include' ':!makefiles/info-global.inc.mk') + + git -C "${RIOTBASE}" grep "${patterns[@]}" -- "${pathspec[@]}" +} + + +main() { + local errors='' + + errors+="$(check_not_parsing_features)" + + if [ -n "${errors}" ] + then + printf 'Invalid build system patterns found by %s:\n' "${0}" + printf '%s\n' "${errors}" + exit 1 + fi + exit 0 +} + + +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + main +fi