check_consts.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/env bash
  2. temps="./check_const_list.sh"
  3. if [ "$1" == "clean" ] ; then
  4. echo Removing $temps
  5. rm -f $temps
  6. exit
  7. fi
  8. if [ "$1" == "verbose" ] ; then
  9. verbose=1
  10. shift
  11. else
  12. verbose=0
  13. fi
  14. os=`uname -s`
  15. if [ "$os" == "NetBSD" ] ; then
  16. needgsed=1
  17. else
  18. needgsed=0
  19. fi
  20. SED=sed
  21. if [ $needgsed -eq 1 ] ; then
  22. SED=
  23. SED=`which gsed`
  24. if [ "$SED" == "" ] ; then
  25. echo "GNU sed not found, this script might not work optimally"
  26. SED=sed
  27. fi
  28. fi
  29. for file in $@ ; do
  30. echo "Looking for constants in \"$file\""
  31. $SED -n -e "s:.*[[:space:]]\([a-zA-Z_][a-zA-Z_0-9]*\)[[:space:]]*=[[:space:]]*\([-+]*[0-9][xX]*[-0-9+[:space:]]*\)[[:space:]]*;.*:test_const \1 \2:p" $file > check_const_list.sh
  32. test_const ()
  33. {
  34. name=$1
  35. value=$2
  36. if [ $verbose -eq 1 ]; then
  37. echo "Looking for $name, should be $value"
  38. fi
  39. ok=0
  40. matchvalue=
  41. source=
  42. namelist=`grep -i -n -r "#[[:space:]]*define[[:space:]]*$name[[:space:]]" /usr/include`
  43. # Remove comments
  44. namelist=${namelist//\/\**/}
  45. # Remove trailing spaces
  46. namelist=${namelist%%[[:space:]]}
  47. if [ -n "$namelist" ]; then
  48. source=${namelist//#define*/}
  49. if [ $verbose -eq 1 ] ; then
  50. echo "Exact match found: \"$namelist\""
  51. fi
  52. matchvalue=`echo ${namelist} |$SED "s|.*#[[:space:]]*define[[:space:]]*$name[[:space:]]*||I" `
  53. if [ $verbose -eq 1 ] ; then
  54. echo "matchvalue=\"$matchvalue\""
  55. fi
  56. matchvalue="${matchvalue#"${matchvalue%%[![:space:]]*}"}"
  57. else
  58. if [ $verbose -eq 1 ] ; then
  59. echo "$name not found"
  60. fi
  61. namelist2=`grep -i $name -r -n /usr/include`
  62. if [ -n "$namelist2" ]; then
  63. echo "Match found: \"$namelist2\""
  64. source=${namelist2//:*/}
  65. matchvalue=${namelist//#define*$name2/}
  66. fi
  67. fi
  68. if [ "$matchvalue" == "$value" ] ; then
  69. echo "OK: Constant \"$name\" value OK: \"$value\" location \"$source\""
  70. else
  71. if [ "$source" != "" ] ; then
  72. echo "Warning: Constant \"$name\" has value \"$value\" inside \"$file\" but \"$matchvalue\" location \"$source\""
  73. else
  74. echo "Warning: Constant \"$name\" has value \"$value\" inside \"$file\" but \"$matchvalue\" in system headers"
  75. fi
  76. fi
  77. }
  78. set -f
  79. . ./check_const_list.sh
  80. done