blob: dc097ee8e3b65a0c101e77eae86e2a5267d7c030 [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 Peskine0c12e302019-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 Peskine0c12e302019-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 Peskine36428d32019-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 Peskine36428d32019-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 Peskine36428d32019-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: "
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020045UNDECLARED=$( diff exported-symbols identifiers | sed -n -e 's/^< //p' )
Manuel Pégourié-Gonnard9afdc832015-08-04 17:15:13 +020046if [ "x$UNDECLARED" = "x" ]; then
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020047 echo "PASS"
48else
49 echo "FAIL"
50 echo "$UNDECLARED"
51 FAIL=1
52fi
53
54diff macros identifiers | sed -n -e 's/< //p' > actual-macros
55
56for THING in actual-macros enum-consts; do
57 printf "Names of $THING: "
58 test -r $THING
Nir Sonnenschein03091d12019-01-08 18:15:50 +020059 BAD=$( grep -E -v '^(MBEDTLS|PSA)_[0-9A-Z_]*[0-9A-Z]$' $THING || true )
Unknown712f7a82019-08-21 03:34:00 -040060 UNDERSCORES=$( grep -E '.*__.*' $THING || true )
61
62 if [ "x$BAD" = "x" ] && [ "x$UNDERSCORES" = "x" ]; then
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020063 echo "PASS"
64 else
65 echo "FAIL"
66 echo "$BAD"
Unknown712f7a82019-08-21 03:34:00 -040067 echo "$UNDERSCORES"
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020068 FAIL=1
69 fi
70done
71
72for THING in identifiers; do
73 printf "Names of $THING: "
74 test -r $THING
Gilles Peskine2d9d6db2018-06-18 23:25:28 +020075 BAD=$( grep -E -v '^(mbedtls|psa)_[0-9a-z_]*[0-9a-z]$' $THING || true )
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +020076 if [ "x$BAD" = "x" ]; then
77 echo "PASS"
78 else
79 echo "FAIL"
80 echo "$BAD"
81 FAIL=1
82 fi
83done
84
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +020085printf "Likely typos: "
86sort -u actual-macros enum-consts > _caps
Nir Sonnenschein03091d12019-01-08 18:15:50 +020087HEADERS=$( ls include/mbedtls/*.h include/psa/*.h | egrep -v 'compat-1\.3\.h' )
Christoph M. Wintersteiger8a0f5bb2018-12-14 15:46:34 +000088HEADERS="$HEADERS 3rdparty/everest/include/everest/everest.h 3rdparty/everest/include/everest/x25519.h"
Gilles Peskine9ab96212020-02-12 21:06:45 +010089LIBRARY="$( ls library/*.c )"
90LIBRARY="$LIBRARY 3rdparty/everest/library/everest.c 3rdparty/everest/library/x25519.c"
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +020091NL='
92'
Manuel Pégourié-Gonnard6ad5d352015-05-28 15:08:28 +020093sed -n 's/MBED..._[A-Z0-9_]*/\'"$NL"'&\'"$NL"/gp \
Christoph M. Wintersteiger8a0f5bb2018-12-14 15:46:34 +000094 $HEADERS $LIBRARY \
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +020095 | grep MBEDTLS | sort -u > _MBEDTLS_XXX
96TYPOS=$( diff _caps _MBEDTLS_XXX | sed -n 's/^> //p' \
Manuel Pégourié-Gonnard32da9f62015-07-31 15:52:30 +020097 | egrep -v 'XXX|__|_$|^MBEDTLS_.*CONFIG_FILE$' || true )
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +020098rm _MBEDTLS_XXX _caps
Manuel Pégourié-Gonnard9afdc832015-08-04 17:15:13 +020099if [ "x$TYPOS" = "x" ]; then
Manuel Pégourié-Gonnardf9aae832015-04-09 12:20:53 +0200100 echo "PASS"
101else
102 echo "FAIL"
103 echo "$TYPOS"
104 FAIL=1
105fi
106
Gilles Peskine36428d32019-05-15 17:29:15 +0200107if [ -n "$trace" ]; then
108 set +x
109 trap - EXIT
110 rm check-names.err
111fi
112
Simon Butcher71ebc582016-06-23 20:02:07 +0100113printf "\nOverall: "
Manuel Pégourié-Gonnarde137ea62015-04-09 10:47:44 +0200114if [ "$FAIL" -eq 0 ]; then
115 rm macros actual-macros enum-consts identifiers exported-symbols
116 echo "PASSED"
117 exit 0
118else
119 echo "FAILED"
120 exit 1
121fi