blob: ecfe27764d496f7d1df5a85abbc8f1432bee693f [file] [log] [blame]
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +02001#!/bin/sh
Simon Butcher71ebc582016-06-23 20:02:07 +01002#
3# This file is part of mbed TLS (https://tls.mbed.org)
4#
Gilles Peskine902a1f32019-05-22 18:22:45 +02005# Copyright (c) 2015-2019, ARM Limited, All Rights Reserved
6
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +02007set -eu
8
Gilles Peskine902a1f32019-05-22 18:22:45 +02009if [ $# -ne 0 ] && [ "$1" = "--help" ]; then
10 cat <<EOF
11$0 [-v]
12This script confirms that the naming of all symbols and identifiers in mbed
13TLS are consistent with the house style and are also self-consistent.
14
15 -v If the script fails unexpectedly, print a command trace.
16EOF
17 exit
18fi
19
Simon Butcher71ebc582016-06-23 20:02:07 +010020if grep --version|head -n1|grep GNU >/dev/null; then :; else
Ron Eldorbf007d22016-12-15 14:42:37 +020021 echo "This script requires GNU grep.">&2
Simon Butcher71ebc582016-06-23 20:02:07 +010022 exit 1
23fi
24
Gilles Peskine5e525fb2019-05-15 17:29:15 +020025trace=
26if [ $# -ne 0 ] && [ "$1" = "-v" ]; then
27 shift
28 trace='-x'
29 exec 2>check-names.err
30 trap 'echo "FAILED UNEXPECTEDLY, status=$?";
31 cat check-names.err' EXIT
32 set -x
33fi
34
Simon Butcher71ebc582016-06-23 20:02:07 +010035printf "Analysing source code...\n"
36
Gilles Peskine5e525fb2019-05-15 17:29:15 +020037sh $trace tests/scripts/list-macros.sh
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020038tests/scripts/list-enum-consts.pl
Gilles Peskine5e525fb2019-05-15 17:29:15 +020039sh $trace tests/scripts/list-identifiers.sh
40sh $trace tests/scripts/list-symbols.sh
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020041
42FAIL=0
43
Simon Butcher71ebc582016-06-23 20:02:07 +010044printf "\nExported symbols declared in header: "
Jarno Lamsace3cb642019-04-29 12:07:43 +030045UNDECLARED=$(diff exported-symbols identifiers | sed -n -e 's/^< //p') > undeclared
Jarno Lamsa8557fc92019-04-26 16:22:10 +030046
47FILTERED=$( diff tests/scripts/whitelist undeclared | sed -n -e 's/^< //p')
48
Jarno Lamsace3cb642019-04-29 12:07:43 +030049if [ "x$UNDECLARED" != "x" ]; then
Jarno Lamsa8557fc92019-04-26 16:22:10 +030050if [ "x$FILTERED" = "x" ]; then
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020051 echo "PASS"
52else
53 echo "FAIL"
Jarno Lamsa8557fc92019-04-26 16:22:10 +030054 echo "$FILTERED"
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020055 FAIL=1
56fi
Jarno Lamsace3cb642019-04-29 12:07:43 +030057else
58 echo "PASS"
59fi
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020060
61diff macros identifiers | sed -n -e 's/< //p' > actual-macros
62
63for THING in actual-macros enum-consts; do
64 printf "Names of $THING: "
65 test -r $THING
Simon Butcher3ad2efd2018-05-02 14:49:38 +010066 BAD=$( grep -v '^MBEDTLS_[0-9A-Z_]*[0-9A-Z]$' $THING || true )
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020067 if [ "x$BAD" = "x" ]; then
68 echo "PASS"
69 else
70 echo "FAIL"
71 echo "$BAD"
72 FAIL=1
73 fi
74done
75
76for THING in identifiers; do
77 printf "Names of $THING: "
78 test -r $THING
79 BAD=$( grep -v '^mbedtls_[0-9a-z_]*[0-9a-z]$' $THING || true )
80 if [ "x$BAD" = "x" ]; then
81 echo "PASS"
82 else
83 echo "FAIL"
84 echo "$BAD"
85 FAIL=1
86 fi
87done
88
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +020089printf "Likely typos: "
90sort -u actual-macros enum-consts > _caps
91HEADERS=$( ls include/mbedtls/*.h | egrep -v 'compat-1\.3\.h' )
92NL='
93'
Manuel Pégourié-Gonnard6ad5d352015-05-28 15:08:28 +020094sed -n 's/MBED..._[A-Z0-9_]*/\'"$NL"'&\'"$NL"/gp \
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +020095 $HEADERS library/*.c \
96 | grep MBEDTLS | sort -u > _MBEDTLS_XXX
97TYPOS=$( diff _caps _MBEDTLS_XXX | sed -n 's/^> //p' \
Manuel Pégourié-Gonnard32da9f62015-07-31 15:52:30 +020098 | egrep -v 'XXX|__|_$|^MBEDTLS_.*CONFIG_FILE$' || true )
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +020099rm _MBEDTLS_XXX _caps
Manuel Pégourié-Gonnard9afdc832015-08-04 17:15:13 +0200100if [ "x$TYPOS" = "x" ]; then
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +0200101 echo "PASS"
102else
103 echo "FAIL"
104 echo "$TYPOS"
105 FAIL=1
106fi
107
Gilles Peskine5e525fb2019-05-15 17:29:15 +0200108if [ -n "$trace" ]; then
109 set +x
110 trap - EXIT
111 rm check-names.err
112fi
113
Simon Butcher71ebc582016-06-23 20:02:07 +0100114printf "\nOverall: "
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +0200115if [ "$FAIL" -eq 0 ]; then
Jarno Lamsa8557fc92019-04-26 16:22:10 +0300116 rm macros actual-macros enum-consts identifiers exported-symbols undeclared
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +0200117 echo "PASSED"
118 exit 0
119else
120 echo "FAILED"
121 exit 1
122fi