Skip to content

Commit

Permalink
dist/tools: add build system sanity check script
Browse files Browse the repository at this point in the history
Add a script to execute sanity checks on build system files.
It should prevent bad patterns to re-appear after being cleaned.

Currently adds a check for using the content of `FEATURES` instead of
`USEMODULE`.

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_)
  • Loading branch information
cladmi committed Nov 16, 2018
1 parent a79d038 commit 143e393
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions dist/tools/buildsystem_sanity_check/check.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 143e393

Please sign in to comment.